1. Code
  2. WordPress

Internacionalizando Proyectos WordPress: La Introducción

Hace unos cuantos años, escribí sobre el proceso de internacionalizar proyectos basados en WordPress. Aunque creo que hay algunas veces cuando los tutoriales no necesariamente necesitan actualización, refrescado o re-visita, hay otras veces en las cuáles nos podemos beneficiar de re-visitar el tema.
Scroll to top
10 min read
This post is part of a series called Internationalizing WordPress Projects.
Internationalizing WordPress Projects: A Practical Example, Part 1

Spanish (Español) translation by Rafael Chavarría (you can also view the original English article)

Hace unos cuantos años, escribí sobre el proceso de internacionalizar proyectos basados en WordPress. Aunque creo que hay algunas veces cuando los tutoriales no necesariamente necesitan actualización, refrescado o re-visita, hay otras veces en las cuáles nos podemos beneficiar de re-visitar el tema.

Después de todo, el software cambia año con año, y también ganamos experiencia mientras continuamos trabajando con un software dado. WordPress no es diferente.

Comenzando con este artículo y continuando con el siguiente conjunto de artículos, vamos a echar un vistazo a lo siguiente:

  • qué significa internacionalización dentro del concepto de WordPress
  • cómo podemos internacionalizar nuestro trabajo
  • cómo difieren la internacionalización y la localización
  • herramientas que están disponibles para localización
  • cómo internacionalizar contenido que está contenido dentro de JavaScript
  • y más

Incluso vamos a construir un pequeño pero funcional complemento de WordPress que nos ayudará a demostrar prácticamente los puntos que listamos arriba.

Antes de comenzar, sin embargo, es importante entender lo que es la internacionalización y qué ofrece WordPress en la manera de hacerlo. Además hay algunos cuantos trucos que podrían sorprenderte, especialmente si eres un programador experimentado.

Con eso establecido como el delineado de nuestra serie, comencemos a obtener un agarre sólido en internacionalizar nuestro trabajo en WordPress.

¿Qué Es Internacionalización?

El Codex de WordPress siempre es uno de los mejores lugares para comenzar cuando estás buscando aprender algo sobre un tema dado. Aquí está lo que ofrece en la manera de internacionalización (que también abreviamos como i18n solo en caso de que lo veas escrito de esa manera):

La internacionalización es el proceso de desarrollar tu complemento de manera que pueda ser fácilmente traducido a otros lenguajes.

Además, el Codex describe exactamente por qué esto es importante:

Debido a que WordPress es usado a lo largo de todo el mundo, es una buena idea preparar un complemento WordPress de manera que pueda ser fácilmente traducido en cualquier lenguaje que se necesite. Como desarrollador, podrías tener dificultades proporcionando localizaciones para todos tus usuarios; Podrías no hablar su lenguaje después de todo. Sin embargo, cualquier desarrollador puede internacionalizar exitosamente un tema para permitir a otros crear una localización sin la necesidad de modificar el código fuente mismo.

Tiene sentido, ¿verdad? WordPress impulsa estimadamente un cuarto de la web, y está siendo usado por todo el mundo. ¿Por qué el trabajo que estamos proporcionando debería permanecer en el lenguaje nativo que hablamos?

Esto no es decir que no hay veces en donde esto está bien. Por ejemplo, si estás construyendo una solución para alguien y sabes que ellos junto con un grupo pequeño van a usar la aplicación, tiene sentido dejarlo en el lenguaje nativo de dicho cliente.

Pero si estás construyendo algo para distribución extendida, no hay duda de que deberías estar internacionalizando tu trabajo.

En corto, internacionalizar es el proceso por el cuál nos aseguramos de que nuestro trabajo puede ser traducido a otro lenguaje.

Olvida Todo Lo Que Sabes Sobre Variables

Más adelante en este artículo, vamos a echar un vistazo a las funciones en la API WordPress para asegurar que nuestras cadenas PHP están propiamente internacionalizadas. Pero hay una advertencia increíblemente importante que debes recordar.

¿Recuerdas cuando recién aprendiste sobre variables en cualquier lenguaje de programación hace mucho tiempo? Fue increíble, ¿verdad? Podrías definir una variable una vez y después re-utilizar esa variable en lugar de la cadena (o cualquier otro valor) en cualquier otro lugar en el código para que no tengas que repetirte a ti mismo.

