2012-03-02 42 views
7

Tôi có bàn phím màn hình cảm ứng trong ứng dụng WPF của mình và tôi muốn cho phép người dùng viết bằng tiếng Trung.Cách chuyển đổi chuỗi bính âm sang tiếng Trung ở C#

Tôi thấy rằng có IME trong Windows cho phép viết bằng tiếng Trung với Hán Việt. Nó hoạt động tốt nhưng tôi muốn tùy chỉnh nó cho ứng dụng WPF của tôi. (Đặc biệt là danh sách ứng cử viên). Tôi không tìm thấy bất kỳ tài liệu nào về điều này.

Ý tưởng sẽ là người dùng viết bằng Hán Việt với bàn phím ảo và sẽ có danh sách lựa chọn có chữ tượng hình Trung Quốc bên cạnh hộp văn bản.

Bạn có lời khuyên nào để đạt được điều đó không? Có lẽ có một thư viện (không phải từ Microsoft) mà có thể làm cho nó và trong trường hợp này tôi sẽ không sử dụng IME từ MS?

+0

Nếu nó là đầu vào dựa trên cảm ứng, wouldn' t tốt hơn là cho phép họ nhập các ký tự bằng cách "viết" trên màn hình thay vì sử dụng chuyển đổi bính âm? – Szabolcs

+0

Màn hình cảm ứng không thực sự hoạt động và sẽ không dễ dàng để viết trong các hộp văn bản nhỏ. Nó cho một ứng dụng y tế, vì vậy các bác sĩ có khả năng tạo ra bệnh nhân mới và sau khi tìm thấy chúng theo tên của họ, tên, vv Đó là lý do tại sao không thể thực hiện giải pháp của bạn. –

+0

Vì vậy, lý do bạn muốn tùy chỉnh danh sách ứng viên là tự động hoàn thành tên bệnh nhân? Cách hầu hết các chương trình tôi biết thực hiện điều này là bằng cách cho phép gõ bính âm (trực tiếp, không thông qua hệ thống IME), và tự động điền dựa trên đó.Vấn đề này dễ hơn rất nhiều so với việc thực hiện IME tổng quát và hiệu quả --- IME chung phải xử lý tất cả các ký tự và phải gợi ý các kết quả phù hợp nhất MSE bính âm MS mới nhất thậm chí tự động cập nhật từ internet với số liệu thống kê mới nhất để cải thiện dự đoán, và nó cũng học hỏi từ người dùng. – Szabolcs

Trả lời

3

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 trên thực tế có các thành phần tốt/thư viện cho rằng, nhưng họ được ẩn ở đây trong Visual Studio Feature Pack quốc tế.

Lưu ý rằng bạn cần 1.0 SR 1 cung cấp các thư viện cơ bản, trong khi 2.0 thêm nhiều điều khiển WinForms hoặc WPF.

(Cập nhật ngày 26 tháng 10, năm 2017. Nhiều chàng trai đã công bố gói NuGet trên NuGet.org dựa trên mã của Microsoft, vì vậy bạn cũng có thể kiểm tra những gói ra.)

+0

Cảm ơn bạn Lex Li, Tôi đã tải xuống gói trước nhưng tôi không thấy bất kỳ điều gì về cách chuyển đổi chuỗi bính âm sang chữ tượng hình Trung Quốc. Tôi sẽ sử dụng chức năng nào? –

+0

Tôi nên làm cho nó rõ ràng hơn rằng bạn cần cả 1,0 SR 1 và 2,0. CHSPinyinConv.msi trong phiên bản 1.0 SR1 là phiên bản chuyển đổi Pinyin. ChineseChar.GetChars (chuỗi bính âm) có thể là điểm khởi đầu của bạn. –

+1

Tôi nghĩ nên đề cập đến toàn bộ không gian tên, đó là 'Microsoft.International.Converters.PinYinConverter'. Ngoài ra, dễ dàng hơn để có được thông qua NuGet ngày hôm nay: https://www.nuget.org/packages/Microsoft.International.Converters.PinYinConverter/ –

2

Không chắc chắn nếu có bất kỳ gói hệ điều hành (Nguồn mở) nào khả dụng. Tuy nhiên, về mặt lý thuyết, việc xây dựng loại thư viện này không quá khó. Trong tiếng Trung, có khoảng 1300 âm thanh đơn: ban đầu + âm cuối +. Mỗi âm thanh có nhóm các ký tự Trung Quốc, số khác nhau từ 1 đến 130 ký tự.

Bạn có thể xác định một mảng của tất cả các âm thanh Pinyin:

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

Mảng trên là một cơ sở cho việc lập bản đồ của bạn Pinyin tiếng Trung Quốc (chữ Hán và tông màu Pinyin là chuỗi unicode). Sau đó, đối với từng âm thanh đầu vào Pinyin, một danh sách các nhân vật thu được bằng một hàm như thế này:

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; 
} 

Tôi đã viết một thời gian dài JavaScipt trước, nơi tôi định nghĩa mối quan hệ giữa Pinyin và chữ Hán. Trong blog của tôi: Get Pinyin From Chinese Characters, bạn có thể tìm thấy tập lệnh bằng cách xem mã nguồn hoặc Kiểm tra phần tử trong menu ngữ cảnh. Trong blog của tôi, tập lệnh được sử dụng để chuyển đổi tiếng Trung thành Bính âm, nhưng mối quan hệ có thể được sử dụng làm tham chiếu.

enter image description here

Để thêm tính năng Pinyin thông minh - hiển thị một danh sách các từ cho Pinyin, điều này có thể được thực hiện bằng cách định nghĩa tất cả các từ thường được sử dụng trong các mô hình tương tự: bính âm: từ.

+0

Xin chào David, cảm ơn câu trả lời của bạn. Bạn có nghĩ rằng người dùng sẽ có thể viết mọi thứ họ muốn với từ điển này? Tôi có nghĩa là các công cụ cơ bản như họ của họ, tên, ý kiến ​​về một kỳ thi y tế. –