【发布时间】:2015-08-14 18:15:46
【问题描述】:
我正在努力实现,当有人访问我的 wordpress 页面时,会加载他喜欢的语言的 .po(语言)包。 目前可以通过向 URL 添加 ?lang= 参数来更改语言。但我希望根据浏览器语言选择正确的语言。
我的代码:
<?php
// start the session
session_start();
$browserlang = " ".$_SERVER['HTTP_ACCEPT_LANGUAGE'];
// if there's a "lang" parameter in the URL...
if( isset( $_GET[ 'lang' ] ) ) {
// ...set a session variable named WPLANG based on the URL parameter...
$_SESSION[ 'WPLANG' ] = $_GET[ 'lang' ];
// ...and define the WPLANG constant with the WPLANG session variable
$locale = $_SESSION[ 'WPLANG' ];
echo 'Based on URL parameter';
// if there isn't a "lang" parameter in the URL...
} else {
// if the WPLANG session variable is already set...
if( isset( $_SESSION[ 'WPLANG' ] ) ) {
// ...define the WPLANG constant with the WPLANG session variable
$locale = $_SESSION[ 'WPLANG' ];
echo 'Based on session variable';
// if the WPLANG session variable isn't set...
} else {
// set the WPLANG constant to your default language code is (or empty, if you don't need it)
$locale = $browserlang;
echo 'Should be based on browser language. It is:' . $browserlang;
}
};
?>
$locale 用于设置语言并选择正确的 .po 文件。
现在我希望 $locale 是
$locale = 'en_US'
默认情况下,但是当有人进入具有默认语言“de”、“de_DE”、“de_CH”或“de_AT”的页面时,它应该是。
$locale = 'de_DE'
我当前使用的代码不起作用。
$browserlang = " ".$_SERVER['HTTP_ACCEPT_LANGUAGE'];
echo $browserlang;
向我展示了正确的语言,即“de_DE”,但 $locale = $browserlang 没有做任何事情。另一方面,当我设置$locale = 'de_DE' 时,它可以工作......
提前谢谢你们。
编辑:
当我使用 echo $locale 时,表示 de-DE。这很奇怪,因为它不起作用......
编辑 2:
那是因为它必须是 de_DE(下划线)而不是 de-DE(减号)......如何解决这个问题?
编辑 3:
终于成功了。
【问题讨论】:
-
你为什么在你的变量前面放一个
" "?如果您删除它,它应该可以工作吗? -
使用 str_replace 从 de-DE 更改为 de_DE。
str_replace('-','_',$browserlang); -
谢谢你们两位的cmets。 @GabrielMoretti 是的,那会起作用。但我找到了另一种方法:我将在大约 1 分钟内编辑我的帖子。
-
这个文件是用来配置语言的吗?
-
您问题的代码。如果您的应用程序可能会长大,您应该寻找更通用的解决方案。否则,您将需要不断为每种新的可用语言添加条件(在我看来,这违反了开放-封闭原则)