python - 生成本地化文件的最简单方法

标签 python localization internationalization translation

我目前正在用 Python 编写一个应用程序,需要为其提供本地化。

我可以使用 gettext 和它附带的实用程序来生成 .po 和 .mo 文件。但是,逐个编辑每种语言的 .po 文件似乎有点乏味。然后,为每种语言创建目录并一个接一个地生成 .mo 文件,似乎有点过头了。最终结果是这样的:

/en_US/LC_MESSAGES/en_US.mo
/en_CA/LC_MESSAGES/en_CA.mo
etc.

我可能是错的,但似乎必须有更好的方法来做到这一点。有没有人有我还没有找到的工具、技巧或一般知识?

提前致谢!

编辑:为了更清楚一点,我正在寻找可以加快流程的东西。因为它已经很容易了。例如,在 .NET 中,我可以生成所有需要翻译成 excel 文件的字符串。然后,翻译人员可以填写 excel 文件并为每种语言添加列。然后,我可以使用 xls2resx 生成语言资源文件。 gettext 有类似的东西吗?我意识到我可以编写一个脚本来创建和读取 csv 并生成文件——我只是希望已经制作了一些东西。

最佳答案

我刚刚为我正在做的一个项目做了这个,对我们来说过程是这样的:

首先,我有一个 POTFILES.in 文件,其中包含需要翻译的源文件列表。我们实际上有两个文件(例如 admin.in 和 user.in),因为管理界面并不总是需要翻译。所以我们可以只向翻译者发送包含用户看到的字符串的文件。

运行以下命令将从 POTFILES.in 创建一个 .pot 模板:

xgettext --files-from=POTFILES.in --directory=.. --output=messages.pot

从 po/目录运行上述命令,该目录应该是您项目的子目录并包含 POTFILES.in 文件。 .pot 文件与 .po 文件具有完全相同的格式,但它是一个不包含翻译的模板。每当将新的可翻译字符串添加到源文件中时,您都会创建一个新模板。

要更新已翻译的 .po 文件并向其中添加新字符串,请运行:

msgmerge --update --no-fuzzy-matching --backup=off da.po messages.pot

在上面的示例中,我禁用了模糊匹配,因为我们的字符串一团糟,而且弊大于利。我还禁用了备份文件,因为这里的一切都在颠覆。为每种语言运行上述命令,在这种情况下,我更新了丹麦语翻译。

最后运行 msgfmt 从 .po 文件创建 .mo 文件:

msgfmt nl.po --output-file nl.mo

当然,您不希望每次都手动运行此操作,因此请创建一些脚本(或者最好是一个或多个 Makefile)来为您执行此操作。

请注意,您的目录布局与我的情况略有不同,因此您必须稍微调整输出文件名/路径,但步骤应该相同。

关于python - 生成本地化文件的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/739314/

相关文章:

ios - 应用扩展是否应该有自己的 Localized.strings?

c# - 如何确定文化的货币符号位置

django 自定义表单标签

java - 编写一个允许用户选择语言的菜单

python - csv.reader 错误解析文件

python - 在 Geany (Ubuntu) 上从 python 禁用/关闭/退出/退出终端屏幕

java - 字符串资源 XML 文件是否允许无效的 Java 变量作为名称属性?

python - 识别文本中.onion 链接的方法?

python - 比较两个电子名片

ruby-on-rails - 在 Rails I18n 中本地化日期时间