我正在使用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
文件中,因为它们会在上面的命令运行后丢失。文件将被覆盖。
有没有办法手动添加翻译,以便我可以运行命令从我的项目中获取新的翻译而不会丢失我手动添加的翻译?
答案 0 :(得分:3)
有一个解决方案,它可以与elixir get文本实现一起使用。
关键字为:域
首先,我创建了一个包含所有翻译键的新的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
方法而不是gettext
。 dgettext
允许我指定一个域,该域是新additionals.po
文件的基名。
Gettext.dgettext(<MyProjectName>.Gettext, "additionals", "key1")
# => "translation 1"
这就是它,一切都按预期工作。
Here是一篇关于Gettext的好文章。搜索域以查找有关如何使用dgettext
的其他说明。