De hecho, es parte de los principios nucleares de la programación, ¿no es así?

El principio DRY esta declarado como "Cada pieza de conocimiento tiene una representación sencilla, ambigua y autoritaria dentro de un sistema."

Estoy absolutamente, casi inequívocamente de acuerdo con esta definición. Pero cuando se trata de internacionalización de cadenas en WordPress, debemos hacer una excepción. Verás por qué momentáneamente, pero elegí incluir esta sección aquí para que puedas evitar cualquier error futuro potencial. También opté por mencionar esto para que no preguntes sobre intentar usar variables dentro del contexto de la API de  internacionalización en futuros puntos de contacto.

Si recuerdas esto ahora, evitarás este obstáculo después.

La API de Internacionalización

En este punto, estamos listos para ver las funciones que WordPress proporciona. No las estaremos poniendo a trabajar en este artículo en particular, pero estaremos viendo los nombres de las funciones, cómo usarlas, y cómo son usadas para un contexto más grande.

Comenzando en el siguiente artículo, empezaremos a ponerlas en uso. Por ahora, echemos un vistazo a lo que está disponible.

  • __() es discutiblemente la función más popular o más común de internacionalización que encontrarás en el trabajo WordPress. Esta función acepta una sola cadena para ser traducida y el dominio de texto al cuál pertenecerá. Nunca debería incluir nada excepto una cadena (eso es, no HTML, no JavaScript, etc.).
  • _e() es similar a la función de arriba, pero en vez de solo recuperar la versión traducida de la cadena, también imprimirá el resultado de la traducción en pantalla.
  • _x(): desafortunadamente, hay veces en donde una cadena dada devolverá la traducción incorrecta. Cuando esto sucede, usar esta función es útil, especialmente cuando especificamos el contexto de cómo será traducida la cadena. Esto asegurará que la versión deseada de la cadena es devuelta.
  • _ex(), justo como _e() y _x() listados arriba, asegurarán que la traducción apropiada de la cadena es impresa en la pantalla basado en el contexto específico de manera que la versión incorrecta no sea seleccionada durante el tiempo de ejecución.
  • _n() es una función estupenda porque permite a WordPress seleccionar la versión singular o plural del número especificado basado en cuál está siendo usado. Esto significa que nosotros, como desarrolladores, tenemos que proporcionar cadenas para la versión singular y plural para que los traductores puedan traducirla, junto con el número actual. Pero hace más fácil trabajar con números internacionalizados que sin ellos.
  • _nx() debería, en este punto, ser claro cómo funciona. Es una combinación de _n() que recién compartimos y _x() que fue cubierto arriba. Esto significa que si estás especificando apropiadamente la forma singular y plural del número especificado junto con el dominio de texto apropiado, entonces la traducción aparecerá según lo esperado.
  • _n_noop() debería sonar algo familiar para aquellos que están familiarizados con ciencias computacionales o ingeniería computacional. Un NOP es un corto para "no operación" y, en este caso, es usado para traducir, cadenas en plural que no necesariamente queremos usar en un momento en particular pero podríamos querer recuperar después. En corto, el traductor puede proporcionar la traducción y podemos seleccionar cuán usarlas.
  • _nx_noop() es una combinación de la función de arriba y la función _x() que vimos tantas veces antes. Esto nos permitirá tener acceso a una traducción para un dominio de texto particular sin tener que traducirlos realmente.
  • translate_noop_plural() se lee un poco diferente que las funciones que examinamos hasta ahora, pero la implementación es bastante simple: Esta función proporciona una traducción del resultado de _n_noop() y _nx_noop(). La cosa clave a notar sobre esta función es que espera que el primer argumento sea un arreglo con las llaves singular y plural que vienen de las funciones antes mencionadas.
  • esc_html__() es muy similar a __(), pero está pensada para usar en etiquetas HTML. Esto es, no está pensada para traducir etiquetas HTML, sino para tomar la traducción y escaparla para uso seguro dentro del contexto de HTML.
  • esc_html_e() es justo como la función de arriba y casi exactamente como la función _e() que vimos arriba; sin embargo, está hecha para ser usada para continuar e imprimir el resultado de la traducción a la pantalla.
  • esc_html_x() debería ser claro en este punto dado cuántas veces hemos visto _x() usado en otras funciones. En corto, esto hará lo mismo que _x(), pero proporcionará el texto en el contexto gettext y lo preparará para uso seguro en HTML.
  • esc_attr__() es usado para tomar la cadena especificada y escaparla apropiadamente para que pueda ser usada de manera segura como un atributo tal como el atributo title de una imagen.
  • esc_attr_e() mostrará el texto con una codificación adicional de cualquier caracter como mayor qué, menor qué, ampersands, y comillas. Esta es otra función que está pensada para ser usada dentro del contexto de un atributo de otro elemento.
  • esc_attr_x() tomará la traducción, escaparla, y después generarla en el contexto del atributo de un elemento. Si no se ha proporcionado una traducción, entonces la cadena por defecto que fue provista durante el tiempo de desarrollo será usada.
  • number_format_18n() es una función poderosa, especialmente cuando estás trabajando con una variedad de locales. Por ejemplo, si estás trabajando con un número y quieres generar "1,000" entonces no especificarías un segundo parámetro para esta función; sin embargo, si estás trabajando con lugares de moneda o decimales, entonces querrías pasar '2' como el segundo argumento para que dos dígitos se agreguen después de un decimal.
  • date_i18n() es otra función poderosa que te permitirá recoger la fecha en un formato localizado basado en la estampa de tiempo especificada. Para aprender más sobre esta función en particular, sus parámetros y ejemplos de cómo es usada, por favor revisa su página Codex.

