动态内容国际化,数据库设计

一个系统同时可以支持多种文字,简单说,同一个网站,既有中文版,英文版,法文版......
那么这里就存在一个语言选择的问题,软件本身的语言选择就是我们耳熟能详的“国际化”,根据用户的区域,或者设置选择对应的语言。但是软件中有很多内容是靠用户维护进去的,比如网站首页的“公司新闻”,这样的“内容”要做到选择相应的语言显示就不是前面说的软件“国际化”可以做到的了。

 

根据各位兄弟的意见,我总结了一下,主要分两类解决方法:
1。 使用智能翻译。根据用户的设置,把内容翻译成对应的语言,即内容只需输入一次,如输入中文,当日文用户浏览的时候,显示对应日文内容;当英文用户浏览时,对应显示英文内容。

Google Translate API For PHP是一个基于Google Translate开发的翻译类,可以帮助PHP程序员实现多国文字的翻译。本类使用到了Google的AJAX Translate API和Snoopy类,以模拟HTTP请求的方式实现数据的翻译。

2。 为每个语种设计一套数据库,维护“内容”时,每种语言都维护进去,table_cn, table _en
3。 设计一套适用多种语言的数据库。例如使用一个数据字典来定义每一种语言,然后在维护每一种语言进去,建立两张表,Language和Content,Language相当于一个数据字典,列出系统用到的所有语种。Content表就是维护的内容——也就是我们想解决的多语种显示的东西。两张表表样如下:

Language
  id----|---langeuage-----|---description----
  1-----|---------zh--------|------中文---------
  2-----|---------en--------|------英文---------
  3-----|---------fr---------|------法文---------

 

 

Content
id----|---content----------------|---languageId------
1-----|----你好!----------------|------1------------
2-----|----How are you!---------|------2------------
3-----|----fa wen bu hui---------|------3------------
这样Content表中就保存了需要语种的所有的语言信息(当然要维护进去),然后再根据用户的需要,对应Language表选择出对应语种的Content内容。

 

开启curl, charset=gb2312

<?php
header("Content-Type:text/html; charset=gb2312");
class Google_API_translator{
    public $opts = array("text" => "", "language_pair" => "en|it");
    public $out = "";
    function setOpts($opts) {
        if($opts["text"] != "") $this->opts["text"] = $opts["text"];
        if($opts["language_pair"] != "") $this->opts["language_pair"] = $opts["language_pair"];
    }

    function translate() {
        $this->out = "";
		$google_translator_data ='';
        $google_translator_url = "http://translate.google.com/translate_t?langpair=".($this->opts["language_pair"])."&";
        $google_translator_data .= "text=".($this->opts["text"]);

        $gphtml = $this->postPage(array("url" => $google_translator_url, "data" => $google_translator_data));
        $out = substr($gphtml, strpos($gphtml, "<span id=result_box class=\"short_text\">"));
        $out = substr($out, 29);
        $out = substr($out, 0, strpos($out, "</span>"));
        $this->out = str_replace("ort_text\">","",strip_tags(utf8_encode($out)));
        return ($this->out);
    }

    function postPage($opts) {
        $html ='';
		if($opts["url"] != ""&&$opts["data"]!= "") {
			$ch = curl_init($opts["url"]);
			curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
			curl_setopt($ch, CURLOPT_HEADER, 1);
			curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
			curl_setopt($ch, CURLOPT_TIMEOUT, 15);
			curl_setopt($ch, CURLOPT_POST, 1);
			curl_setopt($ch, CURLOPT_POSTFIELDS, $opts["data"]);
			$html = curl_exec($ch);
            if(curl_errno($ch)) $html = "";
			curl_close ($ch);
        }
        return $html;
    }
}
$g = new Google_API_translator();
$g->setOpts(array("text" => "这是一个测试", "language_pair" => "zh-CN|en"));
$g->translate();
print_r($g->out);
?>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值