GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
Catalyst::Plugin::I18N::Manual(3) User Contributed Perl Documentation Catalyst::Plugin::I18N::Manual(3)

Catalyst::Plugin::I18N::Manual - (Draft) I18N and L10N with Catalyst and Template Toolkit.

    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 "Gäst"

    #. ($name)
    #: lib/MyApp.pm:54
    msgid "Welcome %1!"
    msgstr "Välkommen %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:

    Välkommen 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 "Välkommen till min hemsida %1!"

    $ perl script/myapp_server.pl

    # point your browser to http://localhost:3000/?name=Joe
    # output should render:

    Välkommen 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 "Välkommen till mitt ställe %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:

    Välkommen till mitt ställe Joe!

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/>

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>

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/>

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/>

Christian Hansen "ch@ngmedia.com"

This program is free software, you can redistribute it and/or modify it under the same terms as Perl itself.
2009-07-30 perl v5.32.1

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.