Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 手动添加gettext翻译键_Elixir_Phoenix Framework_Gettext - Fatal编程技术网

Elixir 手动添加gettext翻译键

Elixir 手动添加gettext翻译键,elixir,phoenix-framework,gettext,Elixir,Phoenix Framework,Gettext,我正在使用phoenixframework创建一个项目,并使用gettext添加一些翻译。命令mix gettext.extract-merge从控制器和模板中获取所有我的翻译密钥,并将其存储在.pot和.po文件中 但是我在配置文件中有一些翻译键,我在表单选择框中将其用作选择选项。现在我有一个键列表:[:键1,:键2,键3,…,键n] 现在我需要一个关键字列表来显示翻译,并使用选择框选择关键字。我的结果是:[{translation 1:key1},{translation 2:key2},{

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

但是我在配置文件中有一些翻译键,我在表单选择框中将其用作选择选项。现在我有一个键列表:[:键1,:键2,键3,…,键n]

现在我需要一个关键字列表来显示翻译,并使用选择框选择关键字。我的结果是:[{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方法,而不是Gettext。dgettext允许我指定一个域,该域是新additionals.po文件的基本名称

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

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

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