El dominio del texto y el idioma del tema. El archivo PO no funciona

2

No puedo hacer que mis traducciones funcionen en mi tema. Aquí está 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:

# English translations for Transparent package.
# Copyright (C) 2014 Steven Doig
# This file is distributed under the same license as the Transparent package.
# Automatically generated, 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 "Hello!  Thank you for visiting.  Take a look around and subscribe to the "

#: header.php:60
msgid "subscribe-by-email"
msgstr "subscribe by email"

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

En header.php, de 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: Transparent responsive two-column theme.
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 front end , veo:

  

gracias por visitar RSS feed para actualizaciones

¿Puedes ver por qué esta traducción no funciona?

    
pregunta Steve 10.03.2014 - 07:14

3 respuestas

10

Después de inspeccionar tu tema, esto es lo que se me ocurrió. Me 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 gancho after_setup_theme .

También get_template_directory_uri()

debería ser

get_template_directory() .

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

está totalmente equivocado. En primer lugar, nunca utilice " en una cadena de traducción. El traductor no lo reconoce y saltará esa cadena. Siempre use ' . En segundo lugar, no haga echo una cadena con echo . _e debe usarse en este caso. Así que su cadena debe verse así: <?php _e('thanks-for-visiting', 'transparent'); ?> .

Número 3. No hay un dominio de texto configurado en el encabezado de la hoja de estilo. Agregue Text Domain: transparent justo arriba del */ de cierre en su encabezado. Así que su encabezado debería verse así:

/*
Theme Name: Transparent
Theme URI: http://websitetechnology.com.au/category/themes/transparent/
Description: Transparent responsive two-column theme.
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
Text Domain: transparent
*/

Número 4. La denominación de tu archivo po es incorrecta, por lo que debería ser tu archivo mo. somename-en_US.po y somename-en_US.mo solo lo usan los complementos. Los temas usan solo los nombres de archivo en_US.po y en_US.mo

Número 5. Tu archivo po está mal creado. Para crear un archivo po con poedit , siga los siguientes pasos. Tenga en cuenta que mi poedit está en afrikaans.

Abra poedit y seleccione la opción para crear un catálogo. Aparecerá la siguiente pantalla

.

Relleneloscamposrequeridoscomosemuestra.

Ahorahagaclicenlapestaña"Orígenes de ruta" y complete como se muestra. Use . en el campo "Rutas" si su archivo de idioma está en el directorio principal, y use .. si el archivo de idioma está en una carpeta como el idioma

Ahorahagaclicenlapestaña"Palabras clave de las fuentes" y complete como se muestra.

Ahoraguardeelarchivopoeditcomoen_US.poensuarchivodeidiomas.Esimportantequeguardeelarchivopodirectamenteenlaubicacióndondedebeestar,delocontrarionofuncionará.Poeditahorabuscaráyagregarátodaslascadenasdetraducciónasuarchivopo.Unarchivomosecreaautomáticamentecuandoseguardaelarchivopo.

Alfinal,elencabezadopodeberíateneresteaspecto

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, consulte este tutorial. Realmente me ayudó cuando empecé en las traducciones. Espero que esto ayude.

    
respondido por el Pieter Goosen 12.03.2014 - 16:24
3

No uses get_template_directory_uri () . Utilice get_template_directory () en su lugar. Tu código debería tener este aspecto:

    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 );
    }
    
respondido por el Ruben Bristian 10.03.2014 - 16:25
1

Cuando use load_theme_textdomain , su nombre de archivo de idioma debe nombrarse según la configuración regional exactamente. Asígnele el nombre en_US.mo en lugar de transparent-en_US.mo

Lea las instrucciones cuidadosamente en: enlace

    
respondido por el MegaWork 03.09.2015 - 17:43

Lea otras preguntas en las etiquetas