我正在使用 phoenixframework 创建一个项目,并使用 gettext 添加一些翻译。命令mix gettext.extract --merge
从 Controller 和模板中获取我所有的翻译键并将其存储在 .pot
中和 .po
文件。
但是我在配置文件中有一些翻译键,我将其用作表单选择框中的选择选项。目前我有一个键列表:[:key1, :key2, key3, ..., keyN]
.
现在我需要一个关键字列表来显示翻译并使用选择框选择键。我的结果是:[{"translation 1": key1}, {"translation 2": key2}, {"translation 3": key3}, ..., {"translation N": keyN}]
.
问题:
我不应该碰我的.pot
文件,我无法将我的翻译 key 写入我的 .po
文件,因为在运行上述命令后它们将丢失。文件将被覆盖。
有没有办法手动添加翻译,以便我可以运行命令从我的项目中获取新的翻译,而不会丢失我手动添加的翻译?
最佳答案
有一个解决方案,它适用于开箱即用的 elixir 获取文本实现。
关键字是:域名
起初,我用我所有的翻译键创建了一个新的 pot 文件:
msgid ""
msgstr ""
"Language: en\n"
msgid "key1"
msgstr ""
msgid "key2"
msgstr ""
# ... and so on ...
我的文件名为
additionals.pot
.然后我运行 mix gettext.extract --merge
.现在我有一个 additionals.po
每个语言目录中的文件,我现在在其中添加我的翻译。现在在我的项目中,我使用
dgettext
Gettext 模块的方法而不是 gettext
. dgettext
让我指定一个域,它是新 additionals.po
的基本名称文件。Gettext.dgettext(<MyProjectName>.Gettext, "additionals", "key1")
# => "translation 1"
就是这样,一切都按预期工作。
Here是一篇关于 Gettext 的好文章。搜索 域名 找到另一个描述如何
dgettext
用来。
关于elixir - 手动添加 gettext 翻译键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37411810/