2010-06-20 40 views
7

Có thể chuyển đổi chuỗi Cyrillic sang tiếng Anh (tiếng Latinh) trong C#? Ví dụ tôi cần chuyển đổi "Петролеум" trong "Petroleum". Plus Tôi quên đề cập đến rằng nếu tôi có chuỗi Cyrillic nó cần phải ở lại như thế, vì vậy tôi có thể kiểm tra bằng cách nào đó?Làm cách nào để chuyển đổi chuỗi Cyrillic sang tiếng Anh trong C#

+2

Hey, vừa phát hiện ra điều gì đó, mà có thể là quan trọng đối với bạn quá. Nếu bạn đang chuyển ngữ văn bản chính thức (như địa chỉ của khách hàng quảng cáo hoặc bất kỳ điều gì), bạn cần phải kiểm tra xem có một luật đặc biệt cho chuyển ngữ với một bảng chuyển ngữ được bao gồm hay không. Bulgaria, ví dụ, có luật như vậy và bất kỳ sự lạm dụng nào có thể dẫn đến các vấn đề pháp lý. Ngoài bảng, có thể được mô tả các ngoại lệ của quy tắc, mà bạn cũng cần tuân theo. Giống như България là Bulgaria, không phải Balgariya. – vlood

Trả lời

7

Tôi không quen với Cyrillic, nhưng nếu nó chỉ là bản đồ 1 đến 1 của ký tự Cyrillic thành ký tự Latinh, bạn có thể sử dụng từ điển cặp ký tự và ánh xạ từng ký tự riêng lẻ:

var map = new Dictionary<char, string> 
{ 
    { 'П', "P" }, 
    { 'е', "e" }, 
    { 'т', "t" }, 
    { 'р', "r" }, 
    ... 
} 

var result = string.Concat("Петролеум".Select(c => map[c])); 
+0

Tôi đã cố gắng để tránh điều đó, nhưng cảm ơn :) Tôi nghĩ nếu có một số cách sạch hơn từ. Net hoặc C#. – Pece

+0

@ Pece: Tôi không biết về một phương pháp được xây dựng trong thực hiện điều này ... BTW, nếu hiệu suất là một mối quan tâm, sử dụng một char [] hoặc StringBuilder thay vì LINQ. – dtb

+4

Nó không phải là ch ch mapping. Bạn cần nhiều ký tự La Tinh cho một số ký tự Cyrillic. – PauliL

3

Tất nhiên, bạn có thể ánh xạ các chữ cái với bản sao Latin, nhưng bạn sẽ không nhận được một từ tiếng Anh nào trong số đó trong hầu hết các trường hợp. Ví dụ. Российская Федерация sao chép sang Rossiyskaya Federatsiya. wikipedia cung cấp tổng quan về ánh xạ. Có thể bạn đang tìm kiếm một dịch vụ dịch thuật, google có thể cung cấp api cho dịch vụ đó.

0

Sử dụng từ điển có từ tiếng Nga và tiếng Anh làm bảng tra cứu. Nó sẽ có rất nhiều cách gõ để xây dựng nó, nhưng đó là bằng chứng đầy đủ.

+3

không thực sự. Nếu google không thể tạo ra một từ điển bằng chứng ngu ngốc, anh ta cũng không thể. – Femaref

0

Tại sao bạn muốn thực hiện việc này? Thay đổi các ký tự một-cho-một nói chung thậm chí không tạo ra phiên âm hợp lý, ít dịch hơn nhiều. Bạn có thể tìm thấy this bài đăng cần được quan tâm.

0

Bạn đang tìm kiếm cách dịch các từ tiếng Nga được viết bằng cirillic (trong một số mã hóa, ví dụ như mã Latin, vì iso 8859-5 aka Latin-5 là cyrillic) thành bảng chữ cái latin (có dấu)?

Tôi không biết liệu .NET có gì để chuyển ngữ hay không, nhưng tôi dám nói nó (như nhiều khung công tác tốt khác) chưa có. Liên kết wikipedian này có thể cung cấp cho bạn một số ý tưởng để thực hiện phiên dịch, nhưng nó không phải là cách duy nhất và nhớ những hệ thống chữ viết độc hại không được sử dụng bởi tiếng Nga và cách bạn áp dụng phiên dịch có thể thay đổi theo ngôn ngữ sử dụng hệ thống chữ viết. Ví dụ. see the same for bulgarian. Có thể this link (luôn luôn từ wp) cũng có thể thú vị nếu bạn muốn tự mình lập trình trình dịch.

