How to transliterate Cyrillic to Latin text

后端 未结 10 1295
情话喂你
情话喂你 2020-12-05 05:01

I have a method which turns any Latin text (e.g. English, French, German, Polish) into its slug form,

e.g. Alpha Bravo Charlie => alpha-bravo-char

相关标签:
10条回答
  • 2020-12-05 05:38

    Use this method Just pass your Cyrillic word contain string and this method return Latin English string corresponding to Cyrillic string.

    public static string GetLatinCodeFromCyrillic(string str)
        {
    
            str = str.Replace("б", "b");
            str = str.Replace("Б", "B");
    
            str = str.Replace("в", "v");
            str = str.Replace("В", "V");
    
            str = str.Replace("г", "h");
            str = str.Replace("Г", "H");
    
            str = str.Replace("ґ", "g");
            str = str.Replace("Ґ", "G");
    
            str = str.Replace("д", "d");
            str = str.Replace("Д", "D");
    
            str = str.Replace("є", "ye");
            str = str.Replace("Э", "Ye");
    
            str = str.Replace("ж", "zh");
            str = str.Replace("Ж", "Zh");
    
            str = str.Replace("з", "z");
            str = str.Replace("З", "Z");
    
            str = str.Replace("и", "y");
            str = str.Replace("И", "Y");
    
            str = str.Replace("ї", "yi");
            str = str.Replace("Ї", "YI");
    
            str = str.Replace("й", "j");
            str = str.Replace("Й", "J");
    
            str = str.Replace("к", "k");
            str = str.Replace("К", "K");
    
            str = str.Replace("л", "l");
            str = str.Replace("Л", "L");
    
            str = str.Replace("м", "m");
            str = str.Replace("М", "M");
    
            str = str.Replace("н", "n");
            str = str.Replace("Н", "N");
    
            str = str.Replace("п", "p");
            str = str.Replace("П", "P");
    
            str = str.Replace("р", "r");
            str = str.Replace("Р", "R");
    
            str = str.Replace("с", "s");
            str = str.Replace("С", "S");
    
            str = str.Replace("ч", "ch");
            str = str.Replace("Ч", "CH");
    
            str = str.Replace("ш", "sh");
            str = str.Replace("Щ", "SHH");
    
            str = str.Replace("ю", "yu");
            str = str.Replace("Ю", "YU");
    
            str = str.Replace("Я", "YA");
            str = str.Replace("я", "ya");
    
            str = str.Replace('ь', '"');
            str = str.Replace("Ь", "");
    
            str = str.Replace('т', 't');
            str = str.Replace("Т", "T");
    
            str = str.Replace('ц', 'c');
            str = str.Replace("Ц", "C");
    
            str = str.Replace('о', 'o');
            str = str.Replace("О", "O");
    
            str = str.Replace('е', 'e');
            str = str.Replace("Е", "E");
    
            str = str.Replace('а', 'a');
            str = str.Replace("А", "A");
    
            str = str.Replace('ф', 'f');
            str = str.Replace("Ф", "F");
    
            str = str.Replace('і', 'i');
            str = str.Replace("І", "I");
    
            str = str.Replace('У', 'U');
            str = str.Replace("у", "u");
    
            str = str.Replace('х', 'x');
            str = str.Replace("Х", "X");
            return str;
        }
    
    0 讨论(0)
  • 2020-12-05 05:39

    Why can't you just take a transliteration table and make a small regex or subroutine?

    0 讨论(0)
  • 2020-12-05 05:39

    Microsoft has a transliteration tool which includes a DLL you could hook into (you would need to check licensing restrictions if you're going to use it non-personally). You can read more about it in Dejan Vesić's blog post

    0 讨论(0)
  • 2020-12-05 05:39

    Here is a great article that describes how to make a C# equivalent of this JavaScript one.

    string result = DisplayInEnglish("Олъга Виктровна Василенко");
    
    0 讨论(0)
  • 2020-12-05 05:40

    Check this code:

    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 to latin:

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

    latin to cryllic

    source.Replace(pair.Value,pair.Key);
    
    0 讨论(0)
  • 2020-12-05 05:41
        public static string Translit(string str)
        {
            string[] lat_up = {"A", "B", "V", "G", "D", "E", "Yo", "Zh", "Z", "I", "Y", "K", "L", "M", "N", "O", "P", "R", "S", "T", "U", "F", "Kh", "Ts", "Ch", "Sh", "Shch", "\"", "Y", "'", "E", "Yu", "Ya"};
            string[] lat_low = {"a", "b", "v", "g", "d", "e", "yo", "zh", "z", "i", "y", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "kh", "ts", "ch", "sh", "shch", "\"", "y", "'", "e", "yu", "ya"};
            string[] rus_up = {"А", "Б", "В", "Г", "Д", "Е", "Ё", "Ж", "З", "И", "Й", "К", "Л", "М", "Н", "О", "П", "Р", "С", "Т", "У", "Ф", "Х", "Ц", "Ч", "Ш", "Щ", "Ъ", "Ы", "Ь", "Э", "Ю", "Я"};
            string[] rus_low = { "а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ы", "ь", "э", "ю", "я"};
            for (int i = 0; i <= 32; i++)
            {
                str = str.Replace(rus_up[i],lat_up[i]);
                str = str.Replace(rus_low[i],lat_low[i]);              
            }
            return str;
        }
    
    0 讨论(0)
提交回复
热议问题