【发布时间】:2011-02-27 06:45:00
【问题描述】:
2009 年 4 月 26 日的“On the state of i18n in Perl”博文建议在 Perl 中使用 libintl-perl 发行版中的 Locale::TextDomain 模块用于 l10n / i18n。此外,无论如何我都必须使用 gettext,并且 Locale::Messages / Locale::TextDomain 中的 gettext 支持比 Locale::Maketext 中的 gettext 仿真更自然。
GNU gettext 手册“15 Other Programming Languages”一章中的“15.5.18 Perl”小节说:
- 便携性
libintl-perl包独立于平台,但不是 Perl 核心的一部分。如果软件包未安装在目标系统上,程序员负责提供所需功能的虚拟实现。
但是,gettext 源中examples/hello-perl 中的两个示例(一个使用较低级别的 Locale::Messages,一个使用较高级别的 Locale::TextDomain)都没有检测包是否安装在目标系统,如果不是,则提供虚拟实现。
使事情变得复杂(关于检测是否安装了软件包)是 Locale::TextDomain 手册页的以下片段:
概要
use Locale::TextDomain ('my-package', @locale_dirs); use Locale::TextDomain qw (my-package);用法
请务必记住,您使用“SYNOPSIS”部分中指定的 Locale::TextDomain(3),这意味着您必须使用它,而不是要求 它。与其他模块相比,该模块的行为完全不同。
您能否告诉我应该如何检测 libintl-perl 是否存在于目标系统上,以及如果未安装它如何提供虚拟的 fallthrough 实现?或者给出执行此操作的程序/模块示例?
【问题讨论】:
标签: perl localization internationalization gettext