2009-10-02 9 views
5

Comment puis-je internationaliser dire un tableau de catégories (avec une colonne de nom) dans différentes langues. Que diriez-vous d'une table de produits (composée d'une colonne de nom et de description). Quel est le meilleur moyen d'internationaliser le contenu de ces tables de base de données en utilisant Ruby on Rails?Comment internationaliser le contenu sur ruby ​​on rails?

Répondre

6

Avez-vous pris un coup d'oeil: http://guides.rubyonrails.org/i18n.html

Il décrit en détail comment internationaliser votre application et

« fournit un outil facile à utiliser et extensible cadre pour traduire votre application à une seule langue personnalisée autre que l'anglais ou pour fournissant un support multilingue dans votre application. "

Quelques liens utiles:

+2

Toutes ces références ne parlent pas de traduire le contenu de la base de données ...comme la gemme Globalize3 –

2

Si vous souhaitez stocker les valeurs pour les différentes langues du db suivant la norme Rails i18n (yml), vous pourriez faire quelque chose comme ceci:

Produits champ Nom de la table:

  • NAME_EN
  • name_fr
  • name_nl

Fetch la valeur correcte:

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

Vous pouvez écraser Méthode "name" dans la catégorie Model, il est possible de rechercher la traduction correcte dans une autre table. Ainsi, dans le tableau des catégories, vous devriez avoir dans le champ "nom" la langue par défaut traduite, par exemple "Autre". Et puis chercher "Autre" dans un tableau comme:

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