このブログ投稿によると、単語cote、coté、côte、およびcôté (英語では既にソートされています) について、フランス語でのソート順はcote、côte、cotéおよびcôtéです。以下のコードは、フランス語の照合順序で単語を並べ替えます。
$words = array('cote', 'coté', 'côte', 'côté');
print_r($words);
$collator = new Collator('fr_FR');
// print info about locale
echo 'French Collation ' . (($collator->getAttribute(Collator::FRENCH_COLLATION) == Collator::ON) ? 'On' : 'Off') . "\n";
echo $collator->getLocale(Locale::VALID_LOCALE) . "\n";
echo $collator->getLocale(Locale::ACTUAL_LOCALE) . "\n";
$collator->asort($words);
print_r($words);
そして、印刷された結果は次のとおりです。
Array
(
[0] => cote
[1] => coté
[2] => côte
[3] => côté
)
French Collation On
fr_FR
fr
Array
(
[0] => cote
[2] => côte
[1] => coté
[3] => côté
)
同じブログ投稿で、著者は次のように述べています。
[...] 分音記号は、左から右ではなく、右から左に評価されます。したがって、左から右に評価する英語のような言語のように、côteは coté の後に来るのではなく、 cotéの前に来ます。côteという単語は単語の末尾の「e」に ACUTE がないのに対し、cotéは ACUTE を持っていないためです。英語および他のほとんどの言語では、評価は左側から開始されるため、CIRCUMFLEX または "o" の欠如が順序付けの制御要因になります。
したがって、SpainとUSという単語を含む配列がある場合、それらは英語とフランス語で同じ順序になります。
asort
メソッドが配列のインデックスの関連付けを維持することにも注意してください。違いを見ます:
asort:
Array
(
[0] => cote
[2] => côte
[1] => coté
[3] => côté
)
sort:
Array
(
[0] => cote
[1] => côte
[2] => coté
[3] => côté
)
U_USING_DEFAULT_WARNINGについて
このAPIドキュメントによると:
U_USING_DEFAULT_WARNING は、デフォルトのロケール データが使用されたことを示します。要求されたロケールも、その代替ロケールも見つかりませんでした。
たとえば、 fr_FRロケールを使用すると、 U_USING_FALLBACK_WARNINGが表示されます。これは、フォールバック ロケール (この場合はロケールfr ) が使用されたことを示しています。
ロケール
locale -a
コマンドがフランス語のパッケージを表示しても、お使いのコンピューターはフランス語をサポートしていないようです (または、サポートしているが、どういうわけか PHP がフランス語を使用できず、デフォルトの言語にフォールバックします) 。試してみることができるいくつかの提案があります。
最初に、サポートされているすべてのロケールをリストします。
cat /usr/share/i18n/SUPPORTED
次に、必要な言語を生成します。
sudo locale-gen fr_FR.UTF-8
sudo locale-gen fr_FR.ISO-8859-1
sudo dpkg-reconfigure locales
うまくいかない場合は、パッケージlanguage-pack-frおよびlanguage-support-frをインストールして、言語を再度生成してみてください。
この問題は奇妙です。Ubuntu 11.04 と PHP 5.3.8 を搭載した VM があり、Debian 6 でも問題なく動作します。パッケージをインストールしたり、何も構成したりしていません。