- 浏览: 2016179 次
- 来自: 武汉
文章分类
- 全部博客 (415)
- UI设计 (19)
- PHP (26)
- PHP工具类 (23)
- 二次开发 (53)
- phpMVC (28)
- javascript (50)
- JS 组件 (20)
- MYSQL (37)
- 其他 (16)
- xml/flash/flex (6)
- 版本控制 (7)
- 开源 (4)
- bug解决 (5)
- Linux (15)
- NoSQL (14)
- 软件设计 (21)
- C/PHP内核 (5)
- 安全性 (8)
- 面试 (18)
- 设计模式 (4)
- 重构 (6)
- 开发配置 (11)
- SQL SERVER (12)
- 采集 (3)
- SEO (2)
- 维护 (15)
- UML (5)
- 硬件标准 (1)
- 架构 (8)
- JAVA (1)
最新评论
-
carry0987:
求大神分離下X3的模板...不然對於PHP7不友好啊...
分离自Discuz模板类和语法 -
青木得海角:
你好,里面的 Crypt/TripleDES.php 和 Cr ...
POS机算法 -
zohog:
楼主,Mac.php中里面的 Crypt/TripleDES. ...
POS机算法 -
zohog:
楼主,Mac.php中里面的 Crypt/TripleDES. ...
POS机算法 -
q59200182:
能不能给个完整的demo 新手上路不会 求带
AngularJs 指令directive之controller,link,compile
通常人们写程序时都是将文字写死在程序里的,比如:echo "Hello World!"; ,假如要改成它国语言,写国际化程序,就要逐个打开进行修改,程序较短时还行,若程序有上万甚至更多,改起来就不是那么容易了。近来随着i18n的逐渐标准化,我也来讲一讲在PHP中如何实现国际化支持。跟其他程序语言一样,在 PHP 也可以利用 gettext 套件写作 i18n 程序,实现 NLS(Native Language Support) 国际化支持。
实现流程:程序设计者在程序码中写入所要显示的信息,在运行程序时并不会直接显示程序设计师所写的信息,而会先去找一个所设置语系的信息档。如果未找到,才会去显示程式码中的信息。
一、安装设置gettext
套件:
windows系统:
1、打开php.ini档,查找extension=php_gettext.dll,去掉前面的“;”
2、保存,然后restart server。
若一切顺利,就可以在 phpinfo() 中看到 gettext 字样,至此已设置完毕。
二、php_gettext.dll套件里有好几个函式,具体请看相关的manual。在这里我们只用记住3个函式就行了,如下:
string bindtextdomain ( string domain, string directory)
string textdomain ( string text_domain)
string gettext ( string message)
2,php-gettext的使用.以一个具体的例子说明
如果debian系列的linux用户,注意查看本地语言支持。 vim /usr/share/i18n/SUPPORTED
中文:zh_CN.UTF-8
英文:en_US.UTF-8
德文:de_DE.UTF-8
法文:fr_FR.UTF-8
如果没有,则相应的安装之。方法:sudo apt-get locale-gen zh_CN.UTF-8
在php程序中,可以使用gettext()来标记需要翻译的语言包,gettext()函数常用_()代替;
2.1 建立文件目录
mkdir gettext
cd gettext
touch Locale.php
touch test.php
//中文mo文件的地方.
mkdir -p Locale/zh_CN/LC_MESSAGES
//英文文mo文件的地方.
mkdir -p Locale/en_US/LC_MESSAGES
至于编辑工具,由于 po 文件本身就是一个文本文件,所以任何文本编辑器都可以使用。除了专门编辑 po 文件的 poEdit
,还推荐使用 poEdit
、EditPlus
、UltraEdit
或者你喜欢的 vi
或 vim
。
汉化mo文件需要的工具叫gettext,去http://gnuwin32.sourceforge.net/packages/gettext.htm
下载一个回来安装,然后运行:
msgunfmt.exe d:\english.mo -o d:\english.po
对english.po进行编辑、翻译,完成后再运行:
msgfmt.exe -o d:\chinese.mo d:\english.po
然后就编译完成了chinese.mo文件。
AccountSections.php
_('Could not retrieve the requested section please try again.');
mo文件中对应:
#: AccountSections.php:187
msgid "Could not retrieve the requested section please try again." //对应页面调用的key
msgstr "不能取回要求的类别, 请重试" //显示文字
2.2 Locale.php文件代码
<?php /** * Dh_Locale 语言包类 * * 系统语言包采用的是php-gettext模块. * 如果模板使用的是smarty.使用了smarty-gettext插件.插件地址http://sourceforge.net/projects/smarty-gettext/ * php-gettext的安装和使用(ubuntu平台下) * 1 Installation of gettext package: sudo apt-get install php-gettext * 2 Install locales: see all locales in the file vim /usr/share/i18n/SUPPORTED * 3 设置文件目录结构;如: Locale/zh_CN/LC_MESSAGES 或者 Locale/en_US/LC_MESSAGES * 4 如果是smarty模板(使用{t}你好{/t}标记)。生成.c格式的文件;如:php -q tsmarty2c.php $file > text.c * 5 生成.po格式的文件;xgettext -o Dh.po --join-existing --omit-header --no-location text.c * 6 生成.mo格式的文件;msgfmt Dh.po -o Dh.mo * 7 移动mo文件到相应的Locale/en_US/LC_MESSAGES文件夹下面 * * @package * @version $id$ * @copyright 1997-2005 The PHP Group * @author erhuok <erhu.ok@gmail.com> * @license PHP Version 3.0 {@link http://www.php.net/license/3_0.txt} */ class Dh_Locale { /** * _options 设置语言包的选项 * * $this->_options['lang'] 应用程序使用什么语言包.php-gettext支持的所有语言都可以. * 在ubuntu下使用sudo vim /usr/share/i18n/SUPPORTED 主要是utf8编码 * $this->_options['domain'] 生成的.mo文件的名字.一般是应用程序名 * * @var array * @access protected */ protected $_options; /** * __construct 构造函数 对象初始化时设置语言包的参数 * * @access public * @return void */ public function __construct($lang=null) { switch ( $lang ) { case 'cn': $this->_options = array('lang' => 'zh_CN.utf8','domain'=>'Dh'); break; case 'en': case 'us': case 'eu': $this->_options = array('lang' => 'en_US.utf8','domain'=>'Dh'); break; case 'de': $this->_options = array('lang' => 'de_DE.utf8','domain'=>'Dh'); break; case 'fr': $this->_options = array('lang' => 'fr_FR.utf8','domain'=>'Dh'); default: $this->_options = array('lang' => 'zh_CN.utf8','domain'=>'Dh'); break; } $this->setApplicationLocale(); } /** * setOptions 设置应用程序语言包的参数 放在在数组$this->_options中 * * @param mixed $options * @access public * @return void */ public function setOptions($options) { if(!empty($options)) { foreach ($options as $key => $option) { $this->_options[$key] = $option; } } } /** * setApplicationLocale 设置应用程序语言包 * * @access public * @return void */ public function setApplicationLocale() { putenv('LANG='.$this->_options['lang']); setlocale(LC_ALL,$this->_options['lang']); bindtextdomain($this->_options['domain'],dirname(__FILE__).'/Locale/'); textdomain($this->_options['domain']); bind_textdomain_codeset($this->_options['domain'],'UTF-8'); } } ?>
2.3 测试用例
<?php require_once dirname(__FILE__).'/Locale.php'; //cn or en $Lang = 'cn'; $Locale = new Dh_Locale($Lang); $Checkout['AddressFields'] = array ( 'Email' => array ( 'Type' => 'text', 'Label' => _('邮箱'), 'Title' => _('请填写邮箱'), 'Class' => 'required', 'Filter' => 'string', ), 'PostCode' => array ( 'Type' => 'text', 'Label' => _('邮政编码'), 'Title' => _('请填写邮政编码'), 'Class' => 'required', 'Filter' => 'int', ), ); echo '<pre>';print_r($Checkout);echo '</pre>'; ?>
- PO与MO互转工具.zip (754.4 KB)
- 下载次数: 11
发表评论
-
PHP实现Mysql网站安装程序制作
2012-12-19 13:38 1617其实PHP程序的安装原理无非就是将数据库结构和内容导入到相应的 ... -
php接收邮件类
2011-07-18 16:19 7590通过POP3/IMAP / NNTP连接到邮箱,使用PHP ... -
FTP类
2011-07-18 11:32 1851<?php /** * FTP操作类 * @a ... -
PHP RSS/Feed类库
2011-06-23 14:10 1797通用PHP RSS/Feed 生成类库(支持RSS 1.0/2 ... -
php 生成迅雷快车旋风链接
2011-06-21 16:15 1653<?php function zhuanh ... -
PHP 自动加载对象(以MVC框架为例)
2011-06-20 15:07 5265<?php class autoloader { ... -
php 时间日期工具类 星座/干支/生肖
2011-06-17 17:06 2720如果系统没有设置时区,那么获得的结果是UTC时间,相对中国 ... -
比较全面的php session验证码与防识别
2011-05-17 11:40 3278验证码开发过程中的 3 个误区: 1、 背景干扰: ... -
多语言国际化1
2011-02-23 16:36 1689//======================== ... -
PHP读取配置文件类(php,ini,yaml,xml)
2011-02-18 11:27 3975https://github.com/dannyhu926/p ... -
php zip pdf word rar类库
2011-01-28 13:33 1896pdf2swf+flexpaper解决pdf在线阅读(类百度 ... -
php取得客户端信息类
2011-01-28 11:04 1981<?php /** * * 根据sina ... -
php文件目录操作类
2011-01-28 10:56 3601https://github.com/dannyhu926/p ... -
PHP文件下载类
2011-01-27 11:17 1877<?php /** $filename = 'i ... -
数据库操作类mysql/mysqli/pdo
2011-01-20 18:48 2243PDO,MYSQL,MYSQLI的各自不同介绍,PDO,M ... -
php数组工具类
2010-11-25 09:14 2016数组《=》对象 /* * 数 ... -
PHP mysql数据库读写分离
2010-11-16 19:25 1522MYSQL的读写分离实现有2种思路 MySQL中间件 用 ... -
PHP邮件发送类
2010-06-17 20:25 3977Swift Mailer 和前面介绍的PHPMailer一 ... -
比较全面的php分页导航类
2010-06-11 15:33 2125瀑布流分页:当浏览者浏览了当前页面内容后,向下拉动浏览器滚动 ... -
php汉字换转成拼音
2010-05-25 14:40 1951<?php /** * PHP 汉字转拼音 ...
相关推荐
包含测试的php文件和gettext-0.14.4.exe,以及Poedit.exe 使用方法: 访问test.php?lan=zh_CN则显示简体 访问test.php?lan=en_US则显示英文 教程地址:https://www.cnblogs.com/-mrl/p/10949820.html
gettext,PHP,多语言,国际化编程
django gettext poedit 国际化 django国际化工具gettext和poedit
gettext 0.17 django国际化工具
是想用django做国际化吗,或者编译po文件为mo文件? 这时0.18版本,完全满足django1.4.5对于gettext0.15以上的要求。 非常简单,解压缩文件,然后将文件路径\bin加入到环境变量path中。 这样,在django中就可以用...
PHP Smarty通过gettext制作多语言版本
PHP Smarty通过gettext制作多语言版本
NGettext, gnu/gettext库的跨平台. NET 实现 NGettext gnu/gettext库的跨平台. NET 实现。这个完全管理的库在 .NET 版本或者更高版本,甚至在完整aot运行时上收费。 它拥有英镑的com 和符合CLS的。这个实现直接从 ...
Gettext是通常用于编写多语言程序的国际化(i18n)和本地化(l10n)系统。 Gettext是不同社区中i18n的标准,这意味着为开发人员和翻译人员提供了大量工具。 该项目是Elixir中Gettext系统的实现。 安装 将:gettext...
有些Linux系统缺少gettext库,需要自己手动编译安装。
Laravel开发-gettext 将php gettext库集成到Laravel4中
GetText
前端开源库-angular-gettext-toolsAngular GetText工具,用于提取/编译Angular GetText字符串的工具。
Gettext 用于系统的国际化(I18N)和本地化(L10N),可以在编译程序的时候使用本国语言支持(Native Language Support(NLS)),其可以使程序的输出使用用户设置的语言而不是英文. 关于gettext的更多资料请参见: 下面说说...
Stone.js:JavaScript i18n库 Stone.js是一个类似于客户端gettext的Javascript国际化库,它提供了许多有用的功能,例如: 立即翻译(gettext) 使用惰性字符串(lazyGettext)的不同翻译Javascript和HTML国际化翻译...
可以方便实现Delphi和BCB开发的软件实现国际化目标. 全部为开源免费. 工具集中包含如下几个部分: 1. gnugettext.pas的使用说明 -- manual(GnuGetText.pdf); 2. gnugettext.pas源代码; 3. ggt-translate-setup.exe --...
Django国际化 gettext最新windows64位安装包 gettext 是一套 GNU下的国际化工具。主要有工具: xgettext: 从源码中抽取字符串,生成po文件(portable object) msgfmt: 将po文件编译成mo文件(machine object) gettext:...
PHP多语言翻译 和php的gettext函数类似 内附demo 有兴趣的可以看下 mo文件生成要用poedit自己百度生成去