¿Recuerdas en la sección de arriba en donde hablé sobre evitar el uso de variables? Aquí es donde resulta útil. Como sin duda has notado, cada una de las funciones de arriba toma dos parámetros:

  1. la cadena que puede ser traducida
  2. el dominio de texto de la cadena

El domino de texto se refiere a una relación única entre el complemento WordPress o el tema WordPress, WordPress, y el traductor. Por último, es asegurar que el traductor puede proporcionar una traducción de la cadena sin anular la traducción de otra cadena en algún otro lugar en WordPress (u otra solución de terceros).

Por último, tu mejor apuesta es usar el slug del complemento como el dominio de texto. Además, este parámetro siempre debería ser una cadena, no una variable. Así pues, sin importar cuántas veces termines teniendo que teclearlo, no lo almacenes en una variable. Solo teclea el dominio de texto como el segundo parámetro de la función.

Esto tiene que ver con cómo funcionan las herramientas de traducción, y estaremos viendo esto en más detalle en un artículo futuro.

Conclusión

Y esa es la primicia en las funciones de internacionalización. Si aún estás un poco confundido sobre cómo aplicar algunas de estas en tu trabajo, no te preocupes. Hay más qué cubrir en términos de explicación y demos prácticos.

Por ejemplo, tocamos de manera breve el concepto de gettext, ¿verdad? ¿Y qué sobre JavaScript? Además, ¿qué sobre las herramientas que tenemos disponibles para permitir a otros permitir nuestras cadenas? ¿Cómo sabemos que funcionan apropiadamente?

Todo esto va a ser cubierto en esta serie. Pero antes de llegar ahí, necesitamos comenzar con lo básico. Así que eso es lo que hemos hecho. En el siguiente artículo, continuaremos hablando un poco sobre gettext y algunas de las herramientas disponibles.

Después de eso, voltearemos nuestra atención a realmente escribir código (incluyendo JavaScript) y cómo encaja todo junto dentro del contexto de nuestros propios complementos WordPress.

Mientras tanto, si estás buscando otras utilidades para ayudarte a construir tu creciente conjunto de herramientas para WordPress o por ejemplo código para estudiar y volverte más versado en WordPress, no olvides ver lo que tenemos disponible aquí en Envato Market.

Si estás interesado en aprender más sobre WordPress desde una perspectiva de desarrollo, nota que trabajo exclusivamente con WordPress y regularmente escribo sobre este. Puedes ver todos mis cursos y tutoriales en mi página de perfil, y puedes seguirme en mi blog y/o Twitter @tommcfarlin en donde hablo sobre desarrollo de software en el contexto de WordPress.

No dudes en dejar cualquier pregunta o comentario en la sección de abajo, y trataré de responder cada una de ellas.