Musisz przyjrzeć się regułom gramatycznym dla artykułów nieokreślonych (w gramatyce angielskiej są tylko dwa artykuły nieokreślone - „a” i „an”). Możesz się nie zgodzić, że brzmią poprawnie, ale zasady gramatyki angielskiej są bardzo jasne :
„Wyrazy a i an są przedimkami nieokreślonymi. Używamy przedimka nieokreślonego an przed wyrazami zaczynającymi się od dźwięku samogłoski (a, e, i, o, u) oraz przedimka nieokreślonego a przed wyrazami zaczynającymi się od spółgłoski (wszystkie inne litery). ”
Zauważ, że oznacza to dźwięk samogłoski , a nie literę samogłoski . Na przykład słowa zaczynające się na ciche „h”, takie jak „honor” lub „spadkobierca”, są traktowane jak samogłoski, a więc są poprzedzone „an” - na przykład „To zaszczyt cię poznać”. Słowa zaczynające się od spółgłoski są poprzedzone przedrostkiem - dlatego też mówisz „używany samochód” zamiast „używany samochód” - ponieważ „używany” ma raczej dźwięk „yoose” niż „uhh”.
Tak więc, jako programista, są to zasady, których należy przestrzegać. Musisz tylko znaleźć sposób określenia, od jakiego dźwięku zaczyna się słowo, a nie od jakiej litery. Widziałem przykłady tego, takie jak ten w PHP autorstwa Jaimiego Sirovicha:
function aOrAn($next_word)
{
$_an = array('hour', 'honest', 'heir', 'heirloom');
$_a = array('use', 'useless', 'user');
$_vowels = array('a','e','i','o','u');
$_endings = array('ly', 'ness', 'less', 'lessly', 'ing', 'ally', 'ially');
$_endings_regex = implode('|', $_endings);
$tmp = preg_match('#(.*?)(-| |$)#', $next_word, $captures);
$the_word = trim($captures[1]);
$_an_regex = implode('|', $_an);
if (preg_match("#($_an_regex)($_endings_regex)#i", $the_word)) {
return 'an';
}
$_a_regex = implode('|', $_a);
if (preg_match("#($_a_regex)($_endings_regex)#i", $the_word)) {
return 'a';
}
if (in_array(strtolower($the_word{0}), $_vowels)) {
return 'an';
}
return 'a';
}
Prawdopodobnie najłatwiej jest utworzyć regułę, a następnie utworzyć listę wyjątków i użyć jej. Nie wyobrażam sobie, że będzie ich aż tak wielu.