my $index = Log::Report::Lexicon::Index->new($directory); my $fn = $index->find('my-domain', 'nl_NL.utf-8');
This module handles the lookup of translation files for a whole directory tree. It is lazy loading, which means that it will only build the search tree when addressed, not when the object is created.
It's always complicated to find the lexicon files, because the perl package can be installed on any weird operating system. Therefore, you may need to specify the lexicon directory or alternative directories explicitly. However, you may also choose to install the lexicon files in between the perl modules.
By default, the filename which contains the package which contains the
textdomain's translator configuration is taken (that can be only one)
and changed into a directory name. The path is then extended with messages
to form the root of the lexicon: the top of the index. After this,
the locale indication, the lc-category (usually LC_MESSAGES), and
the textdomain
followed by .po
are added. This is exactly as
gettext(1)
does, but then using the PO text file instead of the MO
binary file.
My module is named Some::Module
and installed in
some of perl's directories, say ~perl5.8.8
. The module is defining
textdomain my-domain
. The translation is made into nl-NL.utf-8
(locale for Dutch spoken in The Netherlands, utf-8 encoded text file).
The default location for the translation table is under
~perl5.8.8/Some/Module/messages/
for instance
~perl5.8.8/Some/Module/messages/nl-NL.utf-8/LC_MESSAGES/my-domain.po
There are alternatives, as described in Log::Report::Lexicon::Index, for instance
~perl5.8.8/Some/Module/messages/my-domain/nl-NL.utf-8.po ~perl5.8.8/Some/Module/messages/my-domain/nl.po
The exact gettext defined format of the locale is
language[_territory[.codeset]][@modifier]The modifier will be used in above directory search, but only if provided explicitly.
The manual info gettext
determines the rules. During the search,
components of the locale get stripped, in the following order:
The normalized codeset (character-set name) is derived by
To speed-up the search for the right table, the full directory tree will be indexed only once when needed the first time. The content of all defined lexicon directories will get merged into one tree.
My module is named Some::Module
and installed in some of perl's
directories, say ~perl5
. The module is defining textdomain
my-domain
. The translation is made into nl-NL.utf-8
(locale for
Dutch spoken in The Netherlands, utf-8 encoded text file).
The translation table is taken from the first existing of these files:
nl-NL.utf-8/LC_MESSAGES/my-domain.po nl-NL.utf-8/LC_MESSAGES/my-domain.po nl-NL.utf8/LC_MESSAGES/my-domain.po nl-NL/LC_MESSAGES/my-domain.po nl/LC_MESSAGES/my-domain.po
Then, attempts are made which are not compatible with gettext. The advantage is that the directory structure is much simpler. The idea is that each domain has its own locale installation directory, instead of everything merged in one place, what gettext presumes.
In order of attempts:
nl-NL.utf-8/my-domain.po nl-NL.utf8/my-domain.po nl-NL/my-domain.po nl/my-domain.po my-domain/nl-NL.utf8.po my-domain/nl-NL.po my-domain/nl.po
Filenames may get mutulated by the platform (which we will try to hide from you [please help improve this]), and are treated case-INsensitive!