Provided by: libcatalyst-plugin-i18n-perl_0.10-3_all
NAME
Catalyst::Plugin::I18N::Manual - (Draft) I18N and L10N with Catalyst and Template Toolkit.
OUTLINE
Prerequisites: - perl >= 5.8.0 - Catalyst >= 5.33 - Catalyst::Plugin::I18N >= 0.04 - Catalyst::Plugin::Unicode >= 0.2 - Catlayst::View::TT && Template-Toolkit >= 2.14 - GNU gettext utilities - An editor that understands UTF-8 and Byte Order Mark (BOM) $ catalyst.pl MyApp created "MyApp" created "MyApp/script" created "MyApp/lib" created "MyApp/root" created "MyApp/root/static" created "MyApp/root/static/images" created "MyApp/t" created "MyApp/lib/MyApp" created "MyApp/lib/MyApp/Model" created "MyApp/lib/MyApp/View" created "MyApp/lib/MyApp/Controller" created "MyApp/lib/MyApp.pm" created "MyApp/Makefile.PL" created "MyApp/README" created "MyApp/Changes" created "MyApp/t/01app.t" created "MyApp/t/02pod.t" created "MyApp/t/03podcoverage.t" created "MyApp/root/static/images/catalyst_logo.png" created "MyApp/root/static/images/btn_120x50_built.png" created "MyApp/root/static/images/btn_120x50_built_shadow.png" created "MyApp/root/static/images/btn_120x50_powered.png" created "MyApp/root/static/images/btn_120x50_powered_shadow.png" created "MyApp/root/static/images/btn_88x31_built.png" created "MyApp/root/static/images/btn_88x31_built_shadow.png" created "MyApp/root/static/images/btn_88x31_powered.png" created "MyApp/root/static/images/btn_88x31_powered_shadow.png" created "MyApp/root/favicon.ico" created "MyApp/script/myapp_cgi.pl" created "MyApp/script/myapp_fastcgi.pl" created "MyApp/script/myapp_server.pl" created "MyApp/script/myapp_test.pl" created "MyApp/script/myapp_create.pl" $ cd MyApp $ vim lib/MyApp.pm use Catalyst qw/-Debug I18N Unicode/; sub begin : Private { my ( $self, $c ) = @_; my $locale = $c->request->param('locale'); $c->response->headers->push_header( 'Vary' => 'Accept-Language' ); # hmm vary and param? $c->languages( $locale ? [ $locale ] : undef ); } sub default : Private { my ( $self, $c ) = @_; my $name = $c->request->param('name') || $c->loc('Guest'); $c->response->content_type('text/plain; charset=utf-8'); $c->response->body( $c->loc( 'Welcome [_1]!', $name ) ); } $ mkdir lib/MyApp/I18N $ xgettext.pl --output=lib/MyApp/I18N/messages.pot --directory=lib/ $ ls lib/MyApp/I18N/ messages.pot $ msginit --input=lib/MyApp/I18N/messages.pot --output=lib/MyApp/I18N/sv.po --locale=sv Created lib/MyApp/I18N/sv.po. $ vim lib/MyApp/I18N/sv.po "Content-Type: text/plain; charset=utf-8\n" #: lib/MyApp.pm:50 msgid "Guest" msgstr "Gaest" #. ($name) #: lib/MyApp.pm:54 msgid "Welcome %1!" msgstr "Vaelkommen %1!" $ perl script/myapp_server.pl [Fri Dec 2 03:52:45 2005] [catalyst] [debug] Debug messages enabled [Fri Dec 2 03:52:47 2005] [catalyst] [debug] Loaded plugins: .------------------------------------------------------------------------------. | Catalyst::Plugin::I18N | | Catalyst::Plugin::Unicode | '------------------------------------------------------------------------------' [Fri Dec 2 03:52:47 2005] [catalyst] [debug] Loaded dispatcher "Catalyst::Dispatcher" [Fri Dec 2 03:52:47 2005] [catalyst] [debug] Loaded engine "Catalyst::Engine::HTTP" [Fri Dec 2 03:52:47 2005] [catalyst] [debug] Found home "/Users/chansen/MyApp" [Fri Dec 2 03:52:48 2005] [catalyst] [debug] Initialized i18n "MyApp::I18N" [Fri Dec 2 03:52:48 2005] [catalyst] [debug] Loaded Private actions: .----------------------+----------------------------------------+--------------. | Private | Class | Method | +----------------------+----------------------------------------+--------------+ | /default | MyApp | default | '----------------------+----------------------------------------+--------------' [Fri Dec 2 03:52:48 2005] [catalyst] [info] MyApp powered by Catalyst 5.57 You can connect to your server at http://localhost:3000 # point your browser to http://localhost:3000/?name=Joe # output should render: Vaelkommen Joe! $ vim lib/MyApp.pm sub default : Private { # ... $c->response->body( $c->loc( 'Welcome to my homepage [_1]!', $name ) ); } $ xgettext.pl --output=lib/MyApp/I18N/messages.pot --directory=lib/ $ msgmerge --update lib/MyApp/I18N/sv.po lib/MyApp/I18N/messages.pot . done. $ vim lib/MyApp/I18N/sv.po #. ($name) #: lib/MyApp.pm:54 msgid "Welcome to my homepage %1!" msgstr "Vaelkommen till min hemsida %1!" $ perl script/myapp_server.pl # point your browser to http://localhost:3000/?name=Joe # output should render: Vaelkommen till min hemsida Joe! $ perl script/myapp_create.pl view TT TT exists "/Users/chansen/MyApp/script/../lib/MyApp/View" exists "/Users/chansen/MyApp/script/../t" created "/Users/chansen/MyApp/script/../lib/MyApp/View/TT.pm" created "/Users/chansen/MyApp/script/../t/view_TT.t" $ vim lib/MyApp.pm sub default : Private { my ( $self, $c ) = @_; my $name = $c->request->param('name') || $c->loc('Guest'); $c->response->content_type('text/plain; charset=utf-8'); $c->stash( name => $name, template => 'test.tt' ); $c->forward('MyApp::View::TT'); } $ vim root/test.tt # Save file in UTF-8 with BOM [% c.loc( 'Welcome to my place [_1]!', c.stash.name ) %] $ xgettext.pl --output=lib/MyApp/I18N/messages.pot --directory=lib/ --directory=root/ $ msgmerge --update lib/MyApp/I18N/sv.po lib/MyApp/I18N/messages.pot . done. $ vim lib/MyApp/I18N/sv.po #. (c.stash.name) #: root/test.tt:1 msgid "Welcome to my place %1!" msgstr "Vaelkommen till mitt staelle %1!" $ perl script/myapp_server.pl [Fri Dec 2 05:12:58 2005] [catalyst] [debug] Debug messages enabled [Fri Dec 2 05:12:58 2005] [catalyst] [debug] Loaded plugins: .------------------------------------------------------------------------------. | Catalyst::Plugin::I18N | | Catalyst::Plugin::Unicode | '------------------------------------------------------------------------------' [Fri Dec 2 05:12:58 2005] [catalyst] [debug] Loaded dispatcher "Catalyst::Dispatcher" [Fri Dec 2 05:12:58 2005] [catalyst] [debug] Loaded engine "Catalyst::Engine::HTTP" [Fri Dec 2 05:12:58 2005] [catalyst] [debug] Found home "/Users/chansen/MyApp" [Fri Dec 2 05:12:58 2005] [catalyst] [debug] Initialized i18n "MyApp::I18N" [Fri Dec 2 05:12:59 2005] [catalyst] [debug] Loaded components: .-------------------------------------------------------------------+----------. | Class | Type | +-------------------------------------------------------------------+----------+ | MyApp::View::TT | instance | '-------------------------------------------------------------------+----------' [Fri Dec 2 05:12:59 2005] [catalyst] [debug] Loaded Private actions: .----------------------+----------------------------------------+--------------. | Private | Class | Method | +----------------------+----------------------------------------+--------------+ | /default | MyApp | default | '----------------------+----------------------------------------+--------------' [Fri Dec 2 05:12:59 2005] [catalyst] [info] MyApp powered by Catalyst 5.57 You can connect to your server at http://localhost:3000 # point your browser to http://localhost:3000/?name=Joe # output should render: Vaelkommen till mitt staelle Joe!
INTRODUCTION
INTERNATIONALIZATION
CONTENT NEGOTIATION
Server-driven Agent-driven
LOCALIZATION
STAYING IN SYNC
TEMPLATE TOOLKIT
RESOURCES
Documentation Definitions Internationalization and localization <http://en.wikipedia.org/wiki/Internationalization_and_localization> Locale <http://en.wikipedia.org/wiki/Locale> Byte Order Mark (BOM) <http://en.wikipedia.org/wiki/Byte_Order_Mark> Character encoding <http://en.wikipedia.org/wiki/Character_encoding> Collation <http://en.wikipedia.org/wiki/Collation> Content Negotiation <http://en.wikipedia.org/wiki/Content_Negotiation> Unicode <http://en.wikipedia.org/wiki/Unicode> Guides Guidelines, Checklists, and Resources <http://www.i18nguy.com/guidelines.html> Localisation Guide <http://translate.sourceforge.net/wiki/guide/start> Perl Perl Locale handling <http://search.cpan.org/dist/perl/pod/perllocale.pod> Perl Unicode introduction <http://search.cpan.org/dist/perl/pod/perluniintro.pod> Perl Unicode support <http://search.cpan.org/dist/perl/pod/perlunicode.pod> Unicode-processing issues in Perl and how to cope with it <http://www.ahinea.com/en/tech/perl-unicode-struggle.html> Web Localization in Perl <http://search.cpan.org/dist/Locale-Maketext-Lexicon/docs/webl10n.html> Localization and Perl: gettext breaks, Maketext fixes <http://search.cpan.org/dist/Locale-Maketext/lib/Locale/Maketext/TPJ13.pod> Lessons Learned with Perl and UTF-8 <http://www.justatheory.com/computers/programming/perl/utf8_trials.html> UTF-8 and Perl (In Five Minutes) Slides from a talk given by Mark Fowler. <http://www.twoshortplanks.com/talks/utf8/perlandutf8.pdf> Perl Loves UTF-8 Slides from a talk given by Tom Insam. <http://jerakeen.org/slush/talk-perl-loves-utf8> Perl I18N Mailing List <http://lists.cpan.org/showlist.cgi?name=perl-i18n> Perl Unicode Mailing List <http://lists.cpan.org/showlist.cgi?name=perl-unicode> Portals Google Directory - Computers > Software > Globalization <http://www.google.com/Top/Computers/Software/Globalization/> Internationalization (I18N), Localization (L10N), Standards, and Amusements <http://www.i18nguy.com/> Standards RFC 2616 Hypertext Transfer Protocol -- HTTP/1.1 <http://www.w3.org/Protocols/rfc2616/rfc2616.html> Section 12: Content Negotiation <http://www.w3.org/Protocols/rfc2616/rfc2616-sec12.html#sec12> Section 13: Caching in HTTP <http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13> Section 13.6: Caching Negotiated Responses <http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.6> RFC 3066 Tags for the Identification of Languages <http://www.faqs.org/rfcs/rfc3066.html> Web W3C Internationalization (I18N) Activity <http://www.w3.org/International/> Authoring Techniques for XHTML & HTML Internationalization: Characters and Encodings 1.0 <http://www.w3.org/TR/i18n-html-tech-char/> Authoring Techniques for XHTML & HTML Internationalization: Specifying the language of content 1.0 <http://www.w3.org/TR/i18n-html-tech-lang/> Locale Repositories Common Locale Data Repository (CLDR) <http://www.unicode.org/cldr/> International Components for Unicode (ICU) <http://www-306.ibm.com/software/globalization/icu/index.jsp> Modules Character Encoding, Collation and Normalization Encode <http://search.cpan.org/dist/Encode/> Unicode::Collate <http://search.cpan.org/dist/Unicode-Collate/> Unicode::Normalize <http://search.cpan.org/dist/Unicode-Normalize/> Currency Locale::Currency::Format <http://search.cpan.org/dist/Locale-Currency-Format/> Math::Currency <http://search.cpan.org/dist/Math-Currency/> Dates DateTime <http://search.cpan.org/dist/DateTime/> DateTime::Locale <http://search.cpan.org/dist/DateTime-Locale/> DateTime::TimeZone <http://search.cpan.org/dist/DateTime-TimeZone/> Language Tags, Identification and Negotiation HTTP::Negotiate <http://search.cpan.org/dist/libwww-perl/lib/HTTP/Negotiate.pm> I18N::AcceptLanguage <http://search.cpan.org/dist/I18N-AcceptLanguage/> I18N::LangTags <http://search.cpan.org/dist/I18N-LangTags/> <http://search.cpan.org/dist/I18N-LangTags/lib/I18N/LangTags/Detect.pm> Message Catalogs Locale::Maketext <http://search.cpan.org/dist/Locale-Maketext/> <http://search.cpan.org/dist/Locale-Maketext/lib/Locale/Maketext/TPJ13.pod> Locale::Maketext::Lexicon <http://search.cpan.org/dist/Locale-Maketext-Lexicon/> <http://search.cpan.org/dist/Locale-Maketext-Lexicon/docs/webl10n.html> <http://search.cpan.org/dist/Locale-Maketext-Lexicon/script/xgettext.pl> Locale::Maketext::Simple Provides a simple interface to Locale::Maketext::Lexicon. <http://search.cpan.org/dist/Locale-Maketext-Simple/> libintl-perl <http://search.cpan.org/dist/libintl-perl/lib/Locale/Messages.pm> <http://search.cpan.org/dist/libintl-perl/lib/Locale/TextDomain.pm> Numbers Number::Format <http://search.cpan.org/dist/Number-Format/> Tools GNU gettext utilities <http://www.gnu.org/software/gettext/> <http://www.gnu.org/software/gettext/manual/html_chapter/gettext.html> <http://gnuwin32.sourceforge.net/packages/gettext.htm> gtranslator Translation tool for Gnome. Supports gettext catalogs. <http://gtranslator.sourceforge.net/> Ini Translator Translation tool for Windows 98/Me/XP/2000. Supports several formats, including gettext catalogs. <http://initranslator.sourceforge.net/> KBabel Translation tool for KDE. Supports gettext catalogs. <http://i18n.kde.org/tools/kbabel/> LocFactory Editor Translation tool for Mac OS X. Supports sevral formats, including gettext catalogs. <http://www.triplespin.com/en/products/locfactoryeditor.html> poEdit A cross-platform gettext catalogs editor. <http://www.poedit.org/>
AUTHOR
Christian Hansen "ch@ngmedia.com"
COPYRIGHT
This program is free software, you can redistribute it and/or modify it under the same terms as Perl itself.