2

http://code.google.com/apis/ajaxlanguage/documentation/#Transliteration

Google cung cấp dịch vụ chuyển ngữ dựa trên AJAX này. Bằng cách này, bạn có thể tự mình tránh việc tự dịch chuyển ngữ và cho phép Google thực hiện chúng một cách nhanh chóng. Nó có nghĩa là để cho phía máy khách thực hiện yêu cầu tới Google, vì vậy điều này có nghĩa là ứng dụng của bạn sẽ cần phải có một số loại đầu ra dựa trên web để giải pháp này hoạt động.

3

Nếu bạn đang sử dụng Windows 7, bạn có thể tận dụng API ELS (Extended Linguistic Services) mới, cung cấp chức năng chuyển ngữ cho bạn. Hãy xem Windows 7 API Code Pack - đó là tập hợp các trình bao bọc được quản lý trên nhiều API mới trong Windows 7 (chẳng hạn như Thanh tác vụ mới). Tìm trong các thư mục Samples cho ví dụ Transliterator, bạn sẽ thấy đó là chính xác những gì bạn đang tìm kiếm:

2

Bạn có thể sử dụng chức năng text.Replace(pair.Key, pair.Value).

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 

namespace Transliter 
{ 
    public partial class Form1 : Form 
    { 
     Dictionary<string, string> words = new Dictionary<string, string>(); 

     public Form1() 
     { 
      InitializeComponent(); 
      words.Add("а", "a"); 
      words.Add("б", "b"); 
      words.Add("в", "v"); 
      words.Add("г", "g"); 
      words.Add("д", "d"); 
      words.Add("е", "e"); 
      words.Add("ё", "yo"); 
      words.Add("ж", "zh"); 
      words.Add("з", "z"); 
      words.Add("и", "i"); 
      words.Add("й", "j"); 
      words.Add("к", "k"); 
      words.Add("л", "l"); 
      words.Add("м", "m"); 
      words.Add("н", "n"); 
      words.Add("о", "o"); 
      words.Add("п", "p"); 
      words.Add("р", "r"); 
      words.Add("с", "s"); 
      words.Add("т", "t"); 
      words.Add("у", "u"); 
      words.Add("ф", "f"); 
      words.Add("х", "h"); 
      words.Add("ц", "c"); 
      words.Add("ч", "ch"); 
      words.Add("ш", "sh"); 
      words.Add("щ", "sch"); 
      words.Add("ъ", "j"); 
      words.Add("ы", "i"); 
      words.Add("ь", "j"); 
      words.Add("э", "e"); 
      words.Add("ю", "yu"); 
      words.Add("я", "ya"); 
      words.Add("А", "A"); 
      words.Add("Б", "B"); 
      words.Add("В", "V"); 
      words.Add("Г", "G"); 
      words.Add("Д", "D"); 
      words.Add("Е", "E"); 
      words.Add("Ё", "Yo"); 
      words.Add("Ж", "Zh"); 
      words.Add("З", "Z"); 
      words.Add("И", "I"); 
      words.Add("Й", "J"); 
      words.Add("К", "K"); 
      words.Add("Л", "L"); 
      words.Add("М", "M"); 
      words.Add("Н", "N"); 
      words.Add("О", "O"); 
      words.Add("П", "P"); 
      words.Add("Р", "R"); 
      words.Add("С", "S"); 
      words.Add("Т", "T"); 
      words.Add("У", "U"); 
      words.Add("Ф", "F"); 
      words.Add("Х", "H"); 
      words.Add("Ц", "C"); 
      words.Add("Ч", "Ch"); 
      words.Add("Ш", "Sh"); 
      words.Add("Щ", "Sch"); 
      words.Add("Ъ", "J"); 
      words.Add("Ы", "I"); 
      words.Add("Ь", "J"); 
      words.Add("Э", "E"); 
      words.Add("Ю", "Yu"); 
      words.Add("Я", "Ya"); 
    } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      string source = textBox1.Text; 
      foreach (KeyValuePair<string, string> pair in words) 
      { 
       source = source.Replace(pair.Key, pair.Value); 
      } 
      textBox2.Text = source; 
     } 
    } 
} 

Nếu bạn thay đổi

