有人能够解释一下本地化文件(.mo, .po)生成的原理吗?

5

我正在尝试理解gettext

以下是我认为它的工作方式:

首先,您需要使用某种PO编辑器扫描应用程序目录,创建这些“.po”文件。应用程序会生成一个PO文件,其中包含编程语言中的字符串,然后将它们编译成二进制的mo文件,gettext解析它们,并使用高级API(如Zend_Translate)调用方法并指定要使用gettext。可以设置缓存翻译,并返回这些内容。

我真正不清楚的部分是如何编辑po文件,这是手动完成的吗?当编译完成后,应用程序会依赖于二进制mo文件。

如果有人能够提供有用的Linux应用程序来编辑.po文件,我将不胜感激。

1个回答

6

关于使用GNU gettext进行NLS的教程应该会帮助您了解这个过程。

至于编辑.po文件,除了vi之外至少有两个应用程序:gtranslatorpoedit


你使用任何特定于vim的插件吗,还是根本不需要? - meder omuraliev
我从未在vim中使用过插件,但是在http://vim.sourceforge.net/scripts/script.php?script_id=695上有一些东西。 - Gonzalo
我看了一遍,可能错过了一些信息,但是:1. 假设我们正在处理一个Python/PHP Web应用程序,通常在本地存储po/mo文件的位置是什么?是否有标准目录可以使用?2. 您是否使用xgettext从源代码中提取字符串?我认为我已经掌握了大部分信息,但如果有人能够提供一个冗长的简化和不那么技术性的解释,并提供实际的现实世界提示,那就太好了。 - meder omuraliev
通常情况下,您将LOCALEDIR设置为$PREFIX/share/locale(前缀可以是/usr、/usr/local等),然后对于每种语言,文件将位于fr/LC_MESSAGES/yourappname.mo中。在提取字符串时,我使用xgettext。当xgettext满足我的需求时,我没有费心寻找其他东西。 - Gonzalo
好的,最后一件事 - 假设你有大约100个左右的文件,其中50个需要进行i18n字符串处理。它不会将它们全部连接成一个.mo文件,对吗?我很好奇,因为你输入了 yourappname.mo - meder omuraliev
所有的字符串将在同一个.mo文件中,每种语言将会有不同的.mo文件(例如,en/yourappname.mo, es/yourappname.mo, fr/yourappname.mo等)。 - Gonzalo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接