PHP API を使用して、pspell がサポートする辞書の配列を、できれば人間が読める完全な名前で取得する方法はありますか?
とりあえず以下のようにしています。
$dicts = explode(PHP_EOL,rtrim(`aspell dicts`));
しかし、それでも人間に優しいバージョンは得られません (たとえば、en_CA
「英語 - カナダ語」など)。
解決
これが私が思いついたものです:
$dicts = explode(PHP_EOL,rtrim(`aspell dicts`));
$ltr = array();
foreach($dicts as $dict) {
if(preg_match('`^([a-z]+)$`',$dict,$m)) {
$lang = _iso639_1_to_lang_name($dict) ?: $dict;
} elseif(preg_match('`^([a-z]+)_([A-Z]+)$`',$dict,$m)) {
$lang = (_iso639_1_to_lang_name($m[1]) ?: $m[1]).' - '.(_country_code_to_adjectival($m[2])?:$m[2]);
} elseif(preg_match('`^([a-z]+)_([A-Z]+)-(.*)$`',$dict,$m)) {
$lang = (_iso639_1_to_lang_name($m[1]) ?: $m[1]).' - '.(_country_code_to_adjectival($m[2])?:$m[2]).' - '.ucwords(str_replace('_',' ',$m[3]));
} elseif(preg_match('`^([a-z]+)-(.*)$`',$dict,$m)) {
$lang = (_iso639_1_to_lang_name($m[1]) ?: $m[1]).' - '.ucwords(str_replace('_',' ',$m[2]));
} else {
$lang = $dict;
}
$ltr[$dict] = $lang;
}
これらの関数は、ウィキペディアからスクレイピングしたデータに基づいて、ISO コードから完全な名前を検索するだけです。