¿Cómo preparar una traducción de plugin de WordPress?

19

¿Cuál es la mejor manera de crear un complemento que esté listo para la traducción?

No tiene que traducirse desde el principio, pero debe ser fácilmente traducible para que otros desarrolladores de diferentes culturas puedan participar en el proceso de localización del complemento.

Nabil Kadimi
fuente

Respuestas:

38

1. Escribir con la localización en mente

No use echoo print()para producir salida de texto, en su lugar use las funciones de WordPress __()y _e():

/** Not localization friendly */
echo "Welcome to my plugin";    
// OR
print("Welcome to my plugin");

/** Localization friendly */
_e('Welcome to my plugin', 'my-plugin');
// OR
$my_text = __('Welcome to my plugin', 'my-plugin');
echo $my_text;

_e()y __()proporcionará la traducción, en el idioma actual, del texto proporcionado como primer parámetro. _e()generará el texto mientras que __()lo devolverá.

El segundo parámetro es el dominio de texto , lo usará para decirle a WordPress que el texto proporcionado como primer parámetro pertenece a este complemento, puede usar el nombre que desee, pero prefiero usar el mismo nombre que usé para el complemento archivo de directorio, lo encuentro más intuitivo.

¿Cómo generar texto dinámico como: "Hola <nombre de usuario>"?

Con __()y sprintf():

/** Get the username */
$username = 'Magictrick';

/** Not localization friendly */
echo "Hello $username";     

/** Localization friendly */
printf(__('Hello %s', 'my-plugin'), $username);
// OR 
$my_text = sprintf(__('Hello %s', 'my-plugin'), $username);
echo $my_text;

2. Prepare los archivos .pot / .po / .mo

Definiciones

  • El archivo .pot : está a su disposición por el desarrollador del complemento y se usa como punto de partida para crear nuevas traducciones, WordPress no lo usa.
  • Un archivo .po : es un archivo de traducción que usted u otra persona comenzaron, y tal vez completado, WordPress no lo usa.
  • Archivo A.mo : Poedit crea automáticamente cada vez que guarda un archivo .po, todo lo que puede hacer con estos archivos es cargarlos o volver a cargarlos cada vez que cree o actualice un archivo .po. WordPress obtiene traducciones de archivos .mo .

Abra Poedit y cree un nuevo catálogo (Archivo ›Nuevo catálogo ...) con esta configuración:

  • Información del proyecto: use su información (o la de su equipo), el idioma y el país deben coincidir con el idioma predeterminado de su complemento
  • Rutas:
    • Camino base: .
    • Rutas: elimine todo y agregue .., (almacenaremos el archivo de idioma en un subdirectorio de plugin llamado idiomas)
  • Palabras clave: eliminar todo y agregar __y_e

Guarde el catálogo como y escanee sus archivos de complemento en busca de texto traducible presionando el botón de actualización. Cuando finalice la actualización, cierre ese catálogo, no necesitará actualizar ese archivo a menos que agregue nuevas cadenas traducibles (es decir, incluidas en o ) a su complemento./my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin.pot__()_e()

Ahora creemos la primera traducción (usaré fr_FR):

Con Podeit , cree un catálogo desde un archivo POT (Archivo ›Nuevo catálogo desde un archivo POT ...) :

  • Información del proyecto: use su información (o la de su equipo), cambie el idioma y el país , usaré francés y Francia
  • Caminos: no cambies
  • Palabras clave: no cambies

Guarde el catálogo como . Traduzca algunas o todas las cadenas, guarde el archivo .po nuevamente, cargue los archivos .po y .mo./my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin-fr_FR.po

Tenga en cuenta que cada vez que guarda un archivo .po, se genera un archivo .mo con el mismo nombre, el nombre de archivo del archivo .po es crucial , se compone de la concatenación del dominio de texto del complemento (my-plugin) y el idioma local ( fr_FR), siempre nombra tus archivos .po para complementos como este: [textdomain] - [locale] .po , aquí hay algunos ejemplos:

  • Italiano / Italia: wpcf7-it_IT.po
  • Portugués / Brasil: wpcf7-pt_BR.po
  • Árabe: wpcf7-ar.po... ¡Sí!

Siempre que el complemento se actualice con texto nuevo, actualice el archivo po, traduzca nuevas cadenas y vuelva a cargar los archivos .po y .mo

3. Indique al complemento que cargue el texto traducido para el idioma actual

