SilverStripe可翻译模块

时间:2016-03-29 01:09:26

标签: php silverstripe

我刚刚安装了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

1 个答案:

答案 0 :(得分:1)

使用silverstripe Translatable有两个关键项可以回答你的问题。

  1. 系统中的每个页面都有一个唯一的网址
  2. 您设置了默认语言环境
  3. 严格地说,对于一个和两个,你可以将语言环境作为_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();
    });