I18n-语言环境文件-使用ruby-使用translation()

时间:2018-10-27 08:07:59

标签: ruby-on-rails ruby internationalization translation

I18n locale file中(例如el.yml):

  • 我可以使用translation方法来使用已经定义的翻译吗?
  • 我可以在内部使用ruby code吗?

例如,在locale yml file中,我想在多个地方使用单词“ Invalid”。因此,一种方法是每次翻译“无效”一词

另一种方法是在顶部translate it once,然后在包含该单词的yml语言环境中的每个翻译中,都可以使用类似t(:invalid)的东西。

例如:

el:
  # global translations - in order to be used later in the file
  locked: 'kleidomeno'
  invalid: 'mi egiro'
  password: 'kodikos'

  devise:
    failure:
      invalid: "#{Invalid} %{authentication_keys} or #{password}."
      locked: "Your account is #{locked}."
      last_attempt: "You have one more attempt before your account is #{locked}."
      not_found_in_database: "#{invalid} %{authentication_keys} ή #{password}."

1 个答案:

答案 0 :(得分:0)

  

我可以使用翻译方法来使用已经定义的翻译吗?

是的,这就是I18n翻译的目的,例如

t 'something'
  

我可以在内部使用ruby代码吗?

否,这是一个.yml文件,不接受Ruby或任何其他编程语言。

  

另一种方法是将其翻译一次

要翻译一次,您可以编写一个新的Rake任务来为您生成目标yml。

或者,可以用一种新方法包装官方翻译功能,该方法可以识别您的自定义字符串语法:

# custom translate
def ct(msg)
  msg.gsub(/#\{\s*([^\}]+)\s*\}/) {|_| t $1}
end

这样称呼:

ct 'Your account is #{locked}.'

我认为您最好将这些失败字符串从yml文件中删除。