Il text domain del tema e il file language.PO non funzionano
Non riesco a far funzionare le traduzioni nel mio tema. Ecco cosa ho fatto:
Nel file functions.php, ho:
load_theme_textdomain( 'transparent', get_template_directory_uri() .'/languages' );
Ho il file
.../theme/languages/transparent-en_US.po,
che contiene:
# Traduzioni inglesi per il pacchetto Transparent.
# Copyright (C) 2014 Steven Doig
# Questo file è distribuito con la stessa licenza del pacchetto Transparent.
# Generato automaticamente, 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."
In header.php, dalla riga 58 ho:
<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>
Nel mio style.css ho quanto segue
/*
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
*/
Tuttavia, nel front-end, vedo:
thanks-for-visitingRSS feed for-updates
Riuscite a capire perché questa traduzione non funziona?

Dopo aver esaminato il tuo tema, ecco cosa ho trovato. Ho incluso anche la soluzione di Ruben per rendere questa risposta il più completa possibile.
Ci sono diversi problemi qui:
Numero 1. load_theme_textdomain( 'transparent', get_template_directory_uri() .'/languages' );
dovrebbe essere:
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' );
I file di lingua devono sempre essere chiamati nell'hook after_setup_theme
.
Inoltre get_template_directory_uri()
dovrebbe essere
get_template_directory()
.
Numero 2. <?php echo __("thanks-for-visiting", 'transparent'); ?>
.
è completamente sbagliato. Innanzitutto, non usare mai "
in una stringa di traduzione. Il traduttore non la riconoscerà e salterà quella stringa. Usa sempre '
. In secondo luogo, non usare echo
per una stringa. In questo caso dovresti usare _e
. Quindi la tua stringa dovrebbe essere così:
<?php _e('thanks-for-visiting', 'transparent'); ?>
.
Numero 3. Non c'è un dominio di testo impostato nell'intestazione del tuo foglio di stile. Aggiungi Text Domain: transparent
appena sopra la chiusura */
nell'intestazione. Quindi l'intestazione dovrebbe essere così:
/*
Theme Name: Transparent
Theme URI: http://websitetechnology.com.au/category/themes/transparent/
Description: Tema responsive a due colonne con design trasparente.
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
*/
Numero 4. La denominazione del tuo file po è sbagliata, e così dovrebbe essere anche per il file mo. nomedeltema-en_US.po
e nomedeltema-en_US.mo
sono usati solo dai plugin. I temi usano solo i nomi file en_US.po
e en_US.mo
Numero 5. Il tuo file po è stato creato in modo errato. Per creare un file po con poedit, segui questi passaggi. Nota che il mio poedit è in Afrikaans.
Apri poedit e seleziona l'opzione per creare un catalogo. Apparirà la seguente schermata
.
Compila i campi richiesti come mostrato.
Ora clicca sulla scheda "Sources paths" e completa come mostrato. Usa .
nel campo "Paths" se il tuo file di lingua è nella directory principale, e usa ..
se il file di lingua è in una cartella come languages
Ora clicca sulla scheda "Sources keywords" e compila come mostrato.
Ora salva il file poedit come en_US.po
nella tua cartella languages. È importante che salvi il file po direttamente nella posizione dove deve stare, altrimenti non funzionerà. Poedit ora cercherà e aggiungerà tutte le stringhe da tradurre al tuo file po. Un file mo viene creato automaticamente quando il file po viene salvato.
Alla fine, l'intestazione del tuo file po dovrebbe essere così
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"
Per ulteriori letture, consulta questo tutorial. Mi è stato davvero utile quando ho iniziato con le traduzioni. Spero che questo ti aiuti.

Non utilizzare get_template_directory_uri(). Usa invece get_template_directory(). Il tuo codice dovrebbe assomigliare a questo:
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 );
}

-
Assicurati di aggiungere quel codice all'interno di un filtro after_setup_theme.
-
Prova a utilizzare questo plugin, potrebbe mostrare se c'è un errore con i tuoi file .po/.mo: http://wordpress.org/plugins/codestyling-localization/

- Ho aggiunto il codice sopra in una funzione chiamata
transparent_theme_setup()
, e poi ho chiamatoadd_action( 'after_setup_theme', 'transparent_theme_setup' );
. È questo che intendevi? 2. Il plugin Codestyling mostra che non ci sono errori con i file .po/.mo.

Quando utilizzi load_theme_textdomain
, il nome del tuo file di lingua deve corrispondere esattamente al locale.
Denominalo en_US.mo invece di transparent-en_US.mo
Leggi attentamente le istruzioni su: https://codex.wordpress.org/Function_Reference/load_theme_textdomain
