i18n

PHP国际化gettext i18n实例

随着国际化进程的加快,越来越多的项目需要添加国际化的支持,如外贸网站,面向国际市场的游戏等等.PHP可以通过许多方式实现国际化[详见:PHP国际化-i18n机制教程],但比较现代的方式是使用gettext实现国际化.

gettext 是GNU国际化与本地化(i18n)函数库。它常被用于编写多语言程序。

著名的wordpress以及phpmyadmin就是使用的gettext,使用gettext的wordpress和phpmyadmin对国际化的支持都非常好.

gettext国际化需要用到两个文件,一个.po (Potable Object),一个 .mo (Machine Object),字面意思已很清楚,一个是便携对象,方便人工阅读/修改,一个是机器对象,供程序使用,下面会具体讲到.

 

1.确保gettext扩展已经开启

gettetx_enabled
gettetx_enabled

 

2.下载PoEdit编辑器,编辑.po文件,并生成.mo文件 [直接下载demo]

i18n_dir
i18n_dir

3.PHP示例代码


lang= domain=
  1. Hello

  1. Thank you

4.测试en_US(英语-美国)

gettext_en_US
gettext_en_US

5.测试es_US(西班牙语-美国)

gettext_es_US
gettext_es_US

6.注意

测试前使用locale -a查看系统是否支持目标语言,如不支持,会导致gettext无效,可以安装新的语言包解决
另外在写程序时,尽量使用sprintf( _( 'My name is %s , %s years old' ), $name,$age);
少用_(''My name is ').$name.','.$age._(' years old');因为由于语言文化的不同,某些语句的写法,词语顺序,不尽相同,使用sprintf可以增强翻译灵活度
%1 $ S

发表回复