通过 php gettext js gettext 程序国际化

程斌 2016-11-18 AM 2666℃ 0条

名词解释:
程序国际化:它要求从产品中抽离所有的与语言,国家/地区和文化相关的元素。换言之,应用程序的功能和代码设计考虑在不同地区运行的需要,其代码简化了不同本地版本的生产。开发这样的程序的过程,就称为国际化

环境:
编程语言环境:PHP + Js
**:PHP需要安装gettext扩展;
框架:ThinkPHP

原理:
平常做多语言版本网站一样,维护一个键值对数组,键值统一用英文,根据某一条件(电脑语言环境设置、IP归属、手工设置),取对应的中文、英文、繁体 ...语言。
//各种语言的语言键值数组
cn_lang.php

$lang = ['Name'='名称'];

us_lang.php

$lang = ['Name'='Name'];

tw_lang.php

$lang = ['Name'='名稱'];

然后在模板调用的时候,不直接写固定的值,如:

    <title><?php echo $lang['Name'];?></title>

...

PHP GetText扩展:
为方便我们快捷完成网站国际化,php.net 介绍:http://php.net/manual/zh/book.gettext.php

工具下载以及安装:
gettext工具
下载地址:download.chengbin.name/?f=gettext
介绍:用来生成po文件,安装好了以后,需要把”安装路径/bin”添加到系统环境变量path里
Poedit工具
下载地址:download.chengbin.name/?f=poedit
介绍:编辑po文件,自动生成mo文件。

生成文件键值对文件:
假设我们都安装好了这些软件,现在我们开始对test.php进行翻译工作。打开命令提示符cmd,切换到test.php所在的目录。
输入 xgettext -d test test.php --from-code=utf-8 (当你要翻译的页面为index.php,只需要将蓝色部分改为index即可),然后执行,这时候你可以在test.php所在目录看到新生成的文件test.po
(用来生成po文件,安装好了以后,需要把”安装路径/bin”添加到系统环境变量path里)
输入 xgettext -d test test.php --from-code=utf-8
使用工具,生成po
根据po文件,借助Poedit工具,生成mo

PHP Demo

    <?php
    $set_lan = isset($_GET['lan'])?$_GET['lan']:'zh_CN';
    putenv('LANG='.$set_lan );
    setlocale(LC_ALL, $set_lan );  //指定要用的语系,如:en_US、zh_CN、zh_TW  
    $domain  =  'test' ;                     //域名,可以任意取个有意义的名字,不过要跟相应的.mo文件的文件名相同(不包括扩展名)。
    bindtextdomain ( $domain ,  "locale/" ); //设置某个域的mo文件路径    
    bind_textdomain_codeset($domain ,  'UTF-8' );  //设置mo文件的编码为UTF-8    
    textdomain($domain );                    //设置gettext()函数从哪个域去找mo文件    
    ?>  
    <html>  
    <head>  
    <meta http-equiv="Content-Type"  content= "text/html; charset=utf-8"  />  
    <title>title</title>  
    </head>  
    <body bgcolor="#FFFFFF"  text= "#000000"  link= "#FF9966"  vlink= "#FF9966"  alink= "#FFCC99" >  
    <?php echo gettext ( 'hello world.' ) ?>  
    </body>  
    </html>

Js Demo:

    <?php
    $locale='zh_CN';
    if(isSet($_GET["locale"]))$locale = $_GET["locale"];
    ?>
    <html>
    <head>
    <link rel="gettext" type="application/x-po" href="./locale/<?php echo $locale ?>/LC_MESSAGES/test.po" />
    <script type="text/javascript" src="Gettext.js"></script>
    <script type="text/javascript" src="jquery-1.8.2.min.js"></script>
    <script type="text/javascript" >
        window.onload = function init(){
            var gt = new Gettext({ 'domain' : 'test' });
            $('#hw').html(gt.gettext('Hello world'));
        }
    </script>
    </head>
    <body>
    <span id='hw'>Hello world</span>
    </body>
    </html>

Gettext.js下载
参考链接:
php:
http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/08/09/2132603.html
http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/08/10/2133292.html
js:
http://www.cnblogs.com/zhangjun516/p/3142426.html

非特殊说明,本博所有文章均为博主原创。

评论啦~