本文介绍了获取给定IETF语言标签(或ISO 639-ISO 3166-1对)的ISO 15924脚本代码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在将ICU集成到一些内部软件中.我希望能够使用一个字符串,例如"en_US",并为其获取脚本名称"Latin". (尽管最终我实际上想要的是ICU ScriptCode.)

I'm integrating ICU into some in-house software. I'd like to be able to take a string such as "en_US" and get the script name "Latin" for it. (Though ultimately I actually want an ICU ScriptCode.)

我尝试使用ICU的Locale类,但是此代码:

I tried using ICU's Locale class, but this code:

Locale *ul = new Locale("en_US",);
LOG(ul->getScript());

尽管文档指出,仍记录一个空字符串用例.我什至使用Locale类的静态方法Locale::getEnglish进行了尝试,但仍然得到一个空字符串.我是这个国际化和ICU的新手.有什么我想念的吗?似乎这应该是一个非常简单的任务.

Logs an empty string, despite the documentation indicating that this is the use case. I even tried it using the Locale class' static method Locale::getEnglish and still got an empty string. I'm new to this internationalization stuff and to ICU. Is there something I'm missing? Seems like this should be a pretty straightforward task.

编辑:在阅读Locale的源代码之后,似乎唯一可以提供脚本代码的时间就是将其传递给构造函数的时间(即"en_Latn_US").为文件不足而欢呼.我的总体问题仍然存在.

Edit: After reading the source code for Locale, it seems that the only time it can provide a script code is when it's passed to the constructor (ie. "en_Latn_US"). Cheers for inadequate documentation. My overall question still stands.

推荐答案

更好: http://unicode.org/repos/cldr/trunk/common/supplemental/supplementalData.xml

