I18n antes que nada significa Internacionalizacion, es por eso que inicia con la letra I despues el numero 18 que indica el numero de caracteres y al final la n que es el último caracter de la palabra "Internationalization".
Ruby on Rails originalmente trae soporte para fechas y palabras en ingles.
En un proyecto que estube realizando (un sistema de asistencias), que teniamos que asignar hora de entrada, salida etc... tenia que utilizar oviamente fechas y horas, el problema surgia que en el mostrar (show o index), las fechas siempre me aparecian en formato de E.U.A, es decir Año Mes y Dia, y peor aun, si queria la hora en formato largo me ponia: "February 17, 2009".
La solucion consistio en leer un poco acerca de I18n y aqui la solucion.
1. Lo primero que tuve que hacer fue descargar el archivo de internacionalizacion que necesitaba, en este caso el de español, de la siguiente direccion: "http://github.com/svenfuchs/rails-i18n/tree/e5878d3c661e0b9ad364951c96f1f4f39960a2f1/rails/locale"
2. Despues de descargarlo hay que ubicarlo en la carpeta locales del Framework que se localiza en config/locales/ dentro de esta carpeta seguramente estara el archivo en.yml que es el que trae por default, no importa si tienes ambos, puedes bajar el del pais que requieras.
3. Ahora bien tenemos que hacer que incluya rails este archivo en nuestro proyecto, esto lo hacemos en el archivo environment.rb que se encuentra en: config/environment.rb en este archivo tenemos que poner lo siguiente:
config.i18n.default_locale = :es
Es asi como indicamos que tome los formatos y traducciones que vienen en ese archivo, trata de ponerlo cerca de donde esta una linea similar pero comentada, solo por órden.
4. Ahora tenemos todo listo, en nuestra vista o donde vamos a mostrar el campo tipo fecha tenemos que hacerlo de la siguiente manera:
<%=l @assistance.date %>
Notese que inicia con una l que es la que le indica que "localize" ese atributo, puede incluir tambien el tradicional h que es para que escape automáticamente caracteres raros, sería de la siguiente manera:
<%=h l @assistance.date %>
Ambos mostrarian algo asi:
2009-02-09
Esta fecha parece no ser la correcta, o mas bien no como queremos que la muestre, pues nos gustaría mas que fuera como comunmente la usamos día, mes y año, para eso solo hay que introducirse un poco en el archivo es.yml que agregamos en la carpeta config/localize/es.yml y dentro encontraremos toda la estructura del formateo de fechas y algunas traducciones, para este caso en particular, vayamos a la parte donde dice :date y vamos a ver algo similar a:
date:
formats:
# Use the strftime parameters for formats.
# When no format has been given, it uses default.
# You can provide other formats here if you like!
default: "%Y-%m-%d"
short: "%d de %b"
long: "%d de %B de %Y"
pues bien com ahi dice esta parte podemos agragar nuevos formatos de fechas, como vemos toma el default cuando no le indicamos cual queremos que tome, mas adelante veremo como hacer eso, por ahora cambiaremos el que toma por default, como nos dice tambien utiliza el formateo de fechas de Ruby (strftime), entonces tendremos que seguir esa sintaxis para agregar o midificar los formatos (si quieres saber mas a cerca de este formateo puedes ir a la documentacion de Ruby).
Bien, sigamos, cambiaremos la siguiente linea de este archivo:
default: "%Y-%m-%d"
Que es el que toma por default, como vemos priemro colocara el año %Y
posteriormente un guion -
despues el mes %m
seguido otro guion -
por ultimo el dia %d
todo entre comillas.
Es por esto que la fecha que nos muestra es del tipo 2009-02-09, cambiando el default de la siguiente forma:
default: "%d-%m-%Y"
al cambiar el orden ahora nuestras fechas seran 09-02-2009 :D :D :D
Siguiendo con esto, nos peguntaremos, no ps esta chido pero si quiero un formato personal o un formato del tipo: 17 de Febrero de 2009
bien para esto tendremos que acceder a los formatos que se encuentran debajo, en esta seccion
date:
formats:
# Use the strftime parameters for formats.
# When no format has been given, it uses default.
# You can provide other formats here if you like!
default: "%d-%m-%Y"
short: "%d de %b"
long: "%d de %B de %Y"
como vemos tenemos el formato long y short pero, ¿como acceder a este u otro que formemos?, es sencillo, en nuestra vista como habiamos visto toma el que es por default, pero si le colocamos :format => :long ó :format => :short
de la siguiente forma:
<%=l @assistance.date, :format => :long %>
Nos mostraria una fecha de este tipo: 17 de Febrero de 2009
Si queremos agregar un formato nuevo podemos agregarlo en el mismo archivo de la siguiente forma:
date:
formats:
# Use the strftime parameters for formats.
# When no format has been given, it uses default.
# You can provide other formats here if you like!
default: "%d-%m-%Y"
short: "%d de %b"
long: "%d de %B de %Y"
mi_fecha: "México DF a %d de %B de %Y"
ahora de esta forma podemos llamarlo en nuestra vista de la siguiente manera:
<%=l @assistance.date, :format => :mi_fecha %>
Y esto nos mostraria algo asi:
México DF a 17 de Febrero de 2009
Pues bien asi es como Rails nos facilita la vida para el formateo de fechas por medio de internationalization.
Ruby on Rails originalmente trae soporte para fechas y palabras en ingles.
En un proyecto que estube realizando (un sistema de asistencias), que teniamos que asignar hora de entrada, salida etc... tenia que utilizar oviamente fechas y horas, el problema surgia que en el mostrar (show o index), las fechas siempre me aparecian en formato de E.U.A, es decir Año Mes y Dia, y peor aun, si queria la hora en formato largo me ponia: "February 17, 2009".
La solucion consistio en leer un poco acerca de I18n y aqui la solucion.
1. Lo primero que tuve que hacer fue descargar el archivo de internacionalizacion que necesitaba, en este caso el de español, de la siguiente direccion: "http://github.com/svenfuchs/rails-i18n/tree/e5878d3c661e0b9ad364951c96f1f4f39960a2f1/rails/locale"
2. Despues de descargarlo hay que ubicarlo en la carpeta locales del Framework que se localiza en config/locales/ dentro de esta carpeta seguramente estara el archivo en.yml que es el que trae por default, no importa si tienes ambos, puedes bajar el del pais que requieras.
3. Ahora bien tenemos que hacer que incluya rails este archivo en nuestro proyecto, esto lo hacemos en el archivo environment.rb que se encuentra en: config/environment.rb en este archivo tenemos que poner lo siguiente:
config.i18n.default_locale = :es
Es asi como indicamos que tome los formatos y traducciones que vienen en ese archivo, trata de ponerlo cerca de donde esta una linea similar pero comentada, solo por órden.
4. Ahora tenemos todo listo, en nuestra vista o donde vamos a mostrar el campo tipo fecha tenemos que hacerlo de la siguiente manera:
<%=l @assistance.date %>
Notese que inicia con una l que es la que le indica que "localize" ese atributo, puede incluir tambien el tradicional h que es para que escape automáticamente caracteres raros, sería de la siguiente manera:
<%=h l @assistance.date %>
Ambos mostrarian algo asi:
2009-02-09
Esta fecha parece no ser la correcta, o mas bien no como queremos que la muestre, pues nos gustaría mas que fuera como comunmente la usamos día, mes y año, para eso solo hay que introducirse un poco en el archivo es.yml que agregamos en la carpeta config/localize/es.yml y dentro encontraremos toda la estructura del formateo de fechas y algunas traducciones, para este caso en particular, vayamos a la parte donde dice :date y vamos a ver algo similar a:
date:
formats:
# Use the strftime parameters for formats.
# When no format has been given, it uses default.
# You can provide other formats here if you like!
default: "%Y-%m-%d"
short: "%d de %b"
long: "%d de %B de %Y"
pues bien com ahi dice esta parte podemos agragar nuevos formatos de fechas, como vemos toma el default cuando no le indicamos cual queremos que tome, mas adelante veremo como hacer eso, por ahora cambiaremos el que toma por default, como nos dice tambien utiliza el formateo de fechas de Ruby (strftime), entonces tendremos que seguir esa sintaxis para agregar o midificar los formatos (si quieres saber mas a cerca de este formateo puedes ir a la documentacion de Ruby).
Bien, sigamos, cambiaremos la siguiente linea de este archivo:
default: "%Y-%m-%d"
Que es el que toma por default, como vemos priemro colocara el año %Y
posteriormente un guion -
despues el mes %m
seguido otro guion -
por ultimo el dia %d
todo entre comillas.
Es por esto que la fecha que nos muestra es del tipo 2009-02-09, cambiando el default de la siguiente forma:
default: "%d-%m-%Y"
al cambiar el orden ahora nuestras fechas seran 09-02-2009 :D :D :D
Siguiendo con esto, nos peguntaremos, no ps esta chido pero si quiero un formato personal o un formato del tipo: 17 de Febrero de 2009
bien para esto tendremos que acceder a los formatos que se encuentran debajo, en esta seccion
date:
formats:
# Use the strftime parameters for formats.
# When no format has been given, it uses default.
# You can provide other formats here if you like!
default: "%d-%m-%Y"
short: "%d de %b"
long: "%d de %B de %Y"
como vemos tenemos el formato long y short pero, ¿como acceder a este u otro que formemos?, es sencillo, en nuestra vista como habiamos visto toma el que es por default, pero si le colocamos :format => :long ó :format => :short
de la siguiente forma:
<%=l @assistance.date, :format => :long %>
Nos mostraria una fecha de este tipo: 17 de Febrero de 2009
Si queremos agregar un formato nuevo podemos agregarlo en el mismo archivo de la siguiente forma:
date:
formats:
# Use the strftime parameters for formats.
# When no format has been given, it uses default.
# You can provide other formats here if you like!
default: "%d-%m-%Y"
short: "%d de %b"
long: "%d de %B de %Y"
mi_fecha: "México DF a %d de %B de %Y"
ahora de esta forma podemos llamarlo en nuestra vista de la siguiente manera:
<%=l @assistance.date, :format => :mi_fecha %>
Y esto nos mostraria algo asi:
México DF a 17 de Febrero de 2009
Pues bien asi es como Rails nos facilita la vida para el formateo de fechas por medio de internationalization.
Saludos.
:D :D :D