23 lines
852 B
Ruby
23 lines
852 B
Ruby
|
# app/models/concerns/translatable_name.rb
|
|||
|
module TranslatableName
|
|||
|
extend ActiveSupport::Concern
|
|||
|
|
|||
|
def localized_name(default_locale = "en")
|
|||
|
return name unless translations.present?
|
|||
|
|
|||
|
translations_hash = translations.is_a?(String) ? JSON.parse(translations) : translations
|
|||
|
|
|||
|
# 尝试完全匹配当前语言设置
|
|||
|
current_locale = I18n.locale.to_s
|
|||
|
return translations_hash[current_locale] if translations_hash[current_locale].present?
|
|||
|
|
|||
|
# 尝试匹配语言的基础部分(例如 'zh-CN' => 'zh')
|
|||
|
base_locale = current_locale.split("-").first
|
|||
|
matching_key = translations_hash.keys.find { |k| k.start_with?(base_locale) }
|
|||
|
return translations_hash[matching_key] if matching_key.present?
|
|||
|
|
|||
|
# 如果没有匹配,返回默认语言的翻译或原始名称
|
|||
|
translations_hash[default_locale] || name
|
|||
|
end
|
|||
|
end
|