2009-10-02 13 views
5

¿Cómo puedo internacionalizar decir una tabla de categorías (con una columna de nombre) en diferentes idiomas. ¿Qué tal una tabla de productos (que consiste en un nombre y columnas de descripción). ¿Cuál es la mejor forma de internacionalizar el contenido de estas tablas de base de datos con Ruby on Rails?¿Cómo internacionalizar el contenido en ruby ​​on rails?

Respuesta

6

¿Ha echado un vistazo a: http://guides.rubyonrails.org/i18n.html

En él se describe con cierto detalle cómo internacionalizar su solicitud y

"proporciona un marco fácil de usar y extensible para la traducción de su aplicación a un único idioma personalizado que no sea inglés o para que proporciona compatibilidad con varios idiomas en su aplicación. "

Algunos enlaces útiles:

+2

Todas estas referencias no hablan sobre la traducción de los contenidos de la base de datos ...como la gema Globalize3 –

2

Si desea almacenar los valores para los diferentes idiomas en la base de datos junto a los raíles estándar i18n (yml), podrías hacer algo como esto:

los productos campo Nombre de tabla:

  • Suite Sencilla
  • name_fr
  • name_nl

buscar el valor correcto:

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

Puede sobrescribir El método "nombre" en la Categoría modelo, puede buscar la traducción correcta en otra tabla.

Para que, en la tabla de categorías, debe tener en el campo "nombre" el idioma predeterminado traducido, por ejemplo "Otro". Y luego buscar "Otro" en una tabla como:

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