公司产品网站不可能局限于中文,因为你的网站注册客户也许是美国人,韩国人,西班牙人等,你不得不面临网站多语种解决问题。
其实多语言网站很多,如谷歌网站,Facebook,code.org等
基于PHP语言建站的CMS,如WordPress,Joomla等都配有有多语言插件,你只需安装即可。
多语种网站应该考虑的问题?
页面多语言
需要考虑的问题:
用户登陆时候,自动识别字符,调用不同的语言包?
用户切换不同语言时候,调用不同的语言包?
.增加多语言后的目录结构?
页面多语言也就是外观的多语言化,这里可以采用静态的语言包的方式。
设计时候就应该包括language的目录,针对不同语言有独立的子目录。
如英文language/en ,简体中文language/gb,繁体中文language/b5 (可以扩展其他语言)
每个目录下就包含了对每个页面的语言版本。选择语言版本时候就可以调用相应版本的语言包。
具体做法:
0.利用JavaScript语言,识别浏览器语言,在调用不同的语言包.
language/en/global.ln是针对英文版的全局语言包。
2.global.ln 内容为:
$title = "English webstie";
$charset = "UTF-8";
3.index.php调用:
<?php
require_once()
?>;
<html>;
<head>;
<title>;$title<title>;
<meta http-equiv="content-type" content="text/html;charset=$charset">;
</head>;
<body>;</body>;
</html>;
这样通过扩展就可以实现页面的多语言化.
2.数据库多语言
这个考虑的问题:
A.后台录入数据的多语言化?
B.用户在不同版本下,提交的内容,如何保存?
C.提供三种语言包,还是提供英文和简体,简体通过转化提供繁体?
数据库多语言就是达到多语言在数据库里面的统一。就需要采用utf-8统一编码。
无论什么语言的文字,都统一使用utf-8来存放到数据库里面。采用表字段来表识
属于什么语言版本的文字。
具体:
A.对于后台添加的问题:
1.后台添加时候,就需要多语言化的录入。先建立一个以utf-8编码的数据库,录入英文/简体,简体在通过转化为繁体,
再以utf-8编码方式存于数据库中。
2.建立以utf-8为编码的表结构,importlanguage标识属于什么语言版本
但在某个版本下,就搜索属于这个版本的文字来显示。其他文字不显示。
DROP TABLE IF EXISTS `zz_importer`;
CREATE TABLE IF NOT EXISTS `zz_importer` (
`importID` int(11) NOT NULL auto_increment,
`importTime` date NOT NULL default '0000-00-00',
`improtfile` varchar(100) NOT NULL default '',
`importlanguage` varchar(100) NOT NULL default ''
PRIMARY KEY (`importID`)
) ENGINE=MyISAM DEFAULT CHARSET=uft-8;
3.简体转化的繁体。
利用php的iconv.此过程对于linux/unix有效,对于windows无效。
iconv("GB2312","BIG5",$text);
4.因为,charset = "utf-8",数据就都是以utf-8编码方式存在,
添加数据时候,要分别用en/gb/big5来标识语言版本.
INSERT INTO `zz_importer` VALUES (,'', '', 'en');
INSERT INTO `zz_importer` VALUES (,'', '', 'gb');
INSERT INTO `zz_importer` VALUES (,'', '', 'big5');
B.对于用户添加的问题:
1.假设下简体中文下.用户因为页面头为UTF-8.则用户浏览器会以utf-8编码
方式浏览页面。
2.添加的数据库本身以utf-8方式存在。
3.添加数据时候,要分别用gb来标识语言版本
INSERT INTO `zz_importer` VALUES (,'', '', 'gb');
C.对于简体和繁体是单独提供还是转化问题
单独提供 - 比较符合多语言的标准,灵活性大,对ISP没有特别的要求。
转化提供 - 提交速度会受影响,同时要ISP提供iconv的函数支持。
3.用户访问语言统一
A.假设用户简体中文版时候:
<meta http-equiv="content-type" content="text/html;charset=UTF-8">;
所有语言版本都是这样。
B.调用language/gb的语言包。
C.搜索数据库有语言字段为gb的数据,并显示
D.当用户提交信息,参照上面数据库多语言的B问题。
最后就是对多语言网站的管理,后台管理员最好掌握对多国语言更好。
第二种方法,直接写JavaScript代码
自定义多语言网站
程序代码用JavaScript做的,
代码如下:
- <?php
- include "lib/function.php";
- ?>
- <script src="js/language.js"></script>
- <?php
- if(isset($_GET["language"])){
- $_SESSION["language"] = $_GET["language"];
- }else{
- $_SESSION["language"] = getDefalutlanguage();
- }
- $language_name = getLanguageName($_SESSION["language"]);
- include "lang/".$language_name.".inc";
- ?>
- <SELECT NAME="language" id="language" onchange="changeLanguage(this)">
- <?php
- $language_array = array_language();
- foreach($language_array as $key => $value){
- if($_SESSION["language"] == $value){
- $selected = "selected = 'selected' ";
- }else{
- $selected = "";
- }
- ?>
- <OPTION VALUE="<?php echo $value;?>" <?php echo $selected;?>><?php echo getLanguageName($value);?></OPTION>;
- <?
- }
- ?>
- </SELECT>
- <?php
- if($_GET["language"] == $value){
- //$selected = "selected = 'selected' ";
- }
- echo "语言:".$_SESSION["language"];
- echo "测试:".$name;
- ?>
2. 所包含的语言包:English.inc
- <?php
- $name = "name";
- ?>
- <?php
- $name = "名字";
- ?>
- <?php
- function getVailableLanguage() {
- $language = array(
- 'af' => 'Afrikaans',
- 'az' => 'Azerbaijani',
- 'eu' => 'Basque',
- 'be' => 'Belarusian',
- 'be-lat' => 'Belarusian latin',
- 'bg' => 'Bulgarian',
- 'bs' => 'Bosnian',
- 'ca' => 'Catalan',
- 'zh' => 'Chinese',
- //'zh-TW' => 'Chinese traditional',
- //'zh-CN' => 'Chinese simplified',
- 'cs' => 'Czech',
- 'da' => 'Danish',
- 'de' => 'German',
- 'el' => 'Greek',
- 'en' => 'English',
- 'es' => 'Spanish',
- 'et' => 'Estonian',
- 'fa' => 'Persian',
- 'fi' => 'Finnish',
- 'fr' => 'French',
- 'gl' => 'Galician',
- 'he' => 'Hebrew',
- 'hi' => 'Hindi',
- 'hr' => 'Croatian',
- 'hu' => 'Hungarian',
- 'id' => 'Indonesian',
- 'it' => 'Italian',
- 'ja' => 'Japanese',
- 'ko' => 'Korean',
- 'ka' => 'Georgian',
- 'lt' => 'Lithuanian',
- 'lv' => 'Latvian',
- 'mk' => 'Macedonian',
- 'mn' => 'Mongolian',
- 'ms' => 'Malay',
- 'nl' => 'Dutch',
- 'no' => 'Norwegian',
- 'pl' => 'Polish',
- 'pt-BR' => 'Brazilian portuguese',
- 'pt' => 'Portuguese',
- 'ro' => 'Romanian',
- 'ru' => 'Russian',
- 'si' => 'Sinhala',
- 'sk' => 'Slovak',
- 'sl' => 'Slovenian',
- 'sq' => 'Albanian',
- 'sr-lat' => 'Serbian latin',
- 'sr' => 'Serbian',
- 'sv' => 'Swedish',
- 'th' => 'Thai',
- 'tr' => 'Turkish',
- 'tt' => 'Tatarish',
- 'uk' => 'Ukrainian',
- );
- return $language;
- }
- function getLanguageName($language) {
- $languages = getVailableLanguage();
- return $languages[$language];
- }
- function array_language(){
- $array_language = array("en","zh");
- return $array_language;
- }
- function getDefalutlanguage(){
- return "zh";
- }
- ?>
- function changeLanguage(obj) {
- var url = document.URL;
- var re = re = /[?&]language=[^&]*/;
- url = url.replace(re, "");
- if (url.indexOf("?") > -1) {
- url += "&language=" + obj.value;
- } else {
- url += "?language=" + obj.value;
- }
- location.href = url;
- }
来源:oschina
链接:https://my.oschina.net/u/183102/blog/552535