
CatalystX::I18N - Catalyst internationalisation (I18N) framework

package MyApp::Catalyst;
use strict;
use warnings;
use Catalyst qw/
+CatalystX::I18N::Role::Base
+CatalystX::I18N::Role::GetLocale
+CatalystX::I18N::Role::DateTime
+CatalystX::I18N::Role::Maketext
/;
# 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;
__PACKAGE__->apply_request_class_roles(qw/CatalystX::I18N::TraitFor::Request/);
__PACKAGE__->apply_response_class_roles(qw/CatalystX::I18N::TraitFor::Response/);
# Add some I18N configuration
__PACKAGE__->config(
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) = @_;
$c->get_locale();
# 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::Role::All
/;

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.
Basic I18N role that glues everything toghether.
Localize text via Locale::Maketext. Prefered over CatalystX::I18N::Role::DataLocalize
Localize text via Data::Localize. Alternative to CatalystX::I18N::Role::Maketext
Sets the POSIX locale
Methods for localising date and time informations.
Methods for localising numbers.
Extends Catalyst::Request with usefull methods to help dealing with various I18N related information in HTTP requests.
Adds a Content-Language header to the response.
Tries to determine the most appropriate locale for the current request.
Provides access to Locale::Maketext classes via a Catalyst model.
Provides access to a Data::Localize class via a Catalyst model.
Helpful wrapper around Locale::Maketext. Can also be used outside of Catalyst.
Helpful wrapper around Data::Localize. Can also be used outside of Catalyst.

In order to work properly, CatalystX::I18N will need some values in your Catalyst configuration
__PACKAGE__->config(
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 (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 set
package CatalystX::MyI18N::Role::MyPlugin;
use Moose::Role;
use namespace::autoclean;
after 'set_locale' => sub {
my ($c,$locale) = @_;
$c->do_someting($c->locale);
};
1;

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 catalystx-i18n@rt.cpan.org, or through the web interface at http://rt.cpan.org/Public/Bug/Report.html?Queue=CatalystX::I18N. 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] k-1.com
http://www.k-1.com

CatalystX::I18N is Copyright (c) 2012 Maroš Kollár - http://www.k-1.com

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