如何更改只有一页的插件语言?

时间:2017-02-15 作者:Mike F

我的WordPress博客设置为nl_NL. 这意味着我的bookly plugin 也显示在中nl_NL.

在插件目录中有一个包含大量其他语言的文件夹languages。

我有三种不同语言的一页nl_NL, de_DE, en_EN, 在此页面上,我希望预订插件以正确的语言显示。

我通过页面id从更改了页面语言nl_NLde_DE

通过function.php, 但这没有任何效果。

function get_top_parent_page_id() { 
    global $post; 

    if ($post->ancestors) { 
        return end($post->ancestors); 
    } else { 
        return $post->ID; 
    } 
}

function addLangMetaTag (){
    $postLanguage = "nl_NL";
    if (is_page()) {
    $svPageID = get_top_parent_page_id(); // ID of parent page
            if ($svPageID == "13040") { // ID of the "på svenska" page
                $postLanguage = "de_DE";    
            }
        echo "<meta http-equiv=\\"content-language\\" content=\\"" . $postLanguage . "\\">";
    }
}
add_filter( \'wp_head\', \'addLangMetaTag\' );

function language_tagger_change_html_lang_tag() {
    return "dir=\\"ltr\\" lang=\\"" . 
language_tagger_determin_lang_tag() . "\\"";
}

function language_tagger_determin_lang_tag() {
    $postLanguage = \'nl_NL\'; // default language
    if (is_page()) {
    $svPageID = get_top_parent_page_id(); // ID of parent page
    if ($svPageID == "13040") { // ID of the "på svenska" page
                $postLanguage = "de_DE";    
            }
    }
    return $postLanguage;
}

add_filter(\'language_attributes\', 
\'language_tagger_change_html_lang_tag\');
我想它只会看WordPressconfig.php define(\'WPLANG\', \'nl_NL\');我也一直在阅读this post 也许我可以组合一些东西?

2 个回复
SO网友:Pavanello

解决这个问题的一个简单方法是使用“Ceceppa Multilingua”插件。https://wordpress.org/plugins/ceceppa-multilingua/screenshots/

SO网友:butlerblog

您正在做的是更改http等价元标记。更改HTML标记不会更改页面内容的语言。它只是告诉浏览器(和机器人/蜘蛛)内容是什么语言supposed 是的。

如果要更改内容显示的语言,需要更改bookly插件的textdomain。

你可以用WP\'s plugin_locale filter. 该过滤器在加载语言文件时运行,允许您更改所使用的textdomain(de\\u de或nl\\u nl)。

add_filter( \'plugin_locale\', function( $locale ) {
    if (is_page()) {
        $svPageID = get_top_parent_page_id(); // ID of parent page
        if ($svPageID == "13040") { // ID of the "på svenska" page
            $locale = "de_DE";    
        }
    }
    return $locale;
});
如果您需要更改的不仅仅是插件的输出(即整个页面的语言),那么您可能需要determine_locale filter in the determine_locale() function. 与上述内容相同,但determine_locale 作为过滤器挂钩。