La publicación de blog "On the state of i18n in Perl" del 26 de abril de 2009 recomienda usar el módulo Locale::TextDomain de la distribución libintl-perl para l10n/i18n en Perl. Además, tengo que usar gettext de todos modos, y obtener soporte de texto en Locale :: Messages/Locale :: TextDomain es más natural que en la emulación gettext en Locale::Maketext.Localización en Perl usando gettext y Locale :: TextDomain, con recuperación si Locale :: TextDomain no está disponible
La subsección "15.5.18 Perl" en el capítulo "15 Other Programming Languages" en GNU manual de gettext dice:
- Portabilidad
- El paquete
libintl-perl
es independiente de la plataforma, pero no es parte del núcleo de Perl. El programador es responsable de proporcionar una implementación ficticia de las funciones requeridas si el paquete no está instalado en el sistema de destino.
Sin embargo ninguno de los dos ejemplos en examples/hello-perl
en fuentes de gettext (uno usando inferior Locale nivel :: mensajes, uno utilizando superior Locale nivel :: textdomain) incluye detección si el paquete está instalado en el objetivo sistema, y proporcionando implementación ficticia si no lo está.
Lo que se complica la materia (con respecto a la detección de si el paquete está instalado o no) es el siguiente fragmento de Locale :: textdomain página de manual:
SINOPSIS
use Locale::TextDomain ('my-package', @locale_dirs); use Locale::TextDomain qw (my-package);
USO
Es crucial recordar que utiliza Locale :: TextDomain (3) como se especifica en el sección "SINOPSIS", eso significa que tiene que usar, no requerir. El módulo se comporta de manera bastante diferente en comparación con otros módulos.
¿Podría decirme cómo se debe detectar si libintl-perl está presente en el sistema de destino y cómo proporcionar la implementación ficticia fallthrough si no está instalado? ¿O dar ejemplos de programas/módulos que hacen esto?
Quizás ** Package :: Stash ** o manipulación directa de la tabla de símbolos en lugar de texto eval. –