Как преобразовать строку пиньинь в китайский язык в C # - PullRequest
7 голосов
/ 02 марта 2012

В моем приложении WPF есть клавиатура с сенсорным экраном, и я хотел бы разрешить пользователям писать на китайском языке.

Я видел, что в Windows есть IME, который позволяет писать на китайском с пиньинь. Это прекрасно работает, но я бы хотел настроить его для своего приложения WPF. (Особенно список кандидатов). Я не нашел никакой документации для этого.

Идея будет заключаться в том, что пользователь будет писать на пиньине с помощью виртуальной клавиатуры, а рядом с текстовым полем будет список выбора с китайскими идеограммами.

Есть ли у вас какие-либо советы для достижения этого? Может быть, есть библиотека (не от Microsoft), которая может это сделать, и в этом случае я не буду использовать IME от MS?

Ответы [ 2 ]

3 голосов
/ 12 марта 2012

http://www.microsoft.com/downloads/zh-cn/details.aspx?FamilyID=7D1DF9CE-4AEE-467F-996E-BEC826C5DAA2

http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=15251

У Microsoft действительно есть хорошие компоненты / библиотеки для этого, но они скрыты здесь, в Visual Studio International Feature Pack.

Обратите внимание, что вам нужен 1.0 SR 1, который предоставляет базовые библиотеки, в то время как 2.0 добавляет много элементов управления WinForms или WPF.

(Обновлено 26 октября 2017 г. Многие ребята опубликовали пакеты NuGet на NuGet.org на основе Microsoftкод, так что вы также можете проверить эти пакеты.)

3 голосов
/ 12 марта 2012

Не уверен, есть ли доступные пакеты ОС (с открытым исходным кодом).Тем не менее, в теории, не так уж сложно построить такую ​​библиотеку.На китайском языке около 1300 одиночных звуков: начальный + финальный + тоны.Каждый звук имеет группу китайских символов, различное количество которых составляет от 1 до 130 символов.

Вы можете определить массив всех звуков пиньинь:

string[] pinyins = new string[] {
  "a:c1c2c3...",      // pinyin 1 a: character1 character2...
  ...
  "zuo:z1z2z3z4z5..." // last pinyin (1300) zuo: character character...
};

Приведенный выше массив является основой для вашего отображенияPinyin на китайский (китайские иероглифы и тона пиньинь являются строками юникода).Затем для каждого входного звука пиньинь получается список символов с помощью такой функции:

string getCharacters(string aPinyin) {
   string characters = null;
   foreach(string item in pinyins) {
      string[] temp = item.split(':');
      if (temp[0].Equals(aPinyin)) {
          charaters = temp[1];
          break;
      }
   }
   return characters;
}

Я написал JavaScipt давным-давно, где я определил связь между пиньинь и китайскими символами.В моем блоге: Получить пиньинь из китайских иероглифов , скрипт можно найти, просмотрев исходные коды или проверить элемент в контекстном меню.В моем блоге сценарий используется для преобразования китайского языка в пиньинь, но это отношение можно использовать как ссылку.

enter image description here

Чтобы добавить функцию интеллектуального пиньинь - отображение спискаслова для пиньинь, это можно сделать, определив все общеупотребительные слова в похожем порядке: пиньинь: слова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...