【问题标题】:How does a YAML double exclamation point work in this i18n gem?YAML 双感叹号在这个 i18n gem 中是如何工作的?
【发布时间】:2017-01-18 06:43:45
【问题描述】:

我没有使用 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个用户

本地化测试.rb:13:in puts: 无法将 R18n::Translation 转换为 Array(R18n::Translation#to_ary 提供 R18n::Untranslated)(TypeError)来自本地化-test.rb:13:in puts' 来自本地化-test.rb:13:in '

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

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

【问题讨论】:

    标签: ruby internationalization yaml


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-06-01
      • 2012-03-28
      • 1970-01-01
      • 1970-01-01
      • 2012-03-06
      • 2012-07-07
      • 2021-07-22
      • 2021-11-02
      相关资源
      最近更新 更多