如何为Mobility gem统一设置缺失翻译的默认回退?
为Mobility Gem批量设置全局翻译回退
方法1:借助I18n全局回退配置
Mobility会自动继承Rails的I18n回退规则,所以可以直接在全局I18n配置里设置:
# 配置文件可放在 config/application.rb 或 config/initializers/i18n.rb I18n.default_locale = :en I18n.fallbacks = true
这样所有缺失的翻译都会自动回退到默认locale(这里是en)。如果需要自定义可用locale范围,也可以这样写:
I18n.fallbacks = I18n.available_locales.each_with_object({}) do |locale, hash| hash[locale] = :en unless locale == :en end
方法2:在Mobility专属配置中动态生成回退规则
如果不想影响全局I18n设置,仅针对Mobility配置,可以在初始化文件(比如config/initializers/mobility.rb)里动态生成所有locale的回退映射:
Mobility.configure do # 用项目的可用locale列表,也可以直接写死如 [:en, :de, :fr, :ja] available_locales = I18n.available_locales fallback_map = available_locales.each_with_object({}) do |locale, map| map[locale] = :en unless locale == :en end fallbacks fallback_map end
补充说明
你之前尝试的fallbacks :en不生效,是因为Mobility的fallbacks方法直接传单个locale时,仅会为当前请求的locale设置回退,而非所有locale。必须传入哈希来明确每个locale的回退目标,或者用上面的动态生成方式批量处理所有场景。
内容的提问来源于stack exchange,提问作者seppsepp
相关产品推荐
相关产品推荐

