使用WPML,我已经用4种语言翻译了一个字符串,例如:en,nl,fr和de。
默认情况下,我可以使用<?php _e('my string here','text_domain'); ?>
,当我进入该域时,它会返回确切的翻译文本。
如何在一个地方获取所有翻译的文本。所以,如果我在网站的英文版本,但我想在nl,fr,de和en中获取我的字符串的翻译内容。
我可以知道这怎么可能?
答案 0 :(得分:1)
您可以临时更改当前语言以检索已翻译的字符串。类似的东西:
// Backup the current language
$current_lang = $sitepress->get_current_language(); // Say it's "en"
// Switch to another language. E.g. $desired_lang = "nl";
$sitepress->switch_lang( $desired_lang );
// Get your translated string...
_e( 'My string here', 'text_domain' );
// Back to the original language to not interfere
$sitepress->switch_lang( $current_lang );
我在页面模板上测试了这个(比如index.php
)并且它有效...然后我尝试构建一个函数来完成这项工作。类似的东西:
// Put this in your functions.php
function get_all_translations( $string, $languages ) {
global $sitepress;
if ( empty( $languages ) ) {
$languages = array_keys(
icl_get_languages( 'skip_missing=0&orderby=code&order=asc' )
);
}
$current_lang = $sitepress->get_current_language();
$translations = [];
foreach ( $languages as $lang ) {
$sitepress->switch_lang( $lang, true );
$translations[$lang] = __( $string, 'text_domain' );
}
$sitepress->switch_lang( $current_lang );
return $translations;
}
和
// This on index.php:
var_dump( get_all_translations( 'My string here' ) );
var_dump( get_all_translations( 'My string here', ['nl', 'fr'] ) );
但它不起作用,我无法弄清楚原因......我希望无论如何这都有帮助。