c# - teclado - pronunciacion alfabeto ruso
Cómo transliterar el texto cirílico al latín (9)
Tengo un método que convierte cualquier texto latino (por ejemplo, inglés, francés, alemán, polaco) en su forma de babosa,
por ejemplo, Alpha Bravo Charlie
=> alpha-bravo-charlie
Pero no puede funcionar con texto cirílico (por ejemplo, ruso), por lo que lo que quiero hacer es transliterar el texto cirílico a caracteres latinos, y luego refinarlo.
¿Alguien tiene alguna manera de hacer esa transliteración? Ya sea por fuente real o una biblioteca.
Estoy codificando en C #, por lo que una biblioteca .NET funcionará. Alternativamente, si no tiene código C #, estoy seguro de que podría convertirlo.
¿Por qué no puedes simplemente tomar una tabla de transliteración y hacer una pequeña expresión regular o subrutina?
Microsoft tiene una herramienta de transliteración que incluye una DLL a la que podría conectarse (necesitaría verificar las restricciones de licencia si no va a usarla personalmente). Puedes leer más sobre esto en la publicación del blog de Dejan Vesić
Puede usar .NET open source dll library UnidecodeSharpFork para transliterar el cirílico y muchos más idiomas al latín.
Ejemplo de uso:
Assert.AreEqual("Rabota s kirillitsey", "Работа с кириллицей".Unidecode());
Assert.AreEqual("CZSczs", "ČŽŠčžš".Unidecode());
Assert.AreEqual("Hello, World!", "Hello, World!".Unidecode());
Pruebas cirílicas:
/// <summary>
/// According to http://en.wikipedia.org/wiki/Romanization_of_Russian BGN/PCGN.
/// http://en.wikipedia.org/wiki/BGN/PCGN_romanization_of_Russian
/// With converting "ё" to "yo".
/// </summary>
[TestMethod]
public void RussianAlphabetTest()
{
string russianAlphabetLowercase = "а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я";
string russianAlphabetUppercase = "А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я";
string expectedLowercase = "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 expectedUppercase = "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";
Assert.AreEqual(expectedLowercase, russianAlphabetLowercase.Unidecode());
Assert.AreEqual(expectedUppercase, russianAlphabetUppercase.Unidecode());
}
Sencillo, rápido y potente. Y es fácil de ampliar / modificar la tabla de transliteración si lo desea.
Puede usar mi biblioteca para la transliteración: https://github.com/nick-buhro/Translit
También está disponible en NuGet .
Ejemplo:
var latin = Transliteration.CyrillicToLatin(
"Предками данная мудрость народная!",
Language.Russian);
Console.WriteLine(latin);
// Output: Predkami dannaya mudrost` narodnaya!
Revisa este código:
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;
}
}
}
criollo al latín
text.Replace(pair.Key, pair.Value);
latín a cryllic
source.Replace(pair.Value,pair.Key);
Use este método Solo pase su palabra cirílica que contiene la cadena y este método devuelve la cadena del inglés latino correspondiente a la cadena cirílica.
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;
}
Para futuros lectores
Windows 7+ puede hacer esto con sus servicios lingüísticos extendidos . (Necesitará el paquete de códigos API de Windows para hacerlo desde .NET)
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;
}