如何在WordPress中实现“即时”语言切换

7

在WordPress中有没有像 switch_to_blog() 一样切换语言的方法。

类似以下方式:

global $locale
$currentLanguage = $locale;
switch_to_language('de_DE');

//do some action with german localisation

switch_to_language($currentLanguage);

这在WordPress中一般是可行的吗?
2个回答

15

所以我终于找到了解决方案。这个函数被称为load_textdomain()

这是我这边的操作步骤。请记得在$new_language中定义LANGUAGE_PATH和您想要切换到的语言。 $your_domain是您的插件/主题的文本域。

//will output "Good Morning"
_e('Good Morning', $your_domain);

global $locale;
//save the current language for later
$current_language = $locale;
$new_language = 'DE_de';

//load the new text domain
load_textdomain( $your_language_domain, LANGUAGE_PATH.'/'.$your_domain.'-'.$new_language.'.mo' );

//do some action with the new localisation
//will output "Guten Morgen"
_e('Good Morning', $your_domain);

//go back to the previous language
load_textdomain( $your_language_domain , LANGUAGE_PATH.'/'.$your_domain.'-'.$current_language.'.mo' );

在核心代码中花了一些时间才找到这个方法。更多关于该函数的信息,请访问codex网站


你知道这个还能用吗?我自己试了试不能用。我有一个网站是用瑞典语编写的,在每个文本字符串中都用英语的_e()或__()进行了处理。在某些文章/页面上,我想将所有文本呈现为英语而不是瑞典语,因此我只是尝试像上面那样做,但输出没有改变。如果使用子主题是否会改变情况? - powerbuoy
看起来如果你切换回 en_US,它就无法工作。你可以将 $your_domain 更改为随机字符串,这样翻译就不会被注册并使用后备 - 英语。 - Xaver
这实际上是我解决它的方式:P 它并不完美 - 而且只适用于英语 - 但至少现在它能用了。 - powerbuoy

1
我想你需要一个插件来实现这个功能。WordPress 默认不支持此功能。 WPML 通常是 WordPress 的多语言插件首选,你应该去看看 :)

但是插件是如何做到的呢?我实际上并不需要 switch_to_language() 函数。如果我只改变全局变量 $local,它就不能正常工作。 - Xaver
你无法更改已定义的常量;那样行不通。但是你可以使用“locale”过滤器在此之后更改本地变量。请参见这里:http://wordpress.stackexchange.com/questions/52419/setting-wplang-from-a-plugin - LucP
检查我的最终答案。这是我制作它的方式以及它的工作原理。我只需要暂时切换语言,而不是整个请求。 - Xaver
你可以使用 add_filter 来更改语言,然后使用 remove_filter 返回默认设置... - LucP
不是当过滤器已经应用时 - 这在我的情况下。 - Xaver

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接