2010-06-15 114 views
0

我正在準備一個簡單的字典項目,並且已經準備好用兩種語言進行搜索。儘管如此,因爲其中一個使用西里爾文字母,我必須能夠檢查數據庫,即使該單詞是用拉丁字母書寫的。這是什麼意思將一個字母轉換爲另一個

西里爾:кон

拉美

:KON

兩個應該給這個字的說明(在這種情況下「馬」)。我一直在考慮使用兩個結構和兩個字母來達到這個目的......不過,我仍然無法得到它。你們有些人有類似的情況嗎?如果是 - 請分享建議或代碼樣本。

+0

請不要在標題重複標籤( 「C#」)。這就是標籤的用途。 – 2010-06-15 18:49:30

+0

感謝您的編輯。我不知道這個系統是這樣工作的。我的錯! – Branimir 2010-06-16 13:52:39

回答

1

詞典應該適合映射西里爾字符到拉丁人。我假設你會按照http://en.wikipedia.org/wiki/ISO_9來映射它們。

public class ISO9TransliterationProvider { 
    private readonly Dictionary<Char, Char> charMapping = new Dictionary<char,char>() { 
     { 'А', 'A' }, 
     { 'Б', 'B' } 
     //etc. 
    }; 

    public string ToLatin(string cyrillic) { 
     StringBuilder result = new StringBuilder(); 
     foreach (char c in cyrillic) 
      result.Append(charMapping[c]); 
     return result.ToString(); 
    } 
} 
1

也許這就是對你有所幫助:

Windows Transliteration Services

+0

您是否有特別的原因讓您發佈該鏈接的舊版本? – 2010-06-15 18:50:49

+0

糟糕。不,那不是我的意圖。 – Arne 2010-06-15 18:53:21

+0

感謝您的建議,對於簡單的項目仍然使用這種方法,因爲我正在處理的項目太多了:)但是這仍然會在另一個項目中派上用場,所以再次感謝;) – Branimir 2010-06-20 12:53:52

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

cryllic拉丁文:

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

拉丁語cryllic

source.Replace(pair.Value,pair.Key); 
相關問題