lan*_*man 21 python translation localization internationalization
我目前正在用Python编写应用程序,需要为它提供本地化.
我可以使用gettext及其附带的实用程序来生成.po和.mo文件.但是,逐个编辑每种语言的.po文件似乎有点单调乏味.然后,为每种语言创建目录并逐个生成.mo文件,似乎有点矫枉过正.最终结果如下:
/en_US/LC_MESSAGES/en_US.mo
/en_CA/LC_MESSAGES/en_CA.mo
etc.
Run Code Online (Sandbox Code Playgroud)
我可能是错的,但似乎必须有更好的方法来做到这一点.有没有人有我尚未找到的工具,技巧或一般知识?
提前致谢!
编辑:为了更清楚一点,我正在寻找能够加速这一过程的东西.因为它已经非常简单了.例如,在.NET中,我可以生成需要转换为excel文件的所有字符串.然后,翻译人员可以填写excel文件并为每种语言添加列.然后,我可以使用xls2resx生成语言资源文件.gettext有什么类似的吗?我意识到我可以编写一个脚本来创建和读取csv并生成文件 - 我只是希望已经有了一些东西.
war*_*arp 29
我刚刚为我正在进行的项目做了这个,对我们来说这个过程是这样的:
首先,我有一个POTFILES.in文件,其中包含需要翻译的源文件列表.我们实际上有两个文件(例如admin.in和user.in),因为管理界面并不总是需要翻译.因此,我们只能向翻译人员发送包含用户看到的字符串的文件.
运行以下命令将从POTFILES.in创建.pot模板:
xgettext --files-from=POTFILES.in --directory=.. --output=messages.pot
Run Code Online (Sandbox Code Playgroud)
从po /目录运行上面的命令,该目录应该是项目的子目录并包含POTFILES.in文件..pot文件具有与.po文件完全相同的格式,但它是不包含翻译的模板.只要将新的可翻译字符串添加到源文件,就可以创建新模板.
要更新已翻译的.po文件并向其添加新字符串,请运行:
msgmerge --update --no-fuzzy-matching --backup=off da.po messages.pot
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我禁用模糊匹配,因为我们的字符串是一团糟,它弊大于利.我也禁用了备份文件,因为这里的所有内容都是subversion.对每种语言运行上面的命令,在这种情况下我更新了丹麦语翻译.
最后运行msgfmt从.po文件创建.mo文件:
msgfmt nl.po --output-file nl.mo
Run Code Online (Sandbox Code Playgroud)
当然,你不希望每次都手动运行它,所以创建一些脚本(或者最好是一个或多个Makefile)来为你做这个.
请注意,您的目录布局与我的情况略有不同,因此您必须稍微调整输出文件名/路径,但步骤应该相同.