d708255c7a
Locale::Maketext does not allow correct handling of plural translation for languages that have more than one plural forms. Locale::Messages does. So Koha::I18N is now a wrapper around Locale::Messages, just like Locale::TextDomain, and export the same symbols as Locale::TextDomain. You can refer to documentation of Locale::TextDomain to know how to use exported subroutines. Example usage: __("Hi") __x("Hi {name}", name => 'Bob') __n("item", "items", $num_items) __nx("one item", "{count} items", $num_items, count => $num_items) __p("Bibliographic record", "item") This patch also brings Koha::I18N power to Template::Toolkit templates by adding a TT plugin. This plugin can be used like this: [%# USE the plugin and define some macros %] [% PROCESS 'i18n.inc' %] [%# tn is the equivalent of __n %] [%# macro names can't start with underscore, t is for "translate" %] [% tn('item', 'items', num_items) %] Extraction of strings from templates is a bit complicated and use Template::Parser and PPI. Template is compiled into Perl code and then analyzed by PPI. It is slow, but should be correct even with complex constructions. Remove dependency to Locale::Maketext and Locale::Maketext::Lexicon Add dependency to Locale::Messages and PPI Test plan for translation in Perl code: 1. Open a .pl script or .pm module with your favorite text editor 2. Add 'use Koha::I18N;' in the beginning of file 3. Use one of the subroutines exported by Koha::I18N and be sure to have a way to visualize the result (pass result to the template for example, or simply warn and watch the log file) 4. cd misc/translator && ./translate update fr-FR # try other languages 5. Open misc/translator/po/fr-FR-messages.po and translate your string(s) You may need to change the "Plural-Forms" header. See https://localization-guide.readthedocs.org/en/latest/l10n/pluralforms.html 6. ./translate install fr-FR 7. Use your web browser to go to the page that should display the translation, change language and verify the translation is correct 8. prove t/Koha/I18N.t Test plan for translation in templates: 1. Open a template file (.tt or .inc) with your favorite text editor 2. Add the PROCESS directive mentioned above in the beginning of file 3. Use one of the t* macros defined in i18n.inc. They are used like their "__" equivalent, with one difference: the 'x' variants take a hashref instead of a hash as last parameter 4. cd misc/translator && ./translate update fr-FR 5. Open misc/translator/po/fr-FR-messages.po and translate your string(s) 6. ./translate install fr-FR 7. Use your web browser to go to the page that should display the translation, change language and verify the translation is correct Signed-off-by: Marc Véron <veron@veron.ch> Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org> Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
39 lines
847 B
PHP
39 lines
847 B
PHP
[%
|
|
USE I18N;
|
|
|
|
MACRO t(msgid) BLOCK;
|
|
I18N.t(msgid);
|
|
END;
|
|
|
|
MACRO tx(msgid, vars) BLOCK;
|
|
I18N.tx(msgid, vars);
|
|
END;
|
|
|
|
MACRO tn(msgid, msgid_plural, count) BLOCK;
|
|
I18N.tn(msgid, msgid_plural, count);
|
|
END;
|
|
|
|
MACRO tnx(msgid, msgid_plural, count, vars) BLOCK;
|
|
I18N.tnx(msgid, msgid_plural, count, vars);
|
|
END;
|
|
|
|
MACRO txn(msgid, msgid_plural, count, vars) BLOCK;
|
|
I18N.txn(msgid, msgid_plural, count, vars);
|
|
END;
|
|
|
|
MACRO tp(msgctxt, msgid) BLOCK;
|
|
I18N.tp(msgctxt, msgid);
|
|
END;
|
|
|
|
MACRO tpx(msgctxt, msgid, vars) BLOCK;
|
|
I18N.tpx(msgctxt, msgid, vars);
|
|
END;
|
|
|
|
MACRO tnp(msgctxt, msgid, msgid_plural, count) BLOCK;
|
|
I18N.tnp(msgctxt, msgid, msgid_plural, count);
|
|
END;
|
|
|
|
MACRO tnpx(msgctxt, msgid, msgid_plural, count, vars) BLOCK;
|
|
I18N.tnpx(msgctxt, msgid, msgid_plural, count, vars);
|
|
END;
|
|
%]
|