添加自定义格式支持

编辑本页

警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 3.1,现已不再维护。

本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。

添加自定义格式支持

有时,您需要处理翻译文件的自定义格式。Translation组件足够灵活,可以支持这一点。只需创建一个加载器(来加载翻译)和一个转储器(来转储翻译)。

假设您有一个自定义格式,其中每个翻译使用一行来定义翻译消息,并使用括号来包装键和消息。翻译文件应该是这样的:

1 2 3
(欢迎)(accueil)(再见)(au revoir)(你好)(bonjour)

创建自定义加载器

要定义能够读取这些类型文件的自定义加载器,必须创建一个实现类的新类LoaderInterface.的load ()方法将获取文件名并将其解析为数组。然后,它将创建返回的目录:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
使用欧宝娱乐app下载地址组件翻译MessageCatalogue使用欧宝娱乐app下载地址组件翻译加载程序LoaderInterfaceMyFormatLoader实现了LoaderInterface公共函数负载资源语言环境“消息”消息数组();=文件(资源);foreach作为) {如果(preg_match ('/\(([^\)]+)\)\(([^\)]+)\)/'匹配)) {消息匹配1]] =匹配2];}}目录MessageCatalogue (语言环境);目录->add (消息);返回目录;}}

一旦创建,它可以用作任何其他加载器:

1 2 3 4 5 6 7 8
使用欧宝娱乐app下载地址组件翻译翻译翻译翻译(“fr_FR”);翻译->addLoader (“my_format”MyFormatLoader ());翻译->addResource (“my_format”__DIR__“/翻译/ messages.txt”“fr_FR”);var_dump (翻译->反式(“欢迎”));

它会打印出来“招待”

创建自定义转储器

也可以为您的格式创建一个自定义转储器,这在使用提取命令时非常有用。方法的新类实现DumperInterface必须创建。若要将转储内容写入文件,请扩展FileDumper类将保存几行代码:

12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21
使用欧宝娱乐app下载地址组件翻译MessageCatalogue使用欧宝娱乐app下载地址组件翻译自动倾卸车FileDumperMyFormatDumper扩展FileDumper公共函数formatCatalogue(MessageCatalogue消息数组,选项=数组()输出foreach消息->(作为= >目标) {输出= sprintf(。”(% s) (% s) \ n”目标);}返回输出;}受保护的函数getExtension()返回“三”;}}

在某些情况下,您希望将转储内容作为响应发送,而不是将它们写入文件。要做到这一点,可以使用formatCatalogue方法。在这种情况下,必须传递domain参数,该参数确定应该转储的消息列表。

formatCatalogue ()方法创建输出字符串,该字符串将由dump ()方法的FileDumper类创建文件。倾倒器可以像任何其他内置倾倒器一样使用。在下面的例子中,YAML文件中定义的翻译消息被转储到一个自定义格式的文本文件中:

1 2 3 4 5 6 7
使用欧宝娱乐app下载地址组件翻译加载程序YamlFileLoader加载程序YamlFileLoader ();目录加载程序->负载(__DIR__“/翻译/ messages.fr_FR.yml”“fr_FR”);自动倾卸车MyFormatDumper ();自动倾卸车->转储(目录数组“路径”= >__DIR__' /转储'));
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。