【问题标题】:How does __() decide which language to use (WordPress)__() 如何决定使用哪种语言(WordPress)
【发布时间】:2021-03-17 18:31:57
【问题描述】:

我在 WordPress 主题模板中使用 __("english text", "textdomain")

网站的基本语言是英语。

我已成功为德语添加了 .pot 文件。

如果我在“设置”、“通用”中将语言设置为德语,那么前端的德语翻译就没有问题。

我正在尝试实现语言选择器,因此网站访问者可以在前端选择一种语言。

我认为这只是在 html 标签中适当设置 lang 属性的一种情况。所以当用户选择德语时,我输出<html lang="de-DE">。但__() 仍然使用 WordPress 管理设置中的语言。

我想我是以错误的方式处理这个问题。 __() 是否只使用 WP Admin 中设置的语言?或者我可以根据访问者在前端选择的内容强制它使用不同的翻译文件吗?

谢谢。

【问题讨论】:

    标签: wordpress localization


    【解决方案1】:

    您可能需要使用 WordPress 过滤器语言环境https://developer.wordpress.org/reference/hooks/locale/

    你可以在你的function.php中做这样的事情

    //set desired locale
    add_filter( 'locale', function($locale) {
        if ( !is_admin() ) 
            $locale = "de-DE";
        return $locale;
    });
    

    【讨论】:

    • 感谢您的回答,但我已经尝试过了。它控制 WP 添加到 html 标签的 lang 属性,但这与手动设置 lang 属性相同...... __() 函数会忽略该属性并使用 WP 管理设置中的语言。
    • 经过进一步调查和测试,事实证明这个答案是正确的。谢谢你。我还找到了这个有帮助的答案:wordpress.stackexchange.com/questions/49451/…。我的代码中有一个错误。过滤器返回的语言环境必须使用下划线,例如de_DE 不是破折号 de-DE。这引起了我的注意,因为 lang 属性有一个破折号,我认为这是我需要从过滤器返回的内容。我猜 WP 的 language_attributes() 函数正在将下划线转换为破折号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 2012-04-06
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    相关资源
    最近更新 更多