php高手之路之—纵横天下

想想,当您感觉到自己的已经非常牛X的时候,肯定想着自己写一个wordpress,或是discuz了.现在您开始考虑,如何架构一个国际化的(多语言)的程序了。
学会用不同的语言与不同的对手打交道,是纵横天下第一重要的事.
如何开始呢?
我所了解的有三种方案:
方案一:利用模板引擎,每一种语言,制做一套模板.选中不同的模板,就等于选用了不同的语言.模板引擎这玩意儿是已经被我批得不成样子了,因为php本身就是相当不错的模板.不过还是很多人用。您可以尝试smarty,phplib,fast template等。另外国内也有不少人自行开发模板引擎。一年以前,我也是他们中的一员。
方案二:不同的语言包含不同的文件。把要翻译的语句放在单独的文件中,选用不同语言时,require或是include不同的文件。例如:

$lang=”en_US”;
require(“lang/$lang/lang.php”);
echo $msg[“WELCOME”];
?>

而lang/en_US/lang.php中可能是:

$msg[“WELCOME”]=”Welcome to …”;
?>

要改成中文,需要添加lang/zh_CN/lang.php文件:

$msg[“WELCOME”]=”欢迎来到…”;
?>

对应的把文件中的代码改为下面的就行了:

$lang=”zh_CN”;
require(“lang/$lang/lang.php”);
echo $msg[“WELCOME”];
?>

目前大部分的程序,使用这种方法来达到国际化,多语种.比如Xoops.不过xoops在语言包文件中不是用数组来存储翻译的词语的,而是用Define(“MSG_WELCOME”,”欢迎来到…”)来存储的。这个是为了速度能更快.数组和常量存储的方式不一样.
但这样做的缺点也不言而喻。因为,您至少需要做一个语言包(一般而言是英文)而且需要记住那些词条名,比如MSG_WELCOME,MSG_REGISTER_SUCCESS等等.在程序中出现在就是MSG_WELCOME,MSG_REGISTER_SUCCESS这些不易看懂的内容,一旦您的语言包中缺少这一条,显示的就是空的,啥也没有.
方案三:使用Gnu
GetText方案.Gnu程序中推荐的是使用GetText函数.这个最初是在C语言中出现的。但是现在php中也有了gettext函数了.Wordpress中就是使用的这种方案.
看看其步骤.
第一步:
使用一个函数将您的字串包起来.您的程序应该写成这样子:

//file:test.php
echo __(“I am Mr Wung”);
function __($msgid)
{
return $msgid;
}
?>

您目前可以加上__($msg)函数的定义,函数可以直接返回msg本身.
第二步:生成语言文件:
(在linux中)运行 xgettext –keyword=__
test.php,完成后将会生成一个messages.po文件。内容如下:

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE’S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR , YEAR.
#
#, fuzzy
msgid “”
msgstr “”
“Project-Id-Version: PACKAGE VERSIONn”
“Report-Msgid-Bugs-To: n”
“POT-Creation-Date: 2007-03-20 11:44+0800n”
“PO-Revision-Date: YEAR-MO-DA HO:MI+ZONEn”
“Last-Translator: FULL NAME n”
“Language-Team: LANGUAGE n”
“MIME-Version: 1.0n”
“Content-Type: text/plain; charset=CHARSETn”
“Content-Transfer-Encoding: 8bitn”

#: test.php:3
msgid “I am Mr Wung”
msgstr “”

您看到了,messages.po中已经把程序中所有用__函数包起来的字符串找出来了。现在您编辑它,将最后一行中的msgstr
“”改为msgstr “我是王先生”;将倒数第六行中的charset=CHARSET改为charset=UTF-8;
现在再运行msgfmt
messages.po,将会在当前路径生成一个messages.mo文件.这个文件是编译以后的二进制文件,因为messages.po文件用来搜索字符串太慢了.
有了这个文件以后,__()函数就可以在messages.mo文件中进行查找,如果找到了对应的字符串,则可以给出翻译,如果找不到,就会直接返回它本身.而且,您用vim,editplus或是其他文件打开test.php文件,也能从echo __(“I am Mr Wung”)看出这一句是什么用途.相比之下,Xoops方式的echo MSG_I_AM_MR_WUNG;就晦涩多了.
至于__()函数,其实是一个别名,它实际调用了gettext函数.这个函数,在Wordpress中已经给出,是一个open项目.

PHP高手之路之—折柳为剑

