8.7. 本地化

8.7.1. 取得客户端支持的语言
8.7.2. 设置默认的语言
8.7.3. 配置对应的语言
8.7.4. 取得最近一次设置的区域
8.7.5. 调用语言对应的配置

本地化有两个概念:

  1. 国外网站要进中国,所以需要进行本地化的处理,比如调整版式,翻译内容等等

  2. 一个网站是实现国际化(I18N),需要接受世界上各个国家的用户,那么我们可以选择世界通用的语言---英语,也可以给每个语种做一个不同的翻译,后者也可以视为本地化

利用I-F中的ILocale可以实现根据不同的国家或语种可以调用不同的配置和语言。要实现本地化可以有以下几个步骤

8.7.1. 取得客户端支持的语言

ILocale提供了四种方式来获取用户端支持的语言,以便调取相应的配置:

  • 直接构造,这也是最简单的办法:

    $locale = new ILocale("zh_CN");
  • 从URL获取。对于根据URL来区分语言的网站来说,可以使用

    $locale ILocale::fromUrl("lang");//对于 /a/b/c?lang=zh_CN

    返回一个本地化对象,稍后讲述它的应用。

  • 从cookie中获取。对于将用户选择的语言存放到cookie中去的网站,可以使用

    $locale ILocale::fromCookie("lang");//假设别的地方已经设置了lang这个cookie

    同样返回一个本地化对象,fromCookie不传任何参数时,默认值为 if_locale

  • 从浏览器信息获取。根据浏览器的HTTP_ACCEPT_LANGUAGE参数,自动判断用户的语言

    $locale ILocale::fromBrowser();

    同样返回一个本地化对象。这时的fromBrowser可以传入一个默认的值,当无法判断浏览器语言时,使用此值返回。

8.7.2. 设置默认的语言

可以设置一个默认的语言,当无法找到配置时,使用此语言:

ILocale::setDefault("zh_CN");

8.7.3. 配置对应的语言

可以在 config/locale 目录下对不同的语言进行配置,比如对于zh_CN,可以新建目录 zh_CN,并新建文件config.php,message.php,当前的目录结构变为

/config
    /locale
        /zh_CN
            /config.php
            /message.php

其中 config.php内容为关于此语言的特殊配置,它 的格式为:

<?php
$config
["headers"] = array(
    
"content-type" => "text/html;charset=gb2312"
);

$config["base"] = "http://a/b/c/zh";

?>

message.php内容为关于此语言的消息,定义了UI显示的文字等,它的格式为:

<?php

$message
["button"] = "按钮";
$message["search"] = "搜索";
$message["password_invalid"] = "密码不合法";

?>

同样地,可以对en_US或hk等等进行同样的配置。

8.7.4. 取得最近一次设置的区域

可以使用

$locale ILocale::getLatest(); 

得到我们最近设定的区域,从而可以在其他地方使用我们已经设置的区域对象。

8.7.5. 调用语言对应的配置

利用7.1小节得到的本地化对象,可以很方便地取得7.3小节所作的配置:

$locale->getConfig("base");//取得配置的base值
$locale->getMessage("button");//取得button对应的文字
$locale->getConfigs();//取得所有配置
$locale->getMessages();//取得所有文字消息

现在就可以在用户显示层随心所欲的使用这些配置了。