全球互联网用户持续增长,许多用户希望以母语浏览你的内容。你可能认为只需要一个优秀的翻译就能搞定网站的用户界面翻译,但更大的挑战在于后台代码的编写。传统的软件本地化过程繁琐且易出错,导致代码混乱。一些开发者甚至为不同地区使用不同版本的代码,这使得代码库管理几乎不可能。
gettext是一个优秀的开源工具,它能简化这个过程,让你专注于代码编写,而翻译人员则负责处理目标语言的单独翻译文件。掌握PHP的gettext,拓展应用的全球影响力将变得轻而易举!本系列文章将教你如何使用gettext本地化你的PHP应用。第一部分将快速介绍gettext。后续部分将在此基础上,讲解如何处理多个翻译域、复数形式,甚至如何自动化部分本地化流程。
准备环境
在开始学习之前,确保环境设置正确,这有助于逐步测试学习内容。以下是安装清单:
无论你的平台是什么,要从PHP使用gettext,都需要安装gettext库和连接到该库的PHP扩展。Ubuntu/Debian用户可以使用apt-get,Fedora/CentOS/Redhat用户可以使用yum安装gettext库。如果你使用的是其他类Unix系统,请访问www.gnu.org/s/gettext,获取与你的平台兼容的gettext副本。Windows用户可以从gnuwin32.sourceforge.net/packages/gettext.htm下载最新的可执行文件并安装。安装库后,需要通过编辑php.ini并添加一行来启用gettext的PHP扩展:
<code># Windows用户 extension=php_gettext.dll # *nix用户 extension=gettext.so</code>
然后,安装稍后将用到的Poedit。你可以在www.poedit.net下载副本。
gettext的“Hello World”
在你的Web根目录中,创建一个名为TestI18N的沙盒目录用于gettext练习(I18N代表国际化)。在TestI18N目录中,创建以下层次结构:
在未来的项目中,你可以随意命名父目录和Locale目录,但en_US和LC_MESSAGES是gettext使用的标准名称。en_US代表区域设置的名称,由两部分组成。第一部分是根据ISO 639-1规范的语言的两位小写字母缩写。下划线后的第二部分是根据ISO 3166-1 alpha-2规范的两位大写国家代码。因此,en_US表示语言是美国英语。
接下来,确保Poedit在你的平台上正常工作。启动程序,从顶部菜单栏中选择“文件”>“新建目录”。在设置窗口中,填写以下信息,暂时跳过复数形式字段:
点击“确定”,然后将文件保存为LC_MESSAGES目录中创建的messages.po。现在关闭Poedit,并使用你喜欢的文本编辑器打开messages.po……是的,它是一个普通的文本文件!你可以手动编辑它,但为了省事,我们让Poedit为我们创建主要的定义。在文件中已有的行之后留下一行空行,然后添加以下内容:
<code># Windows用户 extension=php_gettext.dll # *nix用户 extension=gettext.so</code>
保存messages.po并关闭它,然后在Poedit中重新打开它。在Poedit中,选择“文件”>“保存”或点击图标栏中的“保存目录”条目。我们在Poedit中保存PO文件的原因是,它们需要编译成gettext可用的特殊格式。在Poedit中保存后,你将看到在同一目录中创建了一个同名的新文件,但扩展名为.mo。如果你要继续使用常规文本编辑器修改和保存PO文件,则需要使用pocompile命令进行编译。如果你使用Poedit,则不需要额外的编译步骤,因为它会在你保存文件时自动编译文件。
回到TestI18N目录,创建一个名为test-locale.php的文件,其中包含以下代码:
<code># 测试标记1 msgid "HELLO_WORLD" msgstr "Hello World!" # 测试标记2 msgid "TEST_TRANSLATION" msgstr "Testing translation..."</code>
在浏览器中打开TestI18N/test-locale.php。如果一切安装正确且运行良好,你将看到页面上显示“Hello World”。
总结
在本地化你的PHP应用程序时,你有很多选择。我们选择使用GNU gettext库及其PHP扩展,这是一种强大且简单的方法,可以“正确地”本地化应用程序!在本部分中,你看到了安装gettext和PHP扩展所需的内容,简要地使用了Poedit,并通过一个简单的Hello World脚本激发了你的兴趣。第二部分将以此为基础,学习更多关于gettext的知识;我将解释在Hello World脚本中介绍的每个函数以及gettext库的工作原理。
图片来自sgame / Shutterstock
(以下为FAQ部分,根据原文内容调整,并进行了伪原创)
关于PHP应用程序本地化的常见问题
本地化PHP应用程序的重要性是什么?
本地化PHP应用程序对于希望覆盖全球用户的企业至关重要。它涉及将软件应用程序的用户界面和其他可见元素翻译成不同的语言。此过程不仅增强了用户体验,还扩大了应用程序的市场覆盖范围。通过本地化你的PHP应用程序,你可以满足不同用户的需求,从而增加你的用户群和潜在收入。
PHP本地化是如何工作的?
PHP本地化涉及使用特定的函数和库来翻译应用程序中的文本。最常用的方法是使用gettext,这是一个强大的库,允许你将字符串包装在一个函数中,该函数将根据用户的区域设置翻译它们。这涉及为每种语言创建一个.po文件,其中包含所有翻译。
实现PHP本地化的步骤是什么?
实现PHP本地化涉及几个步骤。首先,你需要在你的PHP环境中安装和配置gettext库。接下来,你需要使用gettext函数包装应用程序中所有你想要翻译的字符串。然后,你需要为每种你想要支持的语言创建.po文件,并翻译这些文件中的所有字符串。最后,你需要将这些.po文件编译成.mo文件,这些文件是二进制文件,gettext可以读取它们。
本地化PHP应用程序的挑战是什么?
由于以下几个原因,本地化PHP应用程序可能具有挑战性。首先,翻译应用程序中的所有字符串可能非常耗时,尤其是在应用程序庞大而复杂的情况下。其次,维护翻译可能很困难,尤其是在更新或向应用程序添加新功能时。第三,处理不同语言中的复数、性别和其他语法细微之处可能很棘手。
如何在PHP本地化中处理复数?
可以使用ngettext函数在PHP本地化中处理复数。此函数接受三个参数:字符串的单数形式、复数形式和数字。然后,它根据数字返回正确的形式。例如,ngettext(“一个苹果”,“许多苹果”,$number)如果$number为1,则返回“一个苹果”,否则返回“许多苹果”。
如何测试我的本地化PHP应用程序?
你可以通过更改服务器上或PHP代码中的区域设置,然后检查字符串是否正确翻译来测试你的本地化PHP应用程序。你还应该测试不同语言中应用程序的布局和设计,因为某些语言可能需要更多空间或具有不同的阅读方向。
我可以使用机器翻译进行PHP本地化吗?
虽然机器翻译可以快速轻松地翻译你的字符串,但不建议将其用于PHP本地化。机器翻译通常缺乏软件本地化所需的准确性和上下文感知能力。最好使用专业的翻译人员或本地化服务来确保翻译的质量。
如何管理我的PHP应用程序的翻译?
可以使用本地化平台或翻译管理系统来管理PHP应用程序的翻译。这些工具允许你将翻译存储、管理和更新在一个中心位置。它们还提供翻译记忆、术语表和协作工具等功能,以帮助你简化本地化过程。
.po和.mo文件在PHP本地化中的作用是什么?
.po和.mo文件在PHP本地化中起着至关重要的作用。.po文件是包含原始字符串及其翻译的文本文件。它们是人类可读的,可以使用文本编辑器或.po文件编辑器进行编辑。另一方面,.mo文件是机器可读的二进制文件。它们是由.po文件生成的,并由gettext用于翻译应用程序中的字符串。
我可以将我的PHP应用程序本地化为任何语言吗?
是的,你可以将你的PHP应用程序本地化为gettext支持的任何语言。但是,你需要拥有应用程序中所有字符串的该语言的翻译。此外,你需要考虑每种语言的文化和语言细微之处,以确保本地化的质量。
以上是phpmaster |本地化PHP应用程序第1部分:2011年10月 - 站点点的详细内容。更多信息请关注PHP中文网其他相关文章!