2009-10-02 1 views
5

Come posso internazionalizzare dire una tabella di categorie (con una colonna del nome) in diverse lingue. Che ne dici di una tabella prodotti (composta da un nome e una colonna descrittiva). Qual è il modo migliore per internazionalizzare il contenuto di queste tabelle del database usando Ruby on Rails?Come internazionalizzare i contenuti su ruby ​​on rails?

risposta

6

Avete dato un'occhiata a: http://guides.rubyonrails.org/i18n.html

Esso descrive in dettaglio come internazionalizzare la vostra applicazione e

"fornisce un quadro facile da usare ed estensibile per tradurre il vostro applicazione a una singola lingua personalizzata diversa dall'inglese o per fornendo supporto multilingue in l'applicazione. "

Alcuni link utili:

+2

Tutti questi riferimenti non parlano del contenuto del database di traduzione ...come la gemma Globalize3 –

2

Se si desidera memorizzare i valori per le diverse lingue del db accanto alle guide standard i18n (yml), si potrebbe fare qualcosa di simile:

Prodotti campo nome della tabella:

  • name_en
  • name_fr
  • name_nl

recuperare il valore corretto:

def i18n_db_value(object, attribute) 
    object.send("#{attribute.to_s}_#{I18n.locale}") if object 
end 
0

È possibile sovrascrivere metodo "nome" nella categoria del modello, è possibile cercare la traduzione corretta in un'altra tabella.

In modo che, nella tabella categorie, si dovrebbe avere nel campo "Nome" la lingua predefinita tradotto, ad esempio "Altro". Quindi cerca "Altro" in una tabella come:

transtations table 

en_text "Other" <--- You search this (default language) 
es_text "Otros" ---> You retrun this 
ca_text "Altres" ---> or this 


# Category table 
class Category < ActiveRecord::Base 
    def name 
    Translation.translate(read_attribute("name")) 
    end 
end 

# Your transltation model 
class Translation < ActiveRecord::Base 

    def self.translate(text) 

    locale=I18n.locale 
    if locale!="en"  # default locale: what is on the table "category" 

     trad=self.find_by_en_text(text) 
     if trad 
      return eval("trad.#{locale}_text") 
     end 
    end 

    return text 

    end 

end