text
Customize Globalize2 to return default locale when translation is missing
Globalize2 (fantastico plugin per Ruby on Rails per globalizzare la nostra applicazione [tradurre il contenuti nel DB]) ritorna nil se non trova una traduzione per un campo del DB.
Questo in molti casi e` un pacco e sarebbe bello che ritornasse il valore del locale di default.
Per fare cio` andiamo ad modificare globalize2.
Prendiamo il file in globalize2/lib/globalize/active_record/adapter.rb
Andiamo alla funzione def fetch_attribute(locale, attr_name) linea 53
def fetch_attribute(locale, attr_name)
translations = fetch_translations(locale)
value, requested_locale = nil, locale
Globalize.fallbacks(locale).each do |fallback|
translation = translations.detect { |t| t.locale == fallback }
value = translation && translation.send(attr_name)
locale = fallback && break if value
end
set_metadata(value, :locale => locale, :requested_locale => requested_locale)
value
end
Modifichiamo dopo set_metadata:
def fetch_attribute(locale, attr_name)
translations = fetch_translations(locale)
value, requested_locale = nil, locale
Globalize.fallbacks(locale).each do |fallback|
translation = translations.detect { |t| t.locale == fallback }
value = translation && translation.send(attr_name)
locale = fallback && break if value
end
set_metadata(value, :locale => locale, :requested_locale => requested_locale)
value = fetch_attribute(I18n.default_locale, attr_name) if value.nil? && locale != I18n.default_locale # ADDED BY PIOZ
value
end
In questo modo se value e` nil ricalcolera` value con il locale di default.
blog comments powered by Disqus