CatalystX::I18N - Catalyst internationalisation (I18N) framework

     package MyApp::Catalyst;
     use strict;
     use warnings;
     use Catalyst qw/
     # Choose only the roles you need
     # CatalystX::I18N::Role::All is a convinient shortcut to load all available roles
     # Optionally also load request and response roles (also loaded by CatalystX::I18N::Role::All)
     use CatalystX::RoleApplicator;
     # Add some I18N configuration
         name    => 'MyApp',
         I18N    => {
             default_locale     => 'de_AT',
             locales            => {
                 'de'               => {
                     format_date        => 'dd.MM.yyyy',
                     format_datetime    => 'dd.MM.yyyy HH:mm',
                 'de_AT'            => {
                     inherits           => 'de',
                     timezone           => 'Europe/Vienna',
                     format_datetime    => 'dd.MM.yyyy uma HH\'e\'',
                 'de_DE'             => {
                     inherits            => 'de',
                     timezone            => 'Europe/Berlin',

    Then in your controller classes

     package MyApp::Catalyst::Controller::Main;
     use strict;
     use warnings;
     use parent qw/Catalyst::Controller/;
     sub auto : Private {
         my ($self,$c) = @_;
         # Tries to fetch the locale from the folloing sources in the given order
         # 1. Session
         # 2. User settings
         # 3. Browser settings
         # 4. Client address
         # 5. Default locale from config
     sub action : Local {
         my ($self,$c) = @_;
         $c->stash->{title} = $c->maketext('Hello world!');
         $c->stash->{location} = $c->i18n_geocode->name;
         $c->stash->{language} = $c->language;
         $c->stash->{localtime} = $c->i18n_datetime_format_date->format_datetime(DateTime->now);

    If you want to load all available roles and traits you can use
    CatalystX::I18N::Role::All as a shortcut.

     package MyApp::Catalyst;
     use strict;
     use warnings;
     use Catalyst qw/

    CatalystX::I18N provides a comprehensive toolset for
    internationalisation (I18N) and localisation (L10N) of catalyst
    applications. This distribution consists of several modules that are
    designed to integrate seamlessly, but can be run idependently or
    replaced easily if necessary.

    *   CatalystX::I18N::Role::Base

        Basic I18N role that glues everything toghether.

    *   CatalystX::I18N::Role::Maketext

        Localize text via Locale::Maketext. Prefered over

    *   CatalystX::I18N::Role::DataLocalize

        Localize text via Data::Localize. Alternative to

    *   CatalystX::I18N::Role::PosixLocale

        Sets the POSIX locale

    *   CatalystX::I18N::Role::DateTime

        Methods for localising date and time information.

    *   CatalystX::I18N::Role::NumberFormat

        Methods for localising numbers.

    *   CatalystX::I18N::TraitFor::Request

        Extends Catalyst::Request with useful methods to help dealing with
        various I18N related information in HTTP requests.

    *   CatalystX::I18N::TraitFor::Response

        Adds a "Content-Language" header to the response.

    *   CatalystX::I18N::Role::GetLocale

        Tries to determine the most appropriate locale for the current

    *   CatalystX::I18N::Model::Maketext

        Provides access to Locale::Maketext classes via a Catalyst model.

    *   CatalystX::I18N::Model::DataLocalize

        Provides access to a Data::Localize class via a Catalyst model.

    *   CatalystX::I18N::Maketext

        Helpful wrapper around Locale::Maketext. Can also be used outside of

    *   CatalystX::I18N::DataLocalize

        Helpful wrapper around Data::Localize. Can also be used outside of

    In order to work properly, CatalystX::I18N will need some values in your
    Catalyst configuration

         name    => 'MyApp',
         I18N    => {
             default_locale     => 'de_AT', # Fallback locale
             locales            => {
                 'de'               => {
                     inactive           => 1,
                     # Mark this locale as inactive (sort of abstract locale)
                     # Arbitrary configuration parameters
                 'de_AT'            => {
                     inherits           => 'de',
                     # Inherit all settings form the 'de' locale

    The configuration must be stored under the key "I18N". It should contain
    a hashref of "locales" and optionally a default locale

    Locales can be marked as "inactive". Inactive locales will not be
    selected by the "get_locale" in CatalystX::I18N::Role::GetLocale method.

    Locales can inherit from other locales ("inherits"). All configuration
    values from inherited locales will be copied. If you use
    CatalystX::I18N::Model::Maketext together with CatalystX::I18N::Maketext
    the generated lexicons will also inherit in the selected order.

    Additional configuration values are defined by the various
    CatalystX::I18N::Role::* plugins.

    Extending the functionality of CatalystX::I18N distribution is easy.

    E.g. writing a new plugin that does some processing when the locale is

     package CatalystX::MyI18N::Role::MyPlugin;
     use Moose::Role;
     use namespace::autoclean;
     after 'set_locale' => sub {
         my ($c,$locale) = @_;

    Locale::Maketext, <Locale::Maketext::Lexicon>, Data::Localize,
    Number::Format, DateTime::Locale, DateTime::Format::CLDR,
    DateTime::TimeZone, HTTP::BrowserDetect and Locale::Geocode

    Please report any bugs or feature requests to
    "", or through the web interface at
    <>. I
    will be notified and then you'll automatically be notified of the
    progress on your report as I make changes.

        Maroš Kollár
        CPAN ID: MAROS
        maros [at]

    CatalystX::I18N is Copyright (c) 2012 Maroš Kollár -

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