Недавно писал для похожей задачи, но только на английском код, который делает транслит слова с Английского на Русский в разных вариантах. Похоже что вам нужно только подправить массив словаря:
<?php
$dic = [
'a' =>['а','э'],
'b' =>['б'],
'c' =>['ц','к','с'],
'd' =>['д'],
'e' =>['е','и'],
'f' =>['ф'],
'g' =>['г'],
'h' =>['х'],
'i' =>['и','ай'],
'j' =>['ж','дж'],
'k' =>['к'],
'l' =>['л','ль'],
'm' =>['м'],
'n' =>['н'],
'o' =>['о'],
'p' =>['п'],
'q' =>['к','кью'],
'r' =>['р'],
's' =>['с'],
't' =>['т'],
'u' =>['у','ы','и'],
'v' =>['в'],
'w' =>['в'],
'x' =>['к+с'],
'y' =>['у','и'],
'z' =>['з'],
'sh'=>['ш'],
'shch'=>['щ'],
'ch'=>['ч','х', 'к'],
'rr'=>['р'],
'ss'=>['с'],
'tt'=>['т'],
'ff'=>['ф'],
'ack'=>['эк'],
'uck'=>['ак'],
'aby'=>['эйби'],
'wat'=>['вот'],
'excl'=>['экскл'],
'qu'=>['ку', 'кью'],
'ei'=>['эй', 'ей'],
'igh'=>['ай'],
'cre'=>['кре'],
'ang'=>['эндж'],
'gi'=>['джи'],
'jea'=>['джи'],
'ae'=>['ае'],
'tion'=>['шн'],
'ice'=>['ис', 'айс'],
'ph'=>['ф'],
'ow'=>['оу'],
'ia'=>['ия'],
];
$input = 'Jack';
uksort($dic, function ($a, $b) {
$a = strlen($a);
$b = strlen($b);
if ($a == $b) {
return 0;
}
return ($a > $b) ? -1 : 1;
});
$i = strtolower($input);
$res = [$i => $i];
function asdf($dic, $res) {
$resBefore = $res;
foreach ($dic as $token => $variants) {
do {
$input = array_shift($res);
if (strpos($input, $token) !== false) {
foreach ($variants as $variant) {
$replaced = str_replace($token, $variant, $input);
if (!empty($replaced) && $replaced !== $input) {
$res[$replaced] = $replaced;
}
}
if (strlen($token) > 1) {
$res[$input] = $input;
}
} else {
$res[$input] = $input;
break;
}
} while ($input !== null);
}
if (!empty(array_diff($res, $resBefore))) {
$res = asdf($dic, $res);
}
return $res;
}
$result = array_values(asdf($dic, $res));
var_dump($result);