El dominio de texto del tema y el archivo language.PO no funcionan
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');?>&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?

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:
.
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.
Ahora haz clic en la pestaña "Sources keywords" y completa como se muestra.
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.

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 );
}

-
Asegúrate de agregar ese código dentro de un filtro after_setup_theme.
-
Prueba usando este plugin, puede mostrar si hay un error con tus archivos .po/.mo: http://wordpress.org/plugins/codestyling-localization/

- 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.

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
