在网站设计中我们经常会遇到需要多语言支持的情况。多语言系统按照支持的方式一般可分为两种:1.支持多语言,但不支持多种语言的同时存在,也就是说要么是中文要么是英文或者其他,这在一些需要国际化支持的网页系统中经常用来,以便方便用户本地化。 2.支持多语言并可同时浏览不同语言版本的网页。今天我想讨论的是第二种,实际上第二种也是在第一种的基础上发展来的。下面是我在实际的一个项目中应用多语言技术的大体框架。
当用户选择某种语言时,我们如何显示该语种版本的网站?对于每种语言都写一个版本我这里就不说了,那可能是最让人骂娘的方法了。 我这里采用的是模板引擎来实现的:使用模板网页内所有的文字、图片等都设置成可替换的变量标签,当用户浏览时则可根据传递过来的语言参数包含相应的语言包,最后解析一下模板即可。如果对于模板引擎不是很了解,请先看看模板方面的介绍文章。
项目文件结构如下:
Admin ----------后台管理文件夹
Class ----------项目中所有的类
Template ----------模板文件
Js ----------js脚本
Images ----------图片存放目录
Lang ----------语言包存放目录
Upload ----------上传的文件存放目录
Index.php ---------首页
… ---------其他
…
下面列举了一些比较重要的代码:
1. 如何初始化语言信息
首先初始化模板类实例 $html = new Template() (这里以phplib template为例)
假设传递参数为lang=zh,那么我们就包含lang/zh文件夹下的语言包文件,语言包可能包含如下文件:
Lang_site.php lang_admin.php
而lang_site.php可能是如下形式:
- $lang_site = array('companyinfo'=>'公司讯息'
- ,'contactus'=>'联系我们'
- ,'myaccount'=>'我的帐户'
- ,'hr'=>'工作机会'
- ,'has_register_member'=>'已经注册用户'
- ,'enteryouremail'=>'输入您的email地址'
- ,'enteryourpasswd'=>'输入您的密码'
- ,'not_regostered_member'=>'未注册用户'
- ,'submit'=>'提交'
- );
这样我们通过
- foreach ($lang_site as $key=>$value)
- {
- $ html ->set_var($key, $value);
- }
就可以将特定的语言包信息显示出用户。
这就需要我们在每个页面都要传递用户所选择的语言种类信息,可以使用url或者session等方式来保存。
2. 后台如何添加新的语言
从上面的代码看出来,我们添加新的语言只需要添加对应的文件夹到lang文件夹下即可。 所以我们可以构造一个页面,这个页面包含所有网页中需要显示的特定语种的文字,可以采用如下形式:
提交之后服务器将其写入指定文件即可:
-
-
-
-
-
-
-
-
-
- function array_to_file($array, $arrayname, $filedir = '')
- {
- $file = fopen($filedir."$arrayname.php", 'wb');
- if (!$file)
- {
- return false;
- }
-
- $tmp = '';
-
-
- foreach ($array as $key=>$value)
- {
- ($tmp == '') ? ($tmp .= "'$key'=>'$value'\r\n") : ($tmp .= ",'$key'=>'$value'\r\n");
- }
-
- $content = "<?php\r\n\$$arrayname = array($tmp);\r\n?>";
-
- if (fwrite($file, $content) === FALSE) {
- return false;
- }
- fclose($file);
- return true;
- }
3. 对应语种的文章、产品等信息(数据库问题)
由于语言的原因,每种信息的发布基本上都需要发布n次(看你有多少中语言),所以在添加新语言时必须要建立对应语言的数据库表,数据库表可以采用如下的命名方式:
{ dbprefix }product_{langname}
这样在检索时也是比较方便的。
发表于 @ 2008年06月21日 21:50:00|评论(loading...)|编辑|收藏