由于项目要求多
语言自由切换(所以文字,包括网页文字和
数据库),示例以 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.php
复制内容到剪贴板PHP 代码:
<?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.php
复制内容到剪贴板PHP 代码:
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 的controller
复制内容到剪贴板PHP 代码:
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是个新手,不知道上面代码有哪里可以优化一下,还请高手们指点。嘿嘿
更希望高手们出个更漂亮的实例。有什么问题,请跟帖哦,大家一起研究下。