|
由于项目要求多语言自由切换(所以文字,包括网页文字和数据库),示例以 english、french、german为例子。
数据库设计(以一个简单blog为例)
表名:blog
字段:id, title_english, title_french, title_german, body_english, body_french, body_german, created_time...
语言文件:
在application/language下建3个文件夹:english, french, german
在english下建议一个 blog_lang.phpPHP复制代码
<?php
$lang['blog_title'] = "Blog title";
$lang['blog_body'] = "Blog body";
$lang['blog_hello'] = "Hello, welcome to CI blog.";
?> 复制代码 然后拷贝到french, german,修改内容为 法语和德语 (这里自己标记一下就OK啦,法语和德语不会 哈哈)
application 下 autoload
$autoload['libraries'] = array('database', 'session'); (用session存储当前语言的值)
$autoload['helper'] = array('url'); (下面有一个自动切换语言的类需要)
基本准备完毕,下面加入了 xwero 的语言切换:
(from http://codeigniter.com/forums/viewthread/64118/#315962)
在application/libraries 下建立一个 MY_language.php
PHP复制代码 class MY_Language extends CI_Language
{
function MY_Language ()
{
parent ::CI_Language();
}
function switch_to ($idiom)
{
$CI =& get_instance ();
if(is_string($idiom) && $idiom != $CI->config->item('language'))
{
$CI->config->set_item('language',$idiom);
$loaded = $this->is_loaded;
$this->is_loaded = array();
foreach($loaded as $file)
{
$this->load(str_replace('_lang.php','',$file));
}
}
}
} 复制代码 在application/controller下建立 admin.phpPHP复制代码 class Admin extends Controller
{
function Admin ()
{
parent ::Controller();
$this->lang->load('cms_form_msg');
$this->lang->load('cms_form');
$this->lang->switch_to($this->session->userdata('language'));
}
function langswitch ()
{
$this->session->set_userdata('language',$this->uri->segment(3));
redirect (str_replace('_','/',$this->uri->segment(4)));
}
} 复制代码 下面设置你的 blog 的controllerPHP复制代码 class Blog extends Controller {
function Blog ()
{
parent ::Controller();
$this->lang->load('blog', $this->session->userdata('language'));
$this->load->scaffolding('blog');
$this->load->helper(array('url','form'));
}
function index ()
{
$data['query'] = $this->db->get('blog');
$this->load->view('blog_view',$data);
}
} 复制代码 在视图blog_view 里PHP复制代码
<html>
<head>
<title>
title.....</title>
</head>
<body>
<h1><?=$heading?></h1>
<h5><a href="<?php echo site_url('admin/langswitch/english'.$this->uri->uri_string().'/'); ?>">English</a> </h5>
<h5><a href="<?php echo site_url('admin/langswitch/french'.$this->uri->uri_string().'/'); ?>">French</a> </h5>
<h5><a href="<?php echo site_url('admin/langswitch/german'.$this->uri->uri_string().'/'); ?>">German</a> </h5>
<h2>-current language:<?=$this->session->userdata("language")?>-</h2>
<hr>
read language field:
<?=$this->lang->line('blog_title');?>
<hr>
<ul>
<?php foreach ($query->result_array() as $row):?>
<?php echo '<li>'.$row['title_'.$this->session->userdata("language")].':'.$row['body_'.$this->session->userdata("language")].'</li>';?>
<?php endforeach;?>
</ul>
</body>
</html> 复制代码 好了。估计应该可以用啦。哈哈
注意:lony是个新手,不知道上面代码有哪里可以优化一下,还请高手们指点。嘿嘿
更希望高手们出个更漂亮的实例。有什么问题,请跟帖哦,大家一起研究下。 |
评分
-
查看全部评分
|