Friendly_id 和全球化 - 如果缺少翻译,则对 slug 使用默认翻译

Friendly_id and globalize - use default translation for slug if translation is missing

我已经集成了 friendly_id gem 和全球化,如果我在特定区域设置了 slug 的翻译,它就可以正常工作。

但我想要实现的是对 slug 使用默认翻译,以防某些语言环境的翻译 table 中缺少它。

假设我有一个主语言环境 MA,其中填充了 slug,而我有一个 EN 语言环境,但它丢失了。如果我要去 EN 版本,我想看看 slug 的 MA 版本。

有没有办法做到这一点?

谢谢,米罗斯拉夫

我相信如果您使用此附加组件 gem 来实现 friendlyid 和全球化,我相信这已经为您处理好了:https://github.com/norman/friendly_id-globalize/blob/master/README.md

它处理默认语言环境。我只会向您推荐文档,但希望这样做。

我最终通过编写一个应用程序辅助方法解决了这个问题(其他解决方案对我不起作用)。希望它能帮助别人。如果产品不存在翻译,它将使用主翻译(在创建产品时默认创建),否则使用当前语言环境版本。

# application_helper.rb

def product_url(product)
    if product.translations.pluck(:locale).include?(I18n.locale.to_s)
      admin_translations_product_path(product)
    else
      I18n.with_locale(:ma) { admin_translations_product_path(product) }
    end
end

# index.html.erb
<%= link_to "#{t :button_admin_edit} #{locale.to_s.upcase}", product_url(product) %>