我按照cakePHP书来配置我网站的i18n和l10n。假设我有英语,西班牙语,德语。
浏览器通常具有按优先级排序的语言列表。如果列表的第一个位置出现在我的网站上配置的语言一切正常。但是,例如,如果列表是这样的:法语,德语,西班牙语,英语;本地化失败并显示我在代码中使用的i18n标识符。
我希望在这种情况下,页面显示为德语翻译,因为列表中是我的网站可以提供的第一种语言。这将是一个完美的解决方案,但至少我希望我可以配置默认语言(例如,英语),如果我的页面不知道浏览器列表的第一语言。
我可以做些什么来实现这个以及应该把代码放在哪里?
提前谢谢。
答案 0 :(得分:3)
好吧,我在app/Config/bootstrap.php
中做了下一个:
$browserLangs = explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']);
$find = 'eng';
foreach($browserLangs as $browserLang) {
$lang = substr($browserLang,0,2);
var_dump($lang);
if ($lang == 'en') {
$find = 'eng';
break;
} else if ($lang == 'es') {
$find = 'spa';
break;
} else if ($lang == 'ca') {
$find = 'cat';
break;
}
}
Configure::write('Config.language', $find);
在Accept Language标题中,我们有一个字符串,其中包含浏览器的所有语言列表。然后我将英语定义为默认语言,并尝试在列表中找到其他语言,当我得到它时打破了这个语言。
我把它作为答案,因为它有效,但它很脏,因为:
也许有人可以改进这个或发布另一个更好的解决方案作为新答案。
答案 1 :(得分:0)
您必须使用编辑器(例如:http://poedit.net)打开创建的.po文件,您可以在其中创建多种语言版本。
别忘了更改每种语言的复数形式,对于德语nplurals=2; plural=(n != 1)
,这里有一个列表:http://translate.sourceforge.net/wiki/l10n/pluralforms。
之后,您必须将语言文件保存在app/Locale/deu/LC_MESSAGES/...
最后,该文件夹中应该有一个default.mo和default.po文件。