24

ラテン語のテキスト (英語、フランス語、ドイツ語、ポーランド語など) をスラッグ形式に変換する方法があります。

Alpha Bravo Charlie=>alpha-bravo-charlie

しかし、キリル文字 (ロシア語など) では機能しないので、キリル文字をラテン文字に音訳し、それをスラッグ化します。

誰かがそのような音訳を行う方法を持っていますか? 実際のソースまたはライブラリによるかどうか。

私は C# でコーディングしているので、.NET ライブラリが機能します。または、C# 以外のコードがある場合は、それを変換できると確信しています。

4

10 に答える 10

22

.NETオープンソースdllライブラリUnidecodeSharpForkを使用して、キリル文字やその他の多くの言語をラテン語に音訳できます。

使用例:

Assert.AreEqual("Rabota s kirillitsey", "Работа с кириллицей".Unidecode());
Assert.AreEqual("CZSczs", "ČŽŠčžš".Unidecode());
Assert.AreEqual("Hello, World!", "Hello, World!".Unidecode());

キリル文字のテスト:

/// <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());
}

シンプル、高速、パワフル。また、必要に応じて、音訳テーブルを簡単に拡張/変更できます。

于 2012-06-18T00:22:59.387 に答える
8

音訳表を使って小さな正規表現やサブルーチンを作成できないのはなぜですか?

于 2009-12-03T20:49:41.790 に答える
5

私のライブラリを音訳に使用できます: https://github.com/nick-buhro/Translit NuGet
でも利用できます。

例:

var latin = Transliteration.CyrillicToLatin(
    "Предками данная мудрость народная!", 
    Language.Russian);

Console.WriteLine(latin);   
// Output: Predkami dannaya mudrost` narodnaya!
于 2016-03-26T18:19:51.677 に答える
4

Microsoft には、フックできる DLL を含む音訳ツールがあります (個人的に使用しない場合は、ライセンス制限を確認する必要があります)。詳細については、Dejan Vesić のブログ投稿をご覧ください。

于 2009-12-03T18:30:29.247 に答える
4

今後の読者のために

Windows 7 以降では、拡張言語サービスを使用してこれを行うことができます。( .NET から実行するには、 Windows API Code Packが必要です)

于 2013-07-22T17:21:59.387 に答える
1

これは、このJavaScriptに相当する C# を作成する方法を説明する素晴らしい記事です。

string result = DisplayInEnglish("Олъга Виктровна Василенко");
于 2017-05-03T08:12:24.060 に答える
-2

このメソッドを使用する キリル文字を含む単語を渡すだけで、このメソッドはキリル文字に対応するラテン英語の文字列を返します。

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;
    }
于 2012-04-27T11:55:39.973 に答える