如何在Rails 7中针对日语禁用I18n无显式计数复数化?
Rails 7日语复数化适配方案
Rails内置的String#pluralize方法默认仅支持英文,对于无单复数区分的日语,直接调用会出现如"林檎".pluralize(locale: :ja)返回"林檎s"的问题。以下是两种兼容Rails标准I18n框架的解决方案:
方案一:扩展String类,针对性覆盖pluralize方法
在config/initializers/string_pluralize_ja.rb中添加以下代码:
class String def pluralize(count = nil, locale: I18n.locale) locale == :ja ? self : super(count, locale: locale) end end
该扩展会优先判断当前locale:若为日语则直接返回原字符串,否则沿用原生pluralize逻辑,完全兼容原有功能。
方案二:通过I18n配置全局复数规则
在config/locales/ja.yml中配置日语的复数规则,强制所有场景返回单数形式:
ja: i18n: plural: keys: [:other] rule: "lambda { |n| :other }"
Rails的I18n复数系统会根据此规则,对日语词汇不再添加复数后缀,从国际化层面统一处理复数逻辑。
测试验证
切换locale后测试效果:
I18n.locale = :ja "林檎".pluralize # 返回 "林檎" "林檎".pluralize(1) # 返回 "林檎" "林檎".pluralize(100) # 返回 "林檎" I18n.locale = :en "apple".pluralize # 返回 "apples" "apple".pluralize(1) # 返回 "apple"
内容的提问来源于stack exchange,提问作者Masa Sakano
相关产品推荐
相关产品推荐

