wake-up-neo.com

Wie bekomme ich einen übersetzten String?

Ich wanderte ... Alle Übersetzungsfunktionen (__(), _e(), _x() und so weiter) verwenden die aktuelle/aktive Sprache. Gibt es eine Möglichkeit, eine Übersetzung aus einer anderen als der aktuellen Sprache zu erhalten? Ich bin zum Beispiel auf einer französischen Seite und möchte eine englische Übersetzung: wie geht das?

8
Luca Reghellin

Dank J.D. kam ich zu folgendem Code:

function __2($string, $textdomain, $locale){
  global $l10n;
  if(isset($l10n[$textdomain])) $backup = $l10n[$textdomain];
  load_textdomain($textdomain, get_template_directory() . '/languages/'. $locale . '.mo');
  $translation = __($string,$textdomain);
  if(isset($bkup)) $l10n[$textdomain] = $backup;
  return $translation;
}


function _e2($string, $textdomain, $locale){
  echo __2($string, $textdomain, $locale);
}

Nun, ich weiß, es sollte nicht so sein, wie in diesem berühmten Artikel beschrieben:

http://ottopress.com/2012/internationalization-youre-probably-doing-it-wrong/

Aber ich weiß nicht, dass es funktioniert ... Und Bonus: Sagen wir, Sie möchten es in admin verwenden, weil die Admin-Sprache x ist, aber Sie möchten Daten in lang y abrufen/speichern und Sie verwenden polylang . Ihr Administrator ist also Englisch, aber Sie befinden sich in der spanischen Übersetzung eines Posts und müssen spanische Daten aus Ihren Gebietsschemas abrufen:

global $polylang;
$p_locale = $polylang->curlang->locale; // will be es_ES
_e2('your string', 'yourtextdomain', $p_locale)
0
Luca Reghellin

Um die Antwort auf diese Frage zu finden, müssen Sie sich nur ansehen, wie WordPress die Übersetzungen abruft. Letztendlich ist es die Funktion load_textdomain() , die dies tut. Wenn wir uns die Quelle ansehen, stellen wir fest, dass sie ein MO-Objekt erstellt und die Übersetzungen aus einer .mo-Datei in sie lädt. Dann speichert es dieses Objekt in einer globalen Variablen mit dem Namen $l10n, die ein von textdomain codiertes Array ist.

Um ein anderes Gebietsschema für eine bestimmte Domain zu laden, müssen wir nur load_textdomain() mit dem Pfad zur .mo -Datei für dieses Gebietsschema aufrufen:

$textdomain = 'your-textdomain';

// First, back up the default locale, so that we don't have to reload it.
global $l10n;

$backup = $l10n[ $textdomain ];

// Now load the .mo file for the locale that we want.
$locale  = 'en_US';
$mo_file = $textdomain . '-' . $locale . '.mo';

load_textdomain( $textdomain, $mo_file );

// Translate to our heart's content!
_e( 'Hello World!', $textdomain );

// When we are done, restore the translations for the default locale.
$l10n[ $textdomain ] = $backup;

Um herauszufinden, welche Logik WordPress verwendet, um zu bestimmen, wo nach der .mo-Datei für ein Plugin gesucht werden soll (z. B. wie das aktuelle Gebietsschema abgerufen wird), werfen Sie einen Blick auf die Quelle von load_plugin_textdomain() .

2
J.D.