[笔记]使用poEdit代替gettext新建编辑po文件

PoEdit 是翻译PO文件的工具软件,跨平台,我用的是win32下的1.4.2简体中文版本。poEdit可以直接对pot/po等文件直接操作。
下面将结束直接新建一个消息目录文档:
范例源文件代码(hello.php)

<?php
echo gettext('Hello world');
$me=_("in perfect harmony;");
?>

一、新建

点击文件-》消息目录文档
1.填入工程名称,和字符集(在这里 填写是utf-8)
po设置
2.填写基本路径(以便poedit准确扫描源文件,这里输入是 . 将扫描当前和其子目录的源文件)
po路径设置
3.填写关键字(如果默认不使用gettext函数,如在wordpress中使用 __ 和 _e)
po关键字填写
4.保存po日志文件,接着poEdit开始扫描,列出新建和过时的字符串如下
po列出字符串

二、使用poedit进行翻译

下面就可以下是翻译
翻译图
接着你可以使用工具栏上面的
保持进行保存操作,同时会生成同名mo二进制文件
更新同步可以和源文件进再次更新同步操作

进一步提升:使用PoEdit翻译PO文件
wordpress codex: http://codex.wordpress.org/User:Skippy/Creating_POT_Files

[笔记]gettext基本操作

近来随着i18n的逐渐标准化,在 PHP 也可以利用 gettext 库写作 i18n 程序,实现 NLS(Native Language Support) 国际化支持。以下是gettext对po/mo操作的记录。
操作环境:windows7 ,程序语言:php
因为是Windows环境我们使用GNU gettext,可以进入sourceforge.net下载页面。这里我们下载完整包(Complete package, except sources)
为了方便操作,先把其安装目录下的bin目录加入到系统环境变量 path(路径)中。(步骤:我的电脑->属性->高级-点击 环境变量)
以下是被翻译源码:

<?php
echo gettext('Hello world');
$me=_("in perfect harmony;");
?>

1. 开始创建pot模板文档(默认是生产是po后缀文档,可以需手动改成pot)
打开命令行(win7需要管理员身份运行)命令如下,生成 hello.pot 模板:

xgettext -d hello -o E:\hello.pot --from-code=UTF-8 E:\hello.php

用法:xgettext [选项] [输入文件]…
从给定的输入文件中提取可翻译的字符串。

2. 生成翻译的拷贝 (这是以中文为例zh_CN,同时注意编码)

msginit -i hello.pot -l zh_CN -o my-zh_CN.po

用法:msginit [选项]
创建新的 PO 文件,即根据用户环境取值初始化文件头。

生成my-zh_CN.po完全大写的地方,就是要你(翻译者)去正确填写的部分。不同的国家(地区),不同的翻译者,填写的时候都要遵守一定的规则。而翻译工作,在填完了以上这些头部内容以后,就显得非常简单了。只要对应于 msgid”…” 中的内容,把它翻译成你(翻译者)自己的语言,写在 msgstr”" 中就行了。
3.生成二进制文件

msgfmt my-zh_CN.po -o zh_CN.mo

用法:msgfmt [选项] 文件名.po …
由文字模式描述生成二进制消息文件。

你反编译 可以使用msgunfmt zh_CN.mo -o my-zh_CN.po

php的系统的国际化(I18N)

在学习Zend_Translate(是Zend框架为多语言应用程序提供的一个解决方案.)时候了解到I18N。
以下是我最近学习一些资料
php需要Gettext 扩展支持I18N 具体可以查看http://www.gnu.org/software/gettext/manual/gettext.html。但据zend framework 手册说明 Gettext 是非线程安全的: PHP’的gettext库不是现在安全的,并且它不应该用于多线程环境中.这是由于gettex本生的问题而不是PHP,但却是一个存在的问题.
在这期间我使用POEDIT编辑翻译源
具体使用方法不多说了,可以查看下面2个参考资料:
PHP gettext 用法
Rails框架开发工具讲座: 介绍国际化编辑器工具poEdit