El dominio de texto del tema y el archivo language.PO no funcionan

10 mar 2014, 08:14:57
Vistas: 30.3K
Votos: 2

No puedo hacer que funcionen las traducciones en mi tema. Esto es lo que tengo

En functions.php, tengo:

load_theme_textdomain( 'transparent', get_template_directory_uri() .'/languages' );

Tengo

.../theme/languages/transparent-en_US.po,

que contiene:

# Traducciones al inglés para el paquete Transparent.
# Copyright (C) 2014 Steven Doig
# Este archivo se distribuye bajo la misma licencia que el paquete Transparent.
# Generado automáticamente, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: my-pluginname 1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-08-06 13:46-0400\n"
"PO-Revision-Date: 2013-03-21 11:20+0400\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"X-Poedit-SourceCharset: iso-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 1.5.4\n"


#: header.php:58
msgid "thanks-for-visiting"
msgstr "¡Hola! Gracias por visitarnos. Échale un vistazo y suscríbete al "

#: header.php:60
msgid "subscribe-by-email"
msgstr "suscríbete por email"

#: header.php:62
msid "for-updates"
msgstr "para actualizaciones."

En header.php, desde la línea 58 tengo:

<p><?php echo __("thanks-for-visiting", 'transparent'); ?><a href="<?php bloginfo('rss2_url'); ?>" title="<?php bloginfo('name'); ?> RSS feed">RSS feed</a> 
    <?php if (of_get_option('feedburner', '') !== '') {?>
        or <a href="http://feedburner.google.com/fb/a/mailverify?uri=<?php echo of_get_option('feedburner', 'no entry');?>&amp;loc=en_US" target="_blank"><?php echo __("subscribe-by-email", 'transparent'); ?></a> 
    <?php } ?>
    <?php echo __("for-updates", 'transparent'); ?></p>

En mi style.css tengo lo siguiente

/*
Theme Name: Transparent
Theme URI: http://websitetechnology.com.au/category/themes/transparent/
Description: Tema responsive de dos columnas Transparent.
Tags: green, two-columns, right-sidebar
Author: Steven Doig
Author URI: http://tech.doig.com.au
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Version: 1.2
*/

Sin embargo, en el frontend, veo:

thanks-for-visitingRSS feed for-updates

¿Pueden ver por qué no está funcionando esta traducción?

1
Comentarios

Solo me comunico para ver si tu problema se ha resuelto. Si fue usando mi solución, por favor acepta mi respuesta si te ayudó, si no, házmelo saber

Pieter Goosen Pieter Goosen
17 mar 2014 12:42:21
Todas las respuestas a la pregunta 3
1
14

Después de inspeccionar tu tema, esto es lo que encontré. He tomado la libertad de incluir también la solución de Ruben para que esta respuesta sea lo más completa posible.

Hay varios problemas aquí:

Número 1. load_theme_textdomain( 'transparent', get_template_directory_uri() .'/languages' );

debería ser:

    function transparent_theme_setup() {
    load_theme_textdomain( 'transparent', get_template_directory() . '/languages' );

    $locale = get_locale();
    $locale_file = get_template_directory() . "/languages/$locale.php";

    if ( is_readable( $locale_file ) ) {
        require_once( $locale_file );
    }
}
add_action( 'after_setup_theme', 'transparent_theme_setup' );

Los archivos de idioma siempre deben llamarse en el hook after_setup_theme.

Además, get_template_directory_uri()

debería ser

get_template_directory().

Número 2. <?php echo __("thanks-for-visiting", 'transparent'); ?>.

está totalmente mal. En primer lugar, nunca uses " en una cadena de traducción. El traductor no lo reconocerá y omitirá esa cadena. Siempre usa '. En segundo lugar, no uses echo con una cadena. En este caso se debe usar _e. Así que tu cadena debería verse así: <?php _e('thanks-for-visiting', 'transparent'); ?>.

Número 3. No hay un dominio de texto establecido en la cabecera de tu hoja de estilos. Agrega Text Domain: transparent justo antes del cierre */ en tu cabecera. Así que tu cabecera debería verse así:

/*
Theme Name: Transparent
Theme URI: http://websitetechnology.com.au/category/themes/transparent/
Description: Tema responsive de dos columnas Transparent.
Tags: verde, dos-columnas, barra-lateral-derecha
Author: Steven Doig
Author URI: http://tech.doig.com.au
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Version: 1.2
Text Domain: transparent
*/

