Creando una web me he encontrado con el problema de poner determinados textos en varios idiomas. Sin querer meterme en muchos follones (hay plugin para ello) y buscando una solución muy sencilla y rápida, un compañero de la lista de Rails me sugirió YAML. (Aquà y aquà hay información de YAML en Ruby)
El objetivo es el siguiente. Necesito un hash con los los textos que quiero poner en varios idiomas. Por ejemplo:
Español: { “menu_inicio” => “Inicio”, “listado_personas”=>”Listado Personas” }
Ingles: { “menu_inicio” => “Home”, “listado_personas”=>”List of Persons” }
Lo que quiero es guardar los datos de cada idioma en un archivo, y dependiendo del idioma seleccionado, cargar un archivo u otro. ok?
Creamos una carpeta lang donde guardar los siguientes archivos en formato YAML.
es.yml
menu_inicio: “Inicio”
listado_personas: “Listado de Personas”
en.yml
menu_inicio: “Home”
listado_personas: “List of Persons”
Ahora vamos a preparar la aplicación para cargue el archivo dependiendo del idioma. Modificamos el controlador principal de la aplicación.
application.rb
require ‘yaml’ # Necesario NO OLVIDAR!!!!
class ApplicationController < ActionController::Base
def idioma
@idioma = actualiza_idioma #funcion que captura si se ha cambiado de idioma. Por defecto devuelve 1
#Dependiendo del idioma cargamos un archivo u otro
case @idioma.to_i
when 1 then archivo = “es.yml”
when 2 then archivo = “en.yml”
end
@lang = YAML::load(File.open(”#{RAILS_ROOT}/lang/#{archivo}”))
end
…
Bien asà de sencillo. Ahora en cualquier vista podemos poner <%=lang['menu_inicio'] %> y nos lo mostrará en el idioma seleccionado.
PD: Se me olvidaba, tenemos que poner en los controladores before_filter :idioma para que ejecute la función
