run_loop 2.1.3 → 2.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/run_loop.rb +119 -4
- data/lib/run_loop/{host_cache.rb → cache.rb} +8 -3
- data/lib/run_loop/codesign.rb +3 -3
- data/lib/run_loop/core.rb +26 -5
- data/lib/run_loop/core_simulator.rb +14 -13
- data/lib/run_loop/detect_aut/detect.rb +1 -1
- data/lib/run_loop/device.rb +2 -2
- data/lib/run_loop/device_agent/Frameworks.zip +0 -0
- data/lib/run_loop/device_agent/app/CBX-Runner.app.zip +0 -0
- data/lib/run_loop/device_agent/bin/iOSDeviceManager +0 -0
- data/lib/run_loop/device_agent/cbxrunner.rb +3 -2
- data/lib/run_loop/device_agent/frameworks.rb +7 -13
- data/lib/run_loop/device_agent/{xctestctl.rb → ios_device_manager.rb} +36 -24
- data/lib/run_loop/device_agent/ipa/CBX-Runner.app.zip +0 -0
- data/lib/run_loop/device_agent/launcher.rb +8 -0
- data/lib/run_loop/device_agent/xcodebuild.rb +5 -0
- data/lib/run_loop/dnssd.rb +148 -0
- data/lib/run_loop/dot_dir.rb +1 -1
- data/lib/run_loop/dylib_injector.rb +1 -1
- data/lib/run_loop/encoding.rb +17 -0
- data/lib/run_loop/environment.rb +15 -5
- data/lib/run_loop/instruments.rb +2 -2
- data/lib/run_loop/language.rb +4 -0
- data/lib/run_loop/locale.rb +4 -1
- data/lib/run_loop/otool.rb +1 -1
- data/lib/run_loop/process_terminator.rb +1 -1
- data/lib/run_loop/shell.rb +2 -2
- data/lib/run_loop/sim_control.rb +5 -5
- data/lib/run_loop/simctl.rb +2 -2
- data/lib/run_loop/strings.rb +1 -1
- data/lib/run_loop/version.rb +1 -1
- data/lib/run_loop/xcode.rb +15 -0
- data/lib/run_loop/xcrun.rb +7 -3
- data/lib/run_loop/xcuitest.rb +155 -68
- metadata +41 -21
- data/lib/run_loop/cache/cache.rb +0 -68
- data/lib/run_loop/device_agent/bin/xctestctl +0 -0
- data/lib/run_loop/device_agent/frameworks/Frameworks.zip +0 -0
data/lib/run_loop/language.rb
CHANGED
@@ -45,6 +45,10 @@ module RunLoop
|
|
45
45
|
# printf("\"%s\",", [langCode cStringUsingEncoding:NSUTF8StringEncoding]);
|
46
46
|
# }
|
47
47
|
LANGUAGE_CODES = {
|
48
|
+
RunLoop::Version.new("10.0") => [
|
49
|
+
"af","af-NA","af-ZA","agq","agq-CM","ak","ak-GH","am","am-ET","ar","ar-001","ar-AE","ar-BH","ar-DJ","ar-DZ","ar-EG","ar-EH","ar-ER","ar-IL","ar-IQ","ar-JO","ar-KM","ar-KW","ar-LB","ar-LY","ar-MA","ar-MR","ar-OM","ar-PS","ar-QA","ar-SA","ar-SD","ar-SO","ar-SS","ar-SY","ar-TD","ar-TN","ar-YE","ars","as","as-IN","asa","asa-TZ","ast","ast-ES","az","az-Cyrl","az-Cyrl-AZ","az-AZ","bas","bas-CM","be","be-BY","bem","bem-ZM","bez","bez-TZ","bg","bg-BG","bm","bm-ML","bn","bn-BD","bn-IN","bo","bo-CN","bo-IN","br","br-FR","brx","brx-IN","bs","bs-Cyrl","bs-Cyrl-BA","bs-BA","ca","ca-AD","ca-ES","ca-FR","ca-IT","ce","ce-RU","cgg","cgg-UG","chr","chr-US","ckb","ckb-IQ","ckb-IR","cs","cs-CZ","cy","cy-GB","da","da-DK","da-GL","dav","dav-KE","de","de-AT","de-BE","de-CH","de-DE","de-LI","de-LU","dje","dje-NE","dsb","dsb-DE","dua","dua-CM","dyo","dyo-SN","dz","dz-BT","ebu","ebu-KE","ee","ee-GH","ee-TG","el","el-CY","el-GR","en","en-001","en-150","en-AD","en-AG","en-AI","en-AL","en-AS","en-AT","en-AU","en-BA","en-BB","en-BE","en-BI","en-BM","en-BR","en-BS","en-BW","en-BZ","en-CA","en-CC","en-CH","en-CK","en-CM","en-CN","en-CX","en-CY","en-CZ","en-DE","en-DG","en-DK","en-DM","en-EE","en-ER","en-ES","en-FI","en-FJ","en-FK","en-FM","en-FR","en-GB","en-GD","en-GG","en-GH","en-GI","en-GM","en-GR","en-GU","en-GY","en-HK","en-HR","en-HU","en-IE","en-IL","en-IM","en-IN","en-IO","en-IS","en-IT","en-JE","en-JM","en-JP","en-KE","en-KI","en-KN","en-KR","en-KY","en-LC","en-LR","en-LS","en-LT","en-LU","en-LV","en-ME","en-MG","en-MH","en-MO","en-MP","en-MS","en-MT","en-MU","en-MV","en-MW","en-MY","en-NA","en-NF","en-NG","en-NL","en-NO","en-NR","en-NU","en-NZ","en-PG","en-PH","en-PK","en-PL","en-PN","en-PR","en-PT","en-PW","en-RO","en-RU","en-RW","en-SB","en-SC","en-SD","en-SE","en-SG","en-SH","en-SI","en-SK","en-SL","en-SS","en-SX","en-SZ","en-TC","en-TK","en-TO","en-TR","en-TT","en-TV","en-TW","en-TZ","en-UG","en-UM","en-US","en-US-POSIX","en-VC","en-VG","en-VI","en-VU","en-WS","en-ZA","en-ZM","en-ZW","eo","es","es-419","es-AR","es-BO","es-CL","es-CO","es-CR","es-CU","es-DO","es-EA","es-EC","es-ES","es-GQ","es-GT","es-HN","es-IC","es-MX","es-NI","es-PA","es-PE","es-PH","es-PR","es-PY","es-SV","es-US","es-UY","es-VE","et","et-EE","eu","eu-ES","ewo","ewo-CM","fa","fa-AF","fa-IR","ff","ff-CM","ff-GN","ff-MR","ff-SN","fi","fi-FI","fil","fil-PH","fo","fo-DK","fo-FO","fr","fr-BE","fr-BF","fr-BI","fr-BJ","fr-BL","fr-CA","fr-CD","fr-CF","fr-CG","fr-CH","fr-CI","fr-CM","fr-DJ","fr-DZ","fr-FR","fr-GA","fr-GF","fr-GN","fr-GP","fr-GQ","fr-HT","fr-KM","fr-LU","fr-MA","fr-MC","fr-MF","fr-MG","fr-ML","fr-MQ","fr-MR","fr-MU","fr-NC","fr-NE","fr-PF","fr-PM","fr-RE","fr-RW","fr-SC","fr-SN","fr-SY","fr-TD","fr-TG","fr-TN","fr-VU","fr-WF","fr-YT","fur","fur-IT","fy","fy-NL","ga","ga-IE","gd","gd-GB","gl","gl-ES","gsw","gsw-CH","gsw-FR","gsw-LI","gu","gu-IN","guz","guz-KE","gv","gv-IM","ha","ha-GH","ha-NE","ha-NG","haw","haw-US","he","he-IL","hi","hi-IN","hr","hr-BA","hr-HR","hsb","hsb-DE","hu","hu-HU","hy","hy-AM","id","id-ID","ig","ig-NG","ii","ii-CN","is","is-IS","it","it-CH","it-IT","it-SM","iu","iu-CA","ja","ja-JP","jgo","jgo-CM","jmc","jmc-TZ","ka","ka-GE","kab","kab-DZ","kam","kam-KE","kde","kde-TZ","kea","kea-CV","khq","khq-ML","ki","ki-KE","kk","kk-KZ","kkj","kkj-CM","kl","kl-GL","kln","kln-KE","km","km-KH","kn","kn-IN","ko","ko-KP","ko-KR","kok","kok-IN","ks","ks-IN","ksb","ksb-TZ","ksf","ksf-CM","ksh","ksh-DE","kw","kw-GB","ky","ky-KG","lag","lag-TZ","lb","lb-LU","lg","lg-UG","lkt","lkt-US","ln","ln-AO","ln-CD","ln-CF","ln-CG","lo","lo-LA","lrc","lrc-IQ","lrc-IR","lt","lt-LT","lu","lu-CD","luo","luo-KE","luy","luy-KE","lv","lv-LV","mas","mas-KE","mas-TZ","mer","mer-KE","mfe","mfe-MU","mg","mg-MG","mgh","mgh-MZ","mgo","mgo-CM","mk","mk-MK","ml","ml-IN","mn","mn-MN","mr","mr-IN","ms","ms-Arab","ms-Arab-BN","ms-Arab-MY","ms-BN","ms-MY","ms-SG","mt","mt-MT","mua","mua-CM","my","my-MM","mzn","mzn-IR","naq","naq-NA","nb","nb-NO","nb-SJ","nd","nd-ZW","ne","ne-IN","ne-NP","nl","nl-AW","nl-BE","nl-BQ","nl-CW","nl-NL","nl-SR","nl-SX","nmg","nmg-CM","nn","nn-NO","nnh","nnh-CM","nus","nus-SS","nyn","nyn-UG","om","om-ET","om-KE","or","or-IN","os","os-GE","os-RU","pa","pa-Arab","pa-Arab-PK","pa-IN","pl","pl-PL","ps","ps-AF","pt","pt-AO","pt-BR","pt-CV","pt-GW","pt-MO","pt-MZ","pt-PT","pt-ST","pt-TL","qu","qu-BO","qu-EC","qu-PE","rm","rm-CH","rn","rn-BI","ro","ro-MD","ro-RO","rof","rof-TZ","ru","ru-BY","ru-KG","ru-KZ","ru-MD","ru-RU","ru-UA","rw","rw-RW","rwk","rwk-TZ","sah","sah-RU","saq","saq-KE","sbp","sbp-TZ","se","se-FI","se-NO","se-SE","seh","seh-MZ","ses","ses-ML","sg","sg-CF","shi","shi-MA","shi-Tfng","shi-Tfng-MA","si","si-LK","sk","sk-SK","sl","sl-SI","smn","smn-FI","sn","sn-ZW","so","so-DJ","so-ET","so-KE","so-SO","sq","sq-AL","sq-MK","sq-XK","sr","sr-BA","sr-ME","sr-RS","sr-XK","sr-Latn","sr-Latn-BA","sr-Latn-ME","sr-Latn-RS","sr-Latn-XK","sv","sv-AX","sv-FI","sv-SE","sw","sw-CD","sw-KE","sw-TZ","sw-UG","ta","ta-IN","ta-LK","ta-MY","ta-SG","te","te-IN","teo","teo-KE","teo-UG","tg","tg-TJ","th","th-TH","ti","ti-ER","ti-ET","tk","tk-TM","to","to-TO","tr","tr-CY","tr-TR","twq","twq-NE","tzm","tzm-MA","ug","ug-CN","uk","uk-UA","ur","ur-IN","ur-PK","uz","uz-Arab","uz-Arab-AF","uz-UZ","uz-Latn","uz-Latn-UZ","vai","vai-Latn","vai-Latn-LR","vai-LR","vi","vi-VN","vun","vun-TZ","wae","wae-CH","xog","xog-UG","yav","yav-CM","yi","yi-001","yo","yo-BJ","yo-NG","yue","yue-HK","zgh","zgh-MA","zh","zh-Hans","zh-Hans-CN","zh-Hans-HK","zh-Hans-MO","zh-Hans-SG","zh-Hant","zh-Hant-HK","zh-Hant-MO","zh-Hant-TW","zu","zu-ZA"
|
50
|
+
],
|
51
|
+
|
48
52
|
RunLoop::Version.new("9.0") => [
|
49
53
|
"af","af-NA","af-ZA","agq","agq-CM","ak","ak-GH","am","am-ET","ar","ar-001","ar-AE","ar-BH","ar-DJ","ar-DZ","ar-EG","ar-EH","ar-ER","ar-IL","ar-IQ","ar-JO","ar-KM","ar-KW","ar-LB","ar-LY","ar-MA","ar-MR","ar-OM","ar-PS","ar-QA","ar-SA","ar-SD","ar-SO","ar-SS","ar-SY","ar-TD","ar-TN","ar-YE","as","as-IN","asa","asa-TZ","az","az-Cyrl","az-Cyrl-AZ","az-AZ","bas","bas-CM","be","be-BY","bem","bem-ZM","bez","bez-TZ","bg","bg-BG","bm","bm-ML","bn","bn-BD","bn-IN","bo","bo-CN","bo-IN","br","br-FR","brx","brx-IN","bs","bs-Cyrl","bs-Cyrl-BA","bs-BA","ca","ca-AD","ca-ES","ca-FR","ca-IT","cgg","cgg-UG","chr","chr-US","ckb","ckb-IQ","ckb-IR","cs","cs-CZ","cy","cy-GB","da","da-DK","da-GL","dav","dav-KE","de","de-AT","de-BE","de-CH","de-DE","de-LI","de-LU","dje","dje-NE","dsb","dsb-DE","dua","dua-CM","dyo","dyo-SN","dz","dz-BT","ebu","ebu-KE","ee","ee-GH","ee-TG","el","el-CY","el-GR","en","en-001","en-150","en-AD","en-AG","en-AI","en-AL","en-AS","en-AT","en-AU","en-BA","en-BB","en-BE","en-BM","en-BS","en-BW","en-BZ","en-CA","en-CC","en-CH","en-CK","en-CM","en-CX","en-CY","en-CZ","en-DE","en-DG","en-DK","en-DM","en-EE","en-ER","en-ES","en-FI","en-FJ","en-FK","en-FM","en-FR","en-GB","en-GD","en-GG","en-GH","en-GI","en-GM","en-GR","en-GU","en-GY","en-HK","en-HR","en-HU","en-IE","en-IL","en-IM","en-IN","en-IO","en-IS","en-IT","en-JE","en-JM","en-KE","en-KI","en-KN","en-KY","en-LC","en-LR","en-LS","en-LT","en-LU","en-LV","en-ME","en-MG","en-MH","en-MO","en-MP","en-MS","en-MT","en-MU","en-MW","en-MY","en-NA","en-NF","en-NG","en-NL","en-NO","en-NR","en-NU","en-NZ","en-PG","en-PH","en-PK","en-PL","en-PN","en-PR","en-PT","en-PW","en-RO","en-RU","en-RW","en-SB","en-SC","en-SD","en-SE","en-SG","en-SH","en-SI","en-SK","en-SL","en-SS","en-SX","en-SZ","en-TC","en-TK","en-TO","en-TR","en-TT","en-TV","en-TZ","en-UG","en-UM","en-US","en-US-POSIX","en-VC","en-VG","en-VI","en-VU","en-WS","en-ZA","en-ZM","en-ZW","eo","es","es-419","es-AR","es-BO","es-CL","es-CO","es-CR","es-CU","es-DO","es-EA","es-EC","es-ES","es-GQ","es-GT","es-HN","es-IC","es-MX","es-NI","es-PA","es-PE","es-PH","es-PR","es-PY","es-SV","es-US","es-UY","es-VE","et","et-EE","eu","eu-ES","ewo","ewo-CM","fa","fa-AF","fa-IR","ff","ff-CM","ff-GN","ff-MR","ff-SN","fi","fi-FI","fil","fil-PH","fo","fo-FO","fr","fr-BE","fr-BF","fr-BI","fr-BJ","fr-BL","fr-CA","fr-CD","fr-CF","fr-CG","fr-CH","fr-CI","fr-CM","fr-DJ","fr-DZ","fr-FR","fr-GA","fr-GF","fr-GN","fr-GP","fr-GQ","fr-HT","fr-KM","fr-LU","fr-MA","fr-MC","fr-MF","fr-MG","fr-ML","fr-MQ","fr-MR","fr-MU","fr-NC","fr-NE","fr-PF","fr-PM","fr-RE","fr-RW","fr-SC","fr-SN","fr-SY","fr-TD","fr-TG","fr-TN","fr-VU","fr-WF","fr-YT","fur","fur-IT","fy","fy-NL","ga","ga-IE","gd","gd-GB","gl","gl-ES","gsw","gsw-CH","gsw-FR","gsw-LI","gu","gu-IN","guz","guz-KE","gv","gv-IM","ha","ha-GH","ha-NE","ha-NG","haw","haw-US","he","he-IL","hi","hi-IN","hr","hr-BA","hr-HR","hsb","hsb-DE","hu","hu-HU","hy","hy-AM","id","id-ID","ig","ig-NG","ii","ii-CN","is","is-IS","it","it-CH","it-IT","it-SM","iu","iu-Cans","iu-Cans-CA","ja","ja-JP","jgo","jgo-CM","jmc","jmc-TZ","ka","ka-GE","kab","kab-DZ","kam","kam-KE","kde","kde-TZ","kea","kea-CV","khq","khq-ML","ki","ki-KE","kk","kk-KZ","kkj","kkj-CM","kl","kl-GL","kln","kln-KE","km","km-KH","kn","kn-IN","ko","ko-KP","ko-KR","kok","kok-IN","ks","ks-Arab","ks-Arab-IN","ksb","ksb-TZ","ksf","ksf-CM","ksh","ksh-DE","kw","kw-GB","ky","ky-KG","lag","lag-TZ","lb","lb-LU","lg","lg-UG","lkt","lkt-US","ln","ln-AO","ln-CD","ln-CF","ln-CG","lo","lo-LA","lt","lt-LT","lu","lu-CD","luo","luo-KE","luy","luy-KE","lv","lv-LV","mas","mas-KE","mas-TZ","mer","mer-KE","mfe","mfe-MU","mg","mg-MG","mgh","mgh-MZ","mgo","mgo-CM","mk","mk-MK","ml","ml-IN","mn","mn-MN","mr","mr-IN","ms","ms-Arab","ms-Arab-BN","ms-Arab-MY","ms-BN","ms-MY","ms-SG","mt","mt-MT","mua","mua-CM","my","my-MM","naq","naq-NA","nb","nb-NO","nb-SJ","nd","nd-ZW","ne","ne-IN","ne-NP","nl","nl-AW","nl-BE","nl-BQ","nl-CW","nl-NL","nl-SR","nl-SX","nmg","nmg-CM","nn","nn-NO","nnh","nnh-CM","nus","nus-SD","nyn","nyn-UG","om","om-ET","om-KE","or","or-IN","os","os-GE","os-RU","pa","pa-Arab","pa-Arab-PK","pa-IN","pl","pl-PL","ps","ps-AF","pt","pt-AO","pt-BR","pt-CV","pt-GW","pt-MO","pt-MZ","pt-PT","pt-ST","pt-TL","qu","qu-BO","qu-EC","qu-PE","rm","rm-CH","rn","rn-BI","ro","ro-MD","ro-RO","rof","rof-TZ","ru","ru-BY","ru-KG","ru-KZ","ru-MD","ru-RU","ru-UA","rw","rw-RW","rwk","rwk-TZ","sah","sah-RU","saq","saq-KE","sbp","sbp-TZ","se","se-FI","se-NO","se-SE","seh","seh-MZ","ses","ses-ML","sg","sg-CF","shi","shi-MA","shi-Tfng","shi-Tfng-MA","si","si-LK","sk","sk-SK","sl","sl-SI","smn","smn-FI","sn","sn-ZW","so","so-DJ","so-ET","so-KE","so-SO","sq","sq-AL","sq-MK","sq-XK","sr","sr-BA","sr-ME","sr-RS","sr-XK","sr-Latn","sr-Latn-BA","sr-Latn-ME","sr-Latn-RS","sr-Latn-XK","sv","sv-AX","sv-FI","sv-SE","sw","sw-CD","sw-KE","sw-TZ","sw-UG","ta","ta-IN","ta-LK","ta-MY","ta-SG","te","te-IN","teo","teo-KE","teo-UG","tg","tg-TJ","th","th-TH","ti","ti-ER","ti-ET","tk","tk-TM","to","to-TO","tr","tr-CY","tr-TR","twq","twq-NE","tzm","tzm-MA","ug","ug-Arab","ug-Arab-CN","uk","uk-UA","ur","ur-IN","ur-PK","uz","uz-Arab","uz-Arab-AF","uz-UZ","uz-Latn","uz-Latn-UZ","vai","vai-Latn","vai-Latn-LR","vai-LR","vi","vi-VN","vun","vun-TZ","wae","wae-CH","xog","xog-UG","yav","yav-CM","yi","yi-001","yo","yo-BJ","yo-NG","zgh","zgh-MA","zh","zh-Hans","zh-Hans-CN","zh-Hans-HK","zh-Hans-MO","zh-Hans-SG","zh-Hant","zh-Hant-HK","zh-Hant-MO","zh-Hant-TW","zu","zu-ZA",
|
50
54
|
],
|
data/lib/run_loop/locale.rb
CHANGED
@@ -78,13 +78,16 @@ module RunLoop
|
|
78
78
|
# NSArray *identifiers = [[NSLocale availableLocaleIdentifiers]
|
79
79
|
# sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
|
80
80
|
# NSLocale *locale = [NSLocale localeWithLocaleIdentifier:@"en_US"];
|
81
|
-
# NSMutableOrderedSet *set = [NSMutableOrderedSet new];
|
82
81
|
# for (NSString *localeId in identifiers) {
|
83
82
|
# printf("\"%s\" => \"%s\",", [localeId cStringUsingEncoding:NSUTF8StringEncoding],
|
84
83
|
# [[locale displayNameForKey:NSLocaleIdentifier
|
85
84
|
# value:localeId] cStringUsingEncoding:NSUTF8StringEncoding]);
|
86
85
|
# }
|
87
86
|
LOCALES = {
|
87
|
+
RunLoop::Version.new("10.0") => {
|
88
|
+
"af" => "Afrikaans","af_NA" => "Afrikaans (Namibia)","af_ZA" => "Afrikaans (South Africa)","agq" => "Aghem","agq_CM" => "Aghem (Cameroon)","ak" => "Akan","ak_GH" => "Akan (Ghana)","am" => "Amharic","am_ET" => "Amharic (Ethiopia)","ar" => "Arabic","ar_001" => "Arabic (World)","ar_AE" => "Arabic (United Arab Emirates)","ar_BH" => "Arabic (Bahrain)","ar_DJ" => "Arabic (Djibouti)","ar_DZ" => "Arabic (Algeria)","ar_EG" => "Arabic (Egypt)","ar_EH" => "Arabic (Western Sahara)","ar_ER" => "Arabic (Eritrea)","ar_IL" => "Arabic (Israel)","ar_IQ" => "Arabic (Iraq)","ar_JO" => "Arabic (Jordan)","ar_KM" => "Arabic (Comoros)","ar_KW" => "Arabic (Kuwait)","ar_LB" => "Arabic (Lebanon)","ar_LY" => "Arabic (Libya)","ar_MA" => "Arabic (Morocco)","ar_MR" => "Arabic (Mauritania)","ar_OM" => "Arabic (Oman)","ar_PS" => "Arabic (Palestinian Territories)","ar_QA" => "Arabic (Qatar)","ar_SA" => "Arabic (Saudi Arabia)","ar_SD" => "Arabic (Sudan)","ar_SO" => "Arabic (Somalia)","ar_SS" => "Arabic (South Sudan)","ar_SY" => "Arabic (Syria)","ar_TD" => "Arabic (Chad)","ar_TN" => "Arabic (Tunisia)","ar_YE" => "Arabic (Yemen)","ars" => "Najdi Arabic","as" => "Assamese","as_IN" => "Assamese (India)","asa" => "Asu","asa_TZ" => "Asu (Tanzania)","ast" => "Asturian","ast_ES" => "Asturian (Spain)","az" => "Azerbaijani","az_Cyrl" => "Azerbaijani (Cyrillic)","az_Cyrl_AZ" => "Azerbaijani (Cyrillic, Azerbaijan)","az_Latn" => "Azerbaijani (Latin)","az_Latn_AZ" => "Azerbaijani (Latin, Azerbaijan)","bas" => "Basaa","bas_CM" => "Basaa (Cameroon)","be" => "Belarusian","be_BY" => "Belarusian (Belarus)","bem" => "Bemba","bem_ZM" => "Bemba (Zambia)","bez" => "Bena","bez_TZ" => "Bena (Tanzania)","bg" => "Bulgarian","bg_BG" => "Bulgarian (Bulgaria)","bm" => "Bambara","bm_ML" => "Bambara (Mali)","bn" => "Bengali","bn_BD" => "Bengali (Bangladesh)","bn_IN" => "Bengali (India)","bo" => "Tibetan","bo_CN" => "Tibetan (China)","bo_IN" => "Tibetan (India)","br" => "Breton","br_FR" => "Breton (France)","brx" => "Bodo","brx_IN" => "Bodo (India)","bs" => "Bosnian","bs_Cyrl" => "Bosnian (Cyrillic)","bs_Cyrl_BA" => "Bosnian (Cyrillic, Bosnia & Herzegovina)","bs_Latn" => "Bosnian (Latin)","bs_Latn_BA" => "Bosnian (Latin, Bosnia & Herzegovina)","ca" => "Catalan","ca_AD" => "Catalan (Andorra)","ca_ES" => "Catalan (Spain)","ca_FR" => "Catalan (France)","ca_IT" => "Catalan (Italy)","ce" => "Chechen","ce_RU" => "Chechen (Russia)","cgg" => "Chiga","cgg_UG" => "Chiga (Uganda)","chr" => "Cherokee","chr_US" => "Cherokee (United States)","ckb" => "Central Kurdish","ckb_IQ" => "Central Kurdish (Iraq)","ckb_IR" => "Central Kurdish (Iran)","cs" => "Czech","cs_CZ" => "Czech (Czech Republic)","cy" => "Welsh","cy_GB" => "Welsh (United Kingdom)","da" => "Danish","da_DK" => "Danish (Denmark)","da_GL" => "Danish (Greenland)","dav" => "Taita","dav_KE" => "Taita (Kenya)","de" => "German","de_AT" => "German (Austria)","de_BE" => "German (Belgium)","de_CH" => "German (Switzerland)","de_DE" => "German (Germany)","de_LI" => "German (Liechtenstein)","de_LU" => "German (Luxembourg)","dje" => "Zarma","dje_NE" => "Zarma (Niger)","dsb" => "Lower Sorbian","dsb_DE" => "Lower Sorbian (Germany)","dua" => "Duala","dua_CM" => "Duala (Cameroon)","dyo" => "Jola-Fonyi","dyo_SN" => "Jola-Fonyi (Senegal)","dz" => "Dzongkha","dz_BT" => "Dzongkha (Bhutan)","ebu" => "Embu","ebu_KE" => "Embu (Kenya)","ee" => "Ewe","ee_GH" => "Ewe (Ghana)","ee_TG" => "Ewe (Togo)","el" => "Greek","el_CY" => "Greek (Cyprus)","el_GR" => "Greek (Greece)","en" => "English","en_001" => "English (World)","en_150" => "English (Europe)","en_AD" => "English (Andorra)","en_AG" => "English (Antigua & Barbuda)","en_AI" => "English (Anguilla)","en_AL" => "English (Albania)","en_AS" => "English (American Samoa)","en_AT" => "English (Austria)","en_AU" => "English (Australia)","en_BA" => "English (Bosnia & Herzegovina)","en_BB" => "English (Barbados)","en_BE" => "English (Belgium)","en_BI" => "English (Burundi)","en_BM" => "English (Bermuda)","en_BR" => "English (Brazil)","en_BS" => "English (Bahamas)","en_BW" => "English (Botswana)","en_BZ" => "English (Belize)","en_CA" => "English (Canada)","en_CC" => "English (Cocos [Keeling] Islands)","en_CH" => "English (Switzerland)","en_CK" => "English (Cook Islands)","en_CM" => "English (Cameroon)","en_CN" => "English (China)","en_CX" => "English (Christmas Island)","en_CY" => "English (Cyprus)","en_CZ" => "English (Czech Republic)","en_DE" => "English (Germany)","en_DG" => "English (Diego Garcia)","en_DK" => "English (Denmark)","en_DM" => "English (Dominica)","en_EE" => "English (Estonia)","en_ER" => "English (Eritrea)","en_ES" => "English (Spain)","en_FI" => "English (Finland)","en_FJ" => "English (Fiji)","en_FK" => "English (Falkland Islands)","en_FM" => "English (Micronesia)","en_FR" => "English (France)","en_GB" => "English (United Kingdom)","en_GD" => "English (Grenada)","en_GG" => "English (Guernsey)","en_GH" => "English (Ghana)","en_GI" => "English (Gibraltar)","en_GM" => "English (Gambia)","en_GR" => "English (Greece)","en_GU" => "English (Guam)","en_GY" => "English (Guyana)","en_HK" => "English (Hong Kong [China])","en_HR" => "English (Croatia)","en_HU" => "English (Hungary)","en_IE" => "English (Ireland)","en_IL" => "English (Israel)","en_IM" => "English (Isle of Man)","en_IN" => "English (India)","en_IO" => "English (British Indian Ocean Territory)","en_IS" => "English (Iceland)","en_IT" => "English (Italy)","en_JE" => "English (Jersey)","en_JM" => "English (Jamaica)","en_JP" => "English (Japan)","en_KE" => "English (Kenya)","en_KI" => "English (Kiribati)","en_KN" => "English (St. Kitts & Nevis)","en_KR" => "English (South Korea)","en_KY" => "English (Cayman Islands)","en_LC" => "English (St. Lucia)","en_LR" => "English (Liberia)","en_LS" => "English (Lesotho)","en_LT" => "English (Lithuania)","en_LU" => "English (Luxembourg)","en_LV" => "English (Latvia)","en_ME" => "English (Montenegro)","en_MG" => "English (Madagascar)","en_MH" => "English (Marshall Islands)","en_MO" => "English (Macau [China])","en_MP" => "English (Northern Mariana Islands)","en_MS" => "English (Montserrat)","en_MT" => "English (Malta)","en_MU" => "English (Mauritius)","en_MV" => "English (Maldives)","en_MW" => "English (Malawi)","en_MY" => "English (Malaysia)","en_NA" => "English (Namibia)","en_NF" => "English (Norfolk Island)","en_NG" => "English (Nigeria)","en_NL" => "English (Netherlands)","en_NO" => "English (Norway)","en_NR" => "English (Nauru)","en_NU" => "English (Niue)","en_NZ" => "English (New Zealand)","en_PG" => "English (Papua New Guinea)","en_PH" => "English (Philippines)","en_PK" => "English (Pakistan)","en_PL" => "English (Poland)","en_PN" => "English (Pitcairn Islands)","en_PR" => "English (Puerto Rico)","en_PT" => "English (Portugal)","en_PW" => "English (Palau)","en_RO" => "English (Romania)","en_RU" => "English (Russia)","en_RW" => "English (Rwanda)","en_SB" => "English (Solomon Islands)","en_SC" => "English (Seychelles)","en_SD" => "English (Sudan)","en_SE" => "English (Sweden)","en_SG" => "English (Singapore)","en_SH" => "English (St. Helena)","en_SI" => "English (Slovenia)","en_SK" => "English (Slovakia)","en_SL" => "English (Sierra Leone)","en_SS" => "English (South Sudan)","en_SX" => "English (Sint Maarten)","en_SZ" => "English (Swaziland)","en_TC" => "English (Turks & Caicos Islands)","en_TK" => "English (Tokelau)","en_TO" => "English (Tonga)","en_TR" => "English (Turkey)","en_TT" => "English (Trinidad & Tobago)","en_TV" => "English (Tuvalu)","en_TW" => "English (Taiwan)","en_TZ" => "English (Tanzania)","en_UG" => "English (Uganda)","en_UM" => "English (U.S. Outlying Islands)","en_US" => "English (United States)","en_US_POSIX" => "English (United States, Computer)","en_VC" => "English (St. Vincent & Grenadines)","en_VG" => "English (British Virgin Islands)","en_VI" => "English (U.S. Virgin Islands)","en_VU" => "English (Vanuatu)","en_WS" => "English (Samoa)","en_ZA" => "English (South Africa)","en_ZM" => "English (Zambia)","en_ZW" => "English (Zimbabwe)","eo" => "Esperanto","es" => "Spanish","es_419" => "Spanish (Latin America)","es_AR" => "Spanish (Argentina)","es_BO" => "Spanish (Bolivia)","es_CL" => "Spanish (Chile)","es_CO" => "Spanish (Colombia)","es_CR" => "Spanish (Costa Rica)","es_CU" => "Spanish (Cuba)","es_DO" => "Spanish (Dominican Republic)","es_EA" => "Spanish (Ceuta & Melilla)","es_EC" => "Spanish (Ecuador)","es_ES" => "Spanish (Spain)","es_GQ" => "Spanish (Equatorial Guinea)","es_GT" => "Spanish (Guatemala)","es_HN" => "Spanish (Honduras)","es_IC" => "Spanish (Canary Islands)","es_MX" => "Spanish (Mexico)","es_NI" => "Spanish (Nicaragua)","es_PA" => "Spanish (Panama)","es_PE" => "Spanish (Peru)","es_PH" => "Spanish (Philippines)","es_PR" => "Spanish (Puerto Rico)","es_PY" => "Spanish (Paraguay)","es_SV" => "Spanish (El Salvador)","es_US" => "Spanish (United States)","es_UY" => "Spanish (Uruguay)","es_VE" => "Spanish (Venezuela)","et" => "Estonian","et_EE" => "Estonian (Estonia)","eu" => "Basque","eu_ES" => "Basque (Spain)","ewo" => "Ewondo","ewo_CM" => "Ewondo (Cameroon)","fa" => "Persian","fa_AF" => "Persian (Afghanistan)","fa_IR" => "Persian (Iran)","ff" => "Fulah","ff_CM" => "Fulah (Cameroon)","ff_GN" => "Fulah (Guinea)","ff_MR" => "Fulah (Mauritania)","ff_SN" => "Fulah (Senegal)","fi" => "Finnish","fi_FI" => "Finnish (Finland)","fil" => "Filipino","fil_PH" => "Filipino (Philippines)","fo" => "Faroese","fo_DK" => "Faroese (Denmark)","fo_FO" => "Faroese (Faroe Islands)","fr" => "French","fr_BE" => "French (Belgium)","fr_BF" => "French (Burkina Faso)","fr_BI" => "French (Burundi)","fr_BJ" => "French (Benin)","fr_BL" => "French (St. Barthélemy)","fr_CA" => "French (Canada)","fr_CD" => "French (Congo - Kinshasa)","fr_CF" => "French (Central African Republic)","fr_CG" => "French (Congo - Brazzaville)","fr_CH" => "French (Switzerland)","fr_CI" => "French (Côte d’Ivoire)","fr_CM" => "French (Cameroon)","fr_DJ" => "French (Djibouti)","fr_DZ" => "French (Algeria)","fr_FR" => "French (France)","fr_GA" => "French (Gabon)","fr_GF" => "French (French Guiana)","fr_GN" => "French (Guinea)","fr_GP" => "French (Guadeloupe)","fr_GQ" => "French (Equatorial Guinea)","fr_HT" => "French (Haiti)","fr_KM" => "French (Comoros)","fr_LU" => "French (Luxembourg)","fr_MA" => "French (Morocco)","fr_MC" => "French (Monaco)","fr_MF" => "French (St. Martin)","fr_MG" => "French (Madagascar)","fr_ML" => "French (Mali)","fr_MQ" => "French (Martinique)","fr_MR" => "French (Mauritania)","fr_MU" => "French (Mauritius)","fr_NC" => "French (New Caledonia)","fr_NE" => "French (Niger)","fr_PF" => "French (French Polynesia)","fr_PM" => "French (St. Pierre & Miquelon)","fr_RE" => "French (Réunion)","fr_RW" => "French (Rwanda)","fr_SC" => "French (Seychelles)","fr_SN" => "French (Senegal)","fr_SY" => "French (Syria)","fr_TD" => "French (Chad)","fr_TG" => "French (Togo)","fr_TN" => "French (Tunisia)","fr_VU" => "French (Vanuatu)","fr_WF" => "French (Wallis & Futuna)","fr_YT" => "French (Mayotte)","fur" => "Friulian","fur_IT" => "Friulian (Italy)","fy" => "Western Frisian","fy_NL" => "Western Frisian (Netherlands)","ga" => "Irish","ga_IE" => "Irish (Ireland)","gd" => "Scottish Gaelic","gd_GB" => "Scottish Gaelic (United Kingdom)","gl" => "Galician","gl_ES" => "Galician (Spain)","gsw" => "Swiss German","gsw_CH" => "Swiss German (Switzerland)","gsw_FR" => "Swiss German (France)","gsw_LI" => "Swiss German (Liechtenstein)","gu" => "Gujarati","gu_IN" => "Gujarati (India)","guz" => "Gusii","guz_KE" => "Gusii (Kenya)","gv" => "Manx","gv_IM" => "Manx (Isle of Man)","ha" => "Hausa","ha_GH" => "Hausa (Ghana)","ha_NE" => "Hausa (Niger)","ha_NG" => "Hausa (Nigeria)","haw" => "Hawaiian","haw_US" => "Hawaiian (United States)","he" => "Hebrew","he_IL" => "Hebrew (Israel)","hi" => "Hindi","hi_IN" => "Hindi (India)","hr" => "Croatian","hr_BA" => "Croatian (Bosnia & Herzegovina)","hr_HR" => "Croatian (Croatia)","hsb" => "Upper Sorbian","hsb_DE" => "Upper Sorbian (Germany)","hu" => "Hungarian","hu_HU" => "Hungarian (Hungary)","hy" => "Armenian","hy_AM" => "Armenian (Armenia)","id" => "Indonesian","id_ID" => "Indonesian (Indonesia)","ig" => "Igbo","ig_NG" => "Igbo (Nigeria)","ii" => "Sichuan Yi","ii_CN" => "Sichuan Yi (China)","is" => "Icelandic","is_IS" => "Icelandic (Iceland)","it" => "Italian","it_CH" => "Italian (Switzerland)","it_IT" => "Italian (Italy)","it_SM" => "Italian (San Marino)","iu" => "Inuktitut","iu_CA" => "Inuktitut (Canada)","ja" => "Japanese","ja_JP" => "Japanese (Japan)","jgo" => "Ngomba","jgo_CM" => "Ngomba (Cameroon)","jmc" => "Machame","jmc_TZ" => "Machame (Tanzania)","ka" => "Georgian","ka_GE" => "Georgian (Georgia)","kab" => "Kabyle","kab_DZ" => "Kabyle (Algeria)","kam" => "Kamba","kam_KE" => "Kamba (Kenya)","kde" => "Makonde","kde_TZ" => "Makonde (Tanzania)","kea" => "Kabuverdianu","kea_CV" => "Kabuverdianu (Cape Verde)","khq" => "Koyra Chiini","khq_ML" => "Koyra Chiini (Mali)","ki" => "Kikuyu","ki_KE" => "Kikuyu (Kenya)","kk" => "Kazakh","kk_KZ" => "Kazakh (Kazakhstan)","kkj" => "Kako","kkj_CM" => "Kako (Cameroon)","kl" => "Kalaallisut","kl_GL" => "Kalaallisut (Greenland)","kln" => "Kalenjin","kln_KE" => "Kalenjin (Kenya)","km" => "Khmer","km_KH" => "Khmer (Cambodia)","kn" => "Kannada","kn_IN" => "Kannada (India)","ko" => "Korean","ko_KP" => "Korean (North Korea)","ko_KR" => "Korean (South Korea)","kok" => "Konkani","kok_IN" => "Konkani (India)","ks" => "Kashmiri","ks_IN" => "Kashmiri (India)","ksb" => "Shambala","ksb_TZ" => "Shambala (Tanzania)","ksf" => "Bafia","ksf_CM" => "Bafia (Cameroon)","ksh" => "Colognian","ksh_DE" => "Colognian (Germany)","kw" => "Cornish","kw_GB" => "Cornish (United Kingdom)","ky" => "Kyrgyz","ky_KG" => "Kyrgyz (Kyrgyzstan)","lag" => "Langi","lag_TZ" => "Langi (Tanzania)","lb" => "Luxembourgish","lb_LU" => "Luxembourgish (Luxembourg)","lg" => "Ganda","lg_UG" => "Ganda (Uganda)","lkt" => "Lakota","lkt_US" => "Lakota (United States)","ln" => "Lingala","ln_AO" => "Lingala (Angola)","ln_CD" => "Lingala (Congo - Kinshasa)","ln_CF" => "Lingala (Central African Republic)","ln_CG" => "Lingala (Congo - Brazzaville)","lo" => "Lao","lo_LA" => "Lao (Laos)","lrc" => "Northern Luri","lrc_IQ" => "Northern Luri (Iraq)","lrc_IR" => "Northern Luri (Iran)","lt" => "Lithuanian","lt_LT" => "Lithuanian (Lithuania)","lu" => "Luba-Katanga","lu_CD" => "Luba-Katanga (Congo - Kinshasa)","luo" => "Luo","luo_KE" => "Luo (Kenya)","luy" => "Luyia","luy_KE" => "Luyia (Kenya)","lv" => "Latvian","lv_LV" => "Latvian (Latvia)","mas" => "Masai","mas_KE" => "Masai (Kenya)","mas_TZ" => "Masai (Tanzania)","mer" => "Meru","mer_KE" => "Meru (Kenya)","mfe" => "Morisyen","mfe_MU" => "Morisyen (Mauritius)","mg" => "Malagasy","mg_MG" => "Malagasy (Madagascar)","mgh" => "Makhuwa-Meetto","mgh_MZ" => "Makhuwa-Meetto (Mozambique)","mgo" => "Metaʼ","mgo_CM" => "Metaʼ (Cameroon)","mk" => "Macedonian","mk_MK" => "Macedonian (Macedonia)","ml" => "Malayalam","ml_IN" => "Malayalam (India)","mn" => "Mongolian","mn_MN" => "Mongolian (Mongolia)","mr" => "Marathi","mr_IN" => "Marathi (India)","ms" => "Malay","ms_Arab" => "Malay (Arabic)","ms_Arab_BN" => "Malay (Arabic, Brunei)","ms_Arab_MY" => "Malay (Arabic, Malaysia)","ms_BN" => "Malay (Brunei)","ms_MY" => "Malay (Malaysia)","ms_SG" => "Malay (Singapore)","mt" => "Maltese","mt_MT" => "Maltese (Malta)","mua" => "Mundang","mua_CM" => "Mundang (Cameroon)","my" => "Burmese","my_MM" => "Burmese (Myanmar [Burma])","mzn" => "Mazanderani","mzn_IR" => "Mazanderani (Iran)","naq" => "Nama","naq_NA" => "Nama (Namibia)","nb" => "Norwegian Bokmål","nb_NO" => "Norwegian Bokmål (Norway)","nb_SJ" => "Norwegian Bokmål (Svalbard & Jan Mayen)","nd" => "North Ndebele","nd_ZW" => "North Ndebele (Zimbabwe)","ne" => "Nepali","ne_IN" => "Nepali (India)","ne_NP" => "Nepali (Nepal)","nl" => "Dutch","nl_AW" => "Dutch (Aruba)","nl_BE" => "Dutch (Belgium)","nl_BQ" => "Dutch (Caribbean Netherlands)","nl_CW" => "Dutch (Curaçao)","nl_NL" => "Dutch (Netherlands)","nl_SR" => "Dutch (Suriname)","nl_SX" => "Dutch (Sint Maarten)","nmg" => "Kwasio","nmg_CM" => "Kwasio (Cameroon)","nn" => "Norwegian Nynorsk","nn_NO" => "Norwegian Nynorsk (Norway)","nnh" => "Ngiemboon","nnh_CM" => "Ngiemboon (Cameroon)","nus" => "Nuer","nus_SS" => "Nuer (South Sudan)","nyn" => "Nyankole","nyn_UG" => "Nyankole (Uganda)","om" => "Oromo","om_ET" => "Oromo (Ethiopia)","om_KE" => "Oromo (Kenya)","or" => "Oriya","or_IN" => "Oriya (India)","os" => "Ossetic","os_GE" => "Ossetic (Georgia)","os_RU" => "Ossetic (Russia)","pa" => "Punjabi","pa_Arab" => "Punjabi (Arabic)","pa_Arab_PK" => "Punjabi (Arabic, Pakistan)","pa_Guru" => "Punjabi (Gurmukhi)","pa_Guru_IN" => "Punjabi (Gurmukhi, India)","pl" => "Polish","pl_PL" => "Polish (Poland)","ps" => "Pashto","ps_AF" => "Pashto (Afghanistan)","pt" => "Portuguese","pt_AO" => "Portuguese (Angola)","pt_BR" => "Portuguese (Brazil)","pt_CV" => "Portuguese (Cape Verde)","pt_GW" => "Portuguese (Guinea-Bissau)","pt_MO" => "Portuguese (Macau [China])","pt_MZ" => "Portuguese (Mozambique)","pt_PT" => "Portuguese (Portugal)","pt_ST" => "Portuguese (São Tomé & Príncipe)","pt_TL" => "Portuguese (Timor-Leste)","qu" => "Quechua","qu_BO" => "Quechua (Bolivia)","qu_EC" => "Quechua (Ecuador)","qu_PE" => "Quechua (Peru)","rm" => "Romansh","rm_CH" => "Romansh (Switzerland)","rn" => "Rundi","rn_BI" => "Rundi (Burundi)","ro" => "Romanian","ro_MD" => "Romanian (Moldova)","ro_RO" => "Romanian (Romania)","rof" => "Rombo","rof_TZ" => "Rombo (Tanzania)","ru" => "Russian","ru_BY" => "Russian (Belarus)","ru_KG" => "Russian (Kyrgyzstan)","ru_KZ" => "Russian (Kazakhstan)","ru_MD" => "Russian (Moldova)","ru_RU" => "Russian (Russia)","ru_UA" => "Russian (Ukraine)","rw" => "Kinyarwanda","rw_RW" => "Kinyarwanda (Rwanda)","rwk" => "Rwa","rwk_TZ" => "Rwa (Tanzania)","sah" => "Sakha","sah_RU" => "Sakha (Russia)","saq" => "Samburu","saq_KE" => "Samburu (Kenya)","sbp" => "Sangu","sbp_TZ" => "Sangu (Tanzania)","se" => "Northern Sami","se_FI" => "Northern Sami (Finland)","se_NO" => "Northern Sami (Norway)","se_SE" => "Northern Sami (Sweden)","seh" => "Sena","seh_MZ" => "Sena (Mozambique)","ses" => "Koyraboro Senni","ses_ML" => "Koyraboro Senni (Mali)","sg" => "Sango","sg_CF" => "Sango (Central African Republic)","shi" => "Tachelhit","shi_Latn" => "Tachelhit (Latin)","shi_Latn_MA" => "Tachelhit (Latin, Morocco)","shi_Tfng" => "Tachelhit (Tifinagh)","shi_Tfng_MA" => "Tachelhit (Tifinagh, Morocco)","si" => "Sinhala","si_LK" => "Sinhala (Sri Lanka)","sk" => "Slovak","sk_SK" => "Slovak (Slovakia)","sl" => "Slovenian","sl_SI" => "Slovenian (Slovenia)","smn" => "Inari Sami","smn_FI" => "Inari Sami (Finland)","sn" => "Shona","sn_ZW" => "Shona (Zimbabwe)","so" => "Somali","so_DJ" => "Somali (Djibouti)","so_ET" => "Somali (Ethiopia)","so_KE" => "Somali (Kenya)","so_SO" => "Somali (Somalia)","sq" => "Albanian","sq_AL" => "Albanian (Albania)","sq_MK" => "Albanian (Macedonia)","sq_XK" => "Albanian (Kosovo)","sr" => "Serbian","sr_Cyrl" => "Serbian (Cyrillic)","sr_Cyrl_BA" => "Serbian (Cyrillic, Bosnia & Herzegovina)","sr_Cyrl_ME" => "Serbian (Cyrillic, Montenegro)","sr_Cyrl_RS" => "Serbian (Cyrillic, Serbia)","sr_Cyrl_XK" => "Serbian (Cyrillic, Kosovo)","sr_Latn" => "Serbian (Latin)","sr_Latn_BA" => "Serbian (Latin, Bosnia & Herzegovina)","sr_Latn_ME" => "Serbian (Latin, Montenegro)","sr_Latn_RS" => "Serbian (Latin, Serbia)","sr_Latn_XK" => "Serbian (Latin, Kosovo)","sv" => "Swedish","sv_AX" => "Swedish (Åland Islands)","sv_FI" => "Swedish (Finland)","sv_SE" => "Swedish (Sweden)","sw" => "Swahili","sw_CD" => "Swahili (Congo - Kinshasa)","sw_KE" => "Swahili (Kenya)","sw_TZ" => "Swahili (Tanzania)","sw_UG" => "Swahili (Uganda)","ta" => "Tamil","ta_IN" => "Tamil (India)","ta_LK" => "Tamil (Sri Lanka)","ta_MY" => "Tamil (Malaysia)","ta_SG" => "Tamil (Singapore)","te" => "Telugu","te_IN" => "Telugu (India)","teo" => "Teso","teo_KE" => "Teso (Kenya)","teo_UG" => "Teso (Uganda)","tg" => "Tajik","tg_TJ" => "Tajik (Tajikistan)","th" => "Thai","th_TH" => "Thai (Thailand)","ti" => "Tigrinya","ti_ER" => "Tigrinya (Eritrea)","ti_ET" => "Tigrinya (Ethiopia)","tk" => "Turkmen","tk_TM" => "Turkmen (Turkmenistan)","to" => "Tongan","to_TO" => "Tongan (Tonga)","tr" => "Turkish","tr_CY" => "Turkish (Cyprus)","tr_TR" => "Turkish (Turkey)","twq" => "Tasawaq","twq_NE" => "Tasawaq (Niger)","tzm" => "Central Atlas Tamazight","tzm_MA" => "Central Atlas Tamazight (Morocco)","ug" => "Uyghur","ug_CN" => "Uyghur (China)","uk" => "Ukrainian","uk_UA" => "Ukrainian (Ukraine)","ur" => "Urdu","ur_IN" => "Urdu (India)","ur_PK" => "Urdu (Pakistan)","uz" => "Uzbek","uz_Arab" => "Uzbek (Arabic)","uz_Arab_AF" => "Uzbek (Arabic, Afghanistan)","uz_Cyrl" => "Uzbek (Cyrillic)","uz_Cyrl_UZ" => "Uzbek (Cyrillic, Uzbekistan)","uz_Latn" => "Uzbek (Latin)","uz_Latn_UZ" => "Uzbek (Latin, Uzbekistan)","vai" => "Vai","vai_Latn" => "Vai (Latin)","vai_Latn_LR" => "Vai (Latin, Liberia)","vai_Vaii" => "Vai (Vai)","vai_Vaii_LR" => "Vai (Vai, Liberia)","vi" => "Vietnamese","vi_VN" => "Vietnamese (Vietnam)","vun" => "Vunjo","vun_TZ" => "Vunjo (Tanzania)","wae" => "Walser","wae_CH" => "Walser (Switzerland)","xog" => "Soga","xog_UG" => "Soga (Uganda)","yav" => "Yangben","yav_CM" => "Yangben (Cameroon)","yi" => "Yiddish","yi_001" => "Yiddish (World)","yo" => "Yoruba","yo_BJ" => "Yoruba (Benin)","yo_NG" => "Yoruba (Nigeria)","yue" => "Cantonese","yue_HK" => "Cantonese (Hong Kong [China])","zgh" => "Standard Moroccan Tamazight","zgh_MA" => "Standard Moroccan Tamazight (Morocco)","zh" => "Chinese","zh_Hans" => "Chinese (Simplified)","zh_Hans_CN" => "Chinese (Simplified, China)","zh_Hans_HK" => "Chinese (Simplified, Hong Kong [China])","zh_Hans_MO" => "Chinese (Simplified, Macau [China])","zh_Hans_SG" => "Chinese (Simplified, Singapore)","zh_Hant" => "Chinese (Traditional)","zh_Hant_HK" => "Chinese (Traditional, Hong Kong [China])","zh_Hant_MO" => "Chinese (Traditional, Macau [China])","zh_Hant_TW" => "Chinese (Traditional, Taiwan)","zu" => "Zulu","zu_ZA" => "Zulu (South Africa)"
|
89
|
+
},
|
90
|
+
|
88
91
|
RunLoop::Version.new("9.0") => {
|
89
92
|
"af" => "Afrikaans","af_NA" => "Afrikaans (Namibia)","af_ZA" => "Afrikaans (South Africa)","agq" => "Aghem","agq_CM" => "Aghem (Cameroon)","ak" => "Akan","ak_GH" => "Akan (Ghana)","am" => "Amharic","am_ET" => "Amharic (Ethiopia)","ar" => "Arabic","ar_001" => "Arabic (World)","ar_AE" => "Arabic (United Arab Emirates)","ar_BH" => "Arabic (Bahrain)","ar_DJ" => "Arabic (Djibouti)","ar_DZ" => "Arabic (Algeria)","ar_EG" => "Arabic (Egypt)","ar_EH" => "Arabic (Western Sahara)","ar_ER" => "Arabic (Eritrea)","ar_IL" => "Arabic (Israel)","ar_IQ" => "Arabic (Iraq)","ar_JO" => "Arabic (Jordan)","ar_KM" => "Arabic (Comoros)","ar_KW" => "Arabic (Kuwait)","ar_LB" => "Arabic (Lebanon)","ar_LY" => "Arabic (Libya)","ar_MA" => "Arabic (Morocco)","ar_MR" => "Arabic (Mauritania)","ar_OM" => "Arabic (Oman)","ar_PS" => "Arabic (Palestinian Territories)","ar_QA" => "Arabic (Qatar)","ar_SA" => "Arabic (Saudi Arabia)","ar_SD" => "Arabic (Sudan)","ar_SO" => "Arabic (Somalia)","ar_SS" => "Arabic (South Sudan)","ar_SY" => "Arabic (Syria)","ar_TD" => "Arabic (Chad)","ar_TN" => "Arabic (Tunisia)","ar_YE" => "Arabic (Yemen)","as" => "Assamese","as_IN" => "Assamese (India)","asa" => "Asu","asa_TZ" => "Asu (Tanzania)","az" => "Azerbaijani","az_Cyrl" => "Azerbaijani (Cyrillic)","az_Cyrl_AZ" => "Azerbaijani (Cyrillic, Azerbaijan)","az_Latn" => "Azerbaijani (Latin)","az_Latn_AZ" => "Azerbaijani (Latin, Azerbaijan)","bas" => "Basaa","bas_CM" => "Basaa (Cameroon)","be" => "Belarusian","be_BY" => "Belarusian (Belarus)","bem" => "Bemba","bem_ZM" => "Bemba (Zambia)","bez" => "Bena","bez_TZ" => "Bena (Tanzania)","bg" => "Bulgarian","bg_BG" => "Bulgarian (Bulgaria)","bm" => "Bambara","bm_Latn" => "Bambara (Latin)","bm_Latn_ML" => "Bambara (Latin, Mali)","bn" => "Bengali","bn_BD" => "Bengali (Bangladesh)","bn_IN" => "Bengali (India)","bo" => "Tibetan","bo_CN" => "Tibetan (China)","bo_IN" => "Tibetan (India)","br" => "Breton","br_FR" => "Breton (France)","brx" => "Bodo","brx_IN" => "Bodo (India)","bs" => "Bosnian","bs_Cyrl" => "Bosnian (Cyrillic)","bs_Cyrl_BA" => "Bosnian (Cyrillic, Bosnia & Herzegovina)","bs_Latn" => "Bosnian (Latin)","bs_Latn_BA" => "Bosnian (Latin, Bosnia & Herzegovina)","ca" => "Catalan","ca_AD" => "Catalan (Andorra)","ca_ES" => "Catalan (Spain)","ca_FR" => "Catalan (France)","ca_IT" => "Catalan (Italy)","cgg" => "Chiga","cgg_UG" => "Chiga (Uganda)","chr" => "Cherokee","chr_US" => "Cherokee (United States)","ckb" => "Central Kurdish","ckb_IQ" => "Central Kurdish (Iraq)","ckb_IR" => "Central Kurdish (Iran)","cs" => "Czech","cs_CZ" => "Czech (Czech Republic)","cy" => "Welsh","cy_GB" => "Welsh (United Kingdom)","da" => "Danish","da_DK" => "Danish (Denmark)","da_GL" => "Danish (Greenland)","dav" => "Taita","dav_KE" => "Taita (Kenya)","de" => "German","de_AT" => "German (Austria)","de_BE" => "German (Belgium)","de_CH" => "German (Switzerland)","de_DE" => "German (Germany)","de_LI" => "German (Liechtenstein)","de_LU" => "German (Luxembourg)","dje" => "Zarma","dje_NE" => "Zarma (Niger)","dsb" => "Lower Sorbian","dsb_DE" => "Lower Sorbian (Germany)","dua" => "Duala","dua_CM" => "Duala (Cameroon)","dyo" => "Jola-Fonyi","dyo_SN" => "Jola-Fonyi (Senegal)","dz" => "Dzongkha","dz_BT" => "Dzongkha (Bhutan)","ebu" => "Embu","ebu_KE" => "Embu (Kenya)","ee" => "Ewe","ee_GH" => "Ewe (Ghana)","ee_TG" => "Ewe (Togo)","el" => "Greek","el_CY" => "Greek (Cyprus)","el_GR" => "Greek (Greece)","en" => "English","en_001" => "English (World)","en_150" => "English (Europe)","en_AD" => "English (Andorra)","en_AG" => "English (Antigua & Barbuda)","en_AI" => "English (Anguilla)","en_AL" => "English (Albania)","en_AS" => "English (American Samoa)","en_AT" => "English (Austria)","en_AU" => "English (Australia)","en_BA" => "English (Bosnia & Herzegovina)","en_BB" => "English (Barbados)","en_BE" => "English (Belgium)","en_BM" => "English (Bermuda)","en_BS" => "English (Bahamas)","en_BW" => "English (Botswana)","en_BZ" => "English (Belize)","en_CA" => "English (Canada)","en_CC" => "English (Cocos [Keeling] Islands)","en_CH" => "English (Switzerland)","en_CK" => "English (Cook Islands)","en_CM" => "English (Cameroon)","en_CX" => "English (Christmas Island)","en_CY" => "English (Cyprus)","en_CZ" => "English (Czech Republic)","en_DE" => "English (Germany)","en_DG" => "English (Diego Garcia)","en_DK" => "English (Denmark)","en_DM" => "English (Dominica)","en_EE" => "English (Estonia)","en_ER" => "English (Eritrea)","en_ES" => "English (Spain)","en_FI" => "English (Finland)","en_FJ" => "English (Fiji)","en_FK" => "English (Falkland Islands)","en_FM" => "English (Micronesia)","en_FR" => "English (France)","en_GB" => "English (United Kingdom)","en_GD" => "English (Grenada)","en_GG" => "English (Guernsey)","en_GH" => "English (Ghana)","en_GI" => "English (Gibraltar)","en_GM" => "English (Gambia)","en_GR" => "English (Greece)","en_GU" => "English (Guam)","en_GY" => "English (Guyana)","en_HK" => "English (Hong Kong SAR China)","en_HR" => "English (Croatia)","en_HU" => "English (Hungary)","en_IE" => "English (Ireland)","en_IL" => "English (Israel)","en_IM" => "English (Isle of Man)","en_IN" => "English (India)","en_IO" => "English (British Indian Ocean Territory)","en_IS" => "English (Iceland)","en_IT" => "English (Italy)","en_JE" => "English (Jersey)","en_JM" => "English (Jamaica)","en_KE" => "English (Kenya)","en_KI" => "English (Kiribati)","en_KN" => "English (St. Kitts & Nevis)","en_KY" => "English (Cayman Islands)","en_LC" => "English (St. Lucia)","en_LR" => "English (Liberia)","en_LS" => "English (Lesotho)","en_LT" => "English (Lithuania)","en_LU" => "English (Luxembourg)","en_LV" => "English (Latvia)","en_ME" => "English (Montenegro)","en_MG" => "English (Madagascar)","en_MH" => "English (Marshall Islands)","en_MO" => "English (Macau SAR China)","en_MP" => "English (Northern Mariana Islands)","en_MS" => "English (Montserrat)","en_MT" => "English (Malta)","en_MU" => "English (Mauritius)","en_MW" => "English (Malawi)","en_MY" => "English (Malaysia)","en_NA" => "English (Namibia)","en_NF" => "English (Norfolk Island)","en_NG" => "English (Nigeria)","en_NL" => "English (Netherlands)","en_NO" => "English (Norway)","en_NR" => "English (Nauru)","en_NU" => "English (Niue)","en_NZ" => "English (New Zealand)","en_PG" => "English (Papua New Guinea)","en_PH" => "English (Philippines)","en_PK" => "English (Pakistan)","en_PL" => "English (Poland)","en_PN" => "English (Pitcairn Islands)","en_PR" => "English (Puerto Rico)","en_PT" => "English (Portugal)","en_PW" => "English (Palau)","en_RO" => "English (Romania)","en_RU" => "English (Russia)","en_RW" => "English (Rwanda)","en_SB" => "English (Solomon Islands)","en_SC" => "English (Seychelles)","en_SD" => "English (Sudan)","en_SE" => "English (Sweden)","en_SG" => "English (Singapore)","en_SH" => "English (St. Helena)","en_SI" => "English (Slovenia)","en_SK" => "English (Slovakia)","en_SL" => "English (Sierra Leone)","en_SS" => "English (South Sudan)","en_SX" => "English (Sint Maarten)","en_SZ" => "English (Swaziland)","en_TC" => "English (Turks & Caicos Islands)","en_TK" => "English (Tokelau)","en_TO" => "English (Tonga)","en_TR" => "English (Turkey)","en_TT" => "English (Trinidad & Tobago)","en_TV" => "English (Tuvalu)","en_TZ" => "English (Tanzania)","en_UG" => "English (Uganda)","en_UM" => "English (U.S. Outlying Islands)","en_US" => "English (United States)","en_US_POSIX" => "English (United States, Computer)","en_VC" => "English (St. Vincent & Grenadines)","en_VG" => "English (British Virgin Islands)","en_VI" => "English (U.S. Virgin Islands)","en_VU" => "English (Vanuatu)","en_WS" => "English (Samoa)","en_ZA" => "English (South Africa)","en_ZM" => "English (Zambia)","en_ZW" => "English (Zimbabwe)","eo" => "Esperanto","es" => "Spanish","es_419" => "Spanish (Latin America)","es_AR" => "Spanish (Argentina)","es_BO" => "Spanish (Bolivia)","es_CL" => "Spanish (Chile)","es_CO" => "Spanish (Colombia)","es_CR" => "Spanish (Costa Rica)","es_CU" => "Spanish (Cuba)","es_DO" => "Spanish (Dominican Republic)","es_EA" => "Spanish (Ceuta & Melilla)","es_EC" => "Spanish (Ecuador)","es_ES" => "Spanish (Spain)","es_GQ" => "Spanish (Equatorial Guinea)","es_GT" => "Spanish (Guatemala)","es_HN" => "Spanish (Honduras)","es_IC" => "Spanish (Canary Islands)","es_MX" => "Spanish (Mexico)","es_NI" => "Spanish (Nicaragua)","es_PA" => "Spanish (Panama)","es_PE" => "Spanish (Peru)","es_PH" => "Spanish (Philippines)","es_PR" => "Spanish (Puerto Rico)","es_PY" => "Spanish (Paraguay)","es_SV" => "Spanish (El Salvador)","es_US" => "Spanish (United States)","es_UY" => "Spanish (Uruguay)","es_VE" => "Spanish (Venezuela)","et" => "Estonian","et_EE" => "Estonian (Estonia)","eu" => "Basque","eu_ES" => "Basque (Spain)","ewo" => "Ewondo","ewo_CM" => "Ewondo (Cameroon)","fa" => "Persian","fa_AF" => "Persian (Afghanistan)","fa_IR" => "Persian (Iran)","ff" => "Fulah","ff_CM" => "Fulah (Cameroon)","ff_GN" => "Fulah (Guinea)","ff_MR" => "Fulah (Mauritania)","ff_SN" => "Fulah (Senegal)","fi" => "Finnish","fi_FI" => "Finnish (Finland)","fil" => "Filipino","fil_PH" => "Filipino (Philippines)","fo" => "Faroese","fo_FO" => "Faroese (Faroe Islands)","fr" => "French","fr_BE" => "French (Belgium)","fr_BF" => "French (Burkina Faso)","fr_BI" => "French (Burundi)","fr_BJ" => "French (Benin)","fr_BL" => "French (St. Barthélemy)","fr_CA" => "French (Canada)","fr_CD" => "French (Congo - Kinshasa)","fr_CF" => "French (Central African Republic)","fr_CG" => "French (Congo - Brazzaville)","fr_CH" => "French (Switzerland)","fr_CI" => "French (Côte d’Ivoire)","fr_CM" => "French (Cameroon)","fr_DJ" => "French (Djibouti)","fr_DZ" => "French (Algeria)","fr_FR" => "French (France)","fr_GA" => "French (Gabon)","fr_GF" => "French (French Guiana)","fr_GN" => "French (Guinea)","fr_GP" => "French (Guadeloupe)","fr_GQ" => "French (Equatorial Guinea)","fr_HT" => "French (Haiti)","fr_KM" => "French (Comoros)","fr_LU" => "French (Luxembourg)","fr_MA" => "French (Morocco)","fr_MC" => "French (Monaco)","fr_MF" => "French (St. Martin)","fr_MG" => "French (Madagascar)","fr_ML" => "French (Mali)","fr_MQ" => "French (Martinique)","fr_MR" => "French (Mauritania)","fr_MU" => "French (Mauritius)","fr_NC" => "French (New Caledonia)","fr_NE" => "French (Niger)","fr_PF" => "French (French Polynesia)","fr_PM" => "French (St. Pierre & Miquelon)","fr_RE" => "French (Réunion)","fr_RW" => "French (Rwanda)","fr_SC" => "French (Seychelles)","fr_SN" => "French (Senegal)","fr_SY" => "French (Syria)","fr_TD" => "French (Chad)","fr_TG" => "French (Togo)","fr_TN" => "French (Tunisia)","fr_VU" => "French (Vanuatu)","fr_WF" => "French (Wallis & Futuna)","fr_YT" => "French (Mayotte)","fur" => "Friulian","fur_IT" => "Friulian (Italy)","fy" => "Western Frisian","fy_NL" => "Western Frisian (Netherlands)","ga" => "Irish","ga_IE" => "Irish (Ireland)","gd" => "Scottish Gaelic","gd_GB" => "Scottish Gaelic (United Kingdom)","gl" => "Galician","gl_ES" => "Galician (Spain)","gsw" => "Swiss German","gsw_CH" => "Swiss German (Switzerland)","gsw_FR" => "Swiss German (France)","gsw_LI" => "Swiss German (Liechtenstein)","gu" => "Gujarati","gu_IN" => "Gujarati (India)","guz" => "Gusii","guz_KE" => "Gusii (Kenya)","gv" => "Manx","gv_IM" => "Manx (Isle of Man)","ha" => "Hausa","ha_Latn" => "Hausa (Latin)","ha_Latn_GH" => "Hausa (Latin, Ghana)","ha_Latn_NE" => "Hausa (Latin, Niger)","ha_Latn_NG" => "Hausa (Latin, Nigeria)","haw" => "Hawaiian","haw_US" => "Hawaiian (United States)","he" => "Hebrew","he_IL" => "Hebrew (Israel)","hi" => "Hindi","hi_IN" => "Hindi (India)","hr" => "Croatian","hr_BA" => "Croatian (Bosnia & Herzegovina)","hr_HR" => "Croatian (Croatia)","hsb" => "Upper Sorbian","hsb_DE" => "Upper Sorbian (Germany)","hu" => "Hungarian","hu_HU" => "Hungarian (Hungary)","hy" => "Armenian","hy_AM" => "Armenian (Armenia)","id" => "Indonesian","id_ID" => "Indonesian (Indonesia)","ig" => "Igbo","ig_NG" => "Igbo (Nigeria)","ii" => "Sichuan Yi","ii_CN" => "Sichuan Yi (China)","is" => "Icelandic","is_IS" => "Icelandic (Iceland)","it" => "Italian","it_CH" => "Italian (Switzerland)","it_IT" => "Italian (Italy)","it_SM" => "Italian (San Marino)","iu" => "Inuktitut","iu_Cans" => "Inuktitut (Unified Canadian Aboriginal Syllabics)","iu_Cans_CA" => "Inuktitut (Unified Canadian Aboriginal Syllabics, Canada)","ja" => "Japanese","ja_JP" => "Japanese (Japan)","jgo" => "Ngomba","jgo_CM" => "Ngomba (Cameroon)","jmc" => "Machame","jmc_TZ" => "Machame (Tanzania)","ka" => "Georgian","ka_GE" => "Georgian (Georgia)","kab" => "Kabyle","kab_DZ" => "Kabyle (Algeria)","kam" => "Kamba","kam_KE" => "Kamba (Kenya)","kde" => "Makonde","kde_TZ" => "Makonde (Tanzania)","kea" => "Kabuverdianu","kea_CV" => "Kabuverdianu (Cape Verde)","khq" => "Koyra Chiini","khq_ML" => "Koyra Chiini (Mali)","ki" => "Kikuyu","ki_KE" => "Kikuyu (Kenya)","kk" => "Kazakh","kk_Cyrl" => "Kazakh (Cyrillic)","kk_Cyrl_KZ" => "Kazakh (Cyrillic, Kazakhstan)","kkj" => "Kako","kkj_CM" => "Kako (Cameroon)","kl" => "Kalaallisut","kl_GL" => "Kalaallisut (Greenland)","kln" => "Kalenjin","kln_KE" => "Kalenjin (Kenya)","km" => "Khmer","km_KH" => "Khmer (Cambodia)","kn" => "Kannada","kn_IN" => "Kannada (India)","ko" => "Korean","ko_KP" => "Korean (North Korea)","ko_KR" => "Korean (South Korea)","kok" => "Konkani","kok_IN" => "Konkani (India)","ks" => "Kashmiri","ks_Arab" => "Kashmiri (Arabic)","ks_Arab_IN" => "Kashmiri (Arabic, India)","ksb" => "Shambala","ksb_TZ" => "Shambala (Tanzania)","ksf" => "Bafia","ksf_CM" => "Bafia (Cameroon)","ksh" => "Colognian","ksh_DE" => "Colognian (Germany)","kw" => "Cornish","kw_GB" => "Cornish (United Kingdom)","ky" => "Kyrgyz","ky_Cyrl" => "Kyrgyz (Cyrillic)","ky_Cyrl_KG" => "Kyrgyz (Cyrillic, Kyrgyzstan)","lag" => "Langi","lag_TZ" => "Langi (Tanzania)","lb" => "Luxembourgish","lb_LU" => "Luxembourgish (Luxembourg)","lg" => "Ganda","lg_UG" => "Ganda (Uganda)","lkt" => "Lakota","lkt_US" => "Lakota (United States)","ln" => "Lingala","ln_AO" => "Lingala (Angola)","ln_CD" => "Lingala (Congo - Kinshasa)","ln_CF" => "Lingala (Central African Republic)","ln_CG" => "Lingala (Congo - Brazzaville)","lo" => "Lao","lo_LA" => "Lao (Laos)","lt" => "Lithuanian","lt_LT" => "Lithuanian (Lithuania)","lu" => "Luba-Katanga","lu_CD" => "Luba-Katanga (Congo - Kinshasa)","luo" => "Luo","luo_KE" => "Luo (Kenya)","luy" => "Luyia","luy_KE" => "Luyia (Kenya)","lv" => "Latvian","lv_LV" => "Latvian (Latvia)","mas" => "Masai","mas_KE" => "Masai (Kenya)","mas_TZ" => "Masai (Tanzania)","mer" => "Meru","mer_KE" => "Meru (Kenya)","mfe" => "Morisyen","mfe_MU" => "Morisyen (Mauritius)","mg" => "Malagasy","mg_MG" => "Malagasy (Madagascar)","mgh" => "Makhuwa-Meetto","mgh_MZ" => "Makhuwa-Meetto (Mozambique)","mgo" => "Metaʼ","mgo_CM" => "Metaʼ (Cameroon)","mk" => "Macedonian","mk_MK" => "Macedonian (Macedonia)","ml" => "Malayalam","ml_IN" => "Malayalam (India)","mn" => "Mongolian","mn_Cyrl" => "Mongolian (Cyrillic)","mn_Cyrl_MN" => "Mongolian (Cyrillic, Mongolia)","mr" => "Marathi","mr_IN" => "Marathi (India)","ms" => "Malay","ms_Arab" => "Malay (Arabic)","ms_Arab_BN" => "Malay (Arabic, Brunei)","ms_Arab_MY" => "Malay (Arabic, Malaysia)","ms_Latn" => "Malay (Latin)","ms_Latn_BN" => "Malay (Latin, Brunei)","ms_Latn_MY" => "Malay (Latin, Malaysia)","ms_Latn_SG" => "Malay (Latin, Singapore)","mt" => "Maltese","mt_MT" => "Maltese (Malta)","mua" => "Mundang","mua_CM" => "Mundang (Cameroon)","my" => "Burmese","my_MM" => "Burmese (Myanmar [Burma])","naq" => "Nama","naq_NA" => "Nama (Namibia)","nb" => "Norwegian Bokmål","nb_NO" => "Norwegian Bokmål (Norway)","nb_SJ" => "Norwegian Bokmål (Svalbard & Jan Mayen)","nd" => "North Ndebele","nd_ZW" => "North Ndebele (Zimbabwe)","ne" => "Nepali","ne_IN" => "Nepali (India)","ne_NP" => "Nepali (Nepal)","nl" => "Dutch","nl_AW" => "Dutch (Aruba)","nl_BE" => "Dutch (Belgium)","nl_BQ" => "Dutch (Caribbean Netherlands)","nl_CW" => "Dutch (Curaçao)","nl_NL" => "Dutch (Netherlands)","nl_SR" => "Dutch (Suriname)","nl_SX" => "Dutch (Sint Maarten)","nmg" => "Kwasio","nmg_CM" => "Kwasio (Cameroon)","nn" => "Norwegian Nynorsk","nn_NO" => "Norwegian Nynorsk (Norway)","nnh" => "Ngiemboon","nnh_CM" => "Ngiemboon (Cameroon)","nus" => "Nuer","nus_SD" => "Nuer (Sudan)","nyn" => "Nyankole","nyn_UG" => "Nyankole (Uganda)","om" => "Oromo","om_ET" => "Oromo (Ethiopia)","om_KE" => "Oromo (Kenya)","or" => "Oriya","or_IN" => "Oriya (India)","os" => "Ossetic","os_GE" => "Ossetic (Georgia)","os_RU" => "Ossetic (Russia)","pa" => "Punjabi","pa_Arab" => "Punjabi (Arabic)","pa_Arab_PK" => "Punjabi (Arabic, Pakistan)","pa_Guru" => "Punjabi (Gurmukhi)","pa_Guru_IN" => "Punjabi (Gurmukhi, India)","pl" => "Polish","pl_PL" => "Polish (Poland)","ps" => "Pashto","ps_AF" => "Pashto (Afghanistan)","pt" => "Portuguese","pt_AO" => "Portuguese (Angola)","pt_BR" => "Portuguese (Brazil)","pt_CV" => "Portuguese (Cape Verde)","pt_GW" => "Portuguese (Guinea-Bissau)","pt_MO" => "Portuguese (Macau SAR China)","pt_MZ" => "Portuguese (Mozambique)","pt_PT" => "Portuguese (Portugal)","pt_ST" => "Portuguese (São Tomé & Príncipe)","pt_TL" => "Portuguese (Timor-Leste)","qu" => "Quechua","qu_BO" => "Quechua (Bolivia)","qu_EC" => "Quechua (Ecuador)","qu_PE" => "Quechua (Peru)","rm" => "Romansh","rm_CH" => "Romansh (Switzerland)","rn" => "Rundi","rn_BI" => "Rundi (Burundi)","ro" => "Romanian","ro_MD" => "Romanian (Moldova)","ro_RO" => "Romanian (Romania)","rof" => "Rombo","rof_TZ" => "Rombo (Tanzania)","ru" => "Russian","ru_BY" => "Russian (Belarus)","ru_KG" => "Russian (Kyrgyzstan)","ru_KZ" => "Russian (Kazakhstan)","ru_MD" => "Russian (Moldova)","ru_RU" => "Russian (Russia)","ru_UA" => "Russian (Ukraine)","rw" => "Kinyarwanda","rw_RW" => "Kinyarwanda (Rwanda)","rwk" => "Rwa","rwk_TZ" => "Rwa (Tanzania)","sah" => "Sakha","sah_RU" => "Sakha (Russia)","saq" => "Samburu","saq_KE" => "Samburu (Kenya)","sbp" => "Sangu","sbp_TZ" => "Sangu (Tanzania)","se" => "Northern Sami","se_FI" => "Northern Sami (Finland)","se_NO" => "Northern Sami (Norway)","se_SE" => "Northern Sami (Sweden)","seh" => "Sena","seh_MZ" => "Sena (Mozambique)","ses" => "Koyraboro Senni","ses_ML" => "Koyraboro Senni (Mali)","sg" => "Sango","sg_CF" => "Sango (Central African Republic)","shi" => "Tachelhit","shi_Latn" => "Tachelhit (Latin)","shi_Latn_MA" => "Tachelhit (Latin, Morocco)","shi_Tfng" => "Tachelhit (Tifinagh)","shi_Tfng_MA" => "Tachelhit (Tifinagh, Morocco)","si" => "Sinhala","si_LK" => "Sinhala (Sri Lanka)","sk" => "Slovak","sk_SK" => "Slovak (Slovakia)","sl" => "Slovenian","sl_SI" => "Slovenian (Slovenia)","smn" => "Inari Sami","smn_FI" => "Inari Sami (Finland)","sn" => "Shona","sn_ZW" => "Shona (Zimbabwe)","so" => "Somali","so_DJ" => "Somali (Djibouti)","so_ET" => "Somali (Ethiopia)","so_KE" => "Somali (Kenya)","so_SO" => "Somali (Somalia)","sq" => "Albanian","sq_AL" => "Albanian (Albania)","sq_MK" => "Albanian (Macedonia)","sq_XK" => "Albanian (Kosovo)","sr" => "Serbian","sr_Cyrl" => "Serbian (Cyrillic)","sr_Cyrl_BA" => "Serbian (Cyrillic, Bosnia & Herzegovina)","sr_Cyrl_ME" => "Serbian (Cyrillic, Montenegro)","sr_Cyrl_RS" => "Serbian (Cyrillic, Serbia)","sr_Cyrl_XK" => "Serbian (Cyrillic, Kosovo)","sr_Latn" => "Serbian (Latin)","sr_Latn_BA" => "Serbian (Latin, Bosnia & Herzegovina)","sr_Latn_ME" => "Serbian (Latin, Montenegro)","sr_Latn_RS" => "Serbian (Latin, Serbia)","sr_Latn_XK" => "Serbian (Latin, Kosovo)","sv" => "Swedish","sv_AX" => "Swedish (Åland Islands)","sv_FI" => "Swedish (Finland)","sv_SE" => "Swedish (Sweden)","sw" => "Swahili","sw_CD" => "Swahili (Congo - Kinshasa)","sw_KE" => "Swahili (Kenya)","sw_TZ" => "Swahili (Tanzania)","sw_UG" => "Swahili (Uganda)","ta" => "Tamil","ta_IN" => "Tamil (India)","ta_LK" => "Tamil (Sri Lanka)","ta_MY" => "Tamil (Malaysia)","ta_SG" => "Tamil (Singapore)","te" => "Telugu","te_IN" => "Telugu (India)","teo" => "Teso","teo_KE" => "Teso (Kenya)","teo_UG" => "Teso (Uganda)","tg" => "Tajik","tg_Cyrl" => "Tajik (Cyrillic)","tg_Cyrl_TJ" => "Tajik (Cyrillic, Tajikistan)","th" => "Thai","th_TH" => "Thai (Thailand)","ti" => "Tigrinya","ti_ER" => "Tigrinya (Eritrea)","ti_ET" => "Tigrinya (Ethiopia)","tk" => "Turkmen","tk_Latn" => "Turkmen (Latin)","tk_Latn_TM" => "Turkmen (Latin, Turkmenistan)","to" => "Tongan","to_TO" => "Tongan (Tonga)","tr" => "Turkish","tr_CY" => "Turkish (Cyprus)","tr_TR" => "Turkish (Turkey)","twq" => "Tasawaq","twq_NE" => "Tasawaq (Niger)","tzm" => "Central Atlas Tamazight","tzm_Latn" => "Central Atlas Tamazight (Latin)","tzm_Latn_MA" => "Central Atlas Tamazight (Latin, Morocco)","ug" => "Uyghur","ug_Arab" => "Uyghur (Arabic)","ug_Arab_CN" => "Uyghur (Arabic, China)","uk" => "Ukrainian","uk_UA" => "Ukrainian (Ukraine)","ur" => "Urdu","ur_IN" => "Urdu (India)","ur_PK" => "Urdu (Pakistan)","uz" => "Uzbek","uz_Arab" => "Uzbek (Arabic)","uz_Arab_AF" => "Uzbek (Arabic, Afghanistan)","uz_Cyrl" => "Uzbek (Cyrillic)","uz_Cyrl_UZ" => "Uzbek (Cyrillic, Uzbekistan)","uz_Latn" => "Uzbek (Latin)","uz_Latn_UZ" => "Uzbek (Latin, Uzbekistan)","vai" => "Vai","vai_Latn" => "Vai (Latin)","vai_Latn_LR" => "Vai (Latin, Liberia)","vai_Vaii" => "Vai (Vai)","vai_Vaii_LR" => "Vai (Vai, Liberia)","vi" => "Vietnamese","vi_VN" => "Vietnamese (Vietnam)","vun" => "Vunjo","vun_TZ" => "Vunjo (Tanzania)","wae" => "Walser","wae_CH" => "Walser (Switzerland)","xog" => "Soga","xog_UG" => "Soga (Uganda)","yav" => "Yangben","yav_CM" => "Yangben (Cameroon)","yi" => "Yiddish","yi_001" => "Yiddish (World)","yo" => "Yoruba","yo_BJ" => "Yoruba (Benin)","yo_NG" => "Yoruba (Nigeria)","zgh" => "Standard Moroccan Tamazight","zgh_MA" => "Standard Moroccan Tamazight (Morocco)","zh" => "Chinese","zh_Hans" => "Chinese (Simplified)","zh_Hans_CN" => "Chinese (Simplified, China)","zh_Hans_HK" => "Chinese (Simplified, Hong Kong SAR China)","zh_Hans_MO" => "Chinese (Simplified, Macau SAR China)","zh_Hans_SG" => "Chinese (Simplified, Singapore)","zh_Hant" => "Chinese (Traditional)","zh_Hant_HK" => "Chinese (Traditional, Hong Kong SAR China)","zh_Hant_MO" => "Chinese (Traditional, Macau SAR China)","zh_Hant_TW" => "Chinese (Traditional, Taiwan)","zu" => "Zulu","zu_ZA" => "Zulu (South Africa)"
|
90
93
|
},
|
data/lib/run_loop/otool.rb
CHANGED
@@ -101,7 +101,7 @@ module RunLoop
|
|
101
101
|
# @!visibility private
|
102
102
|
# The details of the process reported by `ps`.
|
103
103
|
def ps_details
|
104
|
-
`
|
104
|
+
`ps -p #{pid} -o pid,comm | grep #{pid}`.strip
|
105
105
|
end
|
106
106
|
|
107
107
|
# @!visibility private
|
data/lib/run_loop/shell.rb
CHANGED
@@ -5,7 +5,7 @@ module RunLoop
|
|
5
5
|
require "run_loop/encoding"
|
6
6
|
include RunLoop::Encoding
|
7
7
|
|
8
|
-
# Controls the behavior of Shell#
|
8
|
+
# Controls the behavior of Shell#run_shell_command.
|
9
9
|
#
|
10
10
|
# You can override these values if they do not work in your environment.
|
11
11
|
#
|
@@ -26,7 +26,7 @@ module RunLoop
|
|
26
26
|
# Raised when shell command times out.
|
27
27
|
class TimeoutError < RuntimeError; end
|
28
28
|
|
29
|
-
def
|
29
|
+
def run_shell_command(args, options={})
|
30
30
|
|
31
31
|
merged_options = DEFAULT_OPTIONS.merge(options)
|
32
32
|
|
data/lib/run_loop/sim_control.rb
CHANGED
@@ -153,10 +153,10 @@ module RunLoop
|
|
153
153
|
# @todo Maybe should try to send -TERM first and -KILL if TERM fails.
|
154
154
|
# @todo Needs benchmarking.
|
155
155
|
processes.each do |process_name|
|
156
|
-
descripts = `
|
156
|
+
descripts = `ps x -o pid,command | grep "#{process_name}" | grep -v grep`.strip.split("\n")
|
157
157
|
descripts.each do |process_desc|
|
158
158
|
pid = process_desc.split(' ').first
|
159
|
-
Open3.popen3("
|
159
|
+
Open3.popen3("kill -9 #{pid} && xcrun wait #{pid}") do |_, stdout, stderr, _|
|
160
160
|
if ENV['DEBUG_UNIX_CALLS'] == '1'
|
161
161
|
out = stdout.read.strip
|
162
162
|
err = stderr.read.strip
|
@@ -601,7 +601,7 @@ module RunLoop
|
|
601
601
|
# @return [String, nil] The pid as a String or nil if no process is found.
|
602
602
|
def sim_pid
|
603
603
|
process_name = "MacOS/#{sim_name}"
|
604
|
-
`
|
604
|
+
`ps x -o pid,command | grep "#{process_name}" | grep -v grep`.strip.split(' ').first
|
605
605
|
end
|
606
606
|
|
607
607
|
# @!visibility private
|
@@ -1137,7 +1137,7 @@ module RunLoop
|
|
1137
1137
|
# @see #simctl_list
|
1138
1138
|
def simctl_list_devices
|
1139
1139
|
args = ['simctl', 'list', 'devices']
|
1140
|
-
hash = xcrun.
|
1140
|
+
hash = xcrun.run_command_in_context(args)
|
1141
1141
|
|
1142
1142
|
current_sdk = nil
|
1143
1143
|
simulators = {}
|
@@ -1220,7 +1220,7 @@ module RunLoop
|
|
1220
1220
|
# @see #simctl_list
|
1221
1221
|
def simctl_list_runtimes
|
1222
1222
|
args = ['simctl', 'list', 'runtimes']
|
1223
|
-
hash = xcrun.
|
1223
|
+
hash = xcrun.run_command_in_context(args)
|
1224
1224
|
|
1225
1225
|
# Ex.
|
1226
1226
|
# == Runtimes ==
|
data/lib/run_loop/simctl.rb
CHANGED
@@ -115,7 +115,7 @@ module RunLoop
|
|
115
115
|
# @!visibility private
|
116
116
|
def execute(array, options)
|
117
117
|
merged = DEFAULTS.merge(options)
|
118
|
-
xcrun.
|
118
|
+
xcrun.run_command_in_context(array, merged)
|
119
119
|
end
|
120
120
|
|
121
121
|
# @!visibility private
|
@@ -272,4 +272,4 @@ is not an iOS, tvOS, or watchOS device"
|
|
272
272
|
@sim_control ||= RunLoop::SimControl.new
|
273
273
|
end
|
274
274
|
end
|
275
|
-
end
|
275
|
+
end
|
data/lib/run_loop/strings.rb
CHANGED
data/lib/run_loop/version.rb
CHANGED
data/lib/run_loop/xcode.rb
CHANGED
@@ -24,6 +24,14 @@ module RunLoop
|
|
24
24
|
to_s
|
25
25
|
end
|
26
26
|
|
27
|
+
# Returns a version instance for `Xcode 8.0`; used to check for the
|
28
|
+
# availability of features and paths to various items on the filesystem.
|
29
|
+
#
|
30
|
+
# @return [RunLoop::Version] 8.0
|
31
|
+
def v80
|
32
|
+
fetch_version(:v80)
|
33
|
+
end
|
34
|
+
|
27
35
|
# Returns a version instance for `Xcode 7.3`; used to check for the
|
28
36
|
# availability of features and paths to various items on the filesystem.
|
29
37
|
#
|
@@ -112,6 +120,13 @@ module RunLoop
|
|
112
120
|
fetch_version(:v50)
|
113
121
|
end
|
114
122
|
|
123
|
+
# Is the active Xcode version 8.0 or above?
|
124
|
+
#
|
125
|
+
# @return [Boolean] `true` if the current Xcode version is >= 8.0
|
126
|
+
def version_gte_8?
|
127
|
+
version >= v80
|
128
|
+
end
|
129
|
+
|
115
130
|
# Is the active Xcode version 7.3 or above?
|
116
131
|
#
|
117
132
|
# @return [Boolean] `true` if the current Xcode version is >= 7.3
|
data/lib/run_loop/xcrun.rb
CHANGED
@@ -5,7 +5,7 @@ module RunLoop
|
|
5
5
|
require "run_loop/encoding"
|
6
6
|
include RunLoop::Encoding
|
7
7
|
|
8
|
-
# Controls the behavior of Xcrun#
|
8
|
+
# Controls the behavior of Xcrun#run_command_in_context.
|
9
9
|
#
|
10
10
|
# You can override these values if they do not work in your environment.
|
11
11
|
#
|
@@ -26,8 +26,8 @@ module RunLoop
|
|
26
26
|
# Raised when Xcrun times out.
|
27
27
|
class TimeoutError < RuntimeError; end
|
28
28
|
|
29
|
-
|
30
|
-
|
29
|
+
# Aliased to #exec, which will be removed in 3.0
|
30
|
+
def run_command_in_context(args, options={})
|
31
31
|
merged_options = DEFAULT_OPTIONS.merge(options)
|
32
32
|
|
33
33
|
timeout = merged_options[:timeout]
|
@@ -98,6 +98,10 @@ with a timeout of #{timeout}
|
|
98
98
|
|
99
99
|
hash
|
100
100
|
end
|
101
|
+
|
102
|
+
# TODO Remove in 3.0
|
103
|
+
# https://github.com/calabash/run_loop/issues/478
|
104
|
+
alias_method :exec, :run_command_in_context
|
101
105
|
end
|
102
106
|
end
|
103
107
|
|
data/lib/run_loop/xcuitest.rb
CHANGED
@@ -6,6 +6,11 @@ module RunLoop
|
|
6
6
|
require "run_loop/shell"
|
7
7
|
include RunLoop::Shell
|
8
8
|
|
9
|
+
require "run_loop/encoding"
|
10
|
+
include RunLoop::Encoding
|
11
|
+
|
12
|
+
require "run_loop/cache"
|
13
|
+
|
9
14
|
class HTTPError < RuntimeError; end
|
10
15
|
|
11
16
|
# @!visibility private
|
@@ -23,7 +28,7 @@ module RunLoop
|
|
23
28
|
xcode = options[:xcode] || RunLoop::Xcode.new
|
24
29
|
instruments = options[:instruments] || RunLoop::Instruments.new
|
25
30
|
|
26
|
-
# Find the Device under test, the App under test,
|
31
|
+
# Find the Device under test, the App under test, and reset options.
|
27
32
|
device = RunLoop::Device.detect_device(options, xcode, simctl, instruments)
|
28
33
|
app_details = RunLoop::DetectAUT.detect_app_under_test(options)
|
29
34
|
reset_options = RunLoop::Core.send(:detect_reset_options, options)
|
@@ -45,6 +50,16 @@ module RunLoop
|
|
45
50
|
|
46
51
|
xcuitest = RunLoop::XCUITest.new(bundle_id, device, cbx_launcher)
|
47
52
|
xcuitest.launch
|
53
|
+
|
54
|
+
if !RunLoop::Environment.xtc?
|
55
|
+
cache = {
|
56
|
+
:cbx_launcher => cbx_launcher.name,
|
57
|
+
:udid => device.udid,
|
58
|
+
:app => bundle_id,
|
59
|
+
:gesture_performer => :device_agent
|
60
|
+
}
|
61
|
+
RunLoop::Cache.default.write(cache)
|
62
|
+
end
|
48
63
|
xcuitest
|
49
64
|
end
|
50
65
|
|
@@ -52,7 +67,7 @@ module RunLoop
|
|
52
67
|
#
|
53
68
|
# @param [RunLoop::Device] device the device under test
|
54
69
|
def self.default_cbx_launcher(device)
|
55
|
-
RunLoop::DeviceAgent::
|
70
|
+
RunLoop::DeviceAgent::IOSDeviceManager.new(device)
|
56
71
|
end
|
57
72
|
|
58
73
|
# @!visibility private
|
@@ -63,11 +78,11 @@ module RunLoop
|
|
63
78
|
if value
|
64
79
|
if value == :xcodebuild
|
65
80
|
RunLoop::DeviceAgent::Xcodebuild.new(device)
|
66
|
-
elsif value == :
|
67
|
-
RunLoop::DeviceAgent::
|
81
|
+
elsif value == :ios_device_manager
|
82
|
+
RunLoop::DeviceAgent::IOSDeviceManager.new(device)
|
68
83
|
else
|
69
84
|
raise(ArgumentError,
|
70
|
-
"Expected :cbx_launcher => #{value} to be :xcodebuild or :
|
85
|
+
"Expected :cbx_launcher => #{value} to be :xcodebuild or :ios_device_manager")
|
71
86
|
end
|
72
87
|
else
|
73
88
|
XCUITest.default_cbx_launcher(device)
|
@@ -81,7 +96,9 @@ module RunLoop
|
|
81
96
|
# The app with `bundle_id` needs to be installed.
|
82
97
|
#
|
83
98
|
# @param [String] bundle_id The identifier of the app under test.
|
84
|
-
# @param [RunLoop::Device] device The device
|
99
|
+
# @param [RunLoop::Device] device The device under test.
|
100
|
+
# @param [RunLoop::DeviceAgent::Launcher] cbx_launcher The entity that
|
101
|
+
# launches the CBXRunner.
|
85
102
|
def initialize(bundle_id, device, cbx_launcher)
|
86
103
|
@bundle_id = bundle_id
|
87
104
|
@device = device
|
@@ -140,6 +157,45 @@ module RunLoop
|
|
140
157
|
expect_200_response(response)
|
141
158
|
end
|
142
159
|
|
160
|
+
# @!visibility private
|
161
|
+
def tree
|
162
|
+
options = http_options
|
163
|
+
request = request("tree")
|
164
|
+
client = client(options)
|
165
|
+
response = client.get(request)
|
166
|
+
expect_200_response(response)
|
167
|
+
end
|
168
|
+
|
169
|
+
# @!visibility private
|
170
|
+
def keyboard_visible?
|
171
|
+
options = http_options
|
172
|
+
parameters = { :type => "Keyboard" }
|
173
|
+
request = request("query", parameters)
|
174
|
+
client = client(options)
|
175
|
+
response = client.post(request)
|
176
|
+
hash = expect_200_response(response)
|
177
|
+
result = hash["result"]
|
178
|
+
result.count != 0
|
179
|
+
end
|
180
|
+
|
181
|
+
# @!visibility private
|
182
|
+
def enter_text(string)
|
183
|
+
if !keyboard_visible?
|
184
|
+
raise RuntimeError, "Keyboard must be visible"
|
185
|
+
end
|
186
|
+
options = http_options
|
187
|
+
parameters = {
|
188
|
+
:gesture => "enter_text",
|
189
|
+
:options => {
|
190
|
+
:string => string
|
191
|
+
}
|
192
|
+
}
|
193
|
+
request = request("gesture", parameters)
|
194
|
+
client = client(options)
|
195
|
+
response = client.post(request)
|
196
|
+
expect_200_response(response)
|
197
|
+
end
|
198
|
+
|
143
199
|
# @!visibility private
|
144
200
|
def query(mark)
|
145
201
|
options = http_options
|
@@ -157,46 +213,29 @@ module RunLoop
|
|
157
213
|
end
|
158
214
|
|
159
215
|
# @!visibility private
|
160
|
-
def
|
216
|
+
def touch(mark, options={})
|
161
217
|
coordinate = query_for_coordinate(mark)
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
# @!visibility private
|
166
|
-
def tap_coordinate(x, y, options)
|
167
|
-
make_coordinate_gesture_request("touch", x, y)
|
168
|
-
end
|
169
|
-
|
170
|
-
# @!visibility private
|
171
|
-
def double_tap(x, y)
|
172
|
-
make_coordinate_gesture_request("double_tap", x, y)
|
218
|
+
perform_coordinate_gesture("touch",
|
219
|
+
coordinate[:x], coordinate[:y],
|
220
|
+
options)
|
173
221
|
end
|
174
222
|
|
175
|
-
|
176
|
-
def coordinate_gesture_parameters(name, x, y, options={})
|
177
|
-
{
|
178
|
-
:gesture => name,
|
179
|
-
:specifiers => {
|
180
|
-
:coordinate => [x, y]
|
181
|
-
},
|
182
|
-
:options => options
|
183
|
-
}
|
184
|
-
end
|
223
|
+
alias_method :tap, :touch
|
185
224
|
|
186
225
|
# @!visibility private
|
187
|
-
def
|
188
|
-
|
189
|
-
|
226
|
+
def double_tap(mark, options={})
|
227
|
+
coordinate = query_for_coordinate(mark)
|
228
|
+
perform_coordinate_gesture("double_tap",
|
229
|
+
coordinate[:x], coordinate[:y],
|
230
|
+
options)
|
190
231
|
end
|
191
232
|
|
192
233
|
# @!visibility private
|
193
|
-
def
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
response = client.post(request)
|
199
|
-
expect_200_response(response)
|
234
|
+
def two_finger_tap(mark, options={})
|
235
|
+
coordinate = query_for_coordinate(mark)
|
236
|
+
perform_coordinate_gesture("two_finger_tap",
|
237
|
+
coordinate[:x], coordinate[:y],
|
238
|
+
options)
|
200
239
|
end
|
201
240
|
|
202
241
|
# @!visibility private
|
@@ -265,6 +304,22 @@ Sending request to perform '#{gesture}' with:
|
|
265
304
|
:y => touchy}
|
266
305
|
end
|
267
306
|
|
307
|
+
|
308
|
+
# @!visibility private
|
309
|
+
def change_volume(up_or_down)
|
310
|
+
string = up_or_down.to_s
|
311
|
+
parameters = {
|
312
|
+
:volume => string
|
313
|
+
}
|
314
|
+
request = request("volume", parameters)
|
315
|
+
client = client(http_options)
|
316
|
+
response = client.post(request)
|
317
|
+
json = expect_200_response(response)
|
318
|
+
# Set in the route
|
319
|
+
sleep(0.2)
|
320
|
+
json
|
321
|
+
end
|
322
|
+
|
268
323
|
private
|
269
324
|
|
270
325
|
# @!visibility private
|
@@ -274,27 +329,63 @@ Sending request to perform '#{gesture}' with:
|
|
274
329
|
|
275
330
|
# @!visibility private
|
276
331
|
def url
|
277
|
-
@url ||=
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
end
|
332
|
+
@url ||= detect_device_agent_url
|
333
|
+
end
|
334
|
+
|
335
|
+
# @!visibility private
|
336
|
+
def detect_device_agent_url
|
337
|
+
url_from_environment ||
|
338
|
+
url_for_simulator ||
|
339
|
+
url_from_device_endpoint ||
|
340
|
+
url_from_device_name
|
341
|
+
end
|
342
|
+
|
343
|
+
# @!visibility private
|
344
|
+
def url_from_environment
|
345
|
+
url = RunLoop::Environment.device_agent_url
|
346
|
+
return if url.nil?
|
347
|
+
|
348
|
+
if url.end_with?("/")
|
349
|
+
url
|
350
|
+
else
|
351
|
+
"#{url}/"
|
352
|
+
end
|
353
|
+
end
|
354
|
+
|
355
|
+
# @!visibility private
|
356
|
+
def url_for_simulator
|
357
|
+
if device.simulator?
|
358
|
+
"http://#{DEFAULTS[:simulator_ip]}:#{DEFAULTS[:port]}/"
|
359
|
+
else
|
360
|
+
nil
|
361
|
+
end
|
362
|
+
end
|
363
|
+
|
364
|
+
# @!visibility private
|
365
|
+
def url_from_device_endpoint
|
366
|
+
calabash_endpoint = RunLoop::Environment.device_endpoint
|
367
|
+
if calabash_endpoint
|
368
|
+
base = calabash_endpoint.split(":")[0..1].join(":")
|
369
|
+
"#{base}:#{DEFAULTS[:port]}/"
|
370
|
+
else
|
371
|
+
nil
|
372
|
+
end
|
373
|
+
end
|
374
|
+
|
375
|
+
# @!visibility private
|
376
|
+
# TODO This block is not well tested
|
377
|
+
# TODO extract to a module; Calabash can use to detect device endpoint
|
378
|
+
def url_from_device_name
|
379
|
+
# Transforms the default "Joshua's iPhone" to a DNS name.
|
380
|
+
device_name = device.name.gsub(/[']/, "").gsub(/[\s]/, "-")
|
381
|
+
|
382
|
+
# Replace diacritic markers and unknown characters.
|
383
|
+
transliterated = transliterate(device_name).tr("?", "")
|
384
|
+
|
385
|
+
# Anything that cannot be transliterated is a ?
|
386
|
+
replaced = transliterated.tr("?", "")
|
387
|
+
|
388
|
+
"http://#{replaced}.local:#{DEFAULTS[:port]}/"
|
298
389
|
end
|
299
390
|
|
300
391
|
# @!visibility private
|
@@ -309,11 +400,7 @@ Sending request to perform '#{gesture}' with:
|
|
309
400
|
|
310
401
|
# @!visibility private
|
311
402
|
def versioned_route(route)
|
312
|
-
|
313
|
-
route
|
314
|
-
else
|
315
|
-
"#{DEFAULTS[:version]}/#{route}"
|
316
|
-
end
|
403
|
+
"#{DEFAULTS[:version]}/#{route}"
|
317
404
|
end
|
318
405
|
|
319
406
|
# @!visibility private
|
@@ -339,7 +426,7 @@ Sending request to perform '#{gesture}' with:
|
|
339
426
|
# @!visibility private
|
340
427
|
def session_delete
|
341
428
|
options = ping_options
|
342
|
-
request = request("
|
429
|
+
request = request("session")
|
343
430
|
client = client(options)
|
344
431
|
begin
|
345
432
|
response = client.delete(request)
|
@@ -387,9 +474,9 @@ Sending request to perform '#{gesture}' with:
|
|
387
474
|
shutdown
|
388
475
|
|
389
476
|
options = {:log_cmd => true}
|
390
|
-
|
391
|
-
|
392
|
-
|
477
|
+
run_shell_command(["pkill", "iOSDeviceManager"], options)
|
478
|
+
run_shell_command(["pkill", "testmanagerd"], options)
|
479
|
+
run_shell_command(["pkill", "xcodebuild"], options)
|
393
480
|
|
394
481
|
start = Time.now
|
395
482
|
RunLoop.log_debug("Waiting for CBX-Runner to launch...")
|