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">

正如在主页的法语版本上所预期的那样,美国版本显示,反之亦然。然而,当我从一台带法语浏览器的法语电脑上访问该网站时,它会直接进入英语页面。我本以为这将由silverstripe的i18n部分或translateable自动处理。我需要自己处理吗?还是我错过了什么?

基于巴里答案的答案我在_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

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

  1. 系统中的每个页面都有一个唯一的URL
  2. 您设置了默认区域设置

严格地说,对于一个和两个,你可以将区域设置作为_GET变量传入,但这不是你的访问者会做的。

因此,简单的答案是否定的。Translatable本身并不能确定要显示的语言环境,但您可以通过基于任何方法更改默认语言环境来实现这一点。。。

  • http://php.net/manual/en/locale.getdefault.php
  • 在PHP中检测客户端区域设置的最简单方法
  • 如何在PHP中获取当前的语言环境
  • 等等。。。(谷歌了解更多…)

一旦你有了这个,只需在_config.php中用。。。

Translatable::set_default_locale(<locale>);

最新更新