php ci 国际化,CI 多国语言

需求

默认访问与浏览器相同语言的页面

使用便于 SEO 的链接形式

sample.com/ - 默认简体中文

sample.com/sc/ - 简体中文

sample.com/tc/ - 繁体中文

sample.com/en/ - 英语

URL 路由

修改路由配置文件 application/config/routes.php ,末尾添加内容:

$route['en'] = 'welcome';

$route['tc'] = 'welcome';

$route['sc'] = 'welcome';

$route['en/(.+)'] = '$1';

$route['tc/(.+)'] = '$1';

$route['sc/(.+)'] = '$1';

打开 hook 功能

修改配置文件 application/config/config.php,启用$config['enable_hooks'] = TRUE;,设置$config['base_url'] = 'http://example.com/';为网站的域名。

修改 hook 配置文件 application/config/hooks.php,末尾添加内容:

$hook['pre_controller'][] = array(

'class' => 'LanguageClass',

'function' => 'set_language',

'filename' => 'Languageclass.php',

'filepath' => 'hooks'

);

编写功能

新建文件 application/hooks/Languageclass.php:

defined('BASEPATH') OR exit('No direct script access allowed');

class LanguageClass extends CI_Controller {

public function set_language()

{

// 获取 url 第一段字符

$url_lang = strtolower( $this->uri->segment(1) );

// 如果没有指定语言,使用浏览器默认语言,并跳转(简体除外)

if ( ! $url_lang )

{

// 判断浏览器语言

$l = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 4);

if ( preg_match("/zh-c/i", $l) )

$l = 'sc';

else if ( preg_match("/en/i", $l) )

{

$l = 'en';

// 如果是英语浏览器,跳转到 .com/en 下

$this->load->helper('url');

Header( "HTTP/1.1 301 Moved Permanently" ) ;

Header( "Location: ".base_url('en') );

}

else if ( preg_match("/zh/i", $l) )

{

$l = 'tc';

$this->load->helper('url');

// 如果是繁体浏览器,跳转到 .com/tc 下

Header( "HTTP/1.1 301 Moved Permanently" ) ;

Header( "Location: ".base_url('tc') );

}

else

$l = 'sc'; // 默认为简体中文

}

else if ( $url_lang == 'en' )

$l = 'en';

else if ( $url_lang == 'tc' )

$l = 'tc';

else if ( $url_lang == 'sc' )

$l = 'sc';

else

$l = 'sc';

// 动态修改配置文件的默认语言

$this->config->set_item('language', $l);

}

}

使用

在 application/language/ 下新建目录 en、sc、tc,每个目录中添加文件 ui_lang.php,内容如下:

defined('BASEPATH') OR exit('No direct script access allowed');

$lang['ui_title'] = '指定语言的字符';

注意:application/language 中所有新建的语言目录都需要到 system/language/english/ 中把 CI 本身所需要的语言文件全部复制过来,也可去 github 上下载已经翻译的语言文件。

在需要用到的控制器文件中$this->lang->load('ui');载入所需要的 _lang.php 文件,在视图文件中输出<?php echo $this->lang->line('ui_title'); ?>。

手册

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值