std::map<std::string /*ISO 639-1*/, std::map<std::string/*ISO ISO3166-1 Alpha 2 or empty*/, std::string /*ISO 15924*/>> table = {
    {"aa", {{"", "Latn"}}},
    {"ab", {{"", "Cyrl"}}},
    {"abq", {{"", "Cyrl"}}},
    {"abr", {{"", ""}}},
    {"ace", {{"", "Latn"}}},
    {"ach", {{"", "Latn"}}},
    {"ada", {{"", "Latn"}}},
    {"ady", {{"", "Cyrl"}}},
    {"ae", {{"", "Avst"}}},
    {"af", {{"", "Latn"}}},
    {"agq", {{"", "Latn"}}},
    {"aii", {{"", "Cyrl"}}},
    {"ain", {{"", "Kana"}}},
    {"ak", {{"", "Latn"}}},
    {"akk", {{"", "Xsux"}}},
    {"ale", {{"", "Latn"}}},
    {"alt", {{"", "Cyrl"}}},
    {"am", {{"", "Ethi"}}},
    {"amo", {{"", "Latn"}}},
    {"an", {{"", "Latn"}}},
    {"anp", {{"", "Deva"}}},
    {"aoz", {{"", ""}}},
    {"ar", {{"", "Arab"}, {"IR", "Syrc"}}},
    {"arc", {{"", "Armi"}}},
    {"arn", {{"", "Latn"}}},
    {"arp", {{"", "Latn"}}},
    {"arw", {{"", "Latn"}}},
    {"as", {{"", "Beng"}}},
    {"asa", {{"", "Latn"}}},
    {"ast", {{"", "Latn"}}},
    {"atj", {{"", ""}}},
    {"av", {{"", "Cyrl"}}},
    {"awa", {{"", "Deva"}}},
    {"ay", {{"", "Latn"}}},
    {"az", {{"", "Latn"}, {"AZ", "Cyrl"}, {"IR", "Arab"}}},
    {"ba", {{"", "Cyrl"}}},
    {"bal", {{"", "Arab"}, {"IR", "Latn"}, {"PK", "Latn"}}},
    {"ban", {{"", "Latn"}, {"ID", "Bali"}}},
    {"bap", {{"", ""}}},
    {"bas", {{"", "Latn"}}},
    {"bax", {{"", "Bamu"}}},
    {"bbc", {{"", "Latn"}, {"ID", "Batk"}}},
    {"bbj", {{"", ""}}},
    {"bci", {{"", ""}}},
    {"be", {{"", "Cyrl"}}},
    {"bej", {{"", "Arab"}}},
    {"bem", {{"", "Latn"}}},
    {"bew", {{"", ""}}},
    {"bez", {{"", "Latn"}}},
    {"bfd", {{"", ""}}},
    {"bfq", {{"", "Taml"}}},
    {"bft", {{"", "Arab"}}},
    {"bfy", {{"", "Deva"}}},
    {"bg", {{"", "Cyrl"}}},
    {"bgc", {{"", ""}}},
    {"bgx", {{"", ""}}},
    {"bh", {{"", "Deva"}}},
    {"bhb", {{"", "Deva"}}},
    {"bhi", {{"", ""}}},
    {"bhk", {{"", ""}}},
    {"bho", {{"", "Deva"}}},
    {"bi", {{"", "Latn"}}},
    {"bik", {{"", "Latn"}}},
    {"bin", {{"", "Latn"}}},
    {"bjj", {{"", "Deva"}}},
    {"bjn", {{"", ""}}},
    {"bkm", {{"", ""}}},
    {"bku", {{"", "Latn"}}},
    {"bla", {{"", "Latn"}}},
    {"blt", {{"", "Tavt"}}},
    {"bm", {{"", "Latn"}}},
    {"bmq", {{"", ""}}},
    {"bn", {{"", "Beng"}}},
    {"bo", {{"", "Tibt"}}},
    {"bqi", {{"", ""}}},
    {"bqv", {{"", "Latn"}}},
    {"br", {{"", "Latn"}}},
    {"bra", {{"", "Deva"}}},
    {"brh", {{"", ""}}},
    {"brx", {{"", "Deva"}}},
    {"bs", {{"", "Latn"}}},
    {"bss", {{"", ""}}},
    {"bto", {{"", ""}}},
    {"btv", {{"", "Deva"}}},
    {"bua", {{"", "Cyrl"}}},
    {"buc", {{"", "Latn"}}},
    {"bug", {{"", "Latn"}, {"ID", "Bugi"}}},
    {"bum", {{"", ""}}},
    {"bvb", {{"", ""}}},
    {"bya", {{"", "Latn"}}},
    {"byn", {{"", "Ethi"}}},
    {"byv", {{"", ""}}},
    {"bze", {{"", ""}}},
    {"bzx", {{"", ""}}},
    {"ca", {{"", "Latn"}}},
    {"cad", {{"", "Latn"}}},
    {"car", {{"", "Latn"}}},
    {"cay", {{"", "Latn"}}},
    {"cch", {{"", "Latn"}}},
    {"ccp", {{"", "Beng"}}},
    {"ce", {{"", "Cyrl"}}},
    {"ceb", {{"", "Latn"}}},
    {"cgg", {{"", "Latn"}}},
    {"ch", {{"", "Latn"}}},
    {"chk", {{"", "Latn"}}},
    {"chm", {{"", "Cyrl"}}},
    {"chn", {{"", "Latn"}}},
    {"cho", {{"", "Latn"}}},
    {"chp", {{"", "Latn"}}},
    {"chr", {{"", "Cher"}}},
    {"chy", {{"", "Latn"}}},
    {"cja", {{"", "Arab"}}},
    {"cjm", {{"", "Cham"}}},
    {"cjs", {{"", "Cyrl"}}},
    {"ckb", {{"", "Arab"}}},
    {"ckt", {{"", "Cyrl"}}},
    {"co", {{"", "Latn"}}},
    {"cop", {{"", "Arab"}}},
    {"cpe", {{"", "Latn"}}},
    {"cr", {{"", "Cans"}}},
    {"crh", {{"", "Cyrl"}}},
    {"crj", {{"", ""}}},
    {"crk", {{"", "Cans"}}},
    {"crl", {{"", ""}}},
    {"crm", {{"", ""}}},
    {"crs", {{"", ""}}},
    {"cs", {{"", "Latn"}}},
    {"csb", {{"", "Latn"}}},
    {"csw", {{"", ""}}},
    {"cu", {{"", "Glag"}}},
    {"cv", {{"", "Cyrl"}}},
    {"cy", {{"", "Latn"}}},
    {"da", {{"", "Latn"}}},
    {"daf", {{"", ""}}},
    {"dak", {{"", "Latn"}}},
    {"dar", {{"", "Cyrl"}}},
    {"dav", {{"", "Latn"}}},
    {"dcc", {{"", ""}}},
    {"de", {{"", "Latn"}, {"BR", "Runr"}, {"KZ", "Runr"}, {"US", "Runr"}}},
    {"del", {{"", "Latn"}}},
    {"den", {{"", "Latn"}}},
    {"dgr", {{"", "Latn"}}},
    {"din", {{"", "Latn"}}},
    {"dje", {{"", "Latn"}}},
    {"dng", {{"", "Cyrl"}}},
    {"doi", {{"", "Arab"}}},
    {"dsb", {{"", "Latn"}}},
    {"dtm", {{"", ""}}},
    {"dua", {{"", "Latn"}}},
    {"dv", {{"", "Thaa"}}},
    {"dyo", {{"", "Arab"}}},
    {"dyu", {{"", "Latn"}}},
    {"dz", {{"", "Tibt"}}},
    {"ebu", {{"", "Latn"}}},
    {"ee", {{"", "Latn"}}},
    {"efi", {{"", "Latn"}}},
    {"egy", {{"", "Egyp"}}},
    {"eka", {{"", "Latn"}}},
    {"eky", {{"", "Kali"}}},
    {"el", {{"", "Grek"}}},
    {"en", {{"", "Latn"}}},
    {"eo", {{"", "Latn"}}},
    {"es", {{"", "Latn"}}},
    {"et", {{"", "Latn"}}},
    {"ett", {{"", "Ital"}}},
    {"eu", {{"", "Latn"}}},
    {"evn", {{"", "Cyrl"}}},
    {"ewo", {{"", "Latn"}}},
    {"fa", {{"", "Arab"}}},
    {"fan", {{"", "Latn"}}},
    {"ff", {{"", "Latn"}}},
    {"ffm", {{"", ""}}},
    {"fi", {{"", "Latn"}}},
    {"fil", {{"", "Latn"}, {"US", "Tglg"}}},
    {"fiu", {{"", "Latn"}}},
    {"fj", {{"", "Latn"}}},
    {"fo", {{"", "Latn"}}},
    {"fon", {{"", "Latn"}}},
    {"fr", {{"", "Latn"}}},
    {"frr", {{"", "Latn"}}},
    {"frs", {{"", "Latn"}}},
    {"fud", {{"", ""}}},
    {"fuq", {{"", ""}}},
    {"fur", {{"", "Latn"}}},
    {"fuv", {{"", ""}}},
    {"fy", {{"", "Latn"}}},
    {"ga", {{"", "Latn"}}},
    {"gaa", {{"", "Latn"}}},
    {"gag", {{"", "Latn"}, {"MD", "Cyrl"}}},
    {"gay", {{"", "Latn"}}},
    {"gba", {{"", "Arab"}}},
    {"gbm", {{"", "Deva"}}},
    {"gcr", {{"", "Latn"}}},
    {"gd", {{"", "Latn"}}},
    {"gez", {{"", "Ethi"}}},
    {"ggn", {{"", ""}}},
    {"gil", {{"", "Latn"}}},
    {"gjk", {{"", ""}}},
    {"gju", {{"", ""}}},
    {"gl", {{"", "Latn"}}},
    {"gld", {{"", "Cyrl"}}},
    {"glk", {{"", ""}}},
    {"gn", {{"", "Latn"}}},
    {"gon", {{"", "Telu"}}},
    {"gor", {{"", "Latn"}}},
    {"gos", {{"", ""}}},
    {"got", {{"", "Goth"}}},
    {"grb", {{"", "Latn"}}},
    {"grc", {{"", "Cprt"}}},
    {"grt", {{"", "Beng"}}},
    {"gsw", {{"", "Latn"}}},
    {"gu", {{"", "Gujr"}}},
    {"gub", {{"", ""}}},
    {"guz", {{"", "Latn"}}},
    {"gv", {{"", "Latn"}}},
    {"gvr", {{"", ""}}},
    {"gwi", {{"", "Latn"}}},
    {"ha", {{"", "Arab"}, {"NE", "Latn"}, {"GH", "Latn"}}},
    {"hai", {{"", "Latn"}}},
    {"haw", {{"", "Latn"}}},
    {"haz", {{"", ""}}},
    {"he", {{"", "Hebr"}}},
    {"hi", {{"", "Deva"}}},
    {"hil", {{"", "Latn"}}},
    {"hit", {{"", "Xsux"}}},
    {"hmn", {{"", "Latn"}}},
    {"hnd", {{"", ""}}},
    {"hne", {{"", "Deva"}}},
    {"hnn", {{"", "Latn"}}},
    {"hno", {{"", ""}}},
    {"ho", {{"", "Latn"}}},
    {"hoc", {{"", "Deva"}}},
    {"hoj", {{"", "Deva"}}},
    {"hop", {{"", "Latn"}}},
    {"hr", {{"", "Latn"}}},
    {"hsb", {{"", "Latn"}}},
    {"ht", {{"", "Latn"}}},
    {"hu", {{"", "Latn"}}},
    {"hup", {{"", "Latn"}}},
    {"hy", {{"", "Armn"}}},
    {"hz", {{"", "Latn"}}},
    {"ia", {{"", "Latn"}}},
    {"iba", {{"", "Latn"}}},
    {"ibb", {{"", "Latn"}}},
    {"id", {{"", "Latn"}}},
    {"ig", {{"", "Latn"}}},
    {"ii", {{"", "Yiii"}, {"CN", "Latn"}}},
    {"ik", {{"", "Latn"}}},
    {"ikt", {{"", ""}}},
    {"ilo", {{"", "Latn"}}},
    {"inh", {{"", "Cyrl"}}},
    {"is", {{"", "Latn"}}},
    {"it", {{"", "Latn"}}},
    {"iu", {{"", "Cans"}, {"CA", "Latn"}}},
    {"ja", {{"", "Jpan"}}},
    {"jmc", {{"", "Latn"}}},
    {"jml", {{"", ""}}},
    {"jpr", {{"", "Hebr"}}},
    {"jrb", {{"", "Hebr"}}},
    {"jv", {{"", "Latn"}, {"ID", "Java"}}},
    {"ka", {{"", "Geor"}}},
    {"kaa", {{"", "Cyrl"}}},
    {"kab", {{"", "Latn"}}},
    {"kac", {{"", "Latn"}}},
    {"kaj", {{"", "Latn"}}},
    {"kam", {{"", "Latn"}}},
    {"kao", {{"", ""}}},
    {"kbd", {{"", "Cyrl"}}},
    {"kca", {{"", "Cyrl"}}},
    {"kcg", {{"", "Latn"}}},
    {"kck", {{"", ""}}},
    {"kde", {{"", "Latn"}}},
    {"kdt", {{"", "Thai"}}},
    {"kea", {{"", "Latn"}}},
    {"kfo", {{"", "Latn"}}},
    {"kfr", {{"", "Deva"}}},
    {"kfy", {{"", ""}}},
    {"kg", {{"", "Latn"}}},
    {"kge", {{"", ""}}},
    {"kgp", {{"", ""}}},
    {"kha", {{"", "Latn"}, {"IN", "Beng"}}},
    {"khb", {{"", "Talu"}}},
    {"khn", {{"", ""}}},
    {"khq", {{"", "Latn"}}},
    {"kht", {{"", "Mymr"}}},
    {"khw", {{"", ""}}},
    {"ki", {{"", "Latn"}}},
    {"kj", {{"", "Latn"}}},
    {"kjg", {{"", ""}}},
    {"kjh", {{"", "Cyrl"}}},
    {"kk", {{"", "Arab"}, {"KZ", "Cyrl"}, {"TR", "Cyrl"}}},
    {"kkj", {{"", ""}}},
    {"kl", {{"", "Latn"}}},
    {"kln", {{"", "Latn"}}},
    {"km", {{"", "Khmr"}}},
    {"kmb", {{"", "Latn"}}},
    {"kn", {{"", "Knda"}}},
    {"ko", {{"", "Kore"}}},
    {"koi", {{"", "Cyrl"}}},
    {"kok", {{"", "Deva"}}},
    {"kos", {{"", "Latn"}}},
    {"kpe", {{"", "Latn"}}},
    {"kpy", {{"", "Cyrl"}}},
    {"kr", {{"", "Latn"}}},
    {"krc", {{"", "Cyrl"}}},
    {"kri", {{"", "Latn"}}},
    {"krl", {{"", "Latn"}}},
    {"kru", {{"", "Deva"}}},
    {"ks", {{"", "Arab"}}},
    {"ksb", {{"", "Latn"}}},
    {"ksf", {{"", "Latn"}}},
    {"ksh", {{"", "Latn"}}},
    {"ku", {{"", "Latn"}, {"LB", "Arab"}}},
    {"kum", {{"", "Cyrl"}}},
    {"kut", {{"", "Latn"}}},
    {"kv", {{"", "Cyrl"}}},
    {"kvr", {{"", ""}}},
    {"kvx", {{"", ""}}},
    {"kw", {{"", "Latn"}}},
    {"kxm", {{"", ""}}},
    {"kxp", {{"", ""}}},
    {"ky", {{"", "Cyrl"}, {"CN", "Arab"}, {"TR", "Latn"}}},
    {"kyu", {{"", "Kali"}}},
    {"la", {{"", "Latn"}}},
    {"lad", {{"", "Hebr"}}},
    {"lag", {{"", "Latn"}}},
    {"lah", {{"", "Arab"}}},
    {"laj", {{"", ""}}},
    {"lam", {{"", "Latn"}}},
    {"lb", {{"", "Latn"}}},
    {"lbe", {{"", "Cyrl"}}},
    {"lbw", {{"", ""}}},
    {"lcp", {{"", "Thai"}}},
    {"lep", {{"", "Lepc"}}},
    {"lez", {{"", "Cyrl"}}},
    {"lg", {{"", "Latn"}}},
    {"li", {{"", "Latn"}}},
    {"lif", {{"", "Deva"}}},
    {"lis", {{"", "Lisu"}}},
    {"ljp", {{"", ""}}},
    {"lki", {{"", "Arab"}}},
    {"lkt", {{"", ""}}},
    {"lmn", {{"", "Telu"}}},
    {"lmo", {{"", ""}}},
    {"ln", {{"", "Latn"}}},
    {"lo", {{"", "Laoo"}}},
    {"lol", {{"", "Latn"}}},
    {"loz", {{"", "Latn"}}},
    {"lrc", {{"", ""}}},
    {"lt", {{"", "Latn"}}},
    {"lu", {{"", "Latn"}}},
    {"lua", {{"", "Latn"}}},
    {"lui", {{"", "Latn"}}},
    {"lun", {{"", "Latn"}}},
    {"luo", {{"", "Latn"}}},
    {"lus", {{"", "Beng"}}},
    {"lut", {{"", "Latn"}}},
    {"luy", {{"", "Latn"}}},
    {"luz", {{"", ""}}},
    {"lv", {{"", "Latn"}}},
    {"lwl", {{"", "Thai"}}},
    {"mad", {{"", "Latn"}}},
    {"maf", {{"", ""}}},
    {"mag", {{"", "Deva"}}},
    {"mai", {{"", "Deva"}}},
    {"mak", {{"", "Latn"}, {"ID", "Bugi"}}},
    {"man", {{"", "Latn"}, {"GN", "Nkoo"}}},
    {"mas", {{"", "Latn"}}},
    {"maz", {{"", ""}}},
    {"mdf", {{"", "Cyrl"}}},
    {"mdh", {{"", "Latn"}}},
    {"mdr", {{"", "Latn"}}},
    {"mdt", {{"", ""}}},
    {"men", {{"", "Latn"}}},
    {"mer", {{"", "Latn"}}},
    {"mfa", {{"", ""}}},
    {"mfe", {{"", "Latn"}}},
    {"mg", {{"", "Latn"}}},
    {"mgh", {{"", "Latn"}}},
    {"mgp", {{"", ""}}},
    {"mgy", {{"", ""}}},
    {"mh", {{"", "Latn"}}},
    {"mi", {{"", "Latn"}}},
    {"mic", {{"", "Latn"}}},
    {"min", {{"", "Latn"}}},
    {"mk", {{"", "Cyrl"}}},
    {"ml", {{"", "Mlym"}}},
    {"mn", {{"", "Cyrl"}, {"CN", "Mong"}}},
    {"mnc", {{"", "Mong"}}},
    {"mni", {{"", "Beng"}, {"IN", "Mtei"}}},
    {"mns", {{"", "Cyrl"}}},
    {"mnw", {{"", "Mymr"}}},
    {"moe", {{"", ""}}},
    {"moh", {{"", "Latn"}}},
    {"mos", {{"", "Latn"}}},
    {"mr", {{"", "Deva"}}},
    {"mrd", {{"", ""}}},
    {"mrj", {{"", ""}}},
    {"ms", {{"", "Arab"}, {"MY", "Latn"}, {"SG", "Latn"}}},
    {"mt", {{"", "Latn"}}},
    {"mtr", {{"", ""}}},
    {"mua", {{"", "Latn"}}},
    {"mus", {{"", "Latn"}}},
    {"mvy", {{"", ""}}},
    {"mwk", {{"", ""}}},
    {"mwl", {{"", "Latn"}}},
    {"mwr", {{"", "Deva"}}},
    {"mxc", {{"", ""}}},
    {"my", {{"", "Mymr"}}},
    {"myv", {{"", "Cyrl"}}},
    {"myx", {{"", ""}}},
    {"myz", {{"", "Mand"}}},
    {"na", {{"", "Latn"}}},
    {"nap", {{"", "Latn"}}},
    {"naq", {{"", "Latn"}}},
    {"nb", {{"", "Latn"}}},
    {"nbf", {{"", ""}}},
    {"nch", {{"", ""}}},
    {"nd", {{"", "Latn"}}},
    {"ndc", {{"", ""}}},
    {"nds", {{"", "Latn"}}},
    {"ne", {{"", "Deva"}}},
    {"new", {{"", "Deva"}}},
    {"ng", {{"", "Latn"}}},
    {"ngl", {{"", ""}}},
    {"nhe", {{"", ""}}},
    {"nhw", {{"", ""}}},
    {"nia", {{"", "Latn"}}},
    {"nij", {{"", ""}}},
    {"niu", {{"", "Latn"}}},
    {"nl", {{"", "Latn"}}},
    {"nmg", {{"", "Latn"}}},
    {"nn", {{"", "Latn"}}},
    {"nnh", {{"", ""}}},
    {"nod", {{"", "Lana"}}},
    {"noe", {{"", ""}}},
    {"nog", {{"", "Cyrl"}}},
    {"nqo", {{"", "Nkoo"}}},
    {"nr", {{"", "Latn"}}},
    {"nsk", {{"", ""}}},
    {"nso", {{"", "Latn"}}},
    {"nus", {{"", "Latn"}}},
    {"nv", {{"", "Latn"}}},
    {"ny", {{"", "Latn"}}},
    {"nym", {{"", "Latn"}}},
    {"nyn", {{"", "Latn"}}},
    {"nyo", {{"", "Latn"}}},
    {"nzi", {{"", "Latn"}}},
    {"oc", {{"", "Latn"}}},
    {"oj", {{"", "Cans"}}},
    {"om", {{"", "Latn"}, {"ET", "Ethi"}}},
    {"or", {{"", "Orya"}}},
    {"os", {{"", "Cyrl"}}},
    {"osa", {{"", "Latn"}}},
    {"osc", {{"", "Ital"}}},
    {"otk", {{"", "Orkh"}}},
    {"pa", {{"", "Guru"}, {"PK", "Arab"}}},
    {"pag", {{"", "Latn"}}},
    {"pal", {{"", "Phli"}}},
    {"pam", {{"", "Latn"}}},
    {"pap", {{"", "Latn"}}},
    {"pau", {{"", "Latn"}}},
    {"peo", {{"", "Xpeo"}}},
    {"phn", {{"", "Phnx"}}},
    {"pi", {{"", "Deva"}}},
    {"pko", {{"", ""}}},
    {"pl", {{"", "Latn"}}},
    {"pon", {{"", "Latn"}}},
    {"pra", {{"", "Brah"}}},
    {"prd", {{"", "Arab"}}},
    {"prg", {{"", "Latn"}}},
    {"prs", {{"", "Arab"}}},
    {"ps", {{"", "Arab"}}},
    {"pt", {{"", "Latn"}}},
    {"puu", {{"", ""}}},
    {"qu", {{"", "Latn"}}},
    {"raj", {{"", "Latn"}}},
    {"rap", {{"", "Latn"}}},
    {"rar", {{"", "Latn"}}},
    {"rcf", {{"", "Latn"}}},
    {"rej", {{"", "Latn"}, {"ID", "Rjng"}}},
    {"ria", {{"", ""}}},
    {"rif", {{"", ""}}},
    {"rjs", {{"", "Deva"}}},
    {"rkt", {{"", "Beng"}}},
    {"rm", {{"", "Latn"}}},
    {"rmf", {{"", ""}}},
    {"rmo", {{"", ""}}},
    {"rmt", {{"", ""}}},
    {"rn", {{"", "Latn"}}},
    {"rng", {{"", ""}}},
    {"ro", {{"", "Latn"}, {"RS", "Cyrl"}}},
    {"rob", {{"", ""}}},
    {"rof", {{"", "Latn"}}},
    {"rom", {{"", "Cyrl"}}},
    {"ru", {{"", "Cyrl"}}},
    {"rue", {{"", ""}}},
    {"rup", {{"", "Latn"}}},
    {"rw", {{"", "Latn"}}},
    {"rwk", {{"", "Latn"}}},
    {"ryu", {{"", ""}}},
    {"sa", {{"", "Deva"}}},
    {"sad", {{"", "Latn"}}},
    {"saf", {{"", "Latn"}}},
    {"sah", {{"", "Cyrl"}}},
    {"sam", {{"", "Hebr"}}},
    {"saq", {{"", "Latn"}}},
    {"sas", {{"", "Latn"}}},
    {"sat", {{"", "Latn"}}},
    {"saz", {{"", "Saur"}}},
    {"sbp", {{"", "Latn"}}},
    {"sc", {{"", "Latn"}}},
    {"sck", {{"", ""}}},
    {"scn", {{"", "Latn"}}},
    {"sco", {{"", "Latn"}}},
    {"scs", {{"", ""}}},
    {"sd", {{"", "Arab"}, {"IN", "Deva"}}},
    {"sdh", {{"", "Arab"}}},
    {"se", {{"", "Latn"}, {"NO", "Cyrl"}}},
    {"see", {{"", "Latn"}}},
    {"sef", {{"", ""}}},
    {"seh", {{"", "Latn"}}},
    {"sel", {{"", "Cyrl"}}},
    {"ses", {{"", "Latn"}}},
    {"sg", {{"", "Latn"}}},
    {"sga", {{"", "Latn"}}},
    {"shi", {{"", "Tfng"}}},
    {"shn", {{"", "Mymr"}}},
    {"si", {{"", "Sinh"}}},
    {"sid", {{"", "Latn"}}},
    {"sk", {{"", "Latn"}}},
    {"skr", {{"", ""}}},
    {"sl", {{"", "Latn"}}},
    {"sm", {{"", "Latn"}}},
    {"sma", {{"", "Latn"}}},
    {"smi", {{"", "Latn"}}},
    {"smj", {{"", "Latn"}}},
    {"smn", {{"", "Latn"}}},
    {"sms", {{"", "Latn"}}},
    {"sn", {{"", "Latn"}}},
    {"snk", {{"", "Latn"}}},
    {"so", {{"", "Latn"}}},
    {"son", {{"", "Latn"}}},
    {"sou", {{"", ""}}},
    {"sq", {{"", "Latn"}}},
    {"sr", {{"", "Latn"}}},
    {"srn", {{"", "Latn"}}},
    {"srr", {{"", "Latn"}}},
    {"srx", {{"", ""}}},
    {"ss", {{"", "Latn"}}},
    {"ssy", {{"", "Latn"}}},
    {"st", {{"", "Latn"}}},
    {"su", {{"", "Latn"}}},
    {"suk", {{"", "Latn"}}},
    {"sus", {{"", "Latn"}, {"GN", "Arab"}}},
    {"sv", {{"", "Latn"}}},
    {"sw", {{"", "Latn"}}},
    {"swb", {{"", "Arab"}, {"YT", "Latn"}}},
    {"swc", {{"", "Latn"}}},
    {"swv", {{"", ""}}},
    {"sxn", {{"", ""}}},
    {"syi", {{"", ""}}},
    {"syl", {{"", "Beng"}, {"BD", "Sylo"}}},
    {"syr", {{"", "Syrc"}}},
    {"ta", {{"", "Taml"}}},
    {"tab", {{"", "Cyrl"}}},
    {"taj", {{"", ""}}},
    {"tbw", {{"", "Latn"}}},
    {"tcy", {{"", "Knda"}}},
    {"tdd", {{"", "Tale"}}},
    {"tdg", {{"", ""}}},
    {"tdh", {{"", ""}}},
    {"te", {{"", "Telu"}}},
    {"tem", {{"", "Latn"}}},
    {"teo", {{"", "Latn"}}},
    {"ter", {{"", "Latn"}}},
    {"tet", {{"", "Latn"}}},
    {"tg", {{"", "Cyrl"}, {"PK", "Arab"}}},
    {"th", {{"", "Thai"}}},
    {"thl", {{"", ""}}},
    {"thq", {{"", ""}}},
    {"thr", {{"", ""}}},
    {"ti", {{"", "Ethi"}}},
    {"tig", {{"", "Ethi"}}},
    {"tiv", {{"", "Latn"}}},
    {"tk", {{"", "Latn"}}},
    {"tkl", {{"", "Latn"}}},
    {"tkt", {{"", ""}}},
    {"tli", {{"", "Latn"}}},
    {"tmh", {{"", "Latn"}}},
    {"tn", {{"", "Latn"}}},
    {"to", {{"", "Latn"}}},
    {"tog", {{"", "Latn"}}},
    {"tpi", {{"", "Latn"}}},
    {"tr", {{"", "Latn"}, {"DE", "Arab"}, {"MK", "Arab"}}},
    {"tru", {{"", "Latn"}}},
    {"trv", {{"", "Latn"}}},
    {"ts", {{"", "Latn"}}},
    {"tsf", {{"", ""}}},
    {"tsg", {{"", "Latn"}}},
    {"tsi", {{"", "Latn"}}},
    {"tsj", {{"", ""}}},
    {"tt", {{"", "Cyrl"}}},
    {"ttj", {{"", ""}}},
    {"tts", {{"", "Thai"}}},
    {"tum", {{"", "Latn"}}},
    {"tut", {{"", "Cyrl"}}},
    {"tvl", {{"", "Latn"}}},
    {"twq", {{"", "Latn"}}},
    {"ty", {{"", "Latn"}}},
    {"tyv", {{"", "Cyrl"}}},
    {"tzm", {{"", "Latn"}}},
    {"ude", {{"", "Cyrl"}}},
    {"udm", {{"", "Cyrl"}, {"RU", "Latn"}}},
    {"ug", {{"", "Arab"}, {"KZ", "Cyrl"}, {"MN", "Cyrl"}}},
    {"uga", {{"", "Ugar"}}},
    {"uk", {{"", "Cyrl"}}},
    {"uli", {{"", "Latn"}}},
    {"umb", {{"", "Latn"}}},
    {"und", {{"", ""}}},
    {"unr", {{"", "Beng"}, {"NP", "Deva"}}},
    {"unx", {{"", "Beng"}}},
    {"ur", {{"", "Arab"}}},
    {"uz", {{"", "Latn"}, {"AF", "Arab"}, {"CN", "Cyrl"}}},
    {"vai", {{"", "Vaii"}}},
    {"ve", {{"", "Latn"}}},
    {"vi", {{"", "Latn"}, {"US", "Hani"}}},
    {"vic", {{"", ""}}},
    {"vmw", {{"", ""}}},
    {"vo", {{"", "Latn"}}},
    {"vot", {{"", "Latn"}}},
    {"vun", {{"", "Latn"}}},
    {"wa", {{"", "Latn"}}},
    {"wae", {{"", "Latn"}}},
    {"wak", {{"", "Latn"}}},
    {"wal", {{"", "Ethi"}}},
    {"war", {{"", "Latn"}}},
    {"was", {{"", "Latn"}}},
    {"wbq", {{"", ""}}},
    {"wbr", {{"", ""}}},
    {"wls", {{"", ""}}},
    {"wo", {{"", "Latn"}}},
    {"wtm", {{"", ""}}},
    {"xal", {{"", "Cyrl"}}},
    {"xav", {{"", ""}}},
    {"xcr", {{"", "Cari"}}},
    {"xh", {{"", "Latn"}}},
    {"xnr", {{"", ""}}},
    {"xog", {{"", "Latn"}}},
    {"xpr", {{"", "Prti"}}},
    {"xsa", {{"", "Sarb"}}},
    {"xsr", {{"", "Deva"}}},
    {"xum", {{"", "Ital"}}},
    {"yao", {{"", "Latn"}}},
    {"yap", {{"", "Latn"}}},
    {"yav", {{"", "Latn"}}},
    {"ybb", {{"", ""}}},
    {"yi", {{"", "Hebr"}}},
    {"yo", {{"", "Latn"}}},
    {"yrk", {{"", "Cyrl"}}},
    {"yua", {{"", ""}}},
    {"yue", {{"", "Hans"}}},
    {"za", {{"", "Latn"}, {"CN", "Hans"}}},
    {"zap", {{"", "Latn"}}},
    {"zdj", {{"", ""}}},
    {"zea", {{"", ""}}},
    {"zen", {{"", "Tfng"}}},
    {"zh", {{"", "Hant"}, {"CN", "Hans"}, {"HK", "Hans"}, {"MO", "Hans"}, {"SG", "Hans"}, {"MN", "Hans"}}},
    {"zmi", {{"", ""}}},
    {"zu", {{"", "Latn"}}},
    {"zun", {{"", "Latn"}}},
    {"zza", {{"", "Arab"}}}
};

