Author: Exson Qu

多语言
webERP可以被翻译成任何语言，这样整个网络界面就会显示为任何用户的语言。系统可以为不同的用户显示不同的语言－－在同一时间－－根据个人用户设置中的语言设置。
创建翻译的建议程序如下：
1. Join the mailing list here 加入邮件列表
让这个列表知道你要帮助翻译－－有些人可能已经在为此工作了。
2.取得最新的messages.po文件，使用你喜欢的编辑器（或者poedit)输入译文。最近的messages.po文件包含在最新的档案中：
www_root/webERP/locale/en_GB/LC_MESSAGES/message.po

编辑提供的文件，输入标记为msgid的字串的翻译，放在标记为msgstr的位置。注意字串中嵌入的html字符串，html也要求翻译到译文里。并且确保每个译成的字串包裹在符号('')里。请也完成文件头信息—输入您的信息因此您可以为您的贡献得到适当认可。

尤其重要的是确保字符串“ISO-8859-1”（大约位于文件messages.po中19400行左右）被翻译成您希望译成的字符集。webERP使用此字符集送出html头，因此您的网页浏览器知道如果翻译送出的字符集。

研究一下poedit软件是值得的，因它在创建gettext翻译文件时，有些节约时间功能。

将您的翻译文件发送到submissions@weberp.org

在sourceforge上会为此新语言创建一个新的路径和说明档案供所有人访问。
技术概论
这是如何实现的
webERP 使用GNU gettext包作语言翻译。要使用gettex库，它必须装到网络服务器上，ＰＨＰ必须用gettxt函数编译。然而，从3.01版开始，由于 Briain Gomez和PHP-GETTEXT作者Danilo Segan和Nico Kaiser的努力，他们的php类使翻译成为可能（尽管他们会比gettex库函数慢），与webERP绑定，所以甚至没有安装gettext,翻译还是可以完成。
gettext 翻译文件储存在locale路径里，在这个路径下，有每种当地语言环境的次级目录。五位代码代表使用的语言。例如en代表英文，接着一个下划线，接着是另外两个大写字符代表语言版本，例如US代表USA－－这样整个的语言环境代码变成en_US. 对于大不列颠英语，完整的语言环境代码就变成en_GB--这是编写webERP默认的语言。这个代码（en_GB)的语言环境要安装在web- server上。在linux网络服务器上，可以用命令行 #locale -a检视所有安装的语言环境。（Ubuntu下，在命令提示符后，直接输入local3 -a即可）
New directories will need to be made up if a translator wishes to have a local version for their language. Under the locale directory the five character locale abbreviation code directory there is a further sub-directory called LC_MESSAGES - this is where the translation files exist. There are two files in each of these directories:
如果翻译人员希望为他们自己的语言创建一个本地版本，需要设立一个新的路径。在语言环境目录locale下－－由五个字符的语言环境缩写代码表示的路径下，有一个更下层的路径叫做LC_MESSAGES－－这是翻译文件所在的地方。在每个这样的路径下有两个文件：
1。messages.po 这个文件包含要翻译的所有字符串。这是翻译人员要考虑的唯一文件。
2. messages.mo 这是一个二进制的机器可以查询的翻译文件，被gettext引用。这个.mo文件是gettext工具（msgfmt.exe或者msgfmt 在 ＊nix),使用messages.po文件（从命令行窗口的语法是 msgfmt.ext messages.po)自动产生的,.主要的努力在于将.po文件翻译过来－－.mo文件是由webERP项目管理员非常容易与开心地创建的。
任何的文字编辑器可以用来编辑.po文件 （GNU Emacs包含专业的功能编辑.po文件，它含有一个特殊的PO-模式）－－也有一个工具叫做poedit，翻译人员经常建议使用这个工具。
理解messages.po文件
翻译就是把messages.po文件的字符串转换成其他语言。最重要的是最近的CVS文件中，路径locale/en_GB/LC_MESSAGES/下的messages.po文件。当然，最新的模板文件可以电邮至info@weberp.org或者发一个信息给翻译清单索取。

