如何在凤凰城设置语言环境,以使用priv / gettext / {lang} /LC_MESSAGES/errors.po?
作为测试,我使用mix gettext.merge priv/gettext --locale ja
构建了语言环境文件,并在其中翻译了一些单词。
如果我在模板文件中明确地调用了put_locale/2
和web/views/error_helpers.ex
中的<%= translate_error(message) %>
,那就有效了,但是在DRY中它有点难看。
def translate_error(msg) do
Gettext.put_locale(LoginStudy.Gettext, "ja")
Gettext.dgettext(LoginStudy.Gettext, "errors", msg)
end
有没有更好的方法来设置默认语言环境?我在default_locale
中指定了config/config.ex
,但它无效。
config :login_study, LoginStudy.Endpoint, default_locale: "ja",
最诚挚的问候,
答案 0 :(得分:5)
很棒的问题@hykw!由于凤凰城的Gettext支持是新的,文档现在才开始出现。
一个很好的起点是Rebecca Skinner撰写的优秀博客文章:http://sevenseacat.net/2015/12/20/i18n-in-phoenix-apps.html
例如,如果您只想为某些Web请求将语言环境设置为日语,则可以像使用MyApp.Locale
一样定义插件,并在请求生命周期的开始时运行它。我只是不建议将语言环境存储在会话中,而是将其保留为URL或其他参数的一部分。
但是,如果您希望始终的区域设置为日语,则可以在配置文件中写入:
config :my_app, MyApp.Gettext, default_locale: "ja"
您可以在Gettext文档中找到有关此内容的更多信息:http://hexdocs.pm/gettext/Gettext.html