J'ai codé un petit script qui permet de convertir des caractères japonais "illisibles" pour les gens qui ne les connaissent pas, en lettres latines que tout le monde pourra lire.
Le problème, c'est que j'ai du recourir à quatre str_replace d'affilée. Ce système fonctionne mais ce n'est pas très habile.
Voici quelques règles en japonais que je dois prendre en compte pour la conversion :
Les kana sont les deux syllabaires japonais de base. Ce n'est donc pas un alphabet très facile à convertir.
Les kana sont faits de 2 syllabaires : les hiragana (en lettres minuscules par convention) et les katakana (en lettres majuscules).
Il y a ensuite les "petits tsu", qui sont っ et ッ. Ils indiquent que la première consonne du kana qui suit est doublée. Genre っか (っka) va donner kka.
Le problème c'est que si je fais 1 seul str_replace, il ne convertit pas les éléments déjà convertits : par exemple :
か => ka
っk => っk
Même si je lui indique expressément de convertir les っk en kk.
Bref, si vous trouvez une solution plus habile, je vous en serais très reconnaissant. C'est une fonction que je vais énormément utiliser et j'ai besoin de l'optimiser au maximum.
Merci beaucoup !
Ce script génère : ねえ、おまえ、スーパーマーケットにいったかい? > nee, omae, SUUPAAMAAKETTOniittakai?
//
$mot = 'ねえ、おまえ、スーパーマーケットにいったかい?';
$resultat = $mot;
$hira_kata = array(
'あ' => 'a',
'い' => 'i',
'う' => 'u',
'え' => 'e',
'お' => 'o',
'か' => 'ka',
'き' => 'ki',
'く' => 'ku',
'け' => 'ke',
'こ' => 'ko',
'さ' => 'sa',
'し' => 'shi',
'す' => 'su',
'せ' => 'se',
'そ' => 'so',
'た' => 'ta',
'ち' => 'chi',
'つ' => 'tsu',
'て' => 'te',
'と' => 'to',
'な' => 'na',
'に' => 'ni',
'ぬ' => 'nu',
'ね' => 'ne',
'の' => 'no',
'は' => 'ha',
'ひ' => 'hi',
'ふ' => 'fu',
'へ' => 'he',
'ほ' => 'ho',
'ま' => 'ma',
'み' => 'mi',
'む' => 'mu',
'め' => 'me',
'も' => 'mo',
'や' => 'ya',
'ゆ' => 'yu',
'よ' => 'yo',
'ら' => 'ra',
'り' => 'ri',
'る' => 'ru',
'れ' => 're',
'ろ' => 'ro',
'わ' => 'wa',
'ゐ' => 'wi',
'ゑ' => 'we',
'を' => 'wo',
'ん' => 'n',
'が' => 'ga',
'ぎ' => 'gi',
'ぐ' => 'gu',
'げ' => 'ge',
'ご' => 'go',
'ざ' => 'za',
'じ' => 'ji',
'ず' => 'zu',
'ぜ' => 'ze',
'ぞ' => 'zo',
'だ' => 'da',
'ぢ' => 'di',
'づ' => 'du',
'で' => 'de',
'ど' => 'do',
'ば' => 'ba',
'び' => 'bi',
'ぶ' => 'bu',
'べ' => 'be',
'ぼ' => 'bo',
'ぱ' => 'pa',
'ぴ' => 'pi',
'ぷ' => 'pu',
'ぺ' => 'pe',
'ぽ' => 'po',
'ア' => 'A',
'イ' => 'I',
'ウ' => 'U',
'エ' => 'E',
'オ' => 'O',
'カ' => 'KA',
'キ' => 'KI',
'ク' => 'KU',
'ケ' => 'KE',
'コ' => 'KO',
'サ' => 'SA',
'シ' => 'SHI',
'ス' => 'SU',
'セ' => 'SE',
'ソ' => 'SO',
'タ' => 'TA',
'チ' => 'CHI',
'ツ' => 'TSU',
'テ' => 'TE',
'ト' => 'TO',
'ナ' => 'NA',
'ニ' => 'NI',
'ヌ' => 'NU',
'ネ' => 'NE',
'ノ' => 'NO',
'ハ' => 'HA',
'ヒ' => 'HI',
'フ' => 'FU',
'ヘ' => 'HE',
'ホ' => 'HO',
'マ' => 'MA',
'ミ' => 'MI',
'ム' => 'MU',
'メ' => 'ME',
'モ' => 'MO',
'ヤ' => 'YA',
'ユ' => 'YU',
'ヨ' => 'YO',
'ラ' => 'RA',
'リ' => 'RI',
'ル' => 'RU',
'レ' => 'RE',
'ロ' => 'RO',
'ワ' => 'WA',
'ヰ' => 'WI',
'ヱ' => 'WE',
'ヲ' => 'WO',
'ン' => 'N',
'ガ' => 'GA',
'ギ' => 'GI',
'グ' => 'GU',
'ゲ' => 'GE',
'ゴ' => 'GO',
'ザ' => 'ZA',
'ジ' => 'JI',
'ズ' => 'ZU',
'ゼ' => 'ZE',
'ゾ' => 'ZO',
'ダ' => 'DA',
'ヂ' => 'DI',
'ヅ' => 'DU',
'デ' => 'DE',
'ド' => 'DO',
'バ' => 'BA',
'ビ' => 'BI',
'ブ' => 'BU',
'ベ' => 'BE',
'ボ' => 'BO',
'パ' => 'PA',
'ピ' => 'PI',
'プ' => 'PU',
'ペ' => 'PE',
'ポ' => 'PO',
'!' => '!',
'?' => '?',
'、' => ', '
);
$resultat = str_replace(array_keys($hira_kata), array_values($hira_kata), $resultat);
$kyakyukyo = array(
'きゃ' => 'kya',
'きゅ' => 'kyu',
'きょ' => 'kyo',
'しゃ' => 'sha',
'しゅ' => 'shu',
'しょ' => 'sho',
'ちゃ' => 'cha',
'ちゅ' => 'chu',
'ちょ' => 'cho',
'にゃ' => 'nya',
'にゅ' => 'nyu',
'にょ' => 'nyo',
'ひゃ' => 'hya',
'ひゅ' => 'hyu',
'ひょ' => 'hyo',
'みゃ' => 'mya',
'みゅ' => 'myu',
'みょ' => 'myo',
'りゃ' => 'rya',
'りゅ' => 'ryu',
'りょ' => 'ryo',
'ぎゃ' => 'gya',
'ぎゅ' => 'gyu',
'ぎょ' => 'gyo',
'じゃ' => 'ja',
'じゅ' => 'ju',
'じょ' => 'jo',
'びゃ' => 'bya',
'びゅ' => 'byu',
'びょ' => 'byo',
'ぴゃ' => 'pya',
'ぴゅ' => 'pyu',
'ぴょ' => 'pyo',
'キャ' => 'KYA',
'キュ' => 'KYU',
'キョ' => 'KYO',
'シャ' => 'SHA',
'シュ' => 'SHU',
'ショ' => 'SHO',
'チャ' => 'CHA',
'チュ' => 'CHU',
'チョ' => 'CHO',
'ニャ' => 'NYA',
'ニュ' => 'NYU',
'ニョ' => 'NYO',
'ヒャ' => 'HYA',
'ヒュ' => 'HYU',
'ヒョ' => 'HYO',
'ミャ' => 'MYA',
'ミュ' => 'MYU',
'ミョ' => 'MYO',
'リャ' => 'RYA',
'リュ' => 'RYU',
'リョ' => 'RYO',
'ギャ' => 'GYA',
'ギュ' => 'GYU',
'ギョ' => 'GYO',
'ジャ' => 'JA',
'ジュ' => 'JU',
'ジョ' => 'JO',
'ビャ' => 'BYA',
'ビュ' => 'BYU',
'ビョ' => 'BYO',
'ピャ' => 'PYA',
'ピュ' => 'PYU',
'ピョ' => 'PYO',
'ウィ' => 'WI',
'ウェ' => 'WE',
'ウォ' => 'WO',
'シェ' => 'SHE',
'チェ' => 'CHE',
'ツァ' => 'TSA',
'ツェ' => 'TSE',
'ツォ' => 'TSO',
'ティ' => 'TI',
'トゥ' => 'TU',
'ファ' => 'FA',
'フィ' => 'FI',
'フェ' => 'FE',
'フォ' => 'FO',
'ジェ' => 'JE',
'ディ' => 'DI',
'ドゥ' => 'DU',
'デュ' => 'DYU'
);
$resultat = str_replace(array_keys($kyakyukyo), array_values($kyakyukyo), $resultat);
$tsu = array(
'っk' => 'kk',
'っs' => 'ss',
'っt' => 'tt',
'っc' => 'cc',
'っh' => 'hh',
'っm' => 'mm',
'っr' => 'rr',
'っg' => 'gg',
'っj' => 'jj',
'っd' => 'dd',
'っb' => 'bb',
'っb' => 'pp',
'ッK' => 'KK',
'ッS' => 'SS',
'ッT' => 'TT',
'ッC' => 'CC',
'ッH' => 'HH',
'ッM' => 'MM',
'ッR' => 'RR',
'ッG' => 'GG',
'ッJ' => 'JJ',
'ッD' => 'DD',
'ッB' => 'BB',
'ッP' => 'PP',
'ー' => '-'
);
$resultat = str_replace(array_keys($tsu), array_values($tsu), $resultat);
$allongements = array(
'A-' => 'AA',
'I-' => 'II',
'U-' => 'UU',
'E-' => 'EE',
'O-' => 'OO'
);
$resultat = str_replace(array_keys($allongements), array_values($allongements), $resultat);
echo $mot .' > '. $resultat;