C#,不使用字符计数:

C#, usings excluded for character count:

namespace territoryInfoScraper
{
    class MainClass
    {
        static string LanguageEntryToString(KeyValuePair<string, Dictionary<string, List<string>>> entry, Dictionary<string, List<string>> languagePrimaryScripts) {
            var language = entry.Key;
            var scriptsByTerritory = entry.Value;
            var result = new StringBuilder ();
            result.Append ("{\"");
            result.Append (language);
            result.Append ("\", {{\"\", \"");
            string defaultScript;
            if (languagePrimaryScripts.ContainsKey (language) && languagePrimaryScripts [language].Count == 1) {
                defaultScript = languagePrimaryScripts [language] [0];
            } else {
                IEnumerable<string> listOfScripts = scriptsByTerritory.SelectMany (x => x.Value);
                var groupsWithCounts = from s in listOfScripts group s by s into g select new {Item = g.Key, Count = g.Count()};
                var groupsSorted = groupsWithCounts.OrderByDescending (g => g.Count);
                if (groupsSorted.Count () > 0) {
                    defaultScript = groupsSorted.First ().Item;
                } else {
                    System.Diagnostics.Debug.WriteLine ("Could not determine a default script");
                    defaultScript = "";
                }
            }
            result.Append (defaultScript);
            result.Append ("\"}");
            var specifiedTerritories = scriptsByTerritory.Where (x => x.Key != "" && x.Value.Count == 1 && x.Value[0] != defaultScript).Select (x => "{\"" + x.Key + "\", \"" + x.Value [0] + "\"}").ToArray ();
            if (specifiedTerritories.Count () > 0) {
                result.Append (", ");
            }
            result.Append (String.Join (", ", specifiedTerritories));
            result.Append ("}}");
            return result.ToString ();
        }

