介绍一个PHP 多国语框架 v5.1:https://lang-php.com/?lang=zh-CN
有时候做网站的时候需要考虑多语言设计,比如外贸网站。即便是简体中文和繁体中文网站设计也不是简单的繁简转换就行的。
多语言网站面临的设计问题:
1、多语言语法问题
简体中文和繁体中文是现代汉语并存的两种书面形式。它们在语音、词汇、语法等方面都有明显差异,给大陆和港澳台地区的交流和沟通造成障碍。并不是简单的繁简对照替换就行的。如,繁体中文里的“家庭計划”对应简体中文中的“家庭的计划”和“计划生育”两个意义;简体中文中的“检讨”对应繁体中文的“检查”和“讨论”两个意义。后一个例子中的词语在理性意义和感情色彩都是不对应的。
即,繁简字存在字形转换模糊的不对称,更何况英语、法语、韩语….语法总归不是机器能解决的(至少目前不是)
2、数据库多语言
主要是录入信息的多语言化,涉及到数据库优化和数据库设计方面。对于不同架构、不同级别的网站系统设计也有不同之处。
3、页面多语言
这个,不解释,一般情况下都是用语言包解决此问题。不过,有些情况下,模板中div的宽度神马的都要考虑到语言包中对应的语句的长度,以免发生错位现象。
4、用户访问语言统一
用户初次访问时,判断用户语言环境,自动跳转…也不解释
解决方案:
1、简单:每个语言一个网站,还要注意分离用户系统
优点:简单解决。后顾无忧~
缺点:维护复杂,制作周期长~
2、简单的调用谷歌翻译整个页面
优点:简单、方便。
缺点:偶尔被墙、机器翻译总是有点语法用词不通顺
3、真正实现网站的多语言设计
优点:基本上解决以上所有问题
缺点:设计复杂,实现麻烦,有些情况下得不偿失
1、多语言语法问题解决:
这个,找专业翻译吧..不归你管
2、数据库多语言信息录入
01、简单实现:
1、比如,表中加lang字段,每条信息的lang字段不同的值,中文是zh-cn,英文是en
2、多一个语言版本表,用来存放语言版本,每个语言版本对应一个langid,添加信息的时候,信息表中的lang字段存放对应的langid,把lang字段设计成索引。其实跟上一种设计方法差不多。
3、每条信息对应一个分类(公告也可以分为多个分类嘛),比如:国内新闻(id=1)宝岛新闻(id=2)每个分类的信息表中有个字段lang,对应不同的语言,添加新闻信息的时候,分不同语言的分类添加信息,这样新闻信息表就不用lang字段区分不同语言的新闻了。用户访问的时候,不同语言的用户访问不同的分类,调用分类的时候区分开分类id就好了。嗯,分类有点多。不过这算是简单实现中最好的一种了吧
总结,此种方案适合小型系统,没什么鸭梨,网站全部静态化。缺点不好扩展~
02、一般实现:
1、继续优化设计(01、简单实现 中的 3 方法)。把不同语言的新闻信息分表储存,实现方法基本差不多。
总结:此方案适合中型应用。
03、复杂实现
1、同上设计方案,将不同语言信息分不同数据库存放。用户信息(账户、密码、语言界面)等单独存放。专门做一个用户系统,通过api和网站进行沟通。顺便实现同步登录神马的~嗯。不同语言相当于一个子站,组成一个站群。例如用户访问www.gookang.com,判断用户语言环境为zh-cn,接着跳转到cn.gookang.com。每个语言版本的子站,拥有不同的分类,不同的数据库,不同的界面等等.. 复杂度增加了。好处也是有的,不同的语言可以根据压力做分布式…嗯…思路上还需要再想想,完善下。
总结,好处是有的。缺点也是有的。不同情况不同分析吧。
2、更进一步就是在域名上做文章了,跳转就不用php做了。其他的么..再优化神马的~ = =你是要做类似雅虎那样的门户网站乜?每个国家一个网站..擦~压力山大!
3、页面多语言
1、php语言包+自定义lang()函数
比如一个网站的博客模块。
语言包存放位置:language/zh-cn/blog/tpl.lang.php
语言包中内容:return $lang = array(‘xxx’=>’{name}xxxxx,{age}xxxxxxxx’)
自定义函数lang($lang, $var=array()) $lang 语言key,$var 语言中的参数
调用的时候,lang(‘blog_tpl_xxx’,array(‘name’=>’t-chris’,'age’=>’21′));
最后结果:t-chrisxxxxx,21xxxxxxxx
关于错位情况,这个有时候可以把错位的地方的div神马的变宽点、变高点。不过可能会影响美观。
所以,最好是每种语言一套模板。这样保证了界面的统一性,用户体验也会爽点。
具体实现方法,此处省略1w字….
2、通过谷歌翻译。
有些情况下,你不愿意设计那么复杂的数据库,又是神马分表储存,又是神马分字段,分栏目….
“擦,分你妹啊分!还让程序员活不活?就那么几个程序员,整天改bug,改细节。累死人!程序不是你想改,想改就能改…..程序猿,你伤不起啊!!”
当当当当~~伟大的谷歌,它继承了“为人民服务”的光荣传统…现在,有谷歌翻译接口。
具体实现方法,请谷歌“translate API”神马的..记得查找中文,假如你英文不好的话…
【补充】 youtube就是利用的 谷歌API翻译内容.. 具体请
3、其他方法?
我没想到…
4、用户访问语言统一
获取浏览器的语言环境
$_SERVER['HTTP_ACCEPT_LANGUAGE']
js获取用户系统语言环境
通过ip判断
不解释~
还有其他….
获取之后,写cookie,写session.. 总之就是让用户访问其他页面的时候,网站语言能统一起来。