Ruby on Rails中rails-i18n下:de locale的ordinalize方法失效原因及解决
问题成因
- Rails默认仅加载项目
config/locales目录下的翻译文件,不会自动读取rails-i18ngem内置的翻译配置。 - 尽管
rails-i18n已包含德语number.nth.ordinalized的翻译规则,但你的项目de.yml仅定义了hello键,且未配置加载gem内的翻译文件,导致I18n无法找到对应翻译键,触发缺失报错。 - 法语
ordinalize正常工作是因为rails-i18n对法语的翻译配置被间接加载(或部分版本默认包含),但德语无此默认处理。
修复方案
方案一:手动补充项目德语翻译文件
直接在项目的config/locales/de.yml中添加序数词翻译规则,示例如下:
de: hello: "Hallo Welt" number: nth: ordinalized: one: "%{number}." two: "%{number}." few: "%{number}." other: "%{number}."
添加后重启控制台,即可正常使用1.ordinalize得到符合德语规范的序数词格式。
方案二:配置Rails加载gem内置翻译文件
在config/application.rb中修改I18n加载路径,让Rails自动加载rails-i18n gem内的所有locale文件:
module Test1 class Application < Rails::Application # 其他配置... config.i18n.load_path += Dir[Gem.loaded_specs['rails-i18n'].full_gem_path + '/rails/locale/*.yml'] end end
保存后重启Rails服务器或控制台,Rails会自动加载gem内的德语翻译配置,无需手动修改de.yml即可正常使用ordinalize方法。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

