我刚刚安装了silverstripe Translatable来为我们处理多语言网站。我想我已经正确设置了一切但不能确定。也许我错过了一些东西,或者我误解了模块。
在我的网站_config.php中,我有以下
i18n::set_locale('en_US');
i18n::set_locale('fr_FR');
Translatable::set_default_locale('en_US');
SiteTree::add_extension('Translatable');
SiteConfig::add_extension('Translatable');
我已经通过并创建了我们主页的翻译。我可以导航到翻译页面没问题。我还可以验证主页和翻译是否意识到它们与Page.ss
中的以下代码相关联<% if Translations %>
<% loop Translations %>
$Locale.RFC1766
$Link
<% end_loop %>
<% end_if %>
我还添加了lang="$ContentLocale" xml:lang="$ContentLocale" xmlns= "http://www.w3.org/1999/xhtml">
正如预期的主页法语版本所示,美国版本显示,反之亦然。 但是,当我使用法语浏览器从法语计算机访问该站点时,它会直接进入英文页面。我原本以为这将由x18n部分的silverstripe或可翻译自动处理。我需要自己处理这个问题还是我错过了什么?
根据Barry的回答回答 我在_config.php
中得到了以下几行代码$lang = $_SERVER['HTTP_ACCEPT_LANGUAGE']; //Get the languag from the client
$lang = substr($lang,0,strpos($lang,','));//Strip out the unnecesary stuff after the comma
$lang = str_replace("-","_",$lang);//Replace the hyphen with an underscore.
Translatable::set_default_locale($lang);//Set locale
答案 0 :(得分:1)
使用silverstripe Translatable有两个关键项可以回答你的问题。
严格地说,对于一个和两个,你可以将语言环境作为_GET变量传递 - 但这不是你的访问者会做的。
所以简单的答案是没有Translatable单独不能确定要显示的语言环境 - 但你可以通过改变基于任何方法的默认语言环境来实现...
一旦你有了这个,只需在_config.php中设置它......
jQuery('.tab-links a').on('click', function(e) {
var currentAttrValue = jQuery(this).attr('href');
// Show/Hide Tabs
jQuery('.tab-content ' + currentAttrValue).show().siblings().hide();
// Change/remove current tab to active
jQuery(this).parent('li').addClass('active').siblings().removeClass('active');
e.preventDefault();
});