SYNOPSIS

This subclass of Template Toolkit's \*(C`Template\*(C' class supports multilingual templates: templates that contain text in several languages.

    <t>
      <en>Hello!</en>
      <fr>Bonjour !</fr>
    </t>

Specify the language to use when processing a template:

use Template::Multilingual;

my $template = Template::Multilingual->new(); $template->language('en'); $template->process('example.ttml');

You can also provide the name of the template variable that will hold the language:

my $template = Template::Multilingual->new(LANGUAGE_VAR => 'foo'); $template->process('example.ttml', { foo => 'en' });

METHODS

new(\%params)

The new() constructor creates and returns a reference to a new template object. A reference to a hash may be supplied as a parameter to provide configuration values.

Configuration values are all valid \*(C`Template\*(C' superclass options, and one specific to this class:

\s-1LANGUAGE_VAR\s0

The \s-1LANGUAGE_VAR\s0 option can be used to set the name of the template variable which contains the current language. my $parser = Template::Multilingual->new({ LANGUAGE_VAR => 'global.language', }); If this option is set, your code is responsible for setting the variable's value to the current language when processing the template. Calling \*(C`language()\*(C' will have no effect. If this option is not set, it defaults to language.

language($lcode)

Specify the language to be used when processing the template. Any string that matches \*(C`\w+\*(C' is fine, but we suggest sticking to \s-1ISO-639\s0 which provides 2-letter codes for common languages and 3-letter codes for many others.

process

Used exactly as the original Template Toolkit \*(C`process\*(C' method. Be sure to call \*(C`language\*(C' before calling \*(C`process\*(C'.

LANGUAGE SUBTAG HANDLING

This module supports language subtags to express variants, e.g. \*(L"en_US\*(R" or \*(L"en-US\*(R". Here are the rules used for language matching:

  • Exact match: the current language is found in the template language template output fr <fr>foo</fr><fr_CA>bar</fr_CA> foo fr_CA <fr>foo</fr><fr_CA>bar</fr_CA> bar

  • Fallback to the primary language language template output fr_CA <fr>foo</fr><fr_BE>bar</fr_BE> foo

  • Fallback to first (in alphabetical order) other variant of the primary language language template output fr <fr_FR>foo</fr_FR><fr_BE>bar</fr_BE> bar fr_CA <fr_FR>foo</fr_FR><fr_BE>bar</fr_BE> bar

AUTHOR

Eric Cholet, \*(C`<[email protected]>\*(C'

BUGS

Multilingual text sections cannot be used inside \s-1TT\s0 directives. The following is illegal and will trigger a \s-1TT\s0 syntax error:

[% title = "<t><fr>Bonjour</fr><en>Hello</en></t>" %]

Use this instead:

[% title = BLOCK %]<t><fr>Bonjour</fr><en>Hello</en></t>[% END %]

The \s-1TAG_STYLE\s0, \s-1START_TAG\s0 and \s-1END_TAG\s0 directives are supported, but the \s-1TAGS\s0 directive is not.

Please report any bugs or feature requests to \*(C`[email protected]\*(C', or through the web interface at <http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Template-Multilingual>. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

RELATED TO Template::Multilingual…

If you are already using your own \*(C`Template\*(C' subclass, you may find it easier to use Template::Multilingual::Parser instead.

\s-1ISO\s0 639-2 Codes for the Representation of Names of Languages: http://www.loc.gov/standards/iso639-2/langcodes.html

COPYRIGHT & LICENSE

Copyright 2009 Eric Cholet, All Rights Reserved.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.