Symfony2:检查翻译,如果没有,强制翻译写入

时间:2013-10-24 09:15:48

标签: php symfony internationalization translation twig

我正在使用Symfony2将旧应用程序转换为新应用程序。

文本的一小部分是在旧应用程序中翻译的,我在那里使用个人库进行翻译。

目标是:在Twig中调用trans过滤器或{% trans %}块时,我希望Symfony2检查是否存在转换。如果是,则使用用户的语言环境返回正确的翻译。这里没什么外国人,这就是Symfony2的工作原理。

但我所面对的是我的旧图书馆工作得更好一些:如果翻译不存在,那么它会将其写入文件进行翻译,以便向译员注意。我正在使用一个小后台,我们可以看到所有缺少的翻译,所以翻译人员可以自由思考,作为开发人员,我也可以开发和显示文本以自由思想翻译,因为我知道我不会我必须自己将文本添加到翻译文件中。使用后台并在数据库中添加文本的人也可以自由思考,知道他们的文本将自动写入文件,翻译人员可以在他们的界面中看到它。

我知道Symfony2控制台可以转储所有这些翻译,以便将其写入一些文件中,但对于我这个系统有两个问题:

  1. 首先,缺少的翻译与原始文本的编写方式相同,并带有我们可以使用或不使用的前缀。这很重,因为它迫使我检查前缀是否在翻译内部以检查它是否丢失。此外,网站上显示的文字将使用此前缀,我不想使用。 实际上,如果没有翻译,我希望返回原始文本,因此xml或xliff标记内应该有一个空字符串。我最好检查字符串是否为空。
  2. 其次,大部分文本都在数据库中,并由我的控制器动态恢复,我不想提取整个数据库来检查翻译。我需要的是在翻译数据时写入我的文件。我将在网站上导航以“生成”所有翻译文件,这很容易,因为任何机器人都可以在网站内导航(例如,站点地图生成器可以帮助我获取所有网站的网址以加载它们然后强制symfony2使用trans过滤器或块,然后将缺少的数据写入转换文件)。然后,当加载所有页面时,我可以期望将所有文本发送并写入文件。
  3. 然后,当然,我需要一个小的后台,这将允许我检查所有翻译。但我猜symfony的朋友已经为此做了一个捆绑(事实上,对于Symfony2,几乎所有东西都有一个捆绑包)。这不是一个重点,因为我可以自己制作(旧的应用程序有它的系统,我可以在新的应用程序中传输它。)
  4. 我真的希望找到解决方案。

    当然,我可以将我的旧库实现到Symfony2中,并创建我自己的twig翻译过滤器(已经完成了)但是对我来说使用本机Symfony2系统稍微好一些,或者甚至在其中安装另一个包。 vendor目录,因为我不想根据bundle等处理开发(因为为每个bundle保存了转换)。

    你有本机解决方案吗? (如果没有,我会放弃并使用我自己的库,但它不会像Symfony2翻译系统一样漂亮;)

    感谢大家的阅读和帮助! ;)

    编辑(2014年2月8日):

    我使用一个非常简单的系统创建了自己的库,该系统可在my Github page上找到。它只是在翻译不可用时将翻译添加到文件中。

    但是,我决定创建另一个受这个启发的库,但依赖于数据库。该模块目前正在开发中,但其系统很简单:

    它使用本机转换器加载转换,如果转换不可用(即本机转换器返回空字符串),它将加载数据库中的所有转换,具体取决于translation_domain值。然后,服务(在控制器和命令行工具中启动)将在文件中写入所有数据库转换,以便本机转换器更快地加载它们,并将它们存储在SF2缓存中。

2 个答案:

答案 0 :(得分:2)

最后,谢谢你的帮助。

我尝试了JMSTranslationBundle,它打破了所有symfony2的cachE。

最后,我决定创建自己的库,我把它放在Github和Packagist上,你可以在packagist.org找到它,它的名字叫corahnrin / translate。

这是全新的,所以如果不完整,不要怪我! :)

答案 1 :(得分:1)

我认为你可能希望https://github.com/schmittjoh/JMSTranslationBundle来实现你的目标。 它甚至还有你想要的小后果。