转载 PHP多语言系统的一种实现方式收藏

新一篇: php异或加密解密算法的实现 | 旧一篇: lamp环境搭建手记

在网站设计中我们经常会遇到需要多语言支持的情况。多语言系统按照支持的方式一般可分为两种: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可能是如下形式:
  1. $lang_site = array('companyinfo'=>'公司讯息'  
  2. ,'contactus'=>'联系我们'  
  3. ,'myaccount'=>'我的帐户'  
  4. ,'hr'=>'工作机会'  
  5. ,'has_register_member'=>'已经注册用户'  
  6. ,'enteryouremail'=>'输入您的email地址'  
  7. ,'enteryourpasswd'=>'输入您的密码'  
  8. ,'not_regostered_member'=>'未注册用户'  
  9. ,'submit'=>'提交'  
  10. );   
这样我们通过
  1. foreach ($lang_site as $key=>$value)   
  2. {   
  3.   $ html ->set_var($key$value);   
  4. }   
就可以将特定的语言包信息显示出用户。 这就需要我们在每个页面都要传递用户所选择的语言种类信息,可以使用url或者session等方式来保存。 2.  后台如何添加新的语言 从上面的代码看出来,我们添加新的语言只需要添加对应的文件夹到lang文件夹下即可。 所以我们可以构造一个页面,这个页面包含所有网页中需要显示的特定语种的文字,可以采用如下形式: 提交之后服务器将其写入指定文件即可:
  1.     
  2. /**  
  3.  * 把数组写入文件  
  4.  *  
  5.  * @param array $array  
  6.  * @param string $arrayname  
  7.  * @param string $filedir  
  8.  * @return   
  9.  */  
  10. function array_to_file($array$arrayname$filedir = '')   
  11. {   
  12.   $file = fopen($filedir."$arrayname.php"'wb');   
  13.   if (!$file)   
  14.   {   
  15.     return false;   
  16.   }   
  17.      
  18.   $tmp = '';   
  19.   //$array_key = array_keys($array);   
  20.      
  21.   foreach ($array as $key=>$value)   
  22.   {   
  23.     ($tmp == '') ? ($tmp .= "'$key'=>'$value'\r\n") : ($tmp .= ",'$key'=>'$value'\r\n");   
  24.   }   
  25.      
  26.   $content = "<?php\r\n\$$arrayname = array($tmp);\r\n?>";   
  27.      
  28.   if (fwrite($file$content) === FALSE) {   
  29.         return false;   
  30.     }   
  31.   fclose($file);   
  32.   return true;   
  33. }   
3.  对应语种的文章、产品等信息(数据库问题) 由于语言的原因,每种信息的发布基本上都需要发布n次(看你有多少中语言),所以在添加新语言时必须要建立对应语言的数据库表,数据库表可以采用如下的命名方式: { dbprefix }product_{langname} 这样在检索时也是比较方便的。

发表于 @ 2008年06月21日 21:50:00|评论(loading...)|编辑|收藏

新一篇: php异或加密解密算法的实现 | 旧一篇: lamp环境搭建手记

评论:没有评论。

发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © jom_ch