private string ConvertToKatakana(String toKatakana) { JapaneseKanaConverter converter = new JapaneseKanaConverter(); String converted = ""; for (int i = 0; i < toKatakana.Length; i++) { if (JapaneseKanaClassifier.IsKatakana(Convert.ToString(toKatakana[i]))) converted += toKatakana[i]; else if (JapaneseKanaClassifier.IsHiragana(Convert.ToString(toKatakana[i]))) converted += converter.HiraganaToKatakana(Convert.ToString(toKatakana[i])); else { Console.WriteLine(toKatakana + " " + toKatakana[i] + " " + i); if (JapaneseKanaClassifier.IsKanji(Convert.ToString(toKatakana[i]))) throw new FormatException("Kanji Error"); else converted += toKatakana[i]; //Latin Characters } } return converted; }
public static string KanaToRomaji(String kana) { if (JapaneseKanaClassifier.ContainsKanji(kana)) throw new FormatException("String contains kanji"); JapaneseKanaConverter converter = new JapaneseKanaConverter(); if (JapaneseKanaClassifier.IsHiragana(kana)) { kana = converter.HiraganaToKatakana(kana); } String converted = ""; for (int i = 0; i < kana.Length; i++) { if (JapaneseKanaClassifier.IsHiragana(kana[i])) { converted += converter.HiraganaToKatakana(Convert.ToString(kana[i])); } else { converted += kana[i]; } } kana = converted; Dictionary<string, string> dictionary = new Dictionary<string, string>(); Dictionary<string, string> digraph = new Dictionary<string, string>(); for (int i = 0; i < romajiKatakanaPairs.Length; i += 2) dictionary.Add(romajiKatakanaPairs[i], romajiKatakanaPairs[i + 1]); for (int i = 0; i < romajiKatakanaDigraphs.Length; i += 2) digraph.Add(romajiKatakanaDigraphs[i], romajiKatakanaDigraphs[i + 1]); String temp = ""; String modified = ""; for (int i = 0; i < kana.Length; i++) { temp = ""; if (((i + 1) < kana.Length) && dictionary.ContainsKey(Convert.ToString(kana[i]))) { temp = kana[i] + "" + kana[i + 1]; if (digraph.ContainsKey(temp)) { modified += digraph[temp]; i++; } else if (dictionary.ContainsKey(Convert.ToString(kana[i]))) { modified += dictionary[Convert.ToString(kana[i])]; } } else if (dictionary.ContainsKey(Convert.ToString(kana[i]))) { modified += dictionary[Convert.ToString(kana[i])]; } else if (kana[i] == 'っ' || kana[i] == 'ッ') { string buffer = ""; if (((i + 1) < kana.Length) && dictionary.ContainsKey(Convert.ToString(kana[i + 1])) && JapaneseKanaClassifier.IsJapaneseScript(Convert.ToString(kana[i + 1]))) { buffer += dictionary[Convert.ToString(kana[i + 1])]; modified += buffer[0]; } else if ((i + 1) == kana.Length || (((i + 1) < kana.Length) && dictionary.ContainsKey(Convert.ToString(kana[i + 1])) && !JapaneseKanaClassifier.IsJapaneseScript(Convert.ToString(kana[i + 1])))) modified += "-"; } else if (kana[i] == 'ー') { modified += modified[modified.Length - 1]; } else { modified += kana[i]; } } return modified; }