web-dev-qa-db-fra.com

Comment obtenir une chaîne traduite d'une langue autre que la langue actuelle?

Je me promenais ... Toutes les fonctions de traduction (__(), _e(), _x() et ainsi de suite) utilisent la langue actuelle/active. Existe-t-il un moyen d'obtenir une traduction dans une autre langue que la version actuelle? Par exemple, je suis sur une page française et je veux une traduction anglaise: comment faire?

8
Luca Reghellin

Donc, grâce à J.D., j'ai finalement obtenu ce 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);
}

Maintenant, je sais que cela ne devrait pas être, comme dans cet article célèbre:

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

Mais, je ne sais pas, cela fonctionne ... Et bonus: dites que vous voulez l'utiliser dans admin, parce que la langue de l'administrateur est x, mais que vous voulez obtenir/sauvegarder des données dans lang y, et que vous utilisez polylang . Donc, c’est-à-dire que votre administrateur est anglais, mais que vous êtes sur la traduction espagnole d’un message et que vous devez obtenir des données en espagnol à partir de vos paramètres régionaux de thème:

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

Pour trouver la réponse à cette question, il vous suffit de regarder comment WordPress récupère les traductions. En fin de compte, c’est la fonction load_textdomain() qui le fait. Lorsque nous examinons sa source, nous constatons qu'il crée un objet MO et charge les traductions d'un fichier .mo dans celui-ci. Ensuite, il stocke cet objet dans une variable globale appelée $l10n, qui est un tableau indexé par textdomain.

Pour charger un environnement local différent pour un domaine particulier, il suffit d'appeler load_textdomain() avec le chemin d'accès au fichier .mo pour cet environnement local:

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

Pour connaître la logique utilisée par WordPress pour déterminer où chercher le fichier .mo pour un plug-in (par exemple, comment obtenir les paramètres régionaux en cours), consultez la source de load_plugin_textdomain() .

2
J.D.