        static void Main (string[] args)
        {
            var document = XDocument.Load ("/Users/Brent/Downloads/core/common/supplemental/supplementalData.xml");

            var scriptIfLanguageHasMultiplePossibilitiesAndRegionHasNoneSpecified = new Dictionary<string, List<string>> ();
            string defaultLocale = document.XPathSelectElement ("/supplementalData/parentLocales/parentLocale[@parent='root']").Attribute("locales").Value;
            foreach (var entry in defaultLocale.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries)) {
                int indexOfUnderscore = entry.IndexOf ('_');
                string language = entry.Substring (0, indexOfUnderscore);
                string script = entry.Substring (indexOfUnderscore + 1);
                if (!scriptIfLanguageHasMultiplePossibilitiesAndRegionHasNoneSpecified.ContainsKey (language)) {
                    scriptIfLanguageHasMultiplePossibilitiesAndRegionHasNoneSpecified.Add (language, new List<string> ());
                }
                scriptIfLanguageHasMultiplePossibilitiesAndRegionHasNoneSpecified [language].Add (script);
            }

            var languageTerritoryScript = new Dictionary<string, Dictionary<string, List<string>>> ();
            var languagePrimaryScripts = new Dictionary<string, List<string>> ();
            var languageInfo = document.XPathSelectElements ("/supplementalData/languageData/language");
            foreach (var languageNode in languageInfo) {
                bool isSecondary = languageNode.Attribute ("alt") != null && languageNode.Attribute ("alt").Value == "secondary";
                string language = languageNode.Attribute ("type").Value;
                if (!languageTerritoryScript.ContainsKey (language)) {
                    languageTerritoryScript.Add (language, new Dictionary<string, List<string>> ());
                }
                if (languageNode.Attribute ("territories") != null) {
                    String[] territories = languageNode.Attribute ("territories").Value.Split (new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                    if (languageNode.Attribute ("scripts") != null) {
                        String[] scripts = languageNode.Attribute ("scripts").Value.Split (new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                        foreach (string territory in territories) {
                            if (!languageTerritoryScript [language].ContainsKey (territory)) {
                                languageTerritoryScript [language].Add (territory, new List<string> ());
                            }
                            foreach (string script in scripts) {
                                languageTerritoryScript [language] [territory].Add (script);
                                if (!isSecondary) {
                                    if (!languagePrimaryScripts.ContainsKey (language)) {
                                        languagePrimaryScripts.Add (language, new List<string> ());
                                    }
                                    languagePrimaryScripts [language].Add (script);
                                }
                            }
                        }
                    } else {
                        foreach (string territory in territories) {
                            if (!languageTerritoryScript [language].ContainsKey (territory)) {
                                languageTerritoryScript [language].Add (territory, new List<string> ());
                            }
                        }
                    }
                } else if (languageNode.Attributes ("scripts") != null) {
                    String[] scripts = languageNode.Attribute ("scripts").Value.Split (new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                    if (!languageTerritoryScript [language].ContainsKey ("")) {
                        languageTerritoryScript [language].Add ("", new List<string> ());
                    }
                    foreach (string script in scripts) {
                        languageTerritoryScript [language] [""].Add (script);
                        if (!isSecondary) {
                            if (!languagePrimaryScripts.ContainsKey (language)) {
                                languagePrimaryScripts.Add (language, new List<string> ());
                            }
                            languagePrimaryScripts [language].Add (script);
                        }
                    }
                }
            }

            var territoryInfo = document.XPathSelectElements ("/supplementalData/territoryInfo/territory");
            foreach (var territoryNode in territoryInfo) {
                string territory = territoryNode.Attribute ("type").Value;
                foreach (var languagePopulationNode in territoryNode.Elements()) {
                    string languageAndMaybeScript = languagePopulationNode.Attribute ("type").Value;
                    int underscoreIndex = languageAndMaybeScript.IndexOf ('_');
                    if (underscoreIndex != -1) {
                        string language = languageAndMaybeScript.Substring (0, underscoreIndex);
                        string script = languageAndMaybeScript.Substring (underscoreIndex + 1);
                        if (!languageTerritoryScript.ContainsKey (language)) {
                            languageTerritoryScript.Add (language, new Dictionary<string, List<string>> ());
                        }
                        if (!languageTerritoryScript [language].ContainsKey (territory)) {
                            languageTerritoryScript [language].Add (territory, new List<string> ());
                        }
                        languageTerritoryScript [language] [territory].Clear (); //we've gotten a specific script specification for the region and language, so use it, and only it.
                        languageTerritoryScript [language] [territory].Add (script);
                    } else {
                        string language = languageAndMaybeScript;
                        if (!languageTerritoryScript.ContainsKey (language)) {
                            languageTerritoryScript.Add (language, new Dictionary<string, List<string>> ());
                        }
                        if (!languageTerritoryScript [language].ContainsKey (territory)) {
                            languageTerritoryScript [language].Add (territory, new List<string> ());
                        }
                    }
                }
            }

            StringBuilder result = new StringBuilder ("static std::map<std::string /*ISO 639-1*/, std::map<std::string/*ISO ISO3166-1 Alpha 2 or empty*/, std::string /*ISO 15924*/>> table = {");
            result.Append (System.Environment.NewLine);
            result.Append (String.Join (", " + System.Environment.NewLine, languageTerritoryScript.Where (x => x.Value.Count > 0).OrderBy(x => x.Key).Select (x => LanguageEntryToString (x, languagePrimaryScripts))));
            result.Append (System.Environment.NewLine);
            result.Append ("}");
            string stringResult = result.ToString ();
            System.Diagnostics.Debug.WriteLine (stringResult);
        }
    }
}

这篇关于获取给定IETF语言标签(或ISO 639-ISO 3166-1对)的ISO 15924脚本代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-05 16:09