[ Follo-me en Twitter ]

Bug en el calendario de WordPress

Parido por tupolev  |  Categoría: General

Problema:
Con la traducción al español instalada, la
cabecera del calendario muestra las iniciales L M X J V D D en lugar
de L M X J V S D.
Versión de Wordpress comprobada: 1.2.1
Versión de es_ES.mo comprobada: 1.0 (tanto formal como informal)

Herramientas / ficheros necesarios:
PoEdit
es_ES.mo
Wordpress 1.2.1

El problema se basa en que tanto el fichero de wordpress locale.php, encargado de albergar la configuración regional del blog, como el fichero de traducción de cadenas .mo (sea del idioma que sea) usan UNA SOLA LETRA para representar cada día en la cabecera del calendario mostrado en el index.php.

Esto es así porque Domingo y Sábado, en inglés, empiezan por S (Sunday y Saturday). Para aprovechar esa coincidencia, el fichero de traducción usa una sola entrada que traduce ambas palabras. Esto, en idiomas como el castellano no es así, lo cual provoca un error de traducción.

De momento no existe solución oficial, entendiendo por oficial una solución por parte de Wordpress compatible con todas las traducciones. Sin embargo, existe un pequeño hack que nos sacará del apuro. La modificación consta de dos pasos, en los que se editarán los ficheros /wp-includes/locale.php y /wp-includes/languages/es_ES.mo.

Paso 1: Cambiar el tratamiento interno de las iniciales de días de la semana afectados por el error en locale.php de UNA a DOS letras
En dicho fichero, iremos a la línea 16. A partir de ahí, buscaremos la sentencia

$weekday_initial[__('Saturday')]  = __('S');

y la sustituiremos por

$weekday_initial[__('Saturday')]  = __('St');

La sentencia referente a Sunday no es necesario cambiarla, aunque lo ideal sería pasar todos los días a dos letras, actuando en consecuencia en el siguiente paso.
Hecho esto, subiremos el fichero locale.php a /wp-includes/.

Paso 2: Añadir una entrada en es_ES.mo para la cadena “St”.
Esto es más complejo de lo que indica el título. Lo primero que hay que saber de los ficheros .mo es que son compilados y, por tanto, bastante complicados de editar en su estado natural.
Pero todo fichero compilado tiene un fichero fuente del que procede y en este caso es el fichero .po, que descargaremos del mismo sitio que el anterior, editaremos a hierro con el bloc de notas y compilaremos con PoEdit.

Una vez instalado PoEdit y descargado y extraido el fichero es_ES.po, abrimos éste con el bloc de notas o similar.
La sintaxis básica de este fichero es la siguiente:

#:FICHERO_REFERENCIA:LÍNEA_REFERENCIA
msgid:CADENA_ORIGINAL
msgtr:CADENA_TRADUCIDA

En concreto, la entrada que nos conviene cambiar es esta:

#: wp-includes/locale.php:15
#: wp-includes/locale.php:21
msgid “S”
msgstr “D”

Que SUSTITUIREMOS por estas dos:

#: wp-includes/locale.php:15
msgid "S"
msgstr "D"

#: wp-includes/locale.php:21
msgid "St"
msgstr "S"

Una vez hecho esto y guardado el fichero, lo abrimos con PoEdit y compilamos con Archivo > Guardar, lo que nos creará el fichero es_ES.mo, que deberemos subir a /wp-includes/languages/.

Al acabar todo este proceso, el calendario debería aparecer correctamente.

Tags: ,

Stewie dice: % comentario! La victoria es mía!

  1. tupolev Says:

    Acabo de darme cuenta de que esto mismo sucede también con las iniciales de Martes y Jueves (Tuesday y Thursday). Siguiendo el método que hemos usado para el anterior hack, haremos lo mismo, cambiando en la línea 14 de locale.php
    $weekday_initial[__('Thursday')] = __(’T');
    por
    $weekday_initial[__('Thursday')] = __(’Th’);
    Y en es_ES.po (compilando y subiendo después otra vez es_ES.mo) buscaremos el código

    #: wp-includes/locale.php:12
    #: wp-includes/locale.php:14
    msgid “T�
    msgstr “M�

    sustituyéndolo por


    #: wp-includes/locale.php:12
    msgid “T�
    msgstr “M�

    #: wp-includes/locale.php:14
    msgid “Th�
    msgstr “J�

    Responder

¡Dime algo, cojones!