# 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