ThinkPHP 2,0多语言使用Bug

项目 中 使用 到 了 thinkphp2.0 的 多 语言 功能, 发现 一些 error

语言 配置 如下:

 "LANG_SWITCH_ON '=> true,
 "DEFAULT_LANG '=>' es-es,
 "LANG_AUTO_DETECT '=> true,

在 Lang 目录 下 创建 es-es, zh-cn, zh-tw 目录

ThinkPHP 使用 $ _SERVER ['HTTP_ACCEPT_LANGUAGE'] 来 自动 检测 浏览 器 支持 语言,
然后 保存 到 cookies 中, 并 读取 相应 的 语言 包.

这里 有 两个 问题:
1. 浏览 器 的 返回 值 的 大小写 不同, 如 Firefox: es-es, 谷 歌 chrome: en-US

2. 浏览 器 的 支持 语言 不 存在 的 时候, 也会 产生 找不到 语言 包 的 情况.
比如说 有的 浏览 器 返回 值 是 en-gb

解决 办法 如下,

打开 / ThinkPHP / lib / Piensa / Core / App.class.php 文件, 查看 checkLanguage () 函数, 找到:

 elseif (_SERVER isset ($ ['HTTP_ACCEPT_LANGUAGE'])) {/ / 自动 侦测 浏览 器 语言
         preg_match ('/^([ az \ -]+)/ i ', $ _SERVER [' HTTP_ACCEPT_LANGUAGE '], $ matches);
         $ Langset = strtolower ($ coincidencias [1]);
         cookie ('think_language', $ Langset, 3600);
 }

替换 以上 代码 为:

 elseif (_SERVER isset ($ ['HTTP_ACCEPT_LANGUAGE'])) {/ / 自动 侦测 浏览 器 语言
         preg_match ('/^([ az \ -]+)/ i ', $ _SERVER [' HTTP_ACCEPT_LANGUAGE '], $ matches);
         $ Langset = strtolower ($ coincidencias [1]);
          / / Si no existe el lenguaje, el uso por defecto
	 if (falsa === @ file_exists ($ LANG_PATH. Langset. / common.php '))
            $ Langset = C ('DEFAULT_LANG');
         cookie ('think_language', $ Langset, 3600);
 }

Comparte este artículo:
Digg Google Bookmarks reddit Mixx StumbleUpon Technorati Yahoo! Buzz DesignFloat Delicioso BlinkList Furl

One Response to "ThinkPHP 2,0 多 语言 使用 Bug"

  • iceweb dice:

    真是 ERROR 个, 不错 的 解决 方法!

  • Deja un comentario:

    Nombre (requerido):
    Mail (no será publicado) (requerido):
    Sitio Web:
    (Requerido):
    XHTML: Puedes usar estos tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>