Número 4. La nomenclatura de tu archivo po es incorrecta, al igual que tu archivo mo. somename-en_US.po y somename-en_US.mo solo son usados por plugins. Los temas usan únicamente los nombres de archivo en_US.po y en_US.mo.

Número 5. Tu archivo po está creado incorrectamente. Para crear un archivo po con poedit, sigue los siguientes pasos. Ten en cuenta que mi poedit está en afrikáans.

Abre poedit y selecciona la opción para crear un catálogo. Aparecerá la siguiente pantalla:

imagen1.

Completa los campos requeridos como se muestra.

Ahora haz clic en la pestaña "Sources paths" y completa como se muestra. Usa . en el campo "Paths" si tu archivo de idioma está en el directorio principal, y usa .. si el archivo de idioma está en una carpeta como languages.

imagen2

Ahora haz clic en la pestaña "Sources keywords" y completa como se muestra.

imagen3

Ahora guarda el archivo poedit como en_US.po en tu carpeta de idiomas. Es importante que guardes el archivo po directamente en la ubicación donde debe estar, de lo contrario no funcionará. Poedit ahora buscará y agregará todas las cadenas para traducción a tu archivo po. Un archivo mo se creará automáticamente cuando se guarde el archivo po.

Al final, el encabezado de tu archivo po debería verse así:

 msgid ""
msgstr ""
"Project-Id-Version: Transparent v1.2\n"
"POT-Creation-Date: 2014-03-12 16:25+0200\n"
"PO-Revision-Date: 2014-03-12 16:28+0200\n"
"Last-Translator: Pieter Goosen <goosen_p@yahoo.com>\n"
"Language-Team: Transparent <sample@example.com>\n"
"Language: en\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.5.5\n"
"X-Poedit-KeywordsList: gettext;gettext_noop;__;_e;_n:1,2;_x:1,2c;_ex:1,2c\n"
"X-Poedit-Basepath: .\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-SearchPath-0: ..\n"

Para más información, revisa este tutorial. Realmente me ayudó cuando comencé con las traducciones. Espero que esto te sea útil.

12 mar 2014 17:24:27
Comentarios

En mi caso, esta fue la parte esencial: Los archivos de idioma siempre deben cargarse en el hook after_setup_theme. Solía configurarlos en init pero ya no funciona.

Attila Fulop Attila Fulop
17 feb 2016 13:58:04
6

No utilices get_template_directory_uri(). Usa get_template_directory() en su lugar. Tu código debería verse así:

    load_theme_textdomain( 'transparent', get_template_directory() . '/languages' );

    $locale = get_locale();
    $locale_file = get_template_directory() . "/languages/$locale.php";

    if ( is_readable( $locale_file ) ) {
        require_once( $locale_file );
    }
10 mar 2014 17:25:07
Comentarios

Gracias @Ruben. Hice este cambio pero el problema persiste.

Steve Steve
11 mar 2014 04:18:18
  1. Asegúrate de agregar ese código dentro de un filtro after_setup_theme.

  2. Prueba usando este plugin, puede mostrar si hay un error con tus archivos .po/.mo: http://wordpress.org/plugins/codestyling-localization/

Ruben Bristian Ruben Bristian
11 mar 2014 09:16:10
  1. Agregué el código anterior en una función llamada transparent_theme_setup(), y luego llamé add_action( 'after_setup_theme', 'transparent_theme_setup' );. ¿Es esto lo que quieres decir? 2. El plugin Codestyling muestra que no hay error con los archivos .po/.mo.
Steve Steve
12 mar 2014 07:44:27

@Steve, eso es correcto.

Pieter Goosen Pieter Goosen
12 mar 2014 08:15:00

Ok. Bueno, el problema persistió después de hacer eso.

Steve Steve
13 mar 2014 09:22:12

Gracias. Los mejores pasos para lograr i18n

Nephelococcygia Nephelococcygia
8 mar 2022 12:23:38
Mostrar los 1 comentarios restantes
0

Al usar load_theme_textdomain, el nombre de tu archivo de idioma debe basarse exactamente en el locale. Nómbralo en_US.mo en lugar de transparent-en_US.mo

Lee las instrucciones cuidadosamente en: https://codex.wordpress.org/Function_Reference/load_theme_textdomain

3 sept 2015 18:43:29