Cómo encontrar traducciones que faltan en su plugin o tema de WordPress

Si algunas partes de su plugin o tema aparecen sin traducir después de usar PTC, utilice esta guía para comprobar si la cadena forma parte de su proyecto y si WordPress está cargando el archivo correcto.

Compruebe si la cadena está disponible en PTC

Desde el panel de control de PTC, vaya a la pestaña Traducciones y busque la cadena original. Si no la ve, PTC no la ha recibido. Esto suele significar una de las siguientes cosas:

  • La cadena falta en su archivo POT

Si su archivo POT no incluye todas las cadenas traducibles, vuelva a crearlo utilizando WP-CLI. A continuación, siga los pasos de nuestra guía de internacionalización de temas y plugins de WordPress desde el principio.

  • El texto no está envuelto en una función GetText

Asegúrese de que todo el texto traducible esté envuelto en __() o _e() y utilice el dominio de texto correcto.

Ejemplo:

__('Hello, world!', 'your-plugin');

Para obtener más detalles, consulte el Paso 2 de nuestra guía de traducción de temas y plugins de WordPress.

  • Las cadenas de JavaScript no se marcaron como traducibles

Si su plugin incluye texto traducible en JavaScript:

  1. Vaya a PTC → Ajustes y haga clic en Archivos supervisados. Edite el archivo de recursos correspondiente y active “¿Es este un proyecto de WordPress con JavaScript localizable?”
Cómo indicar a PTC que su producto incluye texto traducible en Javascript

Esto indica a PTC que escanee los archivos JavaScript en busca de cadenas traducibles. Regenerará las traducciones y creará una nueva solicitud de combinación con los archivos actualizados.

  1. Asegúrese de que WordPress sepa dónde cargar los archivos de traducción .json creados por PTC.

Si los archivos .json se colocan dentro del directorio /languages/ de su plugin o tema, llame a wp_set_script_translations() con la ruta correcta.

Para plugins:

wp_set_script_translations( 'script-handle', 'text-domain', plugin_dir_path( __FILE__ ) . 'languages' );

Para temas:

wp_set_script_translations( 'script-handle', 'text-domain', get_template_directory() . '/languages' );

Esto indica explícitamente a WordPress que cargue los archivos .json desde la carpeta de su plugin o tema.

Confirme que WordPress está cargando sus archivos de traducción

Si la cadena traducida aparece en PTC pero sigue sin mostrarse en su plugin, es posible que WordPress no esté cargando el archivo de traducción correcto. Compruebe lo siguiente:

  • El dominio de texto se carga correctamente

Si está utilizando plugins integrados o varios dominios, asegúrese de que cada uno se carga utilizando load_plugin_textdomain() o load_theme_textdomain().

  • Las traducciones de PTC no se están sobrescribiendo

De forma predeterminada, WordPress da prioridad a los archivos de traducción en /wp-content/languages/. Si su plugin o tema tiene traducciones creadas por la comunidad de WordPress, pueden sobrescribir sus archivos .mo incluidos.

Para asegurarse de que WordPress carga sus archivos .mo en su lugar, aplique el filtro load_textdomain_mofile.

Ejemplo de uso para plugins

Añada la función de filtro al archivo PHP principal de su plugin (por ejemplo, my-plugin.php):

function my_plugin_load_embedded_translation_file( $mofile, $domain ) {
  // Replace 'my-domain' with your actual plugin's text domain
	if ( 'my-domain' === $domain && false !== strpos( $mofile, WP_LANG_DIR . '/plugins/' ) ) {
		$locale = apply_filters( 'plugin_locale', determine_locale(), $domain );
		$local_mofile = WP_PLUGIN_DIR . '/' . dirname( plugin_basename( __FILE__ ) ) . '/languages/' . $domain . '-' . $locale . '.mo';
		
		if ( file_exists( $local_mofile ) ) {
			return $local_mofile; // Use bundled translation if available
		}		
	}
	return $mofile;
}
add_filter( 'load_textdomain_mofile', 'my_plugin_load_embedded_translation_file', 10, 2 );

Ejemplo de uso para temas

Añada la función de filtro en el archivo functions.php de su tema:

function my_theme_load_embedded_translation_file( $mofile, $domain ) {
    // Replace 'my-domain' with your actual theme's text domain
    if ( 'my-domain' === $domain && false !== strpos( $mofile, WP_LANG_DIR . '/themes/' ) ) {
        $locale = apply_filters( 'theme_locale', determine_locale(), $domain );
        $local_mofile = get_template_directory() . '/languages/' . $locale . '.mo';
        
        if ( file_exists( $local_mofile ) ) {
            return $local_mofile; // Use bundled translation if available
        }
    }
    return $mofile;
}
add_filter( 'load_textdomain_mofile', 'my_theme_load_embedded_translation_file', 10, 2 );

Asegúrese de que la nomenclatura del archivo MO coincide con las expectativas de WordPress

WordPress espera diferentes convenciones de nomenclatura para los archivos .mo dependiendo de dónde los almacene.

  • Si sus archivos de traducción están dentro de la carpeta de su tema, utilice:

{locale}.mo
Ejemplo
: de_DE.mo (junto con de_DE.po)

  • Si colocó los archivos en el directorio global de idiomas de WordPress (wp-content/languages/themes/), utilice:

{text-domain}-{locale}.mo
Ejemplo
: my-theme-de_DE.mo (junto con my-theme-de_DE.po)

Ir arriba