手动添加 gettext 翻译键

gui*_*man 5 gettext elixir phoenix-framework

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

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

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

问题:

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

有没有办法手动添加翻译,以便我可以运行命令从我的项目中获取新翻译,而不会丢失手动添加的翻译?

gui*_*man 6

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

关键字是:

首先,我使用所有翻译键创建了一个新的 pot 文件:

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

msgid "key1"
msgstr ""

msgid "key2"
msgstr ""

# ... and so on ...
Run Code Online (Sandbox Code Playgroud)

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

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

Gettext.dgettext(<MyProjectName>.Gettext, "additionals", "key1")
# => "translation 1"
Run Code Online (Sandbox Code Playgroud)

就是这样,一切都按预期进行。

是一篇关于 Gettext 的好文章。搜索以查找如何dgettext使用的其他描述。