让PHP 多语言 【转】

php中文网
发布: 2016-06-23 14:30:07
原创
1503人浏览过

原文地址:http://www.laruence.com/2009/07/19/1003.html

开发多语言的Web应用是一件非常困难的事,各个国家的字符集的编码方式、货币符号、日期格式、数字格式、文字表现都各不相同.

我们今天用一个简单的实例说明一下在PHP中的getText的用法(getText是一系列的工具和库函数,帮助程序员和翻译人员开发多语言软件的), 从而实现PHP的i18n.

现在, 我们假设要显示一个返回主页的link:

//home.php: $str = 'home';   print {$str} HTML;

下面开启我们多语言的开发之旅:

立即学习PHP免费学习笔记(深入)”;

创建pot文件,pot是Portable Object Template的首字母缩写,与po对应的是mo,mo是Machine Object的首字母缩写。前者意指原始的字符串文件,一般用于给翻译人员去修改的,后者则是与机器相关的,一般是供程序读取。可以手工创建pot文件,也可以通过xgettext从代码中抽取字符串来产生。这里是用xgettext来产生的:

xgettext -a home.php -o home.pot

运行该命令后,我们发现,在当前目录下,产生了一个名home.pot的文件,打开该文件,可以看到:

# 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: 2009-07-23 20:56+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"   #: home.php:2 msgid "home" msgstr ""

根据pot产生不同语言的po文件,这里我们先产生一个简体中文的po文件:

export LANG=zh_CN.gb2312

msginit -l zh_CN.gb2312 -i home.pot

微软文字转语音
微软文字转语音

微软文本转语音,支持选择多种语音风格,可调节语速。

微软文字转语音 0
查看详情 微软文字转语音

运行该命令后,我们发现,在当前目录下,产生了一个名zh_CN.po的文件,打开该文件,可以看到:

# Chinese translations for PACKAGE package # PACKAGE 软件包的简体中文翻译. # Copyright (C) 2009 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # , 2009. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-07-23 20:56+0800\n" "PO-Revision-Date: 2009-07-23 21:00+0800\n" "Last-Translator: FULL NAME \n" "Language-Team: Chinese\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=GB2312\n" "Content-Transfer-Encoding: 8bit\n"   #: test.php:2 msgid "home" msgstr ""

翻译zh_CN.po里对应的字符串为中文:

# Chinese translations for PACKAGE package # PACKAGE 软件包的简体中文翻译. # Copyright (C) 2009 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # , 2009. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-07-23 20:56+0800\n" "PO-Revision-Date: 2009-07-23 21:00+0800\n" "Last-Translator: \n" "Language-Team: Chinese\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=GB2312\n" "Content-Transfer-Encoding: 8bit\n"   #: test.php:2 msgid "home" msgstr "主页"

根据po文件生成mo文件。

msgfmt zh_CN.po -o zh_CN.mo

运行该命令后,我们发现,在当前目录下,产生了一个名zh_CN.mo的文件。它是二进制的,不能用文本编辑器打开。

安装mo文件到特定目录中:

cp -f zh_CN.mo .local/LC_MESSAGES/home.mo

修改程序。

setlocale(LC_ALL, 'zh_CN');   // Specify location of translation tables bindtextdomain("home", ".");   // Choose domain textdomain("home");   // Translation is looking for in ./locale/zh_CN/LC_MESSAGES/home.mo now   $str = gettext('home'); //也可以使用_('home')   print {$str} HTML;

运行这个脚本, 看看, 是不是输出正确的中文了呢?

添加其它语言也很容易,不需要修改程序,只需要像对待中文一样,生成一个mo文件,并安装到系统中对应的目录即可。切换不同的语言仅仅是修改当前的locale就行了。

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号