如何实现PHP多语言系统

PHP多语言系统按照支持的方式一般可分为两种: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可能是如下形式:

view plainprint

$lang_site = array(’companyinfo’=>’公司讯息’

,’contactus’=>’联系我们’

,’myaccount’=>’我的帐户’

,’hr’=>’工作机会’

,’has_register_member’=>’已经注册用户’

,’enteryouremail’=>’输入您的email地址’

,’enteryourpasswd’=>’输入您的密码’

,’not_regostered_member’=>’未注册用户’

,’submit’=>’提交’

);

这样我们通过

view plainprint

foreach ($lang_site as $key=>$value)

{

??$ html ->set_var($key, $value);

}

就可以将特定的语言包信息显示出用户。

这就需要我们在每个页面都要传递用户所选择的语言种类信息,可以使用url或者session等方式来保存。

2. 后台如何添加新的语言

从上面的代码看出来,我们添加新的语言只需要添加对应的文件夹到lang文件夹下即可。 所以我们可以构造一个页面,这个页面包含所有网页中需要显示的特定语种的文字,可以采用如下形式:

提交之后服务器将其写入指定文件即可:

view plainprint

/**

* 把数组写入文件

*

* @param array $array

* @param string $arrayname

* @param string $filedir

* @return?

*/

function array_to_file($array, $arrayname, $filedir = ”)

{

$file = fopen($filedir.”$arrayname.php”, ‘wb’);

if (!$file)

{

return false;

}

$tmp = ”;

//$array_key = array_keys($array);

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}

这样在检索时也是比较方便的。

相关日志


技术研究 关键字(Tags): , ,

如果你觉得这篇文章不错,你可以 给我留个回复订阅它。无论如何,谢谢你的支持!

评论

还没有评论。

发表评论

(必填)

(必填)