WPML 从所有语言中获取字符串的翻译内容(如果可用)

WPML get translated content of a string from all languages if available

使用 WPML,我已经将一个字符串翻译成 4 种语言:en、nl、fr 和 de。

默认情况下,我可以使用 <?php _e('my string here','text_domain'); ?>,当我在该域中时,它将 return 准确翻译的文本。

如何将所有翻译的文本集中在一个地方。所以如果我在网站的英文版上,但我想获得我的字符串在 nl、fr、de 和 en 中的翻译内容。

请问这怎么可能?

您可以临时更改当前语言以检索翻译后的字符串。类似于:

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

但它不起作用,我无法找出原因...我希望这有帮助。