est-il possible de convertir une chaîne cyrillique en anglais (latin) en C #? Par exemple, j'ai besoin de convertir "петролеум" dans "Petroleum". De plus, j'ai oublié de mentionner que si j'ai Cyrillic String, il est nécessaire de rester comme ça, alors puis-je vérifier cela? P>
10 Réponses :
Vous pouvez bien sûr cartographier les lettres à la transcription latine, mais vous n'obtiendrez pas un mot anglais dans la plupart des cas. Par exemple. Российская федерация transcrit à Rossiyskaya Federatsiya. Wikipedia offre un aperçu de la cartographie. Vous recherchez probablement un service de traduction, Google propose probablement une API pour cela. P>
Je ne connais pas Cyrillic, mais s'il s'agit simplement d'une cartographie de 1 à 1 de caractères cyrilliques aux caractères latins que vous après, vous pouvez utiliser un dictionnaire de paires de caractères et mapper chaque personnage individuellement:
var map = new Dictionary<char, string>
{
{ 'Ð', "P" },
{ 'е', "e" },
{ 'Ñ', "t" },
{ 'Ñ', "r" },
...
}
var result = string.Concat("ÐеÑÑолеÑм".Select(c => map[c]));
J'essayais d'éviter cela, mais merci :) Je pensais que s'il y avait un moyen plus propre de .NET ou C #.
@Pece: Je ne suis pas au courant d'une méthode intégrée qui ... BTW, si la performance est une préoccupation, utilisez un char [] ou StringBuilder au lieu de LINQ.
Ce n'est pas un ch mappage. Vous avez besoin de plusieurs caractères latins pour certains caractères cyrilliques.
C'est la solution la plus longue mais la plus simple que j'ai trouvée jusqu'à présent, alors merci :)
Utilisez un dictionnaire avec des mots russes et anglais comme table de recherche. Ce sera beaucoup de taper pour le construire, mais c'est une preuve totale. P>
pas vraiment. Si Google ne peut pas produire un dictionnaire de preuve imbécile, il ne peut pas non plus.
Pourquoi voulez-vous faire cela? Changer de caractères Un-pour-un ne produit généralement même pas de translittération raisonnable, beaucoup moins une traduction. Vous pouvez trouver Ceci Post à être de intérêt. p>
Vous recherchez un moyen de trachirither Wamles russes écrit en Cirillic (dans certains codages, par exemple un encodage latin, car ISO 8859-5 aka latin-5 est pour Cyrillic) dans l'alphabet latin (avec des accents)? p>
Je ne sais pas si .net a quelque chose à translitterrer, mais j'ose le dire (autant d'autres bons cadres). Ce lien Wikipedian pourrait vous donner quelques idées pour mettre en œuvre le tyriculteur, mais ce n'est pas le seul moyen et souvenez-vous que les systèmes d'écriture cyrilliques ne sont pas utilisés uniquement par le russe et la manière dont vous appliquez le translittervement peut varier sur la langue qui utilise le système d'écriture. Par exemple. Voir la même chose pour Bulgare . May Ce lien (toujours de WP) peut également être également intéressant si vous souhaitez programmer le TRUCLITSER vous-même. p>
http://code.google.com/apis/ajaxlanguage/documentation/ #Translittation p>
Google propose ce service de translittération basé sur AJAX. De cette façon, vous pouvez éviter de calculer vous-même des translittérations et laissez Google les faire à la volée. Cela signifiait que laisser le côté client apporter la demande à Google. Cela signifie donc que votre application devrait avoir une sorte de sortie Web pour cette solution au travail. P>
Si vous utilisez Windows 7, vous pouvez tirer parti des API NOUVELLES ELS (Services linguistiques étendus), qui fournit une fonctionnalité de translittération pour vous. Regardez le Pack de code de l'API Windows 7 - C'est un ensemble d'emballages gérés au-dessus de Beaucoup de nouvelles API sous Windows 7 (telles que la nouvelle barre des tâches). Regardez dans le dossier code> d'échantillons code> pour le transliterator code> exemple, vous trouverez que c'est exactement ce que vous recherchez: P>
p>
Vous pouvez utiliser si vous changez p> cryllic en latin: p> latin à crylique p> texte.replace (paire.key, paire.value) code> fonction.
Cette méthode est très rapide:
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();
}
C'est une solution pour la translittération serbe cyrillique-latine pour la forme comme celle-ci: formulaire
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" et "DŽ" ne sont pas au début du dictionnaire, il serait traduit par "јј", "Нј" et "дж" au lieu de "" "," "et" "et" " . Aussi, distionnarial devrait avoir la majuscule "" "," "et" ", car sans cela, il serait traduit par" LJ "," NJ "et" DŽ ", au lieu de" LJ "," NJ "et "DŽ". Les autres caractères majuscules peuvent être effectués avec une méthode Toupper ().
Hé, je viens de découvrir quelque chose, cela pourrait être important pour toi aussi. Si vous maîtrisez le texte officiel (comme des adresses de clients de l'annonce ou autre chose), vous devez vérifier s'il existe une loi spéciale pour la translittération avec une table de translittération incluse. La Bulgarie, par exemple, a une telle loi et toute utilisation abusive pourrait conduire à des problèmes juridiques. En dehors de la table, il pourrait être décrit des exceptions de la règle que vous devez suivre aussi. Comme ъългария, c'est la Bulgarie, pas Balgariya.