messages.po由几部分组成
例如，要翻译成法文
#: AccountGroups.php:8 index.php:890
msgid "An example string in English that needs to be translated"
msgstr="Une corde d'exemple dans le ce anglais doit 阾re traduite "
这行#: AccountGroups.php:8 index.php:890
意味着跟随的字符串被使用在AccountGroups.php脚本第8行和index.php脚本的 890行。 理解了脚本用于何处的文字可能会有用。在程序中使用了几次的脚本只需要翻译一次。在有些例子下，＃行显示的字符使用的地方，有时会是很长的脚本清单。
msgid "An example string in English that needs to be translated"
这行是在msgstr中要替代的英文字符串。如果msgstr的值是空白-"",gettext会返回英文字符串。
翻译的努力在于编辑messages.po文件，并且把翻译的语言输入到msgstr的引号中去。
.po文件标题
.po文件的一些注释开头也应该翻译出来。
"SOME DESCRIPTIVE TITLE", - should be replaced with webERP - LANGUAGE Translation File - where LANGUAGE is the language being translated into
“SOME DESCRIPTIVE TITLE”，－－应该被用webERP-语言翻译文件（这里的语言是指翻译成的语言）取代
# FIRST AUTHOR , YEAR. - 应该是你的名字和电子邮件地址－－连同工作完成的年份。
Project-Id-Version
应该是webERP的版本号
PO-Revision-Date
这是你最后一次编辑入文件的日期
Last-Translator
这是你的名字和电邮地址，用于当有些翻译不是很清楚时,使用这种语言的用户联络您。
Content-Type
用你用的文字编码取代‘CHARSET',这是你的语言环境或者UTF-8.

在GNU系统中，下述的编码经常用于对应的语言：
* ISO-8859-1 for Afrikaans, Albanian, Basque, Catalan, Dutch, English, Estonian, Faroese, Finnish, French, Galician, German, Greenlandic, Icelandic, Indonesian, Irish, Italian, Malay, Norwegian, Portuguese, Spanish, Swedish,
* ISO-8859-2 for Croatian, Czech, Hungarian, Polish, Romanian, Serbian, Slovak, Slovenian,
* ISO-8859-3 for Maltese,
* ISO-8859-5 for Macedonian, Serbian,
* ISO-8859-6 for Arabic,
* ISO-8859-7 for Greek,
* ISO-8859-8 for Hebrew,
* ISO-8859-9 for Turkish,
* ISO-8859-13 for Latvian, Lithuanian,
* ISO-8859-15 for Basque, Catalan, Dutch, English, Finnish, French, Galician, German, Irish, Italian, Portuguese, Spanish, Swedish,
* KOI8-R for Russian,
* KOI8-U for Ukrainian,
* CP1251 for Bulgarian, Byelorussian,
*GB2312，GBK， GB18030用于简体中文
*BIG5， BIG5－HKSCS用于正体中文
*EUC－JP用于日文
*EUC－KR用于韩文
*TIS－620用于泰文
*UTF－8用于任何语言，包括上述列出的
由于在utf-8中有大量潜在字符，要嵌入pdf文件的字体文件导致这个pdf文件太大而不能通过拨号方式传输，因此为避免上述情况，最好使用以上特别指定的文字。
字符集的名称可以用大写或者小写字符。通常偏好大写。

Content-Transter-Encoding

设置为8字节
管理

一旦这个练习完成，文件必须传回给项目管理员：submissions@weberp.org，用来创建.mo文件。会用压缩文件zip返回一个新的路径,用于从web路径中释放。这个语言会被加入到webERP 系统从而让其他用户受益。
在每次登人系统时，系统通过查看用户信息，确定用户设定的语言，然后设定使用语言。用户可以改变设置的语言，通过点击左上角的用户名，会显示用户设定。变更语言设定会在储存设置时立即激活新语言。用户只被允许选择在locale路径下，设置在下级路径中语言。

其他资源
The GNU gettext manual
翻译工具
webERP自身携带了一些在线工具来管理翻译－－使用这些工具维护翻译会有些问题－－尤其是某些文字对脚本造成问题，并且字符编码集可能丢失。所以不建议使用这些工具，除了有时最新的messages.po的备份放在其他的地方，而不得不作些特殊维护。
下面的文字解释了如何使用webERP提供的语言翻译工具来增加语言和维护他们的翻译。
总而言之，在使用这些工具前，你需要点击左上角你的用户名字，以打开用户参数。选择要翻译的语言，在点击修改Modify.语言工具全部使用目前选择的用户语言。如果你希望使用的语言不在那里，那么可以使用‘Add a New Language'’增加一个新语言‘工具来开始新翻译－－参考后面。默认情形下，新安装的webERP只有英语-en_GB.最新提交的语言包可从这里得到sourceforge webERP page。
翻译从工具菜单维护－－在主菜单没有独立的连接，由于这是只有系统管理员才可以获取的区域。对翻译文件未 授权的更改因此禁止。工具菜单是 Z_index.php-因此你可以变更主菜单的URL（超连接），在它前面加上Z_,这样就会出现工具菜单－－只有你的用户帐号里得到系统管理员的授 权。翻译管理可以通过“Maintain Language Files"维护语言文件”链接进行。
共有四个翻译工具：

