Get the ISO 15924 script code for this IETF Language tag (or ISO 639-ISO 3166-1)

I integrate ICU into some proprietary software. I would like to be able to take a string like "en_US" and get the script name "Latin" for it. (Although in the end I really need an ICU ScriptCode.)

I tried using the ICU locale class, but this code:

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

Writes a blank line, despite documentation indicating that this is a use case. I even tried using the static method of the Locale::getEnglish class of the Locale class and got an empty string. I am new to this material of internationalization and to ICU. Is there something I'm missing? It seems like this should be a fairly simple task.

Change After reading the source code for Locale, it seems that the only time it can provide script code is when it is passed to the constructor (ie en_Latn_US "). Greetings for inadequate documentation. My general question still remains.

+4
source share
5 answers

Better: 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 #, exception exception for number of characters:

 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); } } } 
+3
source

I created a version of Java that does this, available here . Basically, he takes the table in the answer above (with additional entries) and transfers it to Map<String, Map<String, String>> containing useful information, then uses a simple search method. To use this class in your project, just call:

 String script = LocaleUtilities.getScript(Locale.getDefault()); 

to get a script for the default locale.

+2
source

EDITOR: I made a new and better answer. Use this. I was not lucky to find anything, so I decided to do my best to make the table myself. After some searching, I found this jem . Clicking on (almost) any language will give you the ISO code 639-1 (and more), and when you click on any category of script you will get the code 15924. I could probably write something to tease the tables in C ++ manually, but to me it took only a couple of dozen and could not justify automation (on my working dates), so here is the table I made manually:

 std::map<std::string /*ISO 639-1*/, std::string /*ISO 15924*/> table = { {"ar", "Arab"}, //Arabic {"bn", "Beng"}, //Bengali {"zh", "Hani"}, //Chinese {"en", "Latn"}, //English {"fr", "Latn"}, //French {"de", "Latn"}, //German {"hi", "Deva"}, //Hindi {"it", "Latn"}, //Italian {"ja", "Hani"}, //Japanese {"jv", "Latn"}, //Javanese {"ko", "Hani"}, //Korean {"ms", "Latn"}, //Malay/Indonesian {"mr", "Deva"}, //Marathi {"fa", "Arab"}, //Persian {"pt", "Latn"}, //Porteugese {"pa", "Arab"}, //Punjabi {"ru", "Cyrl"}, //Russian {"es", "Latn"}, //Spanish {"ta", "Taml"}, //Tamil {"te", "Telu"}, //Telugu {"tr", "Latn"}, //Turkish {"ur", "Arab"}, //Urdu {"vi", "Latn"} //Vietnamese }; 
0
source

But en_US does not have a script tag in it, it's just an identifier. What do you propose to improve documentation here?

If you want to guess what the script might be, then you can use uloc_addLikelySubtags() (or the equivalent of ICU4J), which will display en in en_Latn_US but leave zh_Hant_CN as zh_Hant_CN using CLDR, probably Subtag data .

0
source

The C part of ICU4C contains uscript_getCode () , which should do what you are looking for.

0
source

Source: https://habr.com/ru/post/1479804/


All Articles