如何使用pspell API获取支持的语言/词典列表?

时间:2012-12-10 21:28:05

标签: php aspell pspell

pspell

有没有办法使用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代码的全名。

2 个答案:

答案 0 :(得分:1)

您的意思是找出您的系统中有哪些词典? pspell只是 GNU aspell 库的一个非常薄的包装器。它支持aspell库支持的任何内容,但不幸的是它没有提供列出所有字典的方法。如果添加了这个功能会很好。

答案 1 :(得分:0)

您必须使用来自PHP documentaion的locale_parse及其详细信息:

http://php.net/manual/en/locale.parselocale.php