<!-- -*- mode:text coding:euc-jp -*-
   $FML: nativelanguage.sgml,v 1.4 2008/08/19 03:16:57 fukachan Exp $
-->

<chapter id="nativelanguage">
	<title>
	言語別の処理関数
	</title>

<para>
ＭＬドライバ内部では言語と文字コードに依存した変換処理が必要です。
<footnote>
<para>
初期の記録も、ここに残しておきます：
ＭＬドライバ内部では言語と文字コードに依存した変換処理が必要です。
(初期設計段階での内部コードは EUC のため)
たとえば、ISO-2022-JP と EUC の相互変換が随所で行なわれています。
これはメールでは ISO-2022-JP が使われますが、
(UNIX 上での)プログラム(開発)では EUC が扱いやすいためです。
</para>
</footnote>
たとえば、
フィルタ処理や Subject 書き換え、
summary や log などに履歴を書き込む際が代表例です。
</para>

<para>
基本となるデータフローは、
(1) MIME Encode された文字列を一度 decode し、
(2) Perl 内部表現
<footnote>
<para>
現在の Perl 内部処理の基本は UTF-8 ベースの Perl 内部表現に変換し、
文字ベースの処理を行った上で、
バイトベースの文字列に戻すという考え方になっています。
内部表現フラグを設定しない変数は、伝統的なバイト表現だと考えます。
これにより後方互換性が保証されています。
</para>
</footnote>
に変換したうえで、
(3) なんらかの文字列処理をし、
(4) ふたたび MIME Encode して外部出力可能な文字列に変換する、
というものです。
<screen>
[操作概念例]

$string->set();
$string->mime_header_decode();
$string->...処理...();
$string->mime_header_encode();
メールの内容を変更する…
</screen>
メールではなく、
&fml8; システムとして summary や log ファイルへ記録を残す場合には、
MIMEエンコードはしていないので、
なんらかの文字コードを使うと決め打ちする必要があります。
ここは従来と変わりません
具体的には、
対象ごとに定義されている
(例: ログファイルは $log_file_charset_ja )
変数にしたがい、文字の符号化を行います。
日本語のデフォルト値は(互換性のため) EUC-JP です。
</para>

<para>
本章では、
言語依存処理関数について解説します。
言語依存と言っても、日本語処理ではなく、
日本語を使う文脈に依存した処理という表現が適切です。
</para>

<para>
なお、コマンドに対する返事の言語依存性については
<link linkend="message.nl">
『メッセージの他国語化』
</link>
の章を参照してください。
</para>


<sect1 id="nativelanguage.overview">
	<title>
	クラス::Language::
	</title>

<para>
言語依存のクラス名は
「クラス::Language::」
となります。
これらの階層以下に言語依存モジュール群が配置されます。
</para>

<para>
たとえば次のようなモジュールがあります。
<screen>
FML::Language::Japanese::String.pm
Mail::Bounce::Language::Japanese.pm
</screen>
前者は、FML モジュール群のために、
日本語の文脈に依存した文字列処理関数
(例: 日本語のメールでは引用に＞を使う…)
を提供しています。
後者は Mail::Bounce 階層以下のモジュールに対して、
日本語に依存したエラーメール解析ルーチン
(例: 日本の特定の ISP が特殊なフォーマットのエラーメールを返す…)
を提供しています。
</para>

</sect1>


</chapter>
