Il text domain del tema e il file language.PO non funzionano

10 mar 2014, 08:14:57
Visualizzazioni: 30.3K
Voti: 2

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');?>&amp;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?

1
Commenti

Sto solo controllando per vedere se il tuo problema è stato risolto. Se la mia soluzione ti ha aiutato, per favore accettala, altrimenti fammi sapere

Pieter Goosen Pieter Goosen
17 mar 2014 12:42:21
Tutte le risposte alla domanda 3
1
14

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

Schermata iniziale di poedit.

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

Configurazione dei percorsi in poedit

Ora clicca sulla scheda "Sources keywords" e compila come mostrato.

Configurazione delle parole chiave in poedit

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.

12 mar 2014 17:24:27
Commenti

Nel mio caso questa era la parte essenziale: I file di lingua devono sempre essere caricati nell'hook after_setup_theme. Io li caricavo in init ma non funziona più.

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

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 );
    }
10 mar 2014 17:25:07
Commenti

Grazie @Ruben. Ho apportato questa modifica ma il problema persiste.

Steve Steve
11 mar 2014 04:18:18
  1. Assicurati di aggiungere quel codice all'interno di un filtro after_setup_theme.

  2. Prova a utilizzare questo plugin, potrebbe mostrare se c'è un errore con i tuoi file .po/.mo: http://wordpress.org/plugins/codestyling-localization/

Ruben Bristian Ruben Bristian
11 mar 2014 09:16:10
  1. Ho aggiunto il codice sopra in una funzione chiamata transparent_theme_setup(), e poi ho chiamato add_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.
Steve Steve
12 mar 2014 07:44:27

@Steve, è corretto.

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

Ok. Il problema è rimasto dopo averlo fatto.

Steve Steve
13 mar 2014 09:22:12

Grazie. Migliori passaggi per implementare l'i18n

Nephelococcygia Nephelococcygia
8 mar 2022 12:23:38
Mostra i restanti 1 commenti
0

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

3 set 2015 18:43:29