- 重建系统默认语言文件，

- 为系统增加一个新语言，

- 编辑一个语言文件标题

- 编辑一个语言文件模块。

  注意：关于系统运作的讨论只是对维护系统和系统文件的人而言，如果您只是负责翻译，不一定必须了解。
  重建系统默认语言文件
  系统有一个默认语言文件。当一个新语言被创建，系统为这文件创建了一个副本，以用来编辑。重建系统默认语言文件包括这个副本，为创建一个新系统默认语言文件，它会查看每个系统编码文件（脚本）。通过这种方法，对字符串的任何的修改或者增加将会被包括在这个新创建的文件。为了使用最新的字符串，这步可以在创建一个新语言前完成。

为系统增加一个新语言
使用这个工具创建一个新语言。必须清楚只有在你的web-server网络服务器有适当的语言环境文件的语言才可被增加。语言的识别符必须与web- server网络服务器的语言文件相符。以xx_XX的格式输入语言，前两位字符是代表语言的小写标准代码,例如en代表英语，后两位是代表国家的大写标 准代码例如US代表美国。这个例子就是en_US.下划线必须将语言和国家分开，总共5个字符。输入要创建的语言后，点击处理Proceed按钮。系统于 是创建一个新语言路径，位于locale语言环境路径下，并且在新语言路径下会有一个LC_MESSAGES路径。于是，在新的locale/xx_XX /LC_MESSAGES路径下，复制了默认语言文件（messages.po).开始时，在新的messages.po文件里没有翻译。
一旦创建了新语言，要用语言翻译工具来维护新的翻译（你要专用的新语言）。要变换语言，点击显示在webERP屏幕左上角的用户名，下拉菜单会显示上述创建的新语言。选择新的语言让你可以使用翻译工具操作。
如果使用提供的翻译工具，你不必了解语言文件的结构。下面提供的细节只是作为信息而已。语言文件－messages.po包括：

- 标题，包含翻译人员的详细信息和要显示语言的字符的关键字符集。

- 信息识别字符串，以msgid开始，然后是要翻译的用引号因用的英语字符串，字符串被引用的脚本也被标明。

- 每个msgid声明的字符串例如msgstr""--在一个新的messages.po文件中，他们都是“”。翻译工作就是要求输入新 语言的msgstr来代表msgid字符串中的文字。

  编辑一个语言文件标题
  可以用这个工具修改语言文件标题。修改标题的一个重要原因是变更适合这种语言环境的字符集。例如对en,字符集通常设定为8829-1,或者类似的。当编辑了标题的不同部分后，确保点击位于底部的输入信息Enter Information按钮以保存修改。
  编辑语言文件模块
  通过这个工具，大多的翻译工作就完成了。首先选择你要编辑的语言，然后就可以选择要翻译的模块。为完整翻译整个系统，所有的模块都必须被完成。很多人偏好 首先翻译index.php和includes/header.php，为了将他们语言的主菜单翻译完成。从这点而言，最重要的模块可以首先翻译，其他的 可以安装字母顺序翻译。需要一些记忆系统，来记住后续需要翻译那些模块。
  一旦语言和模块被选择，点击Proceed处理。这时会弹出一个界面，它会列出模块里的所有的字符串，每个字符串旁边是输入你翻译的字符串的区域。右边是 一个列表，表示模垮中字符串出现在代码中的行号。输入一些翻译后，点击Enter Information输入信息来保存变更。
  如果你的webERP版本中有些开 发工作，将开发者新创建的字符与已经存在的语言文件合并，并且创建一个新的messages.po文件，它包括系统要求的全部字符串。如果有些信息还是显 示为英文，但是当你编辑那个屏幕的模块时，他们并没有出现，于是你知道您必须将已经存在的messages.po文件与任何新的信息合并。要保证所有的字 符串都被gettext工具摘取，首要确保首先运行"Rebuild the System Default Language File"重建系统默认语言。然后从“Edit a Language File Module"“编辑语言文件模块屏幕”，点击”Refresh Messages With Latest Strings"”用最近的字符串刷新信息“－－这完成了Rebuild新创建的主messages.po文件与你已有的翻译的合并。