Cómo internacionalizar su sitio web de WordPress
Publicado: 2022-03-10El 30 de septiembre de 2017, la comunidad internacional de WordPress se unió durante 24 horas para traducir el ecosistema de WordPress. Por tercera vez, #WPTranslationDay fusionó un maratón de traducción de todo el día con eventos digitales y del día del colaborador diseñados para promover el valor de crear experiencias accesibles para usuarios globales, mejor conocido como "localización".
Como comunidad de código abierto, todos debemos esforzarnos por localizar nuestras contribuciones de código abierto. Sin embargo, antes de que pueda transcribir sus activos digitales, debe internacionalizar su base de código.
Los términos "internacionalización" y "localización" a menudo se usan indistintamente, aunque técnicamente representan dos aspectos diferentes del proceso de traducción.
- La internacionalización (I18N) es el proceso de internacionalizar o adaptar su tema o complemento para traducirlo a cualquier idioma del mundo.
- La localización (L10N) es el proceso posterior de localización o traducción de sus herramientas internacionalizadas a un idioma determinado.
Actualmente, WordPress está completamente localizado para más de 65 idiomas y ofrece traducciones parciales para 95 locales adicionales. El uso internacional continúa aumentando a medida que se introducen más localizaciones.
Los usuarios de WordPress que no hablan inglés superaron a los usuarios de habla inglesa en 2014 y, sin darse cuenta, continúan diluyendo el porcentaje de pastel de los usuarios de inglés en 2017 a medida que crecen los esfuerzos como #WPTranslateDay.
A medida que WordPress se vuelve cada vez más accesible desde el punto de vista lingüístico, el conocimiento de I18N y L10N es esencial para que los desarrolladores de complementos y temas prosperen en la economía global de WordPress. Para escalar negocios, estas habilidades de desarrollo pueden abrir puertas a mercados extranjeros. La accesibilidad web, incluida la accesibilidad lingüística, es buena para los negocios y mejor para las personas.
Como continuación del #WPTranslationDay , aquí hay una guía actualizada para internacionalizar sus complementos y temas de WordPress.
Aquí hay una breve descripción del proceso que exploraremos hoy.
- Descubrimiento
- Conozca los archivos de traducción
- Archivo POT
- Archivo de orden de compra
- Archivo MO
- GlotPress y paquetes de idiomas
- Realice copias de seguridad y prepare su entorno
- Conozca los archivos de traducción
- Complemento I18N
- Encabezado del complemento
- Cargar dominio de texto
- Auditoría de cadenas
- Generar archivo POT
- Tema I18N
- Encabezado de tema
- Cargar dominio de texto
- Auditoría de cadenas
- Generar archivo POT
- JavaScript I18N
- Recursos adicionales
Descubrimiento
Conozca los archivos de traducción
WordPress usa la biblioteca GNU gettext para facilitar I18N.
Primero, familiaricémonos con los archivos de traducción gettext generados a lo largo del proceso.
Archivo de plantilla de objeto portátil (POT)
Durante el proceso I18N, usaremos una herramienta para encontrar cadenas internacionalizadas y generar un archivo POT que contenga todo el texto traducible en sus complementos y tema.
Archivo de objeto portátil (PO)
En apariencia, no hay diferencias notables entre un archivo POT y un archivo PO . Son sintácticamente iguales y solo se diferencian por sus propósitos previstos.
Después de generar un archivo POT, un traductor debe interpretar las cadenas de texto a su idioma preferido. El archivo PO finalmente contendrá cadenas de texto en su idioma nativo, así como las traducciones apropiadas.
Archivo de objeto de máquina (MO)
Finalmente, el archivo PO se convierte en un documento legible por máquina o en un archivo de objeto de máquina. Este archivo vivirá en su tema o directorio de complementos para que WordPress lo invoque cuando sea el momento de servir una versión traducida.
Realice copias de seguridad y prepare su entorno
Antes de modificar cualquier marcado, haga una copia de seguridad de su complemento, tema o todo su sitio (¡lo que sea que esté internacionalizando!) y ordene sus entornos de desarrollo.
Asegúrese de realizar una auditoría rápida de complementos si planea localizar su sitio web. Elimine o desactive cualquier complemento que ya no esté usando activamente. Esta auditoría rápida le ahorrará tiempo a largo plazo.
Internacionalice sus complementos
CABECERA DE PLUGIN
Primero, actualizaremos el encabezado del complemento. En concreto, el dominio de texto y la ruta del dominio .
Ejemplo de encabezado de complemento
/* Plugin Name: My Rad Plugin Plugin URI: https://myradplugin.com Description: Custom Plugin That Makes My Site Rad Author: Rad Plugin Creator Version: 1.0 Author URI: https://radplugincreator.com Text Domain: rad-plugin Domain Path: /languages/ */
Dominio de texto
El dominio de texto es un identificador único para que WordPress reconozca todo el texto que pertenece a un complemento y debe coincidir con el slug del complemento .
Esto es especialmente importante si su complemento está alojado en WordPress.org; estos deben coincidir para que GlotPress importe correctamente las traducciones para su complemento.
En nuestro ejemplo, el archivo del complemento se llama rad-plugin.php y el dominio de texto es rad-plugin
Es posible que ya tenga un conjunto de dominios de texto. Si no lo hace, recuerde usar guiones, no guiones bajos.
Ruta de dominio
La ruta del dominio es la carpeta en la que vivirán los archivos de traducción finalizados. Debe crear una nueva carpeta dentro del directorio del complemento, como /languages/ , y actualizar la ruta del dominio, para que WordPress sepa exactamente dónde buscar los archivos de traducción.
CARGAR DOMINIO DE TEXTO
A continuación, vamos a cargar el dominio de texto agregando la siguiente función a nuestro código.
cargar_plugin_textdomain()
load_plugin_textdomain( $domain, $abs_rel_path, $plugin_rel_path );
Si hay un archivo de traducción disponible para el idioma del usuario, la función de carga de dominio de texto le indicará a WordPress que lo entregue.
Parámetros
- $dominio — dominio de texto (obligatorio)
- $abs_rel_path — falso (opcional, obsoleto)
- $plugin_rel_path — /languages/ (opcional, esta es la ruta relativa al directorio que contiene sus archivos de traducción. En nuestro ejemplo, /languages/. A partir de 4.6, WordPress buscará estos archivos en el directorio /languages/ del complemento, si este no se especifica.)
Ejemplo de complemento Rad
Para cargar el dominio de texto, nos conectaremos a la acción 'plugins_loaded'.
add_action( 'plugins_loaded', 'rad_plugin_load_text_domain' ); function rad_plugin_load_text_domain() { load_plugin_textdomain( 'rad-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' ); }
AUDITORÍA DE CUERDAS
El siguiente paso es envolver todas las cadenas de texto del complemento en funciones de traducción.
Las funciones de traducción más comunes son __()
para devolver una cadena traducida y _e()
para repetir una cadena traducida.
Ejemplo de complemento Rad
__() $text = __( 'Super Rad!', 'rad-plugin' );
Esta función funcionará para traducciones simples. Tiene en cuenta dos parámetros; la cadena de texto y el dominio de texto.
_e( 'Super Rad!', 'rad-plugin' );
Esta función simplemente repite el valor. De lo contrario, funciona exactamente como lo hace la función anterior.
Hay una gran cantidad de funciones de traducción adicionales que también deben usarse cuando sea apropiado.
Otras funciones básicas
__() _e() _x() _ex() _n() _nx() _n_noop() _nx_noop() translate_nooped_plural()
Funciones de fecha y número
number_format_i18n() date_i18n()
Funciones de escape
No olvide escapar cualquier dato que se esté emitiendo usando las siguientes funciones de escape.
esc_html__() esc_html__() esc_html_x() esc_attr__() esc_attr_e() esc_attr_x()
En nuestro ejemplo de Rad, podríamos tener una línea de código de complemento que se vea así:
function create_section() { esc_html_e( 'Below are your settings for Rad Plugin', 'rad-plugin' ); }
CREAR UN ARCHIVO POT
El paso final es crear un archivo POT. Hay algunas herramientas diferentes disponibles para generar este tipo de archivo, pero para este tutorial, seguiremos las recomendaciones del códice de WordPress y usaremos Poedit, una GUI fácil de usar para administrar las traducciones.
Nota : si su complemento o tema ya está en el repositorio de WordPress.org, puede omitir este proceso y generar un archivo POT desde la página de administración. En este caso, no es necesario generar un archivo .po para cada idioma. La introducción de GlotPress y los paquetes de idiomas en 2015 simplificó el proceso de traducción; todo lo que se necesita para GlotPress es el archivo .pot, que será importado por WordPress.org y servido a los traductores a través del tablero de translate.wordpress.org. Los colaboradores de todo el mundo utilizarán este panel para proporcionar traducciones el #WPTranslateDay.
Descargar Poedit
Configuración de Poedit
Propiedades de traducción
Comience yendo a Archivo > Nuevo . Luego, seleccione el idioma nativo de su complemento y presione Aceptar .
A continuación, seleccione Catálogo > Nuevo . Introduce el nombre del proyecto, la versión, el contacto y el idioma.
Caminos
Seleccione la pestaña Rutas de origen a continuación. Si se trata de un archivo nuevo, primero deberá guardar el archivo.
Siguiendo nuestro ejemplo, seleccionaríamos Archivo > Guardar como para guardar como un archivo .po en el directorio /languages/ dentro de rad-plugin. Nuevamente, el nombre del archivo debe coincidir con el slug de su complemento.
rad-plugin.po
Después de guardar, ingrese la ruta relativa al directorio donde vivirán sus archivos de traducción. En este escenario, languages .
Palabras clave
Seleccione la pestaña Palabras clave de fuentes . Haga clic en el ícono + para agregar los nombres de función apropiados.
Hoja de trucos
__ _e _x _ex _n _nx _n_noop _nx_noop translate_nooped_plural number_format_i18n date_i18n esc_html__ esc_html__ esc_html_x esc_attr__ esc_attr_e esc_attr_x
Luego, puede hacer clic en Aceptar y luego en Archivo > Guardar .
Poedit guardará un archivo .mo y .po. Puede crear el archivo .pot copiando el archivo .po y agregando una extensión .pot. Los usuarios internacionales pueden usar el archivo de plantilla .pot para traducir las cadenas a su idioma.
Internacionaliza tu tema
El proceso para internacionalizar tu tema es prácticamente idéntico al I18N para plugins. Comenzaremos revisando el encabezado del tema y terminaremos generando otro archivo POT.
ENCABEZADO DEL TEMA
Verifique dos veces el encabezado de su tema para asegurarse de que su dominio de texto y la ruta del dominio estén configurados.
Ejemplo de encabezado de tema
/* Theme Name: Rad Theme Author: Rad Theme Author Text Domain: rad-theme Domain Path: /languages/ */
CARGAR DOMINIO DE TEXTO
El siguiente paso es cargar un dominio de texto en el archivo functions.php de su tema esta vez.
cargar_tema_dominio de texto()
load_theme_textdomain( 'radtheme', get_template_directory() . '/languages' );
Para que estos archivos se carguen, debe registrarlos con la acción after_setup_theme.
add_action( 'after_setup_theme', 'rad_theme_setup' ); function rad_theme_setup() { load_theme_textdomain( 'radtheme', get_template_directory() . '/languages' ); }
AUDITORÍA DE CUERDAS
¡Es hora de otra auditoría de cuerdas! Debe estar familiarizado con las funciones básicas de traducción en este punto.
Echemos un vistazo a algunas traducciones más complicadas.
Marcadores de posición
Las variables de PHP como el ejemplo a continuación no se traducirán correctamente sin el uso de marcadores de posición.
echo "We added $count rad points.";
imprimirf() & sprintf()
Estas funciones usan marcadores de posición como %s o %d para números enteros, para interpolar una cadena de texto con contenido dinámico.
Ejemplo de tema Rad
/* Translators: %d is the number of rad points added */ printf( esc_html__( 'We added %d rad points.', 'rad-plugin' ), $count );
Plurales
La función _n()
puede manejar traducciones de cadenas más complejas como plurales, pero no se recomienda debido a sus limitaciones dentro del software de traducción. En su lugar, puede escribir una declaración if simple para distinguir entre palabras singulares y plurales.
Ejemplo de complemento Rad
If ( 1 === $rad_points_found ) { $message = __( '1 rad point', 'rad-plugin' ); } else { /* Translators: %s is the number of rad points found */ $message = sprintf( __( '%s rad points' , 'rad-plugin' ) , $rad_points_found ); }
GENERAR ARCHIVO POT
El proceso para generar archivos POT de temas es el mismo que para generar archivos POT de complementos. Explore algunos métodos a continuación.
Línea de comando
Con WordPress Trunk y el paquete gettext GNU instalado, puede realizar este paso rápidamente ejecutando el script makepot.php en la línea de comando.
Abra la línea de comando y navegue hasta el directorio de herramientas I18N.
cd wpdev/tools/i18n/
El script debería verse así:
php path/to/makepot.php wp-theme path/to/rad-theme rad-theme.pot
El script hará lo suyo y el archivo terminado, rad-theme.pot , terminará en el directorio actual.
Tareas Grunt
Otro método para crear un archivo POT es ejecutar tareas de Grunt usando grunt-wp-i18n o grunt-pot. Los ejecutores de tareas como Grunt pueden automatizar muchas tareas tediosas, como generar archivos POT.
Para crear su archivo POT, asegúrese de tener instalado node.js primero. Luego, instala Grunt en el directorio de tu idioma a través de la línea de comando y listo. Ahora, puede ejecutar rápidamente estos comandos I18N y crear su archivo de traducción sin dejar la comodidad de la línea de comandos.
JavaScript I18N
Si es un desarrollador moderno de temas o complementos, es probable que use JavaScript para manejar algún componente de su proyecto. wp_localize_script es una función efectiva para extraer datos de PHP para proporcionar a sus scripts, y es la única forma de traducir JavaScript dentro de WordPress.
WP_LOCALIZE_SCRIPT()
Esta función nos permitirá localizar cadenas del lado del servidor en PHP y proporcionar cadenas de texto como un objeto JavaScript para el script.
wp_localize_script( $handle, $name, $data );
PARÁMETROS
- $handle : el identificador del script para el que deben estar disponibles los datos (obligatorio: debe coincidir con el identificador del script para el que son estos datos, consulte el ejemplo a continuación)
- $name — nombre del objeto que contiene los datos (requerido — debe ser único)
- $datos : una matriz de datos para pasar al script (obligatorio) .
EJEMPLO DE COMPLEMENTO RAD
add_action( 'wp_enqueue_scripts', 'rad_theme_scripts' ); function rad_theme_scripts() { wp_enqueue_script( 'rad-theme-script', get_template_directory_url() . '/js/rad-theme-script.js' ); wp_localize_script( 'rad-theme-script', 'rad-I18n', array( 'message' => __( 'Super Rad!', 'rad-theme' ), ) ); }
ACCESO A DATOS EN JAVASCRIPT
El fragmento de código simple a continuación es un ejemplo de cómo acceder a estos datos en su archivo JavaScript.
alert( rad-I18n.message );
Recursos adicionales
- I18N para desarrolladores de WordPress
- Manual de temas de WordPress: Internacionalización
- Manual de complementos de WordPress: Internacionalización
- WordPress.tv: I18N
Envolviendolo
¡Felicidades! Acaba de internacionalizar su tema y/o complemento, haciéndolo accesible para que se beneficien personas de todos los idiomas nativos. Ya sea que su proyecto se distribuya a través del repositorio de WordPress o se desarrolle a la medida para el sitio web de su organización, la internacionalización de sus archivos desde el principio solo tiene una ventaja.
- Haga que sus contribuciones de código abierto sean accesibles a nivel mundial.
- Crear conversaciones con nuevos clientes en mercados extranjeros.
- Ahorre tiempo y reduzca las laboriosas actualizaciones en el futuro.
Siempre internacionalízate.