NAME CatalystX::I18N - Catalyst internationalisation (I18N) framework SYNOPSIS 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 # Optionally also load request and response roles 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', }, } }, ); 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 /; DESCRIPTION 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 Adds a maketext capability to a Catalyst application. * CatalystX::I18N::Role::DateTime Methods for localizing date and time informations. * CatalystX::I18N::Role::NumberFormat Methods for localizing numbers. * CatalystX::I18N::TraitFor::Request Extends a Catalyst::Request with usefull 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 best to determine the appropriate locale for the current request. * CatalystX::I18N::Model::Maketext Provides access to Locale::Maketext classes via Catalyst models. * CatalystX::I18N::Maketext Wrapper around Locale::Maketext. Can also be used outside of Catalyst. CONFIGURATION In order to work properly, CatalystX::I18N will need some values in your Catalyst configuration __PACKAGE__->config( name => 'MyApp', I18N => { default_locale => 'de_AT', locales => { 'de' => { inactive => 1, # Mark this locale as inactive (sort of abstract locale) ... # Arbitrary configuration parameters }, 'de_AT' => { inherits => 'de', # Inherit all settings form locale 'de' ... }, } }, ); The configuration must be stored under the key "I18N". It should contain a hash 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 given order. Additional configuration values are defined by the various CatalystX::I18N::Role::Maketext::* plugins. EXTENDING Extending the functionality of the CatalystX::I18N distribution is easy. E.g. writing a new plugin that does some processing when the locale changes package CatalystX::MyI18N::Plugin; use Moose::Role; use namespace::autoclean; after 'set_locale' => sub { my ($c,$locale) = @_; $c->do_someting($c->locale); }; 1; SEE ALSO Locale::Maketext, , Number::Format, DateTime::Locale, DateTime::Format::CLDR, DateTime::TimeZone, HTTP::BrowserDetect and Locale::Geocode SUPPORT Please report any bugs or feature requests to "catalystx-i18n@rt.cpan.org", 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. AUTHOR Maroš Kollár CPAN ID: MAROS maros [at] k-1.com L COPYRIGHT CatalystX::I18N is Copyright (c) 2010 Maroš Kollár - LICENSE This library is free software, you can redistribute it and/or modify it under the same terms as Perl itself.