web-dev-qa-db-fra.com

Le domaine texte et le fichier language.PO du thème ne fonctionnent pas

Je ne parviens pas à faire traduire mes traductions dans mon thème. Voici ce que j'ai

Dans functions.php, j'ai:

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

J'ai

.../thème/langues/transparent-en_US.po,

qui contient:

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

Dans header.php, à partir de la ligne 58, j'ai:

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

Dans mon style.css j'ai le suivant

/*
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
*/

Cependant, sur le front end , je vois:

merci de visiterRSS flux pour les mises à jour

Pouvez-vous voir pourquoi cette traduction ne fonctionne pas?

2
Steve

Après avoir inspecté votre thème, voici ce que j’ai trouvé. J'ai pris la liberté d'inclure également la solution de Ruben pour que cette réponse soit aussi complète que possible.

Il y a plusieurs problèmes ici:

Numéro 1. load_theme_textdomain( 'transparent', get_template_directory_uri() .'/languages' );

devrait être:

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

Les fichiers de langue doivent toujours être appelés dans le hook after_setup_theme.

Aussi get_template_directory_uri()

devrait être

get_template_directory().

Numéro 2. <?php echo __("thanks-for-visiting", 'transparent'); ?>.

est totalement faux. Premièrement, n'utilisez jamais " dans une chaîne de traduction. Le traducteur ne le reconnaît pas et saute cette chaîne. Toujours utiliser '. Deuxièmement, ne pas echo une chaîne avec echo. _e devrait être utilisé dans ce cas. Votre chaîne devrait donc ressembler à ceci: <?php _e('thanks-for-visiting', 'transparent'); ?>.

Numéro 3. Il n'y a pas de domaine de texte défini dans l'en-tête de votre feuille de style. Ajoutez Text Domain: transparent juste au-dessus du */ de clôture dans votre en-tête. Donc, votre en-tête devrait ressembler à ceci:

/*
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
*/

Numéro 4. Le nom de votre fichier po est incorrect, votre fichier mo devrait l'être également. somename-en_US.po et somename-en_US.mo est uniquement utilisé par les plugins. Les thèmes utilisent uniquement les noms de fichiers en_US.po et en_US.mo

Numéro 5. Votre fichier po est créé à tort. Pour créer un fichier po avec poedit , procédez comme suit. S'il vous plaît noter que mon poedit est en afrikaans.

Ouvrez poedit et sélectionnez l'option permettant de créer un catalogue. L'écran suivant va apparaitre

image1.

Remplissez les champs obligatoires comme indiqué.

Maintenant, cliquez sur l'onglet "Chemins de sources" et complétez comme indiqué. Utilisez . dans le champ "Chemins" si votre fichier de langue se trouve dans le répertoire principal, et .. si le fichier de langue se trouve dans un dossier similaire à language

image2

Maintenant, cliquez sur l'onglet "Mots clés sources" et remplissez comme indiqué.

image3

Enregistrez maintenant le fichier poedit au format en_US.po dans votre fichier de langues. Il est important d’enregistrer le fichier po directement à l’emplacement où il doit se trouver, sinon cela ne fonctionnera pas. Poedit va maintenant rechercher et ajouter toutes les chaînes pour la traduction dans votre fichier po. Un fichier mo est automatiquement créé lors de l’enregistrement du fichier po.

A la fin, votre en-tête de commande devrait ressembler à ceci

 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 <[email protected]>\n"
"Language-Team: Transparent <[email protected]>\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"

Pour en savoir plus, consultez this tutorial. Cela m'a vraiment aidé lorsque j'ai commencé la traduction. J'espère que cela t'aides.

11
Pieter Goosen

N'utilisez pas get_template_directory_uri () . Utilisez get_template_directory () à la place. Votre code devrait ressembler à ceci:

    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 );
    }
3
Ruben Bristian

Lorsque vous utilisez load_theme_textdomain, votre nom de fichier de langue doit être nommé en fonction des paramètres régionaux. Nommez-leen_US.moau lieu detransparent-en_US.mo

Lisez attentivement les instructions sur: https://codex.wordpress.org/Function_Reference/load_theme_textdomain

1
MegaWork