`
162cm
  • 浏览: 51881 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

php高手之路之—纵横天下

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

1.

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

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

1.

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

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

1.

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

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

1.

$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中就是使用的这种方案.
看看其步骤.
第一步:
使用一个函数将您的字串包起来.您的程序应该写成这样子:

1.

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

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

1.

# 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 VERSION\n”
“Report-Msgid-Bugs-To: \n”
“POT-Creation-Date: 2007-03-20 11:44+0800\n”
“PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n”
“Last-Translator: FULL NAME \n”
“Language-Team: LANGUAGE \n”
“MIME-Version: 1.0\n”
“Content-Type: text/plain; charset=CHARSET\n”
“Content-Transfer-Encoding: 8bit\n”

#: 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项目.
分享到:
评论

相关推荐

    纵横天下辅助工具

    纵横天下辅助工具,目前只支持IE6内核.

    纵横天下-缴获资源-计算器

    纵横天下-缴获资源-计算器 纵横天下-缴获资源-计算器

    纵横天下掠夺资源计算器

    用于纵横天下的资源掠夺,可计算拉资源时需要的辎重数量

    纵横天下旅游网数据库设计.doc

    纵横天下旅游网数据库设计

    电子书-股票魔法师:纵横天下股市的奥秘_米勒维尼-632页.pdf

    电子书-股票魔法师:纵横天下股市的奥秘_米勒维尼-632页.pdf

    中考资料系列-传统文化第六讲,纵横天下搅弄风云且看谁.docx

    中考资料系列-传统文化第六讲,纵横天下搅弄风云且看谁.docx

    纵横天下的说话功夫

    21世纪人才最珍贵的就是能力素质,我们为你提供了最实用纵横天下的说话功夫,欢迎大家下载纵横天下的说话...该文档为纵横天下的说话功夫,是一份很不错的参考资料,具有较高参考价值,感兴趣的可以下载看看

    征途霸气家族网---纵横天下.rar

    这个是玩征途的时候做的了,现在不玩了,放了几个月,现在发布给大家吧!论坛代码没有保存下来,嗯! 后台:\admin.asp 用户名:admin 密码:123456

    全屏风格TXcms 7.8的纵横天下古韵沉香网站

    但看大家都有这么热切之心。我也只好“忍痛割爱”地把这款7.8版古典全屏风格无私奉献了。呵呵“喝水不忘挖井人”最后,我希望使用这个风格的朋友能把风格的版权信息,和一些和本站密切相关地信息,保留下来。因为本...

    c#模拟登录

    以c#模拟游戏网站纵横天下登录

    英杰传修改器

    英杰传修改器,复制到游戏目录

    《孙膑问世》DirectX角色扮演游戏编程的网格模型

    使用的背景Mp3音乐,是来自《三国赵云传——之纵横天下》 3D模型来自参考书籍《DirectX角色扮演游戏编程》的网格模型(有改动) —————————————————————————————— 游戏作者简介 作者...

    VB实现自动填表并提交表.7z

    两款用来测试的游戏登录入口,纵横天下和矩阵 本程序中完成提交的方法提供两种,直接提交表单和点击登录按钮提交 还有第三种方法填表完成后直接用WebBrowser1.Document.Forms("Login").Submit 如果您安装的是IE7,在VB...

    程序员帮助文档仓库(chm)

    这是我多年来收集的帮助文档,做我程序员,拥有这些就相当于手上掌握着千军万马一样,可以纵横天下了,嘿嘿!!当然了,这里只有一张藏宝图,宝藏在另外一个地方,只要找到哪里,就可以免费获取,(*^__^*) 嘻嘻……...

    VB自动填表、填表单并提交

    内容索引:VB源码,网络相关,... 演示程序使用两款游戏作为测试:纵横天下和矩阵。  请注意:如果您安装的是IE7,在VB开发环境下运行可能会遇到莫名其妙的浏览器错误,但是编译为本地代码后运行无任何问题,欢迎指正。

    网页游戏开发入门教程二(游戏模式+系统)

    比较优秀的代表:战神世界II,Travian,Ogame,武林三国,纵横天下,领主online,乱舞春秋,热血三国,方便面三国等等。这是一个比较成熟的模式, 但正因为成熟。因此,玩家接触到这类游戏比较的多,除非你能超过...

    LQ_630K打印机驱动

    24针80列平推 经济型票据打印机Epson LQ-630K针式打印机专为票据打印而设计,外形小巧,性能出众,让您轻松完成繁重的票据打印工作,众多优势功能带来轻松工作享受, 超值性价比,为经济型票据打印机的理想之选。

    数据库自动备份工具

    数据库自动备份工具

    trs公司面试题

    用户通过一台本地终端机器来访问我们的Unix机器,并使用Unix服务,该本地终端就是我们所说的终端机器。在我们的程序中要记录这一终端的IP,做

Global site tag (gtag.js) - Google Analytics