关闭

多语言网站解决方案 v2.00

1388人阅读 评论(0) 收藏 举报

转自:http://nightcat.512j.com/xoops/modules/wordpress/index.php?p=129

###############################################
#
#DocName:多语言网站解决方案
#Time:2005-6-29
#modifyTime:2005-10-29
#EMail:liwenfei@21cn.com
#WebSite:nightcat.512j.com
#version : v 2.00
#
###############################################

前言:
多语言网站开发,重点的还是在解决语言之间的问题。
那如何解决这个问题呢?大概就分三步走:

1.页面多语言
2.数据库多语言
3.用户访问语言统一

1.页面多语言
需要考虑的问题:
A.用户登陆时候,自动识别字符,调用不同的语言包?
B.用户切换不同语言时候,调用不同的语言包?
C.增加多语言后的目录结构?

页面多语言也就是外观的多语言化,这里可以采用静态的语言包的方式。
设计时候就应该包括language的目录,针对不同语言有独立的子目录。
如英文language/en ,简体中文language/gb,繁体中文language/b5 (可以扩展其他语言)
每个目录下就包含了对每个页面的语言版本。选择语言版本时候就可以调用相应版本的语言包。

具体做法:
0.利用js语言,识别浏览器语言,在调用不同的语言包.

1.language/en/global.ln是针对英文版的全局语言包。

2.global.ln 内容为:
$title = “English webstie”;
$charset = “UTF-8″;

3.index.php调用:

用require_once调用 anguage/en/global.ln .
指定主题和和字符集 $title 和 charset=$charset
这样通过扩展就可以实现页面的多语言化.

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.假设用户简体中文版时候:

所有语言版本都是这样。

B.调用language/gb的语言包。

C.搜索数据库有语言字段为gb的数据,并显示

D.当用户提交信息,参照上面数据库多语言的B问题。

php 网站使用 UTF-8 注意事项:

1.确定数据库默认使用UFT8编码.mysql 4.1.XX 以后有几个地方设置语言要统一,
character set client utf8 utf8
character set connection utf8 utf8
character set database utf8 utf8
character set results utf8 utf8
character set server utf8 utf8
character set system utf8 utf8

collation connection utf8_general_ci utf8_general_ci
collation database utf8_general_ci utf8_general_ci
collation server utf8_general_ci utf8_general_ci

检查方法:
mysql> show variavle like ‘character_set_%’;
编码应该是utf8
mysql> show variavle like ‘collation_%’;
编码应该是utf8_general_ci

如果不是,修改my.ini(windows)或者my.cnf(linux) 文件

For windows,检查my.ini.
确保[mysqld]下面有:
default-character-set=utf8

For slackware linux 检查my.cnf.
如果没有配置,就复制mysql目录下的my.XX.cnf文件到/etc/my.cnf
确保[mysqld]下有:
character_set_server = utf8
[mysql]下面有:
default-character-set=utf8

2.确保所有的文件都是utf编码,如果不是通过各种工具转化.UtralEdit就有很容易的方法
不过是针对单一文件.批量要选择其他工具如CovertZ

提醒:使用UtralEdit要在advanced->configuration->general 去掉两个write utf8 bom 选项.
要不保存起来的php文件,当使用session_start()时候会出现 headers 已经发送的错误.

3.如果上面的方法已经实现了多语言支持就不必要下面,但是还是不行.还是会出现??的乱码。
这还是由于字符集之间不统一的问题,可能是connect的连接字符不对,
可以在连接后使用set names ‘utf8′,指定使用utf8来连接。

$p->connect(host,user,pass);
$sql = “set names ‘utf8′ ”;
$p->query($sql);

4.所有HTML页面都是包含

以上四步就差不多保证你utf8编码的一切能正常工作.
在MySQL 4.1.7-nt(windows) / MySQL 4.1.11-standard(linux)通过测试.

使用phpMyadmin 的语言配置

1.字符集
Language设置为: Chinese Simplified (zh-utf-8) ;
MySQL字符集为:UTF-8 Unicode (utf8);
MySQL 连接校对为:utf8-unicode _ci ; .

2.表
建立的新表,统一使用charset utf8

3.数据
用传输的数据使用utf8编码.
提交的表单,页面头meta 使用charset = ‘utf8′.
导入的文件是utf8编码的.

4.显示
页面头meta 使用charset = ‘utf8′.


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:401239次
    • 积分:5744
    • 等级:
    • 排名:第4665名
    • 原创:143篇
    • 转载:195篇
    • 译文:0篇
    • 评论:47条