<!-- -*- mode:text coding:euc-jp -*-
   $FML: language.sgml,v 1.4 2008/08/18 20:52:59 fukachan Exp $
-->


<chapter id="language.preference">
	<title>
	言語処理の優先順位
	</title>


<sect1 id="language.preference.overview">
	<title>
	言語処理の諸問題
	</title>

<para>
一番単純なモデルは
「このＭＬは日本人用と仮定する。
よって、
自動応答メッセージは、つねに日本語で返す」
というものです。
もちろん、さまざまな問題が考えられます。
</para>

<para>
第一に、このモデルでは、ＭＬ作成時に何言語用かを指定する必要があります。
</para>

<para>
第二に、
間違って(日本語が読めない人から)送られてきたメールに対しても、
日本語でエラーメッセージを返します。
</para>

<para>
第三に、
日本人がメールを送ってきていたとしても、
今、
メールを読んでいる環境で日本語が使えないかもしれませんし、
</para>

<para>
メールヘッダの Accept-Language: がアテになるでしょうか？
</para>

<para>
おそらく、少しはアテになるでしょう。
よって、
メールヘッダの Accept-Language: を無視するのもよろしくありません。
ただし、きちんと Accept-Language: がつけられているとも限りませんが…
</para>

<para>
たとえば、
Accept-Language: ja などとしてある場合は ja が優先だと分かります。
しかしながら、
そういったものがなく、
かつ、
「日本人が help というメールを送ってきた」場合、
返事を us-ascii で返すべきなのか？
それとも 
iso-2022-jp で返すべきなのか？
プログラムには判断できません。
</para>

<para>
たとえば、こんなメールでは、どう判断するのが正しいでしょう？
<screen>
例:

From: rudo@example.co.jp
Subject: help
mime-version: 1.0
content-type: text/plain; charset=us-ascii 

help
</screen>
</para>

<para>
charset を素直に考えると英語で返すべきですが、
この例では、
たまたま本文が英語しか含まないために charset=us-ascii になっているだけです。
しかたがないので、
このＭＬが(日本人相手のため)日本語優先と設定されているなら、
日本語と英語のメッセージ両方を返すべきでしょう。
</para>

<para>
逆に、
英語のＭＬという想定なら、
英語のメッセージを返すだけでいいはずです。
</para>

<para>
いずれにせよ、
Accept-Lanaguage: が指定されていれば、それを尊重するべきです。
英語のＭＬ(language_preference_order = en)の場合でも、
Accept-Lanaguage: ja なら（できるだけ）日本語で返事をするべきでしょう。
&fml8; 標準のメッセージであれば、この動作が可能です。
</para>

</sect1>


<sect1 id="language.preference.ml.ja">
	<title>
	日本語優先のＭＬ
	</title>

<para>
language_preference_order という変数があります。
日本語がデフォルトのＭＬでは次のように指定されています。
<screen>
language_preference_order	=	ja en
</screen>
このヒントを使い、
次のような処理をしています。
以下では、
送られてきたメールヘッダを場合分けして考えてみましょう。
</para>

<sect2>
	<title>
	Accept-Language: ja, en
	</title>

<para>
日本語（だけ）で返すと判断します。
</para>

</sect2>


<sect2>
	<title>
	Accept-Language: en
	</title>

<para>
英語（だけ）で返すと判断します。
</para>

</sect2>


<sect2>
	<title>
	Accept-Language: は無し、Content-Type: では charset=iso-2022-jp
	</title>

<para>
日本語（だけ）で返すと判断します。
</para>

</sect2>


<sect2>
	<title>
	Accept-Language: は無し、Content-Type: では charset=us-ascii
	</title>

<para>
日本語（だけ）で返していいと判断できません。
日本語と英語のコンビで返すべきだと考えます。
</para>

</sect2>


<sect2>
	<title>
	Accept-Language: は無し、Content-Type: も無し
	</title>

<para>
日本語（だけ）で返していいと判断できません。
日本語と英語のコンビで返すべきだと考えます。
</para>

</sect2>

</sect1>


<sect1 id="language.preference.ml.en">
	<title>
	英語優先のＭＬ
	</title>

<para>
language_preference_order という変数が次のように指定されます。
<screen>
language_preference_order	=	en
</screen>
このヒントを使い、
次のような処理をしています。
以下では、
送られてきたメールヘッダを場合分けして考えてみましょう。
</para>


<sect2>
	<title>
	Accept-Language: ja, en
	</title>

<para>
日本語（だけ）で返すと判断します。
</para>

</sect2>


<sect2>
	<title>
	Accept-Language: en
	</title>

<para>
英語（だけ）で返すと判断します。
</para>

</sect2>


<sect2>
	<title>
	Accept-Language: は無し、Content-Type: では charset=iso-2022-jp
	</title>

<para>
日本語（だけ）で返すと判断します。
</para>

</sect2>


<sect2>
	<title>
	Accept-Language: は無し、Content-Type: では charset=us-ascii
	</title>

<para>
英語（だけ）で返すと判断します。
</para>

</sect2>


<sect2>
	<title>
	Accept-Language: は無し、Content-Type: も無し
	</title>

<para>
英語（だけ）で返すと判断します。
</para>

</sect2>

</sect1>


</chapter>
