1. Escribe con la localización en mente
No use echo
o print()
para producir resultados 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án 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ás para decirle a WordPress que el texto provisto como primer parámetro pertenece a este complemento, puedes usar el nombre que desees, pero prefiero Usar el mismo nombre que usé para el archivo de plugin del directorio, lo encuentro más intuitivo.
Cómo generar un texto dinámico como: "Hola < username >"?
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 : lo pone a su disposición 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 o alguien más inició, y quizás haya completado, WordPress no lo usa.
-
A.mo file : Poedit lo 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
- Caminos:
- Ruta base:
.
- Rutas: eliminar todos & agregue
..
, (almacenaremos el archivo de idioma en un subdirectorio de plugin llamado idiomas)
- Palabras clave: eliminar todo & agregar
__
y _e
Guarde el catálogo como /my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin.pot
y escanee sus archivos de complementos en busca de texto traducible presionando el botón de actualización. Cuando la actualización haya terminado, cierre ese catálogo, no necesitará actualizar ese archivo a menos que agregue nuevas cadenas traducibles (es decir, incluidas en __()
o _e()
) a su complemento.
Ahora vamos a crear la primera traducción (usaré fr_FR):
Utilizando Podeit , cree un catálogo desde un archivo POT
(Archivo ›Nuevo catálogo de archivo POT ...) :
- Información del proyecto: utilice 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
Guarda el catálogo como /my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin-fr_FR.po
. Traduzca algunas o todas las cadenas, guarde nuevamente el archivo .po, suba los archivos .po y .mo.
Tenga en cuenta que siempre que guarde un archivo .po, se generará un archivo .mo con el mismo nombre, el nombre del archivo .po es crucial , se compone de la concatenación del dominio de texto del complemento. (my-plugin) y la configuración regional de idioma (fr_FR), siempre asigne un nombre a sus archivos .po para los 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 se actualice el complemento con un nuevo texto, 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 tu complemento, debes decirle a WordPress que use tu archivo .mo, puedes hacerlo usando este código al principio de tu archivo de complemento:
function my_plugin_init() {
load_plugin_textdomain( 'my-plugin', false, 'my-plugin/languages' );
}
add_action('init', 'my_plugin_init');
Reemplace my-plugin
con el nombre de su complemento en el primer y tercer parámetro de la función load_plugin_textdomain
.
4. Prueba y solución de problemas
Algunas razones pueden no funcionar:
- Las cadenas no se importan en el archivo .pot o .po
- → Configuración incorrecta del catálogo (ruta o palabras clave o ambas)
- El texto no se traduce en el sitio de WordPress
- → el archivo .mo para ese idioma falta o tiene un nombre de archivo incorrecto
- → No se usa el dominio de texto (reemplace
_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)