Domeniul de text al temei și fișierul language.PO nu funcționează

10 mar. 2014, 08:14:57
Vizualizări: 30.3K
Voturi: 2

Nu reușesc să fac traducerile să funcționeze în tema mea. Iată ce am făcut

În functions.php, am:

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

Am

.../theme/languages/transparent-en_US.po,

care conține:

# Traduceri în engleză pentru pachetul Transparent.
# Copyright (C) 2014 Steven Doig
# Acest fișier este distribuit sub aceeași licență ca pachetul Transparent.
# Generat automat, 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 "Bună! Mulțumim pentru vizită. Aruncă o privire și abonează-te la "

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

#: header.php:62
msid "for-updates"
msgstr "pentru actualizări."

În header.php, de la linia 58 am:

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

În style.css am următoarele

/*
Theme Name: Transparent
Theme URI: http://websitetechnology.com.au/category/themes/transparent/
Description: Temă responsivă Transparent cu două coloane.
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
*/

Totuși, în frontend, văd:

thanks-for-visitingRSS feed for-updates

Puteți vedea de ce această traducere nu funcționează?

1
Comentarii

Verific doar pentru a vedea dacă problema ta a fost rezolvată. Dacă a fost folosind soluția mea, te rog să o accepti dacă te-a ajutat, iar dacă nu, anunță-mă

Pieter Goosen Pieter Goosen
17 mar. 2014 12:42:21
Toate răspunsurile la întrebare 3
1
14

După ce am inspectat tema dumneavoastră, iată ce am descoperit. Am luat libertatea de a include și soluția lui Ruben pentru a face acest răspuns cât mai complet posibil.

Există mai multe probleme aici:

Numărul 1. load_theme_textdomain( 'transparent', get_template_directory_uri() .'/languages' );

ar trebui să fie:

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

Fișierele de limbă trebuie întotdeauna apelate în hook-ul after_setup_theme.

De asemenea, get_template_directory_uri()

ar trebui să fie

get_template_directory().

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

este complet greșit. În primul rând, nu folosiți niciodată " într-un șir de traducere. Translatorul nu îl recunoaște și va sări peste acel șir. Utilizați întotdeauna '. În al doilea rând, nu afișați un șir cu echo. În acest caz, ar trebui folosit _e. Deci, șirul dumneavoastră ar trebui să arate astfel: <?php _e('thanks-for-visiting', 'transparent'); ?>.

Numărul 3. Nu există niciun domeniu de text setat în antetul fișierului de stiluri. Adăugați Text Domain: transparent chiar deasupra închiderii */ din antet. Deci, antetul dumneavoastră ar trebui să arate astfel:

/*
Theme Name: Transparent
Theme URI: http://websitetechnology.com.au/category/themes/transparent/
Description: Tema transparentă responsive cu două coloane.
Tags: verde, două-coloane, bara-laterală-dreaptă
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ărul 4. Denumirea fișierului dumneavoastră po este greșită, la fel ar trebui să fie și fișierul mo. nume_oarecare-en_US.po și nume_oarecare-en_US.mo sunt folosite doar de plugin-uri. Temele folosesc doar numele de fișiere en_US.po și en_US.mo

Numărul 5. Fișierul dumneavoastră po este creat greșit. Pentru a crea un fișier po cu poedit, urmați pașii următori. Rețineți că poedit-ul meu este în afrikaans.

Deschideți poedit și selectați opțiunea de a crea un catalog. Va apărea următorul ecran

imagine1.

Completați câmpurile necesare așa cum este arătat.

Acum faceți clic pe fila "Sources paths" și completați așa cum este arătat. Folosiți . în câmpul "Paths" dacă fișierul dumneavoastră de limbă este în directorul principal, și folosiți .. dacă fișierul de limbă este într-un folder precum languages

imagine2

Acum faceți clic pe fila "Sources keywords" și completați așa cum este arătat.

imagine3

Acum salvați fișierul poedit ca en_US.po în fișierul dumneavoastră languages. Este important să salvați fișierul po direct în locația unde trebuie să fie, altfel nu va funcționa. Poedit va căuta acum și va adăuga toate șirurile pentru traducere în fișierul dumneavoastră po. Un fișier mo este creat automat când fișierul po este salvat.

La final, antetul dumneavoastră po ar trebui să arate astfel

 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"

Pentru lecturi suplimentare, consultați acest tutorial. Chiar m-a ajutat când am început cu traducerile. Sper că acest lucru vă ajută.

12 mar. 2014 17:24:27
Comentarii

În cazul meu, aceasta a fost partea esențială: Fișierele de limbă trebuie întotdeauna încărcate în hook-ul after_setup_theme. Eu le încărcam în init, dar nu mai funcționează.

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

Nu folosiți get_template_directory_uri(). Utilizați get_template_directory() în schimb. Codul vostru ar trebui să arate astfel:

    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
Comentarii

Mulțumesc @Ruben. Am făcut această modificare dar problema persistă.

Steve Steve
11 mar. 2014 04:18:18
  1. Asigură-te că ai adăugat acel cod în interiorul unui filtru after_setup_theme.

  2. Încearcă să folosești acest plugin, poate arăta dacă există o eroare cu fișierele tale .po/.mo: http://wordpress.org/plugins/codestyling-localization/

Ruben Bristian Ruben Bristian
11 mar. 2014 09:16:10
  1. Am adăugat codul de mai sus într-o funcție numită transparent_theme_setup(), apoi am apelat add_action( 'after_setup_theme', 'transparent_theme_setup' );. Asta ai vrut să spui? 2. Pluginul Codestyling arată că nu există erori cu fișierele .po/.mo.
Steve Steve
12 mar. 2014 07:44:27

@Steve, asta este corect.

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

Ok. Ei bine, problema a rămas după ce am făcut asta.

Steve Steve
13 mar. 2014 09:22:12

Mulțumesc. Cele mai bune pași pentru a obține i18n

Nephelococcygia Nephelococcygia
8 mar. 2022 12:23:38
Arată celelalte 1 comentarii
0

Când utilizați load_theme_textdomain, numele fișierului de limbă trebuie să fie denumit exact după localizare. Denumiți-l en_US.mo în loc de transparent-en_US.mo.

Citiți cu atenție instrucțiunile de la: https://codex.wordpress.org/Function_Reference/load_theme_textdomain

3 sept. 2015 18:43:29