Hoy aprenderemos cómo pasar o poner las fechas de WordPress de inglés a español, es decir, mostrar los días y los meses en nuestro idioma.

Siempre ha sido un problema hacerlo, cuando busqué en la web no encontré ninguna solución que me lo explicase a fondo, algunas de ellas ya no servían dado que la estructura de WordPress había cambiado (al cambiar su versión), otras sencillamente no daban mayores detalles o me eran útiles.

Lo primero que debemos hacer siempre que vayamos a realizar un cambio, en especial si se trata de un archivo de WordPress que sea del sistema en sí, es crear un respaldo (backup). Nos dirigimos a nuestro directorio public_html/tecnologiadiaria.com/wp-includes/ y creamos una copia del archivo locale.php.

Ahora que tenemos un respaldo comenzamos a tocar el código:

  1. Abrimos nuestro archivo locale.php en modo edición y buscamos la línea 108.
  2. Allí encontraremos un código similar a éste (línea 108 a 168):
    function init() {
    // The Weekdays
    $this->weekday[0] = __('Sunday');
    $this->weekday[1] = __('Monday');
    $this->weekday[2] = __('Tuesday');
    $this->weekday[3] = __('Wednesday');
    $this->weekday[4] = __('Thursday');
    $this->weekday[5] = __('Friday');
    $this->weekday[6] = __('Saturday');
     
    // The first letter of each day.  The _%day%_initial suffix is a hack to make
    // sure the day initials are unique.
    $this->weekday_initial[__('Sunday')]    = __('S_Sunday_initial');
    $this->weekday_initial[__('Monday')]    = __('M_Monday_initial');
    $this->weekday_initial[__('Tuesday')]   = __('T_Tuesday_initial');
    $this->weekday_initial[__('Wednesday')] = __('W_Wednesday_initial');
    $this->weekday_initial[__('Thursday')]  = __('T_Thursday_initial');
    $this->weekday_initial[__('Friday')]    = __('F_Friday_initial');
    $this->weekday_initial[__('Saturday')]  = __('S_Saturday_initial');
     
    foreach ($this->weekday_initial as $weekday_ => $weekday_initial_) {
    $this->weekday_initial[$weekday_] = preg_replace('/_.+_initial$/', '', $weekday_initial_);
    }
     
    // Abbreviations for each day.
    $this->weekday_abbrev[__('Sunday')]    = __('Sun');
    $this->weekday_abbrev[__('Monday')]    = __('Mon');
    $this->weekday_abbrev[__('Tuesday')]   = __('Tue');
    $this->weekday_abbrev[__('Wednesday')] = __('Wed');
    $this->weekday_abbrev[__('Thursday')]  = __('Thu');
    $this->weekday_abbrev[__('Friday')]    = __('Fri');
    $this->weekday_abbrev[__('Saturday')]  = __('Sat');
     
    // The Months
    $this->month['01'] = __('January');
    $this->month['02'] = __('February');
    $this->month['03'] = __('March');
    $this->month['04'] = __('April');
    $this->month['05'] = __('May');
    $this->month['06'] = __('June');
    $this->month['07'] = __('July');
    $this->month['08'] = __('August');
    $this->month['09'] = __('September');
    $this->month['10'] = __('October');
    $this->month['11'] = __('November');
    $this->month['12'] = __('December');
     
    // Abbreviations for each month. Uses the same hack as above to get around the
    // 'May' duplication.
    $this->month_abbrev[__('January')] = __('Jan_January_abbreviation');
    $this->month_abbrev[__('February')] = __('Feb_February_abbreviation');
    $this->month_abbrev[__('March')] = __('Mar_March_abbreviation');
    $this->month_abbrev[__('April')] = __('Apr_April_abbreviation');
    $this->month_abbrev[__('May')] = __('May_May_abbreviation');
    $this->month_abbrev[__('June')] = __('Jun_June_abbreviation');
    $this->month_abbrev[__('July')] = __('Jul_July_abbreviation');
    $this->month_abbrev[__('August')] = __('Aug_August_abbreviation');
    $this->month_abbrev[__('September')] = __('Sep_September_abbreviation');
    $this->month_abbrev[__('October')] = __('Oct_October_abbreviation');
    $this->month_abbrev[__('November')] = __('Nov_November_abbreviation');
    $this->month_abbrev[__('December')] = __('Dec_December_abbreviation');
  3. Debemos editar todas las cadenas y formato de funciones pasándolas de inglés a español. Al final nos quedaremos con esto:
    function init() {
    // The Weekdays
    $this->weekday[0] = __('Domingo');
    $this->weekday[1] = __('Lunes');
    $this->weekday[2] = __('Martes');
    $this->weekday[3] = __('Miercoles');
    $this->weekday[4] = __('Jueves');
    $this->weekday[5] = __('Viernes');
    $this->weekday[6] = __('Sabado');
     
    // The first letter of each day.  The _%day%_initial suffix is a hack to make
    // sure the day initials are unique.
    $this->weekday_initial[__('Domingo')]    = __('D_Domingo_initial');
    $this->weekday_initial[__('Lunes')]    = __('L_Lunes_initial');
    $this->weekday_initial[__('Martes')]   = __('M_Martes_initial');
    $this->weekday_initial[__('Miercoles')] = __('M_Miercoles_initial');
    $this->weekday_initial[__('Jueves')]  = __('J_Jueves_initial');
    $this->weekday_initial[__('Viernes')]    = __('V_Viernes_initial');
    $this->weekday_initial[__('Sabado')]  = __('S_Sabado_initial');
     
    foreach ($this->weekday_initial as $weekday_ => $weekday_initial_) {
    $this->weekday_initial[$weekday_] = preg_replace('/_.+_initial$/', '', $weekday_initial_);
    }
     
    // Abbreviations for each day.
    $this->weekday_abbrev[__('Domingo')]    = __('Do');
    $this->weekday_abbrev[__('Lunes')]    = __('Lu');
    $this->weekday_abbrev[__('Martes')]   = __('Ma');
    $this->weekday_abbrev[__('Miercoles')] = __('Mi');
    $this->weekday_abbrev[__('Jueves')]  = __('Ju');
    $this->weekday_abbrev[__('Viernes')]    = __('Vi');
    $this->weekday_abbrev[__('Sabado')]  = __('Sa');
     
    // The Months
    $this->month['01'] = __('Enero');
    $this->month['02'] = __('Febrero');
    $this->month['03'] = __('Marzo');
    $this->month['04'] = __('Abril');
    $this->month['05'] = __('Mayo');
    $this->month['06'] = __('Junio');
    $this->month['07'] = __('Julio');
    $this->month['08'] = __('Agosto');
    $this->month['09'] = __('Septiembre');
    $this->month['10'] = __('Octubre');
    $this->month['11'] = __('Noviembre');
    $this->month['12'] = __('Diciembre');
     
    // Abbreviations for each month. Uses the same hack as above to get around the
    // 'May' duplication.
    $this->month_abbrev[__('Enero')] = __('Ene_Enero_abbreviation');
    $this->month_abbrev[__('Febrero')] = __('Feb_Febrero_abbreviation');
    $this->month_abbrev[__('Marzo')] = __('Mar_Marzo_abbreviation');
    $this->month_abbrev[__('Abril')] = __('Abr_Abril_abbreviation');
    $this->month_abbrev[__('Mayo')] = __('May_Mayo_abbreviation');
    $this->month_abbrev[__('Junio')] = __('Jun_Junio_abbreviation');
    $this->month_abbrev[__('Julio')] = __('Jul_Julio_abbreviation');
    $this->month_abbrev[__('Agosto')] = __('Ago_Agosto_abbreviation');
    $this->month_abbrev[__('Septiembre')] = __('Sep_Septiembre_abbreviation');
    $this->month_abbrev[__('Octubre')] = __('Oct_Octubre_abbreviation');
    $this->month_abbrev[__('Noviembre')] = __('Nov_Noviembre_abbreviation');
    $this->month_abbrev[__('Diciembre')] = __('Dec_Diciembre_abbreviation');
  4. Guardamos los cambios. Si desean pueden también descargar este locale.php (para WordPress 3.0.2) que ya he modificado y lo reemplazan en lugar del suyo.
  5. En nuestro panel de WordPress nos dirigimos a Settings> General, allí en la opción Time Format cambiaremos la cadena por defecto F j, Y por l, j \d\e F \d\e\l Y, donde l es la variable día, j es la variable número de día, F es la variable mes y Y es la variable año. Las variables de tipo \c donde c es una letra, son en realidad cadenas, no variables. De este modo al final tendremos algo como ésto: Viernes, 29 de Diciembre del 2008.
  6. El problema es que a veces aún haciendo este cambio no se verán reflejados los nuevos formatos de fecha en nuestro blog. Si no lo vemos en nuestra portada es porque probablemente nuestro index.php tenga su propio formato. En nuestro panel de WordPress vamos a Design> Theme Editor, allí abrimos nuestro index.phpen modo edición. Buscamos un código <?php the_time. Lo más probable es que encontremos algo como ésto:
     
  7. En ese caso lo cambiamos por el mismo formato l, j \d\e F \d\e\l Y al que hicimos referencia en un paso anterior. Repetimos ese cambio en todos los otros bloques (categories.php, single.php, etc.) donde encontremos que no cambia el formato de fecha. Ojo, solo el formato porque al editar el locale.php nuestras fechas ya estarían en español.

Este cambio ha sido testeado en WordPress 3.0.2. Cualquier duda o comentario es bienvenido.

Etiquetas:

Comentarios ( 36 ) en: Cómo poner las fechas de WordPress en español
  • /grunch0 dijo:

    Yo eso lo descubrí ahi solo to rayao buscando :S ! que bien me hubiera leido leerlo de aqui.

  • Jose Perez dijo:

    Hola KnxDT

    Primero que nada felicidades, todos los cambios son para mejorar y pasando a mi duda resulta que en mi blog la fecha aparece

    4th

    ¿Como puedo hacer para que solo aparezca el 4 sin el “th”?

    Mil gracias

  • Illi.Pro dijo:

    Siempre quise saber como hacerlo, gracias por la info 😉

  • Jose Perez dijo:

    Listo, en mi theme venia jS, simplemente quite la S y el th desaparecio 😀

  • Ishtar dijo:

    Muchas gracias por el artículo,viene de maravilla!

  • rm dijo:

    Checa el enlace de locale.php, ya no funciona… saludos!

  • KnxDT dijo:

    @rm: gracias por el aviso, ya lo subi.

  • carlos dijo:

    Gracias por el tutorial.
    Me ha ido estupendo.
    Pero hay una fecha que se me resiste.
    En http://dosacero.com/actividades/, aparece un Próximas actividades en el sidebar, con fechas en ingles que no se de donde salen. He buscado, creo, por todas partes, pero no las encuentro, ni en el theme, ni en locale, ni en el plugin.
    Alguna idea de donde puede salir?
    Gracias!

  • carlos dijo:

    He hecho una captura del codigo del plugin, la parte que en teoria define el formato de la fecha en Próximas actividades, y esta visible en
    http://dosacero.com/2008/08/problema-con-la-fecha/
    Gracias

  • carlos dijo:

    El plugin lo encuentras en
    http://wordpress.org/extend/plugins/calendar/
    Gracias

  • ome dijo:

    Hola

    gracias por la info

    Sabes como hacer para que entre el día y el mes aparezca la palabra “de”?

    asi quedaría por ejemplo:
    19 de noviembre

  • KnxDT dijo:

    Ome, eso lo explico justo en el punto 7, lee bien.

    Saludos.

  • actonauta dijo:

    ¡Buenísimo aporte! ya tenía rato buscando y aquí encontre muy bien la solución, ¡muchas gracias!

    ¡Saludos, éxito!

  • KnxDT dijo:

    Actonauta, hola y gracias por tomarte la molestia de comentar, un saludo.

  • Daniel dijo:

    Muy buen articulo, me ha ayudado mucho ya que he tenido que adaptar una plantilla al español totalmente.
    Un saludo.

  • KnxDT dijo:

    Que bueno que te haya servido, Daniel. Espero que regreses nuevamente por aqui 😎

  • Guillermo dijo:

    Te pasaste! Muy bueno el tutorial, se nota que le has dedicado tiempo. Soy usuario medio de Joomla y recien estoy dando mis primeros pasos en WordPress. Muchas gracias y saludos desde Argentina

  • duda dijo:

    como hago todo mi blog en español

  • Gima dijo:

    Gracias a vuestros trucos nos ahorráis a los webmaster una gran cantidad de tiempo.

    Nuevamente mil gracias por este excelente artículo.

  • guspelin dijo:

    Me cambia todo a español, excepto lo más importante la fecha de la cabecera, por favor ayudo, ¿como lo arreglo?
    para q visione el codigo sustituí >por}

    {div class=”today”}
    {span class=”day”} {?php echo date(‘j ‘); ?} {/span} {br/}
    {span class=”mony”} {?php echo date(‘ F , Y ‘); ?} {/span} {br/}
    {span class=”dname”} {?php echo date(‘ l ‘); ?} {/span}
    {/div}

  • guspelin dijo:

    para que se visione en el comentario, naturalmente

  • KnxDT dijo:

    Hola guspelin, por favor, dame la url del blog que no entiendo bien tu pregunta.

    Saludos.

  • 3 Cosas Antes de Actualizar WordPress 3.0 | Give Me Solutions dijo:

    […] Una vez actualizado, podríamos comenzar parchando las fechas a español […]

  • Iris Fernández dijo:

    ¡¡Genial!! Muchas gracias 🙂

  • BETA Weblog, educación y tecnología en Argentina dijo:

    […] Nota posterior: para traducir las fechas y los meses del archivo de WordPress, les recomiendo esta excelente guía: Cómo poner las fechas de WordPress en español. […]

  • Iris Fernández dijo:

    Hola, soy yo otra vez. Al reemplazar mi locale.php dejó de funcionar el panel de control. Evidentemente este locale es para una versión vieja… Tuve que volver a bajarme WordPress y reinstalar el locale.php, y traducirlo manualmente.
    ¡Gracias!

  • Pablo dijo:

    Ojo! me ha pasado lo mismo que a Iris. Cuando cambié mi Locale.php por este, dejó de funcionar el Panel de Control de WordPress y tuve que instalarlo de nuevo. Gracias a Dios aun no había posteado….. creo que necesitas modificarlo.

    Saludos

  • KnxDT dijo:

    @Pablo, @Iris: Mil disculpas a ambos, pero parece que no se dieron cuenta del párrafo final que decía que el archivo servía para una versión de WordPress anterior. En todo caso agradezco sus mensajes, ya lo actualicé y el nuevo locale.php cargado se encuentra trabajando con la actual versión de WordPress.

    Saludos 😉

  • Carlos Viloria dijo:

    Muy buen aporte muchas gracias.

  • Kang Ha Joon dijo:

    Gracias, ahora ya se ven las fechas en español, fue de gran ayuda que hicieras la traducción.

  • Caco dijo:

    La info buen siempre es útil! gracias!!

  • Tandro dijo:

    ¡Muchas gracias!

  • Ruben dijo:

    Gracias maestro, siempre me topaba con este tema de las fechas en idioma inglés en todos los proyectos WordPress, un abrazo

  • Abrahan Nunez dijo:

    Gracias, muy útil este artículo!

  • Eric dijo:

    De mucha ayuda, gracias por la info. Recomendacion para quien lo haga por primera vez siempre realiza un respaldo.

  • Caneta dijo:

    Que bueno que hice el respaldo ya que el php es diferente al del post, tuve que hacer todo manual pero valio la pena. Gracias