让网站全球化

让网站全球化可以吸引更多的用户和访问,全球化最重要的就是让各地的人都看得懂你的网站上写了些啥。在我玩联机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

本站文章未经文下加注授权不得拷贝发布。

0 0 投票数
打分
订阅评论
提醒
guest
4 评论
内联反馈
查看所有评论
RTNelo
游客
RTNelo
11 年 前

Python有个标志符为 _ 的函数

小鬼哥
游客
11 年 前

这样翻译出来不通顺吧,而且还需要词典……