Hola, si quieres tener una opción más burocrática pero elegante, podrías usar i18n directamente (claro es más trabajo comparado con las demás soluciones, pero tendrás acceso directo a la manipulación del lenguaje de la internacionalización)
entonces, primero fija el lenguaje
I18n.locale = extract_locale_from_accept_language_header
# Puedes hacerlo con esto desde usando tu request en cada "petición" o usando algún valor por defecto desde tu usuario
# al final tendras algo como: I18n.locale = 'es'
def extract_locale_from_accept_language_header
request.env['HTTP_ACCEPT_LANGUAGE'].try(:scan, /^[a-z]{2}/).try(:first)
end
Luego, dentro de tus locales, especialmente en config/locales/es.yml pega esto:
date:
abbr_month_names:
-
- Ene
- Feb
- Mar
- Abr
- May
- Jun
- Jul
- Ago
- Sep
- Oct
- Nov
- Dic
formats:
long: "%B, %d %Y"
short: "%b, %d %Y" my_format: "%B"
month_names:
-
- Enero
- Febrero
- Marzo
- Abril
- Mayo
- Junio
- Julio
- Agosto
- Septiembre
- Octubre
- Noviembre
- Diciembre
Después si quieres utilizar algún helper que sea compatible con los formats que arriba definiste, usa el siguiente:
I18n.l Date.today, format: :my_format
I18n.l Date.today, format: :short
puedes usarlo sin el i18n si estás dentro de una vista, acuerdate de definir my_format también en el config/locales/en.yml (para no tener problemas en ingles) de igual forma creo que ya podrías usar Date.today.strftime("%B") internacionalizado directamente.
BONUS: recuerda que esto funcionará para Date, con Time debes hacer algo muy parecido en la redefinición de los formats dentro del local, algo como:
time:
formats: my_format: "%B"
long: "%B %d, %Y %H:%M"
Ok espero que pueda servirte,
un saludo,
--------------------------------------------