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

时间:2017-04-07 07:43:49

标签: wordpress wpml

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

默认情况下,我可以使用<?php _e('my string here','text_domain'); ?>,当我进入该域时,它会返回确切的翻译文本。

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

我可以知道这怎么可能?

1 个答案:

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

但它不起作用,我无法弄清楚原因......我希望无论如何这都有帮助。