cryllic để Latin:

text.Replace(pair.Key, pair.Value); 

Latin để cryllic

source.Replace(pair.Value,pair.Key); 
2

Phương pháp này rất nhanh:

static string[] CyrilicToLatinL = 
    "a,b,v,g,d,e,zh,z,i,j,k,l,m,n,o,p,r,s,t,u,f,kh,c,ch,sh,sch,j,y,j,e,yu,ya".Split(','); 
static string[] CyrilicToLatinU = 
    "A,B,V,G,D,E,Zh,Z,I,J,K,L,M,N,O,P,R,S,T,U,F,Kh,C,Ch,Sh,Sch,J,Y,J,E,Yu,Ya".Split(','); 

public static string CyrilicToLatin(string s) 
{ 
    var sb = new StringBuilder((int)(s.Length * 1.5)); 
    foreach (char c in s) 
    { 
    if (c >= '\x430' && c <= '\x44f') sb.Append(CyrilicToLatinL[c - '\x430']); 
    else if (c >= '\x410' && c <= '\x42f') sb.Append(CyrilicToLatinU[c - '\x410']); 
    else if (c == '\x401') sb.Append("Yo"); 
    else if (c == '\x451') sb.Append("yo"); 
    else sb.Append(c); 
    } 
    return sb.ToString(); 
} 
0

Đây là giải pháp cho phiên âm Kirin-latin serbian cho hình thức như thế này: form

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     Dictionary<string, string> slova = new Dictionary<string, string>(); 

     public Form1() 
     { 
      InitializeComponent(); 
      slova.Add("Љ", "Lj"); 
      slova.Add("Њ", "Nj"); 
      slova.Add("Џ", "Dž"); 
      slova.Add("љ", "lj"); 
      slova.Add("њ", "nj"); 
      slova.Add("џ", "dž"); 
      slova.Add("а", "a"); 
      slova.Add("б", "b"); 
      slova.Add("в", "v"); 
      slova.Add("г", "g"); 
      slova.Add("д", "d"); 
      slova.Add("ђ", "đ"); 
      slova.Add("е", "e"); 
      slova.Add("ж", "ž"); 
      slova.Add("з", "z"); 
      slova.Add("и", "i"); 
      slova.Add("ј", "j"); 
      slova.Add("к", "k"); 
      slova.Add("л", "l"); 
      slova.Add("м", "m"); 
      slova.Add("н", "n"); 
      slova.Add("о", "o"); 
      slova.Add("п", "p"); 
      slova.Add("р", "r"); 
      slova.Add("с", "s"); 
      slova.Add("т", "t"); 
      slova.Add("ћ", "ć"); 
      slova.Add("у", "u"); 
      slova.Add("ф", "f"); 
      slova.Add("х", "h"); 
      slova.Add("ц", "c"); 
      slova.Add("ч", "č"); 
      slova.Add("ш", "š"); 
     } 

     // Method for cyrillic to latin 
     private void button1_Click(object sender, EventArgs e) 
     { 
      string source = textBox1.Text; 
      foreach (KeyValuePair<string, string> pair in slova) 
      { 
       source = source.Replace(pair.Key, pair.Value); 
       // For upper case 
       source = source.Replace(pair.Key.ToUpper(), 
             pair.Value.ToUpper());        
      } 
      textBox2.Text = source; 
     } 

     // Method for latin to cyrillic 
     private void button2_Click(object sender, EventArgs e) 
     { 
      string source = textBox2.Text; 
      foreach (KeyValuePair<string, string> pair in slova) 
      { 
       source = source.Replace(pair.Value, pair.Key); 
       // For upper case 
       source = source.Replace(pair.Value.ToUpper(), 
             pair.Key.ToUpper()); 
      } 
      textBox1.Text = source; 
     } 
    } 
} 
+0

Nếu "lj", "nj" và "dž" không có trong từ điển của từ điển, nó sẽ được dịch là "лј", "нј" và "дж" thay vì "љ", "њ" và "џ ". Ngoài ra, từ xa nên có chữ hoa "Љ", "Њ" và "Џ", bởi vì không có nó, nó sẽ được dịch là "LJ", "NJ" và "DŽ", thay vì "Lj", "Nj" và "Dž". Các ký tự chữ thường khác có thể được thực hiện bằng phương thức ToUpper(). –

Các vấn đề liên quan