想想,当您感觉到自己的已经非常牛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内核.
纵横天下-缴获资源-计算器 纵横天下-缴获资源-计算器
在《纵横天下》这款游戏中,资源是玩家发展势力、提升战斗力的关键因素,而掠夺是获取资源的重要途径之一。这款计算器的主要功能就是根据目标资源量,计算出在掠夺过程中所需携带的辎重数量,以确保最大程度地获取...
纵横天下旅游网数据库设计
### PHP语言——Web 2.0开发的利器 #### PHP语言概述 PHP是一种广泛使用的开源脚本语言,特别适用于Web开发并可嵌入HTML中。...无论是对于个人开发者还是大型企业,PHP都是构建现代Web应用程序的理想选择之一。
ccjh重出江湖完整源码纵横天下早期经典mund游戏
在这个案例中,`admin.asp`是后台管理页面,是网站的核心部分之一。管理员可以通过登录此页面来管理网站内容,如发布新闻、管理用户、调整设置等。提供的用户名`admin`和密码`123456`是默认的登录凭据,这在实际应用...
"电子书-股票魔法师:纵横天下股市的奥秘_米勒维尼-632页.pdf" 本书是一个大全面的投资指南,涵盖了股票交易的经验、真谛和具体策略。作者米勒维尼是美国最成功的股票交易商,他从30年的职业生涯中总结出来的方法...
很抱歉,根据您给出的信息,"纵横天下的说话功夫"似乎与IT专业知识并不直接相关,而是偏向于人际沟通或公开演讲的技巧。然而,既然您希望我从IT行业的角度进行解读,我会尝试将这一主题与信息技术中的沟通技能联系...
【中考资料系列-传统文化第六讲】的文档主要探讨了中国古代的纵横家及其策略,这是战国时期的一种重要外交和政治手段。纵横家是专门研究外交策略的智者,他们通过合纵与连横的策略影响诸侯国间的联盟关系,以达到...
但看大家都有这么热切之心。我也只好“忍痛割爱”地把这款7.8版古典全屏风格无私奉献了。呵呵“喝水不忘挖井人”最后,我希望使用这个风格的朋友能把风格的版权信息,和一些和本站密切相关地信息,保留下来。因为本...
【热血三国志源码】是一份完整的编程代码集合,它提供了构建一款名为“热血三国志”的游戏的基础。源码是程序开发的核心部分,包含了开发者编写的指令和逻辑,用于控制游戏的各种功能和行为。这份源码对于学习游戏...
使用的背景Mp3音乐,是来自《三国赵云传——之纵横天下》 3D模型来自参考书籍《DirectX角色扮演游戏编程》的网格模型(有改动) —————————————————————————————— 游戏作者简介 作者...
两款用来测试的游戏登录入口,纵横天下和矩阵 本程序中完成提交的方法提供两种,直接提交表单和点击登录按钮提交 还有第三种方法填表完成后直接用WebBrowser1.Document.Forms("Login").Submit 如果您安装的是IE7,在VB...
接着,讲解“海外华人”的概念,区分华人与华侨的不同,并通过讲述海外华人的故事,如《华人纵横天下》栏目中的杰出华人,让学生感受到华人的自强不息和对祖国的挂念。此外,还提到了一些具体的例子,如霍英东和海外...
本文将深入探讨如何使用C#来模拟登录,以实现对游戏网站“纵横天下”的自动化登录操作。 首先,模拟登录的核心是通过发送HTTP请求到服务器,模拟用户在网页上填写表单并提交的过程。在C#中,可以使用`HttpClient`类...
这篇文档实际上是一份关于2015年欢迎新生的标语集合,主要涵盖了多个场景,如学校主干道、寝室、教室、食堂以及...通过这样的标语,新生可以感受到学校的热情和期望,从而更好地融入大学生活,开启他们的知识探索之旅。
内容索引:VB源码,网络相关,... 演示程序使用两款游戏作为测试:纵横天下和矩阵。 请注意:如果您安装的是IE7,在VB开发环境下运行可能会遇到莫名其妙的浏览器错误,但是编译为本地代码后运行无任何问题,欢迎指正。
9. 生产力:长本事的时候要把住核心,练武要练18般兵器,但从古到今的大英雄,纵横天下也不过就是一两件兵器而已。关老爷就是刀,赵子龙就是枪,李元霸就是锤。 10. 市场营销:打麻将这个游戏,有的玩是为了赢钱,...