elixir - 手动添加 gettext 翻译键

标签 elixir phoenix-framework gettext

我正在使用 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/

相关文章:

elixir - Phoenix session 未被删除

elixir - 计算Ecto存储库中的条目数

php - 如何创建用于 PHP 的 ICU 资源文件?

elixir - 空 "parent"模块中是否有嵌套模块的约定?

if-statement - 为什么 if(not nil) 给我一个 ArgumentError?

elixir - 如何使用 phoenix_html 发布具有多个选择表单字段的 id 集合

php - 如何使用 Translate Toolkit 将 .po 转换为 PHP 数组(Zend Framework)?

elixir - Protocol在elixir中有什么意义?

elixir - JSON 响应的单元测试,与 JSON 响应匹配以断言键和值

c - dcgettext 的目的是什么?