用php gettext库来开发多语言系统
通常人们写程序时都是将文字写死在程序里的,比如: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)
三、写作i18n程序:
<?php
// 常规的程序
echo
"Hello World!"
);
?>
下面是 i18n 程序:hello.php
<?php
// I18N 程序范例开始
define
(
'PACKAGE'
,
'hello'
);
// 定义要用的mo文件名称,常规来说,我们都把PACKAGE的名称定义和程序名称相同。
putenv
(
'LANG=zh_CN'
);
setlocale
(
LC_ALL
,
'zh_CN'
);
// 指定要用的语系,如:en_US、zh_CN、zh_TW
bindtextdomain
(
PACKAGE
,
'e:/phpbulo.com/language'
);
textdomain
(
PACKAGE
);
// The .mo file searched is:
// e:/phpbulo.com/language/zh_CN/LC_MESSAGES/hello.mo
echo
gettext
(
"Hello World!"
);
?>
在IE中输入:http://localhost/hello.php,输出结果为:“Hello World!”
note:按照 GNU package 里面的习惯,可以使用 _(...) 来代替 gettext(...) ,这样就可以少打很多 gettext 了。
四、接下来设置gettext po档:
1、创建目录结构,如下所示:
bindtextdomain's dir
/language
/LC_MESSAGES
相关文档:
final---用于类、方法前。
final类---不可被继承。
final方法---不可被覆盖。
final类不能被继承。
如果我们不希望一个类被继承,我们使用final来修饰这个类。
于是这个类将无法被继承。
比如我们设定的Math类,涉及了我们要做的数学计算方法,这些算法也没有必要修改,也没有必要被继承,我们把它设置成final类型。 ......
类实现接口要使用 implements 。类实现接口要实现其中的抽象方法。一个类可以实现多个接口。
一个类可以使用 implements 实现接口,甚至可以实现多个接口。
大部分的书说,这样是为了实现PHP的多继承。为什么呢?
PHP5是单继承的,一个类只可以继承自一个父类。接口可以实现多个,这样就是多继承了。
这样说有些道理。 ......
<?php
/*
* -------------------------------------------------
* Author : Fanglor
* Email : Fanlor@163.com
* Url : www.skyleft.com
* Date : 2009-10-13
* -------------------------------------------------
*/
function arr_foreach ($arr) {
if (!is_array ($arr)) {
return fa ......
0、用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册中说echo是语言结构,不是真正的函数,故把函数加上了双引号)。
1、如果能将类的方法定义成static ......
环境软件版本介绍:
APACHE 2.0.59
PHP5.2.3
MYSQL5.0.45
GD-2.0.35
Zend Optimizer v3.3.0
&n ......