---
name: "Template::Multilingual"
section: "3pm"
platform: "linux"
package: "libtemplate-multilingual-perl"
version: "1.00-3"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Template::Multilingual"
---

# Template::Multilingual(3pm)

Multilingual templates for Template Toolkit

## NAME

Template::Multilingual - Multilingual templates for Template Toolkit

## SYNOPSIS

This subclass of Template Toolkit's `"Template"` 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 `"Template"` superclass options, and one specific to this class:

- LANGUAGE\_VAR

  The LANGUAGE\_VAR 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 `"language()"` 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 `"\w+"` is fine, but we suggest sticking to ISO-639 which provides 2-letter codes for common languages and 3-letter codes for many others.

### process

Used exactly as the original Template Toolkit `"process"` method. Be sure to call `"language"` before calling `"process"`.

## LANGUAGE SUBTAG HANDLING

This module supports language subtags to express variants, e.g. "en\_US" or "en-US". 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, `"<cholet@logilune.com>"`

## BUGS

Multilingual text sections cannot be used inside TT directives. The following is illegal and will trigger a TT 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 TAG\_STYLE, START\_TAG and END\_TAG directives are supported, but the TAGS directive is not.

Please report any bugs or feature requests to `"bug-template-multilingual@rt.cpan.org"`, 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.

## SEE ALSO

If you are already using your own `"Template"` subclass, you may find it easier to use Template::Multilingual::Parser instead.

ISO 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.
