No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Aprende todo un fin de semana sin pagar una suscripción 🔥

Aprende todo un fin de semana sin pagar una suscripción 🔥

Regístrate

Comienza en:

1D
19H
8M
52S

Soporte de varios idiomas para tu aplicación

16/36
Recursos

Aportes 12

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

o inicia sesión.

Soporte para varios idiomas

_
Internacionalización
El sistema de internacionalización o I18N nos ayuda a interactuar con una libreria de Rails para insertar de forma automatizada ciertas keys para enlazar traducciones a diferentes idiomas.

_

Cómo usarlo

  • En los labels de los atributos del modelo User escribiremor t(‘model.atribute’). Esto, de forma automática accederá al atributo del modelo.
  • Buscamos el archivo config/locales/en.yml Este archivo contendrá “etiquetas”. Colocamos el nombre del modelo y sus atributos. Dentro de estas etiquetas colocaremos su traducción.
en:
  hello: Hello world
  users:
    first_name: First name
  • El archivo “en” funciona como diccionario del idioma ingles. Para crear uno del idioma español podemos duplicarlo y llamarlo “en”. En el archivo en colocaremos los términos en español.
  • Para ahorrarnos el proceso de escribir cada atributo de forma manual podemos usar el comando i18n-asks add-missing. Esto requiere una unstalacion (gem install i18n-tasks).

_

Establecer lenguaje por acciones

  • Vamos al controlador que queremos internacionalizar podemos añadir la clase I18n y el método locale, para establecer el lenguaje de la acción. ‘es’.
def new
	I18n.locale = 'es'
	@user = User.new
end

_
Establecer lenguaje por controlador

  • Si queremos que esta internacionalización afecte a todas las acciones tendríamos que ir a su controlador base. Dentro de este colocaremos dentro de la clase:
before_Action :set_locale

def set_locale
	I18n.locale = 'es'
end

¿Cómo se haria para manejar los locales segun la ruta. Por ejemplo es/… or en/…?

El profesor menciona algo que hacer que completamente no entiedo, yo : panico, menciona que lo abordaremos luego luego, ufff que alivio jajaj

Así quedo mi archivo es.yml 👀

---
es:
  hello: Hola mundo
  users:
    edit:
      back: Regresar
      show: Mostrar
    first_name: Nombres
    form:
      about_me: Un poco sobre mi persona
      address: Direccion
      last_name: Apellidos
      phone: Telefono
    index:
      about_me: Un poco sobre mi
      address: Direccion
      are_you_sure?: ¿Estas seguro?
      destroy: Destruir
      edit: Editar
      first_name: Nombres
      last_name: Apellidos
      listing_users: Lista de usuarios
      new_user: Nuevo usuario
      phone: Telefono
      show: Mostrar
    new:
      back: Regresar
    show:
      about_me: Sobre mi persona
      address: Direccion
      back: Regresar
      edit: Editar
      first_name: Nombres
      last_name: Apellidos
      phone: Telefono```

Hola así quedó mi código tanto en users como en books:

Users:

 .form-inputs
    = f.input :first_name, label: t('users.first_name')
    = f.input :last_name, label: t('.last_name')
    = f.input :about_me, label: t('.about_me')
    = f.input :phone, label: t('.phone')

Books:

.form-inputs
    = f.input :title, label: t('.title')
    = f.input :author, label: t('.author')
    = f.input :description, label: t('.description')
    = f.input :isbn, label: t('.isbn')
    = f.input :pages_count,label: t('.pages_count')

‘es’ file:

es:
  books:
    form:
      author: Autor
      description: Descripción
      isbn: Isbn
      pages_count: Número de páginas
      submit: Registrar
      title: Titulo
  hello: Hello world
  users:
    first_name: Nombres
    form:
      about_me: Sobre mi
      last_name: Apellidos
      phone: Telefono
      submit: Registrar

PD: los submit no cambian pero lo dejo asi para referencia 😄

Tambien puedes configurar una unica vez en el config/application.rb pones:

config.i18n.default_locale = :es

.form-inputs
= f.input :nombre , label: t(’.nombre’), as: : text
= f.input :apellido , label: t(’.apellido’)
= f.input :apellido , label: t(’.direccion’)
= f.input :apellido , label: t(’.notas’)
= f.input :apellido , label: t(’.telefono’)

Un compañero explico que no acepta tabulaciones, pero me siguio dando error hasta instalar el i18n-tasks, que creo automaticamente los archivos, y con ello ya funciono.

Que brutal ese feature

Importante
Los archivos YML no soportan el tab para indentar, se tiene que hacer con espacios, si no les lanzará un error

En mi archivo: _form.html.haml:

  .form-inputs
    = f.input :first_name, label: t('users.first_name'), as: :text
    = f.input :last_name, label: t('.last_name')
    = f.input :address, label: t('.address')
    = f.input :about_me, label: t('.about_me')

Hay algo que no me agrada mucho de la gema i18n-tasks . Por cada vista hay que agregar una key disitinta al diccionario incluso si es para el mismo atributo del mismo modelo. Por ejemplo tenemos la key users.form.last_name pero también tenemos la key users.index.users.last_name y ambas tienen el mismo valor. Será que en este caso simplemente la creamos como la key de users.first_name que no le especificamos si era de index o form etc? de manera que sea por asi decirlo global? o hay otra forma más eficiente de hacerlo ?

Genial 💪🏽