php只可以做网站吗?NO!
我上talks.php.net,发现这里的人们不仅讨论用php来做网站,还用php来做应用程序,还有人用php完成了一个web服务器.国内的大师们,曾用php完成了一个web server,然后用这个server来解决php的一个顽疾:大文件上传问题.(见:http://www.ugia.cn/?p=70)
现在看看php如何做应用程序(目前只在linux下试过)

#! /usr/bin/php

echo “Hello world!n”;
echo “您输入了”.$_SERVER[“argc”].”个参数n”;
foreach($_SERVER[“argv”] as $v)
{
echo ” 参数:”.$v.”n”;
}
?>

存为hello_world.php.然后在shell中执行chmod +x hello_world.php.
接着运行./hello_world.php arg1 arg2看看结果:

Hello world
您输入了3个参数
参数./hello_world.php
参数arg1
参数arg2

看看,就是这么简单.
我个人比较喜欢console模式下写东西,遇到一些英文词不认识,就经常需要打开firefox
上dict.cn或是dict.yodao.com来查。后来就想了一个办法,用php写了一个脚本,去dict.yodao.com上查询,然后把html格式符号去掉,截取翻译的那一段来显示并缓存到本地.这一段,您也可以试试.
要查询当前程序是否运行在cli模式下,只需检查php_sapi_name==”cli”是否为真。
要更详细的内容,请查询php手册的Cli模式的相关内容。

php高手之路之—狐假虎威

首先要告诉你:如果要成为php高手,一定要学会用linux(Unix).如果不会linux,那你的php一定不精彩.
看看我这么一段:

$old_img=”/sites/www.123.com/files/0001.jpg”;
$new_img=”/sites/www.123.com/thumb/0001.jpg”;
`/usr/bin/convert $old_img -resize 120×96 $new_img`;
?>

其实关键的就一句,就完成了生成缩略图这么一个巨大的工程。因为,php中用``运算符就可以直接调用linux中众多的shell脚本命令,完成了许多之前你觉得没辙的工作。所以,认真看看`运算符.如果php中搞不定,那您就考虑,用不管是什么脚本,写好之后用php来调用它.

Fedora core 6 下AfterStep 的中文环境的设置

AfterStep首页上对AfterStep的介绍:
AfterStep is a window manager for the Unix X Window System. Originally based
on the look and feel of the NeXTStep interface, it provides end users with a
consistent, clean, and elegant desktop. The goal of AfterStep development is
to provide for flexibility of desktop configuration, improving aestetics, and
efficient use of system resources.
Some of the distinguishing features of AfterStep compared to other window
managers are its low usage of resources, stability and configurability.
简而言之,就是说,AfterStep是一个Unix的X
窗口系统下的窗口管理器。最初是从NeXTStep的界面下发展起来的。AfterStep的目标就是提供一个稳定的,易配置的,不太占系统资源的桌面系统。(可笑,这玩意儿一点儿也不好配置:我插嘴的)
我左猜右找,终于搞定如何弄出一个中文的AfterStep了。
1.第一步:得把中文菜单都调出来。其实很简单,把系统设置的字体设为中文字体就行了。
我是这么改的:把

/usr/local/share/afterstep/looks下的look.QNX文件中的含有Font
***.ttf-**的字体改了,我把字体都改成了sthei.ttf.
2.在桌面click,选Desktop
Setup->Look->选QNX,然后重启桌面。Okay,再在桌面上点,菜单也变成中文的了。
3.改输入法。老外们不用输入法,咱还要用。我比较懒。我找到了切换输入法的文件:

/etc/X11/xinit/xinitrc.d/xinput.sh

把这一切加到了~/.xinitrc中。我的~/.xinitrc文件的内容就是:

/etc/X11/xinit/xinitrc.d/xinput.sh
exec afterstep

Okay,现在重启x,就能输中文了。
不过话说回来,霍炬介绍的这个东西还真是不错。因为在网上搜了一下,还真找不到几个人用。

visual Basic的一段程序,用来整人也挺爽的

哈哈,整理我的台式机上的程序,看到以及写的挂在IE下监控链接,操作浏览器的代码。

只用几秒钟我就想到了一个非常不错的用途。哈哈。只用把现在这个改掉几行就行了。

某些在博客上还放google广告的人,哈哈,强烈要求在博客上张贴裸照一张。不然。。。。我发现这个程序可以每天帮你怎么着也能点几百下吧?那可是不小的一笔收入啊。

(同时建议看下小蛇同志的博客:

http://mengxs.techweb.com.cn/archives/2007/2007228145948.shtml)

不过声明:小蛇同志的可不是我点的哟。我的机器上现在跑的是linux,还不能跑VB的程序 。