我们需要将阿拉伯文本音译为拉丁字符(不带变音符号),并显示给用户。

我们目前正在为此使用IBM ICU4j。
该API不能很好地将阿拉伯文本正确地翻译成适当的可读拉丁字符。请引用以下示例:

例子

  • 阿拉伯文字:

    صدامحسينالتكريتي
  • Google的音译输出

    :Sadaam Hussein al-tikriti
  • ICU4J的音译输出

    :ṣdạm ḥsyn ạltkryty

  • 我们如何改善ICU4j库的音译输出?

    ICU4J给我们提供了编写自己的规则的选项,但是由于我们的团队中没有人知道阿拉伯语并且无法找到任何可以遵循的适当标准,因此我们目前处于困境。

    最佳答案

    我花了4个小时来研究解决此问题的任何其他来源。后来我尝试了ICU4J并找到了解决您问题的方法。您可以运行代码,然后查看遗漏的地方。

    package com.webom.crypt;
    
    import org.apache.commons.lang3.StringEscapeUtils;
    
    import com.ibm.icu.text.Transliterator;
    
    public class Test {
    
    
    
            public static String ARABIC_TO_LATIN = "Arabic-Latin";
            public static String ARABIC_TO_LATIN_NO_ACCENTS = "Arabic-Latin; nfd; [:nonspacing mark:] remove; nfc";
    
            public static void main(String[] args) {
                String ARABICString = "صدام حسين التكريتي";
    
                String unicodeCodes = StringEscapeUtils.escapeJava(ARABICString);
                System.out.println("Unicode codes:" + unicodeCodes);
     ///YOUR WAY
                Transliterator ARABICToLatinTrans = Transliterator.getInstance(ARABIC_TO_LATIN);
                String result1 = ARABICToLatinTrans.transliterate(ARABICString);
                System.out.println("ARABIC to Latin:" + result1);
        //MINE WAY
                Transliterator ARABICToLatinNoAccentsTrans = Transliterator.getInstance(ARABIC_TO_LATIN_NO_ACCENTS);
                String result2 = ARABICToLatinNoAccentsTrans.transliterate(ARABICString);
                System.out.println("ARABIC to Latin (no accents):" + result2);
            }
        }
    

    只需 checkout 答案并自行验证即可。您收到的输出将完全如下所示。
     Unicode codes:\u0635\u062F\u0627\u0645 \u062D\u0633\u064A\u0646\u0627\u0644\u062A\u0643\u0631\u064A\u062A\u064A
    
    ARABIC to Latin:ṣdạm ḥsyn ạltkryty
    
    ARABIC to Latin (no accents):sdam hsyn altkryty
    

    10-07 15:14