=encoding utf8

=head1 名前

Catalyst::Plugin::Charsets::Japanese - 日本語特有の文字コード操作プラグイン

=head1 概要

    use Catalyst 'Charsets::Japanese';

    # 使用する文字コードを設定

    MyApp->config->{charsets} = 'UTF-8';

    # もしくは、内部で使いたい文字コードと
    # 出力データに使いたい文字コードを別々に設定

    MyApp->config->{charsets} = {
        in  => 'EUC-JP',
        out => 'Shift_JIS',
    };

=head1 説明

近年の日本語環境下でのWEB開発において、サーバーサイドで扱う文字コードとして、
EUC-JP, Shift_JIS, UTF-8 が考えられます。
このモジュールを使うと、選択された文字コードによって適切に、
入出力データのコンバート、Content-Typeのセットを自動で処理します。

仕様する文字コードがUTF-8だけの場合は、L<Catalyst::Plugin::Unicode>,
サーバーサイドがUTF-8、出力が他の文字コードの場合は、 L<Catalyst::Plugin::Unicode::Encoding>
をそれぞれ使用するといいでしょう。

サーバーサイドの文字コードがEUCなどの場合に、このモジュールを使用してください。

=head1 設定

次のように config の charsets に 使用したい文字コードを入れます。

    MyApp->config->{charsets} = 'UTF-8';

また、一つのアプリケーションで二つの文字コードを使いたい場合もあると思います。

例えば、サーバーのロケールや、DBは、EUCで使う設定になっているが、
出力するレスポンスのHTMLはUTF-8にしたい等。

このモジュールでは、リクエストをパースした後のプログラム中で使用したい文字コード、
出力時のレスポンスの文字コードをそれぞれ設定できます。
設定された文字コードによって適切な処理を自動で行います。

上記のように二つの文字コードを使用したい場合は次のようにします。

    MyApp->config->{charsets} = {
        in  => 'EUC-JP',
        out => 'Shift_JIS',
    };

このように書くと、出力は Shift_JIS で行います。

また、リクエストを受けたときは、リクエストのパラメータを
Shift_JIS から EUC-JP にコンバートします。

=head1 charsets アクセサ

コンテキストに charsets アクセサが実装されます。

charsetsアクセサで呼び出せるオブジェクトには、さらに in と out という、それぞれ
内部文字コードオブジェクト、出力文字コードオブジェクトへのアクセサが実装されます。

次のようにすると、使用している文字コードの名前、省略名、Jcode使用時のコンバート用メソッド名を取得できます。

    sub default : Private {
        my( $self, $c ) = @_;

        # 内部処理用の文字コード名( UTF-8, EUC-JP, Shift_JIS )

        my $inner_charset = $c->charsets->in->name;

        # 内部処理用の文字コード省略名( utf8, euc, sjis )

        my $inner_abbrev = $c->charsets->in->abbreviation;

        # 内部処理用の文字コードのJcodeにおけるコンバート用メソッド名( utf8, euc, sjis )

        my $inner_method = $c->charsets->in->method;

        # 同様に、出力用文字コードについて知りたいときも、
        # name ,abbreviation, method を使用できます。

        my $outer_charset = $c->charsets->out->name;
    }

=head1 参考

L<Jcode>

L<Catalyst>

=head1 著者

Lyo Kato E<lt>lyo.kato@gmail.comE<gt>

=cut
