SilverStripe 可翻译模块
SilverStripe Translatable Module
我最近刚刚安装了 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 部分或可翻译的部分自动处理。我需要自己处理还是我遗漏了什么?
根据 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
对于 silverstripe Translatable,有两个关键项目可以回答您的问题。
- 系统中的每个页面都有唯一的URL
- 您设置了默认语言环境
严格来说,对于第一和第二,您可以将区域设置作为 _GET 变量传递 - 但这不是您的访问者会做的。
所以简单的答案是没有 Translatable 单独不会确定要显示的语言环境 - 但您可以通过基于任何方法更改默认语言环境来实现...
- http://php.net/manual/en/locale.getdefault.php
- Simplest way to detect client locale in PHP
- how to get current locale in PHP
- 等...(google 更多...)
一旦你有了这个,只需将它设置在 _config.php 内...
Translatable::set_default_locale(<locale>);
我最近刚刚安装了 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 部分或可翻译的部分自动处理。我需要自己处理还是我遗漏了什么?
根据 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
对于 silverstripe Translatable,有两个关键项目可以回答您的问题。
- 系统中的每个页面都有唯一的URL
- 您设置了默认语言环境
严格来说,对于第一和第二,您可以将区域设置作为 _GET 变量传递 - 但这不是您的访问者会做的。
所以简单的答案是没有 Translatable 单独不会确定要显示的语言环境 - 但您可以通过基于任何方法更改默认语言环境来实现...
- http://php.net/manual/en/locale.getdefault.php
- Simplest way to detect client locale in PHP
- how to get current locale in PHP
- 等...(google 更多...)
一旦你有了这个,只需将它设置在 _config.php 内...
Translatable::set_default_locale(<locale>);