¿Es posible convertir cuerda cirílica al inglés (latín) en C#? Por ejemplo, necesito convertir "Петролеум" en "Petróleo". Además, olvidé mencionar que si tengo una cuerda cirílica, necesito permanecer así, ¿puedo verificarlo de alguna manera?¿Cómo puedo convertir cuerda cirílica al inglés en C#
Respuesta
No estoy familiarizado con el cirílico, pero si se trata de un mapeo 1 a 1 de caracteres cirílicos a caracteres latinos que está buscando, puede usar un diccionario de pares de caracteres y asignar cada carácter individualmente:
var map = new Dictionary<char, string>
{
{ 'П', "P" },
{ 'е', "e" },
{ 'т', "t" },
{ 'р', "r" },
...
}
var result = string.Concat("Петролеум".Select(c => map[c]));
Estaba tratando de evitar eso, pero gracias :) Pensé que si había alguna forma más limpia de .Net o C#. – Pece
@Pece: no conozco un método incorporado que lo haga ... Por cierto, si el rendimiento es una preocupación, utilice un char [] o StringBuilder en lugar de LINQ. – dtb
No es un mapa de ch a ch. Necesita caracteres latinos múltiples para algunos caracteres cirílicos. – PauliL
Puede, por supuesto, mapear las letras de la transcripción latina, pero en la mayoría de los casos no obtendrá una palabra en inglés. P.ej. Российская Федерация transcribe a Rossiyskaya Federatsiya. wikipedia ofrece una descripción general de la asignación. Probablemente estés buscando un servicio de traducción, google probablemente ofrece una API para eso.
Utilice un diccionario con palabras en inglés y ruso como una tabla de búsqueda. Va a ser una gran cantidad de tipeo para construirlo, pero es una prueba completa.
realmente no. Si Google no puede producir un diccionario infalible, tampoco puede. – Femaref
¿Por qué quieres hacer esto? Cambiar caracteres uno a uno generalmente no produce una transliteración razonable, y mucho menos una traducción. Puede encontrar que la publicación this es de su interés.
Está buscando una forma de translutinar palabras rusas escritas en cirílico (en algunas codificaciones, por ejemplo, incluso una codificación en latín, ya que iso 8859-5 también es Latin-5 en cirílico) en alfabeto latino (con acentos)?
No sé si .NET tiene algo que transcribir, pero me atrevo a decir que (como muchos otros buenos marcos) no lo tiene. Este enlace wikipedista podría brindarle algunas ideas para implementar translitteration, pero no es la única manera y recuerda que los sistemas de escritura cirílica no son utilizados solo por el ruso y la forma en que aplica la transliteración puede variar en el idioma que usa el sistema de escritura. P.ej. see the same for bulgarian. May this link (siempre desde wp) puede ser también interesante si quiere programar el translitterator usted mismo.
http://code.google.com/apis/ajaxlanguage/documentation/#Transliteration
Google ofrece este servicio de transliteración basada en AJAX. De esta forma, puede evitar computar las transliteraciones usted mismo y dejar que Google las haga sobre la marcha. Significaría permitir que el cliente haga la solicitud a Google, por lo que su aplicación necesitaría tener algún tipo de salida basada en web para que esta solución funcione.
Si está utilizando Windows 7, puede aprovechar la nueva API ELS (Servicios Lingüísticos Extendidos), que le proporciona la funcionalidad de transliteración. Eche un vistazo a Windows 7 API Code Pack - es un conjunto de contenedores administrados además de muchas nuevas API en Windows 7 (como la nueva barra de tareas). Buscar en la carpeta Samples
para el ejemplo Transliterator
, usted encontrará que es exactamente lo que está buscando:
Puede utilizar text.Replace(pair.Key, pair.Value)
función.
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;
}
}
}
Si cambia
cryllic al latín:
text.Replace(pair.Key, pair.Value);
latino a cryllic
source.Replace(pair.Value,pair.Key);
Este método es muy rápido:
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();
}
Esta es la solución para la transliteración cirílico serbio-latino para la forma como esto: 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;
}
}
}
Si "lj", "nj" y "dž" no están en el comienzo del diccionario, se traduciría como "лј", "нј" y "дж" en lugar de "љ", "њ" y "џ ". Además, inmóvil debería tener mayúsculas "Љ", "Њ" y "Џ", porque sin eso, se traduciría como "LJ", "NJ" y "DŽ", en lugar de "Lj", "Nj" y "Dž". Se pueden hacer otros caracteres en mayúsculas con el método ToUpper(). –
- 1. Convertir doble para cuerda
- 2. ¿Cómo convertir una cuerda en flotante?
- 3. Expresión regular al inglés
- 4. ¿Cómo puedo convertir Perl en C?
- 5. ¿Cómo puedo convertir una cuerda de hastable a json en powershell?
- 6. Convertir char [] arreglos de cuerda a
- 7. ¿Cómo puedo reemplazar una cuerda por rango?
- 8. ¿C# en inglés es universal?
- 9. Inglés británico al inglés americano (y viceversa) Convertidor
- 10. iphone sdk: cómo convertir el formato de fecha árabe al inglés?
- 11. c cuerda y int concatenación
- 12. Convertir doble al hexágono en C#
- 13. Convertir caracteres especiales (otro idioma) a inglés en PHP
- 14. ¿Cómo puedo convertir bitset en abreviado en C++?
- 15. ¿Cómo puedo convertir DataRowView en DataRow en C#
- 16. ¿Cómo convierto una cuerda UTF-8 en mayúscula?
- 17. Cómo convertir súper o subíndice al texto normal en C#
- 18. ¿Cómo trunco una cadena al convertir a bytes en C#?
- 19. Cuerda distancia, transposiciones única
- 20. Convertir fecha y hora de inglés a español
- 21. ¿Cómo puedo convertir números hexadecimales a binarios en C++?
- 22. ¿Cómo puedo convertir System.Byte [] en Image? (Formas de ventana C#)
- 23. ¿Cómo puedo convertir Xml a Json y viceversa en C#
- 24. ¿Cómo puedo convertir entre midi a wav/mp3 en C#?
- 25. ¿Cuerda partida en Lua?
- 26. ¿cómo termina la cuerda en java?
- 27. Python - ¿Cómo cortar una cuerda en Python?
- 28. Cómo convertir IntPtr al objeto nativo de C++
- 29. Convertir cadenas en flotantes en Objective-C
- 30. cómo convertir una cadena c en una cadena d?
Hey, acabo de enterar de algo, que podría ser importante para usted también. Si está transcribiendo texto oficial (como direcciones de clientes publicitarios o lo que sea), debe verificar si existe una ley especial para la transliteración con una tabla de transliteración incluida. Bulgaria, por ejemplo, tiene una ley así y cualquier uso indebido podría generar problemas legales. Además de la tabla, se pueden describir excepciones de la regla, que también debe seguir. Como България es Bulgaria, no Balgariya. – vlood