YAML双感叹号在这个i18n宝石中是如何工作的?

时间:2016-09-10 05:49:38

标签: ruby internationalization yaml

我没有使用Rails,之前我没有做任何国际化,所以我试图理解this particular example是如何工作的,但我有点难过:

r18n-desktop gem从YAML文件中读取翻译。很简单。

YAML文件en.yml

user:
  edit: Edit user
  name: User name is %1
  count: !!pl
    1: There is 1 user
    n: There are %1 users
log:
  signup: !!gender
    male: Он зарегистрировался
    female: Она зарегистрировалась

测试ruby代码:

require 'r18n-desktop'
R18n.from_env('./localizations/')
R18n::Filters.add('gender') do |translation, config, user|
  puts translation
  puts config
  puts user
  translation[user.gender]
end
include R18n::Helpers

class Ayy
  attr_accessor :gender
end

girl = Ayy.new
girl.gender = :female

puts t.user.count(5)
puts t.log.signup girl

输出:

  

有5个用户

     

定位-test.rb:13:在   puts:无法将R18n :: Translation转换为Array(R18n ::翻译#to_ary给出R18n :: Untranslated)(TypeError)来自localization-test.rb:13:in puts'from localization-test.rb:13:in “

Addenum:看起来错误在puts而不是“翻译”。翻译的实际结果是log.signup[],但性别没有通过。

t.log.signup()期待什么?

1 个答案:

答案 0 :(得分:0)

好像您忘了为!!gender自定义类型设置过滤器。

R18n只有很少的内置过滤器 - 如!!pl。性别过滤器不是内置的,您需要手动定义它。

R18n Filter docs已包含针对性别的简单过滤示例:

R18n::Filters.add('gender') do |translation, config, user|
  translation[user.gender]
end