1

在我的 symfony2 应用程序中,我已经设置了更改语言环境所需的内容。现在我可以使用 bundle 的 trans 功能并在 app/resources/translations 下生成语言文件

这很好用,但我觉得手动编辑 yml 文件效率不高,建议使用绝对不友好的 xliff。

另外,在协作环境中,我看不出这如何正常工作。我不确定翻译人员是否喜欢 git 命令。

对于那些已经实施了翻译流程的人:你们是怎么做的?你是怎么组织的?

非常感谢

4

3 回答 3

1

我使用 JMSTranslationBundle https://github.com/schmittjoh/JMSTranslationBundle来管理我的项目翻译。您对要翻译的变量使用通常的 |trans。然后你使用一个带有 app/console 的命令来为这个包构建你的 yml 文件(你可以选择输出文件类型)。它还有一个翻译用户界面。如果您添加新词,没问题,您只需重新运行命令,它会将新词添加到您现有的词中,而不会丢失原始翻译。

于 2015-06-23T11:20:55.937 回答
0

我只使用 YAML 文件,但它们位于每个包中,而不是在 app 文件夹中。如果您想获得干净的代码,这是更好的方法。如果您的翻译文件位于 app 文件夹中,您需要提取要在另一个项目中使用的捆绑包的内容。

如果你使用像 PhpStorm 这样好的 IDE,YAML 是没有问题的,也是编辑 YAML 的最简单方法。不要忘记 PhpStorm 的 symfony 插件!

编辑:您也可以使用此捆绑包。它为翻译提供了一个 Web 界面:http: //jmsyst.com/bundles/JMSTranslationBundle#documentation

于 2015-06-16T11:22:26.473 回答
0

我已经为我的一个项目实施了可管理的翻译,您可以参考My answer与此主题类似的内容

  1. 语言实体包含具有 2 个属性 locale 和 name 的所有语言

    • 语言环境 (en,fr,ar ...)
    • 姓名(英文、法文...)
  2. 语言翻译

    LanguageTranslation 实体包含所有具有属性的翻译

    • 目录
    • 翻译
    • 语言(翻译语言)
    • languageToken(翻译键)

现在你的所有翻译都被 symfony 缓存在 prod/dev 文件夹中,所以每次当用户更新或添加新翻译时,我都会以编程方式清除翻译缓存,我使用的是奏鸣曲管理员,所以我添加了对这个函数的调用prePersistpreUpdate你也可以使用学说事件听众prePersist/preUpdate为此

 private function clearLanguageCache(){
        $cacheDir = __DIR__ . "cache folder path"; /** path to app/cache*/
        $finder = new \Symfony\Component\Finder\Finder();
        $finder->in(array($cacheDir . "/dev/translations", $cacheDir . "/prod/translations"))->files();        
        foreach($finder as $file){
            unlink($file->getRealpath());
        }
    } 

我之前清除缓存的答案中缺少这部分

于 2015-06-16T11:47:48.730 回答