En algún lugar de su complemento, debe decirle a WordPress que use su archivo .mo, puede hacerlo usando este código al comienzo de su archivo de complemento:

function my_plugin_init() {
  load_plugin_textdomain( 'my-plugin', false, 'my-plugin/languages' );
}
add_action('init', 'my_plugin_init');

Reemplace my-plugincon el nombre de su complemento en el primer y tercer parámetro de la load_plugin_textdomainfunción.

4. Prueba y solución de problemas

Algunas razones pueden no funcionar:

  • Las cadenas no se importan al archivo .pot o .po
    • → Configuración de catálogo incorrecta (ruta o palabras clave o ambas)
  • El texto no está traducido en el sitio de WordPress
    • → Falta el archivo .mo para ese idioma o tiene un nombre de archivo incorrecto
    • → Dominio de texto no utilizado (reemplazar _e('my text')con _e('my text', 'my-plugin'))
    • → El dominio de texto no está cargado (use el ejemplo anterior con los parámetros correctos, WP no le advertirá sobre los errores)
Nabil Kadimi
fuente
3
+1 Buena redacción :) Eche un vistazo a este artículo: Carga de archivos de idioma de WordPress de la manera correcta , " Pautas prácticas para aliviar el dolor de cargar archivos de idioma en WordPress ". :::::: Glotpress y la Polyglots grupo puede valer la pena mencionar también.
brasofilo
¡Gracias por esta buena instrucción! Vale la pena mencionar que load_plugin_textdomain () necesita ser llamado en todos los métodos, donde usa _e () y __ ()
Andreas
2

La respuesta de Nabil es bastante completa, pero se proporciona una variación fácil:

  1. Su complemento está en el repositorio de complementos de WordPress.org

  2. Estás dispuesto a exigir que tu complemento solo funcione con WordPress 4.6 o superior.

Los pasos son estos:

  1. En el archivo readme.txt de su complemento, agregue Requires at least: 4.6. Ver https://developer.wordpress.org/plugins/wordpress-org/how-your-readme-txt-works/

  2. si aún no lo está, suba su complemento al repositorio de complementos de WordPress. Ver https://wordpress.org/plugins/developers/add/ .

  3. Encuentra el dominio slug / text de tu complemento. Para hacer eso, vaya a la página de su complemento en el repositorio de complementos de WordPress. La URL será como https://wordpress.org/plugins/your-plugin-slug/ . La última parte de la URL, "your-plugin-slug", es la babosa de su complemento. Eso es lo que usa para el dominio de texto de las funciones de traducción.

  4. Use las funciones de traducción de WordPress en su complemento (como __e(‘hello’, ‘my-plugin-domain’);). Solo asegúrese de usar el dominio de texto de complemento correcto, adquirido en el paso anterior. Consulte https://developer.wordpress.org/plugins/internationalization/how-to-internationalize-your-plugin/ para obtener más información.

Si sigue los pasos anteriores, WordPress se encargará de:

  • Analizando su Plugin para todas las cadenas traducibles (no es necesario instalar y ejecutar Poedit ni nada)
  • Haga que sea fácil para cualquier persona contribuir con traducciones de su complemento en translate.wordpress.org (no es necesario tener su propio sitio dedicado a traducir su complemento o tener un proceso personalizado para que los traductores le envíen sus traducciones)
  • cuando alguien usa su complemento, WordPress se encargará de verificar si está traducido a su idioma y, de ser así, mostrarlo en su idioma (no es necesario para ellos o para usted cargar los archivos de traducción en su sitio web)

(Respuesta de mi blog aquí: https://cmljnelson.blog/2019/01/01/the-really-lazy-way-to-translate-a-wordpress-plugin/ )

thespacecamel
fuente
No estoy seguro de por qué esto fue rechazado. Es lo que he hecho para que wordpress.org/plugins/print-my-blog esté listo para la traducción (y el complemento se ha traducido correctamente)
thespacecamel
¿Eso significa que si un plugin / tema no está en el repositorio de plugins de WordPress pero usa el dominio de texto de un plugin allí, wordpress cargaría los archivos de traducción incorrectos?
Bodo
Buena pregunta @bodo. Si un complemento indica que debe usar el dominio de texto de otro complemento que se encuentra en el repositorio de wp.org, creo que WordPress usará felizmente los archivos de traducción del complemento wp.org. Pero lo siento, no estoy seguro.
thespacecamel