我在wordpress中有一个字符串(英文),我知道它在.po和.mo文件中有翻译,当用该语言浏览网站时,它会显示在前端正确翻译。
但是我需要在PHP脚本中获得翻译。不是.po / .mo文件,只是翻译后的字符串。注意:我不是在谈论用当前语言显示文本。
我正在寻找一个可以提供原始字符串和语言代码的函数,并检索翻译。我需要在一个脚本/请求中为所有可用语言执行此操作 - 因此也可以一次检索所有这些数据。
我尝试过这样的测试($ languages是lang代码字符串数组)
foreach ($languages as $language) {
apply_filters('locale', $language);
$test = translate($entry_id, 'roots');
print_r($test);
print "<hr>";
}
然而,这似乎只是给我英文字符串(并且en或任何变体不是$ languages语言中的一种)。
有人能指出我正确的方向吗?
我希望我自己可以处理.po文件,但这似乎是不必要的,因为wordpress确实能够使用模板中常用的getText函数来提取当前语言的翻译,所以我认为必须有一个较短的路径我正在做什么。
答案 0 :(得分:1)
您应该可以使用global $locale
来设置&#34;设置&#34;一个值(您实际上可以将其定义为任何值,然后将应用locale
过滤器。)
然后,您可以将要翻译的字符串传递给__()
函数。获得翻译的价值。
add_action( 'init', 'init_locale' );
function init_locale(){
// initialise the global variable on init, set it to whatever you want
global $locale;
$locale = "en_US";
}
// use a filter to set the locale
add_filter( 'locale', 'set_locale' );
function set_locale(){
// whatever logic you want to set the country
if ( isset( $_REQUEST['foo'] ) && $_REQUEST['foo'] == 'spanish' ){
return 'es_ES';
}
// or use the global
global $locale;
return $locale;
}
// once everything is loaded you can get the translated text.
add_function( 'wp_loaded', 'translated_text' );
function translated_text(){
// you might have used a filter or defined the global somewhere and can use...
$spanish = __( 'text to translate' );
// or you could define the global here and then get the text.
global $locale;
$locale = 'fr_FR';
$french = __( 'text to translate' );
}
如果你想要一个能够做到这一点的功能,那么这应该可行:
function get_translated_text( $text, $domain = 'default', $the_locale = 'en_US' ){
// get the global
global $locale;
// save the current value
$old_locale = $locale;
// override it with our desired locale
$locale = $the_locale;
// get the translated text (note that the 'locale' filter will be applied)
$translated = __( $text, $domain );
// reset the locale
$locale = $old_locale;
// return the translated text
return $translated;
}
答案 1 :(得分:0)
最后我结束了处理.mo文件以获得翻译,但这比我想象的要容易。
$translations = array();
$languages = get_available_languages(ABSPATH . '../wp-content/themes/MY-THEME/lang');
foreach ($languages as $language) {
$mo = new MO();
if ($mo->import_from_file(ABSPATH . '../wp-content/themes/MY-THEME/lang/' . $language . '.mo')) {
$translations[$language] = $mo->entries;
}
}
然后翻译在$translations[$language][$entry_id]->translations[0]
其中$ entry_id是英文字符串。
答案 2 :(得分:0)
__($text, $domain)
$text
:(字符串)(必需)要翻译的文本。
$domain
:(字符串)(可选)文本域。用于检索已翻译字符串的唯一标识符。
return
:(字符串)翻译文本。