text 2 Feb 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