让网站全球化可以吸引更多的用户和访问,全球化最重要的就是让各地的人都看得懂你的网站上写了些啥。在我玩联机OSU的时候甚至很多外国人让我们不要说日语。。。。[这是傲娇卖萌?]
那么接下来进入正题,刚刚中午趴在床上很无奈的想到了这个问题。[为啥无奈呢?因为又不想起床,不起床又没有wifi信号。。。。],实际上也是我为iTi想的问题,有可能我已经想的太远了,但是有些想法还是很好的。
特别加注
很多围观者还没仔细看完就私下告诉我直译不通什么的。。。
这种方法只是用于翻译小区块的文字的,比如“登录”,“取消”之类的,不是用来翻译大片文章的,大篇文章的翻译工作为了用户体验必须单独成库或者成表。
首先说一下简单逻辑:
>定义翻译表
>传入原文
>检测翻译表
>返回对应值
大体就是这样了。
然后就开始进行具体操作
1.定义一个翻译表
翻译表本身意向是放在memcache里作为数组调用的,但是暂时只做个演示不想那么麻烦,所以写进了一个叫langs.php的文件里。
里面的内容如下
用像这样的形式保存翻译内容,存放在memcache里时格式一样。上面分别用不同的数组保存了不同语言的翻译,当然下面的英文和日文就懒得写了,现在只表示一下中文,而且我的系统语言是中文也只有中文可以看到效果。
2.做好翻译函数
明确了翻译表格式以后就可以用翻译函数来使用他们了。
下面都是”translate.php”文件里的内容
/* 声明 Tseted by LuoJia Language in code:Chinglish(Chinese type Ehglish) 由于我是个鸟语不是特别好的中国人,所以在这里用中式鸟语凑活一下 */
首先定义一个最主要的函数,他用来加载语言表
function tslt_getlang(){ global $userlang; //定义一个全局变量$userlang(用户语言) global $tslttable; //引入全局变量$tslttable(翻译表) require_once("langs.php");//加载语言文件,如果用的是memcache的话这里应该是连接memcache服务器 // ↓把用户语言截前6个字符出来,为了更准确也可以不截 $userlang=substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,6); //↓从这里开始都是进行语言匹配并载入翻译表 if(preg_match("/en/i",$userlang))$tslttable=@$en;//各个语言赋值前最好都加上@以防止报错 elseif(preg_match("/zh-CN/i",$userlang)||preg_match("/zh-CHS/i",$userlang))$tslttable=@$zh_chs; elseif(preg_match("/ja/i",$userlang))$tslttable=@$jp; else $tslttable=NULL; //如果没有符合的语言,就给翻译表赋值为NULL }
然后就开始做主角了,它用来翻译[对照]传入的字符串
function tslt($string){ //翻译函数 global $tslttable; //全局数组翻译表 if($tslttable){ //如果翻译表存在的话 if(array_key_exists($string,$tslttable)){ //如果翻译表里有 return $tslttable[$string]; //返回翻译表里对应键值内容 }else return $string; //不然还把原本的字符串送回去 }else return $string; //同上 }
上面的函数作用只是翻译字符串,如果方便地使用它,再做一个名字简短的函数来输出翻译结果
function __($string){ //函数名为"__"(两条下划线),这个函数名是从wordpress模版里看到的,觉得简短又不错 echo tslt($string); //翻译结果输出到文档 }
最后做一个翻译初始化函数,虽然现在里面只有一个函数觉得没什么必要,但是实际使用的时候可能还会有点其它的要求,比如决定到底是否要翻译
function tslt_init(){ tslt_getlang(); }
到这里翻译函数就差不多了,整个翻译过程是这样:
>最开始时初始化翻译表
>语言存在就载入翻译表,不存在赋空值
>调用翻译函数
>翻译表是空值就直接返回原文
>不是空值就翻译
>输出
3.测试
现在在主文件里写入以下内容
最后在浏览器里会出来这样的结果[亲测]
你好 z 自行车 所有成员:2 luojia:250
这和wordpress的Twenty系列模版不同的地方在于WP的模版只指定一个语言并从一个语言文件里提取翻译,不会随用户改变。我写的是根据用户浏览器语言来返回对应语言的翻译方法。[虽然本质差不多。。]
有什么漏洞的话请告诉我,这可能关系到iTi的生死。
本文发布于 https://luojia.me
本站文章未经文下加注授权不得拷贝发布。
Python有个标志符为 _ 的函数
简单的说就是名字短。。。
这样翻译出来不通顺吧,而且还需要词典……
又不是机翻怎么会不通顺。。。。这只是把原来应该直接写在HTML里的字存到其他地方调用而已。可能你没看懂我的本意吧