i18n将变量附加到翻译字符串

时间:2017-08-04 15:55:46

标签: ruby-on-rails internationalization rails-i18n

我目前正在使用i18n翻译字符串,而我正在寻找一种方法将变量附加到路径上。

此变量可以是大约8个不同的值,每个值都需要不同的转换。我的语言环境文件已包含翻译,但我不知道如何将我的变量添加到翻译路径中。我没有认为variable interpolation在这里帮助我。

content.state //variable
t ('.state') //locale path

我正在寻找一种方法将content.state变量添加到语言环境路径的末尾,以便根据content.state的内容进行转换。目前我唯一的解决方案是覆盖所有州的大型if / else。

解决:我试图找到一种方法将变量添加到车把内的语言环境路径,最后使用concat帮助程序。

{{ t (concat "state." content.state)}}

2 个答案:

答案 0 :(得分:4)

你可以这样做(例子):

I18n.t('helpers.links.add', variable: "Your Variable Value")

然后,在您的翻译文件(yml)上:

helpers:
  links:
    add: "Add %{variable}"

这样,在我的例子中,输出将是:添加变量值。

希望这有帮助!

答案 1 :(得分:0)

我也在寻找这个。我的问题是能够在翻译链接中添加变量。我使用上下文完美地管理了它。

假设您要从后端返回“ en”和“ fr”时显示“英语”和“法语”。

在翻译文件(en.json和fr.json)中添加上下文:

{
  ...
  "language_en":"English",
  "language_fr":"French",
  ...
}

在您的前端,假设您的变量名称为 objectLanguage ,请使用以下上下文:

t('language', { context: objectLanguage })

i18next将查找特定的上下文并正确渲染为“英语”或“法语”!

可以找到文档here

编辑:更简单,如果您编写代码,则可以使用引号:

t(`language.${objectLanguage}.label`)

指向链接:

{
  ...
  "language.en.label":"English",
  "language.fr.label":"French",
  ...
}

它也可以正常工作。

希望这可以帮助某人。