Jak*_*ski 8 perl localization gettext internationalization
在" 关于国际化的Perl中的状态 "建议使用博客帖子从2009年4月26日地点:: TextDomain模块从在Perl本地化/国际化的libintl-perl的分布.此外,我必须使用gettext,并且Locale :: Messages/Locale :: TextDomain中的gettext支持比Locale :: Maketext中的gettext仿真更自然.
GNU gettext手册中" 15其他编程语言 " 一章中的" 15.5.18 Perl " 小节说:
- 可移植性
- 该
libintl-perl
软件包与平台无关,但不属于Perl核心.如果目标系统上没有安装软件包,程序员负责提供所需功能的虚拟实现.
但是examples/hello-perl
gettext源中的两个示例都没有(一个使用较低级别的Locale :: Messages,一个使用更高级别的Locale :: TextDomain)包括检测包是否安装在目标系统上,如果不是,则提供虚拟实现.
什么是复杂的问题(关于检测是否安装了包)是Locale :: TextDomain联机帮助页的以下片段:
概要
Run Code Online (Sandbox Code Playgroud)use Locale::TextDomain ('my-package', @locale_dirs); use Locale::TextDomain qw (my-package);
用法
至关重要的是要记住您使用"概要"部分中指定的Locale :: TextDomain(3),这意味着您必须使用它,而不是需要它.与其他模块相比,该模块的行为完全不同.
您能否告诉我如何检测目标系统上是否存在libintl-perl,以及如果未安装虚拟防护实现,如何提供?或者举例说明这样做的程序/模块?
gettext手册错误地表明您不能要求CPAN先决条件.每个人都在Perl世界中这样做,并且由于CPAN基础设施和工具链,它的工作正常.在最坏的情况下,您可以捆绑所需的依赖项.
您问题的直接答案是:
use Try::Tiny;
try {
require Locale::TextDomain;
Locale::TextDomain->import('my-package', @locale_dirs);
} catch {
warn 'Soft dependency could not be loaded, using fallback.';
require inc::Local::Dummy::Locale::TextDomain;
}
Run Code Online (Sandbox Code Playgroud)
说明:use
仅require
在编译时跟随import
,并且可以将其拆分以强制在运行时执行.
归档时间: |
|
查看次数: |
2741 次 |
最近记录: |