手动添加 gettext 翻译键

Add gettext translation keys manually

我正在使用 phoenixframework 创建一个项目,并使用 gettext 添加一些翻译。命令 mix gettext.extract --merge 从控制器和模板中获取我所有的翻译密钥,并将其存储在 .pot.po 文件中。

但是我在配置文件中有一些翻译键,我将其用作表单 select 框中的 select 选项。目前我有一个键列表:[:key1, :key2, key3, ..., keyN].

现在我需要一个关键字列表来显示翻译和 select 使用 select 框的关键字。我的结果是这样的:[{"translation 1": key1}, {"translation 2": key2}, {"translation 3": key3}, ..., {"translation N": keyN}].

问题:

我不应该触摸我的 .pot 文件,我不能将我的翻译密钥写入我的 .po 文件,因为它们会在上面的命令 运行 之后丢失。文件将被覆盖。

有没有一种方法可以手动添加翻译,这样我就可以 运行 命令从我的项目中获取新的翻译而不会丢失我手动添加的翻译?

有一个解决方案,它可以与开箱即用的 elixir get text 实现一起使用。

关键词是:域名

起初我用我所有的翻译密钥创建了一个新的 pot 文件:

msgid ""
msgstr ""
"Language: en\n"

msgid "key1"
msgstr ""

msgid "key2"
msgstr ""

# ... and so on ...

我的文件名为 additionals.pot。那我运行mix gettext.extract --merge。现在我在每个语言目录中都有一个 additionals.po 文件,我现在在其中添加我的翻译。

在我的项目中,我现在使用 Gettext 模块的 dgettext 方法而不是 gettextdgettext 让我指定一个域,它是新 additionals.po 文件的基本名称。

Gettext.dgettext(<MyProjectName>.Gettext, "additionals", "key1")
# => "translation 1"

就是这样,一切都按预期工作。

Here 是一篇关于 Gettext 的好文章。搜索 Domains 以查找有关如何使用 dgettext 的其他说明。