我正在使用 Symfony2 将旧应用程序转换为新应用程序。
一小部分文本是在旧应用程序中翻译的,我使用个人图书馆进行翻译。
目标是:当在 Twig 中调用trans
过滤器或{% trans %}
块时,我希望 Symfony2 检查是否存在翻译。如果是这样,那么它将使用用户的语言环境返回正确的翻译。这里没有什么陌生的,这就是 Symfony2 的工作方式。
但我面临的是,我的旧图书馆工作得更好一点:如果翻译不存在,那么它将其写入文件以供翻译以供翻译人员注意。我正在使用一个小后台,我们可以看到所有缺失的翻译,因此翻译人员可以自由地工作,作为开发人员,我还可以开发和显示要翻译的文本,因为我知道我不会不必自己将文本添加到翻译文件中。使用后台和在数据库中添加文本的人也可以自由地工作,因为他们知道他们的文本将自动写入文件,翻译人员可以在他们的界面中看到它。
我知道 Symfony2 控制台可以转储所有这些翻译,以便将其写入某些文件中,但是这个系统对我来说有两个问题:
- 首先,缺失的翻译与原始文本的书写方式相同,带有我们可以使用或不使用的前缀。这很重,因为它迫使我检查前缀是否在翻译中以检查它是否丢失。而且,网站上显示的文本将带有这个前缀,我不想使用它。
其实我是想在没有翻译的情况下返回原文,所以xml或者xliff标签里面应该有一个空字符串。更好地检查字符串何时为空。 - 其次,大部分文本都在数据库中,由我的控制器动态恢复,我不想提取整个数据库来检查翻译。我需要的是在要翻译数据时写入我的文件。我将自己在网站上导航以“生成”所有翻译文件,这很容易,因为任何机器人都可以在网站内导航(例如,站点地图生成器可以帮助我获取所有网站的 url 以加载它们,然后强制 Symfony2使用
trans
过滤器或块,然后将丢失的数据写入翻译文件)。然后,当所有页面都加载完毕后,我可以期待所有文本都被发送并写入文件中。 - 然后,当然,我需要一个小后台来检查所有翻译。但我猜 Symfony 的朋友们已经为此做了一个捆绑包(事实上,对于 Symfony2,几乎所有东西都有一个捆绑包)。这不是什么大问题,因为我可以自己制作(旧应用程序有它的系统,我可以将它转移到新应用程序中)。
我真的很想为此找到解决方案。
当然,我可以在 Symfony2 中实现我的旧库,并创建我自己的 twig 翻译过滤器(已经这样做了),但是使用原生 Symfony2 系统对我来说会稍微好一些,或者甚至在 vendor 目录中安装另一个包,因为我不想根据捆绑包等来处理开发(因为每个捆绑包都保存了翻译)。
您对此有本机解决方案吗?(如果没有,我会放弃使用自己的库,但它不会像 Symfony2 翻译系统那样漂亮)
编辑(2014 年 2 月 8 日):
我用一个非常简单的系统创建了自己的库,该系统可以在我的 Github 页面上找到。当翻译不可用时,它只是将翻译添加到文件中。
但是,我决定制作另一个库,受此启发,但依赖于数据库。该模块目前正在开发中,但它的系统很简单:
它使用本地翻译加载翻译,如果翻译不可用(即本地翻译返回一个空字符串),它将加载数据库中的所有翻译,具体取决于 translation_domain 值。然后,服务(在控制器和命令行工具中启动)会将所有数据库翻译写入文件中,以便本地翻译器更快地加载它们,并将它们存储在 SF2 缓存中。