用原始语言切换gettext翻译语言
我用德语中的所有文本启动了我的PHP应用程序,然后使用gettext提取所有字符串并将它们翻译成英语。
所以,现在我有一个.po文件,其中包含德语中的所有msgids和英语中的msgstrs。我想切换它们,以便我的源代码包含英文为msgids,原因有两个:
更多的翻译人员会懂英语,因此只提供一个英文msgids的文件是合适的。我总是可以在我发出文件之前切换文件,然后收到它,但是naaah。
这会帮助我写英文对象&如果内容文本也是英文,则为函数名称和注释。我想这样做,所以该项目对其他开源合作者更开放(更有可能知道英语而不是德语)。
我可以手动执行此操作,这是一种任务,我预计它将花费更多时间为它编写一个自动例程(因为我对shell脚本非常糟糕)而不是手动执行。但我也期望鄙视手动计算机劳动的每一分钟(感觉就像矛盾,对吧?)就像我一直这样。
有人曾经这样做过吗?我认为这将是一个常见的问题,但找不到任何东西。非常感谢。
示例问题:
<title><?=_('Routinen')?></title>
#: /users/ruben/sites/v/routinen.php:43
msgid "Routinen"
msgstr "Routines"
我以为我会把问题缩小。 .po文件中的开关当然没有问题,就像它一样简单
preg_replace('/msgid "(.+)"nmsgstr "(.+)"/', '/msgid "$2"nmsgstr "$1"/', $str);
对我来说问题是在我的项目文件夹文件中搜索_('$msgid')
并在解析.po文件时替换_('msgstr')
的例程(在所有.po文件包含包含所有文件路径的注释之后,这可能不是最优雅的方式) msgid发生的地方)。
在akirk回答了一点之后,我遇到了一些问题。
因为我有_('xxx')
和_("xxx")
的混合,我必须小心(un)逃避。
msgstr和msgstrs中的双引号必须是非转义的,但不能删除斜杠,因为它可能是双引号也在PHP中被转义
单引号在被替换为PHP时必须进行转义,但是它们也必须在.po文件中进行更改。幸运的是,单引号只出现在英文文本中。
msgids和msgstrs可以有多行,然后它们看起来像这样
msgid = ""
"line 1n"
"line 2n"
msgstr = ""
"line 1n"
"line 2n"
当然,复数形式被跳过了,但在我的情况下,这不是问题
poedit希望删除过时的字符串似乎已成功切换,我不知道为什么会在(很多)情况下发生这种情况。
我今晚必须停止工作。似乎仍然使用解析器而不是RegExps不会有点矫枉过正。
没有找到相关结果
已邀请:
3 个回复
绊伦欧
最后将英文po文件交换到德语po文件,使用swappo: http://manpages.ubuntu.com/manpages/hardy/man1/swappo.1.html 交换文件后,可能需要对结果文件进行一些手动抛光。例如,标题可能会被破坏,并且可能会出现一些重复的文本
补蹲农界维
糕泰灌