module LanguagesHelper LANGUAGE_MAPPING = { en: "English", ru: "Russian", ar: "Arabic", bg: "Bulgarian", 'ca-CAT': "Catalan (Catalonia)", ca: "Catalan", 'da-DK': "Danish (Denmark)", 'de-AT': "German (Austria)", 'de-CH': "German (Switzerland)", de: "German", ee: "Ewe", 'en-AU': "English (Australia)", 'en-BORK': "English (Bork)", 'en-CA': "English (Canada)", 'en-GB': "English (United Kingdom)", 'en-IND': "English (India)", 'en-KE': "English (Kenya)", 'en-MS': "English (Malaysia)", 'en-NEP': "English (Nepal)", 'en-NG': "English (Nigeria)", 'en-NZ': "English (New Zealand)", 'en-PAK': "English (Pakistan)", 'en-SG': "English (Singapore)", 'en-TH': "English (Thailand)", 'en-UG': "English (Uganda)", 'en-US': "English (United States)", 'en-ZA': "English (South Africa)", 'en-au-ocker': "English (Australian Ocker)", 'es-AR': "Spanish (Argentina)", 'es-MX': "Spanish (Mexico)", es: "Spanish", fa: "Persian", 'fi-FI': "Finnish (Finland)", fr: "French", 'fr-CA': "French (Canada)", 'fr-CH': "French (Switzerland)", he: "Hebrew", hy: "Armenian", id: "Indonesian", it: "Italian", ja: "Japanese", ko: "Korean", lt: "Lithuanian", lv: "Latvian", 'mi-NZ': "Maori (New Zealand)", 'nb-NO': "Norwegian Bokmรฅl (Norway)", nl: "Dutch", 'no-NO': "Norwegian (Norway)", pl: "Polish", 'pt-BR': "Portuguese (Brazil)", pt: "Portuguese", sk: "Slovak", sv: "Swedish", th: "Thai", tr: "Turkish", uk: "Ukrainian", vi: "Vietnamese", 'zh-CN': "Chinese (Simplified)", 'zh-TW': "Chinese (Traditional)", af: "Afrikaans", az: "Azerbaijani", be: "Belarusian", bn: "Bengali", bs: "Bosnian", cs: "Czech", cy: "Welsh", da: "Danish", 'de-DE': "German (Germany)", dz: "Dzongkha", 'el-CY': "Greek (Cyprus)", el: "Greek", 'en-CY': "English (Cyprus)", 'en-IE': "English (Ireland)", 'en-IN': "English (India)", 'en-TT': "English (Trinidad and Tobago)", eo: "Esperanto", 'es-419': "Spanish (Latin America)", 'es-CL': "Spanish (Chile)", 'es-CO': "Spanish (Colombia)", 'es-CR': "Spanish (Costa Rica)", 'es-EC': "Spanish (Ecuador)", 'es-ES': "Spanish (Spain)", 'es-NI': "Spanish (Nicaragua)", 'es-PA': "Spanish (Panama)", 'es-PE': "Spanish (Peru)", 'es-US': "Spanish (United States)", 'es-VE': "Spanish (Venezuela)", et: "Estonian", eu: "Basque", fi: "Finnish", 'fr-FR': "French (France)", fy: "Western Frisian", gd: "Scottish Gaelic", gl: "Galician", 'hi-IN': "Hindi (India)", hi: "Hindi", hr: "Croatian", hu: "Hungarian", is: "Icelandic", 'it-CH': "Italian (Switzerland)", ka: "Georgian", kk: "Kazakh", km: "Khmer", kn: "Kannada", lb: "Luxembourgish", lo: "Lao", mg: "Malagasy", mk: "Macedonian", ml: "Malayalam", mn: "Mongolian", 'mr-IN': "Marathi (India)", ms: "Malay", nb: "Norwegian Bokmรฅl", ne: "Nepali", nn: "Norwegian Nynorsk", oc: "Occitan", or: "Odia", pa: "Punjabi", rm: "Romansh", ro: "Romanian", sc: "Sardinian", sl: "Slovenian", sq: "Albanian", sr: "Serbian", st: "Southern Sotho", 'sv-FI': "Swedish (Finland)", 'sv-SE': "Swedish (Sweden)", sw: "Swahili", ta: "Tamil", te: "Telugu", tl: "Tagalog", tt: "Tatar", ug: "Uyghur", ur: "Urdu", uz: "Uzbek", wo: "Wolof" }.freeze EXCLUDED_LOCALES = [ # Test locales "en-BORK", "en-au-ocker", # Duplicate locales "fr-FR", "de-DE", "hi-IN", "sv-SE", "ca-CAT", "en-US", "fi-FI", "en-IND" ].freeze COUNTRY_MAPPING = { AF: "๐Ÿ‡ฆ๐Ÿ‡ซ Afghanistan", AL: "๐Ÿ‡ฆ๐Ÿ‡ฑ Albania", DZ: "๐Ÿ‡ฉ๐Ÿ‡ฟ Algeria", AD: "๐Ÿ‡ฆ๐Ÿ‡ฉ Andorra", AO: "๐Ÿ‡ฆ๐Ÿ‡ด Angola", AG: "๐Ÿ‡ฆ๐Ÿ‡ฌ Antigua and Barbuda", AR: "๐Ÿ‡ฆ๐Ÿ‡ท Argentina", AM: "๐Ÿ‡ฆ๐Ÿ‡ฒ Armenia", AU: "๐Ÿ‡ฆ๐Ÿ‡บ Australia", AT: "๐Ÿ‡ฆ๐Ÿ‡น Austria", AZ: "๐Ÿ‡ฆ๐Ÿ‡ฟ Azerbaijan", BS: "๐Ÿ‡ง๐Ÿ‡ธ Bahamas", BH: "๐Ÿ‡ง๐Ÿ‡ญ Bahrain", BD: "๐Ÿ‡ง๐Ÿ‡ฉ Bangladesh", BB: "๐Ÿ‡ง๐Ÿ‡ง Barbados", BY: "๐Ÿ‡ง๐Ÿ‡พ Belarus", BE: "๐Ÿ‡ง๐Ÿ‡ช Belgium", BZ: "๐Ÿ‡ง๐Ÿ‡ฟ Belize", BJ: "๐Ÿ‡ง๐Ÿ‡ฏ Benin", BT: "๐Ÿ‡ง๐Ÿ‡น Bhutan", BO: "๐Ÿ‡ง๐Ÿ‡ด Bolivia", BA: "๐Ÿ‡ง๐Ÿ‡ฆ Bosnia and Herzegovina", BW: "๐Ÿ‡ง๐Ÿ‡ผ Botswana", BR: "๐Ÿ‡ง๐Ÿ‡ท Brazil", BN: "๐Ÿ‡ง๐Ÿ‡ณ Brunei", BG: "๐Ÿ‡ง๐Ÿ‡ฌ Bulgaria", BF: "๐Ÿ‡ง๐Ÿ‡ซ Burkina Faso", BI: "๐Ÿ‡ง๐Ÿ‡ฎ Burundi", KH: "๐Ÿ‡ฐ๐Ÿ‡ญ Cambodia", CM: "๐Ÿ‡จ๐Ÿ‡ฒ Cameroon", CA: "๐Ÿ‡จ๐Ÿ‡ฆ Canada", CV: "๐Ÿ‡จ๐Ÿ‡ป Cape Verde", CF: "๐Ÿ‡จ๐Ÿ‡ซ Central African Republic", TD: "๐Ÿ‡น๐Ÿ‡ฉ Chad", CL: "๐Ÿ‡จ๐Ÿ‡ฑ Chile", CN: "๐Ÿ‡จ๐Ÿ‡ณ China", CO: "๐Ÿ‡จ๐Ÿ‡ด Colombia", KM: "๐Ÿ‡ฐ๐Ÿ‡ฒ Comoros", CG: "๐Ÿ‡จ๐Ÿ‡ฌ Congo", CD: "๐Ÿ‡จ๐Ÿ‡ฉ Congo, Democratic Republic of the", CR: "๐Ÿ‡จ๐Ÿ‡ท Costa Rica", CI: "๐Ÿ‡จ๐Ÿ‡ฎ Cรดte d'Ivoire", HR: "๐Ÿ‡ญ๐Ÿ‡ท Croatia", CU: "๐Ÿ‡จ๐Ÿ‡บ Cuba", CY: "๐Ÿ‡จ๐Ÿ‡พ Cyprus", CZ: "๐Ÿ‡จ๐Ÿ‡ฟ Czech Republic", DK: "๐Ÿ‡ฉ๐Ÿ‡ฐ Denmark", DJ: "๐Ÿ‡ฉ๐Ÿ‡ฏ Djibouti", DM: "๐Ÿ‡ฉ๐Ÿ‡ฒ Dominica", DO: "๐Ÿ‡ฉ๐Ÿ‡ด Dominican Republic", EC: "๐Ÿ‡ช๐Ÿ‡จ Ecuador", EG: "๐Ÿ‡ช๐Ÿ‡ฌ Egypt", SV: "๐Ÿ‡ธ๐Ÿ‡ป El Salvador", GQ: "๐Ÿ‡ฌ๐Ÿ‡ถ Equatorial Guinea", ER: "๐Ÿ‡ช๐Ÿ‡ท Eritrea", EE: "๐Ÿ‡ช๐Ÿ‡ช Estonia", ET: "๐Ÿ‡ช๐Ÿ‡น Ethiopia", FJ: "๐Ÿ‡ซ๐Ÿ‡ฏ Fiji", FI: "๐Ÿ‡ซ๐Ÿ‡ฎ Finland", FR: "๐Ÿ‡ซ๐Ÿ‡ท France", GA: "๐Ÿ‡ฌ๐Ÿ‡ฆ Gabon", GM: "๐Ÿ‡ฌ๐Ÿ‡ฒ Gambia", GE: "๐Ÿ‡ฌ๐Ÿ‡ช Georgia", DE: "๐Ÿ‡ฉ๐Ÿ‡ช Germany", GH: "๐Ÿ‡ฌ๐Ÿ‡ญ Ghana", GR: "๐Ÿ‡ฌ๐Ÿ‡ท Greece", GD: "๐Ÿ‡ฌ๐Ÿ‡ฉ Grenada", GT: "๐Ÿ‡ฌ๐Ÿ‡น Guatemala", GN: "๐Ÿ‡ฌ๐Ÿ‡ณ Guinea", GW: "๐Ÿ‡ฌ๐Ÿ‡ผ Guinea-Bissau", GY: "๐Ÿ‡ฌ๐Ÿ‡พ Guyana", HT: "๐Ÿ‡ญ๐Ÿ‡น Haiti", HN: "๐Ÿ‡ญ๐Ÿ‡ณ Honduras", HU: "๐Ÿ‡ญ๐Ÿ‡บ Hungary", IS: "๐Ÿ‡ฎ๐Ÿ‡ธ Iceland", IN: "๐Ÿ‡ฎ๐Ÿ‡ณ India", ID: "๐Ÿ‡ฎ๐Ÿ‡ฉ Indonesia", IR: "๐Ÿ‡ฎ๐Ÿ‡ท Iran", IQ: "๐Ÿ‡ฎ๐Ÿ‡ถ Iraq", IE: "๐Ÿ‡ฎ๐Ÿ‡ช Ireland", IL: "๐Ÿ‡ฎ๐Ÿ‡ฑ Israel", IT: "๐Ÿ‡ฎ๐Ÿ‡น Italy", JM: "๐Ÿ‡ฏ๐Ÿ‡ฒ Jamaica", JP: "๐Ÿ‡ฏ๐Ÿ‡ต Japan", JO: "๐Ÿ‡ฏ๐Ÿ‡ด Jordan", KZ: "๐Ÿ‡ฐ๐Ÿ‡ฟ Kazakhstan", KE: "๐Ÿ‡ฐ๐Ÿ‡ช Kenya", KI: "๐Ÿ‡ฐ๐Ÿ‡ฎ Kiribati", KP: "๐Ÿ‡ฐ๐Ÿ‡ต North Korea", KR: "๐Ÿ‡ฐ๐Ÿ‡ท South Korea", KW: "๐Ÿ‡ฐ๐Ÿ‡ผ Kuwait", KG: "๐Ÿ‡ฐ๐Ÿ‡ฌ Kyrgyzstan", LA: "๐Ÿ‡ฑ๐Ÿ‡ฆ Laos", LV: "๐Ÿ‡ฑ๐Ÿ‡ป Latvia", LB: "๐Ÿ‡ฑ๐Ÿ‡ง Lebanon", LS: "๐Ÿ‡ฑ๐Ÿ‡ธ Lesotho", LR: "๐Ÿ‡ฑ๐Ÿ‡ท Liberia", LY: "๐Ÿ‡ฑ๐Ÿ‡พ Libya", LI: "๐Ÿ‡ฑ๐Ÿ‡ฎ Liechtenstein", LT: "๐Ÿ‡ฑ๐Ÿ‡น Lithuania", LU: "๐Ÿ‡ฑ๐Ÿ‡บ Luxembourg", MK: "๐Ÿ‡ฒ๐Ÿ‡ฐ North Macedonia", MG: "๐Ÿ‡ฒ๐Ÿ‡ฌ Madagascar", MW: "๐Ÿ‡ฒ๐Ÿ‡ผ Malawi", MY: "๐Ÿ‡ฒ๐Ÿ‡พ Malaysia", MV: "๐Ÿ‡ฒ๐Ÿ‡ป Maldives", ML: "๐Ÿ‡ฒ๐Ÿ‡ฑ Mali", MT: "๐Ÿ‡ฒ๐Ÿ‡น Malta", MH: "๐Ÿ‡ฒ๐Ÿ‡ญ Marshall Islands", MR: "๐Ÿ‡ฒ๐Ÿ‡ท Mauritania", MU: "๐Ÿ‡ฒ๐Ÿ‡บ Mauritius", MX: "๐Ÿ‡ฒ๐Ÿ‡ฝ Mexico", FM: "๐Ÿ‡ซ๐Ÿ‡ฒ Micronesia", MD: "๐Ÿ‡ฒ๐Ÿ‡ฉ Moldova", MC: "๐Ÿ‡ฒ๐Ÿ‡จ Monaco", MN: "๐Ÿ‡ฒ๐Ÿ‡ณ Mongolia", ME: "๐Ÿ‡ฒ๐Ÿ‡ช Montenegro", MA: "๐Ÿ‡ฒ๐Ÿ‡ฆ Morocco", MZ: "๐Ÿ‡ฒ๐Ÿ‡ฟ Mozambique", MM: "๐Ÿ‡ฒ๐Ÿ‡ฒ Myanmar", NA: "๐Ÿ‡ณ๐Ÿ‡ฆ Namibia", NR: "๐Ÿ‡ณ๐Ÿ‡ท Nauru", NP: "๐Ÿ‡ณ๐Ÿ‡ต Nepal", NL: "๐Ÿ‡ณ๐Ÿ‡ฑ Netherlands", NZ: "๐Ÿ‡ณ๐Ÿ‡ฟ New Zealand", NI: "๐Ÿ‡ณ๐Ÿ‡ฎ Nicaragua", NE: "๐Ÿ‡ณ๐Ÿ‡ช Niger", NG: "๐Ÿ‡ณ๐Ÿ‡ฌ Nigeria", NO: "๐Ÿ‡ณ๐Ÿ‡ด Norway", OM: "๐Ÿ‡ด๐Ÿ‡ฒ Oman", PK: "๐Ÿ‡ต๐Ÿ‡ฐ Pakistan", PW: "๐Ÿ‡ต๐Ÿ‡ผ Palau", PA: "๐Ÿ‡ต๐Ÿ‡ฆ Panama", PG: "๐Ÿ‡ต๐Ÿ‡ฌ Papua New Guinea", PY: "๐Ÿ‡ต๐Ÿ‡พ Paraguay", PE: "๐Ÿ‡ต๐Ÿ‡ช Peru", PH: "๐Ÿ‡ต๐Ÿ‡ญ Philippines", PL: "๐Ÿ‡ต๐Ÿ‡ฑ Poland", PT: "๐Ÿ‡ต๐Ÿ‡น Portugal", QA: "๐Ÿ‡ถ๐Ÿ‡ฆ Qatar", RO: "๐Ÿ‡ท๐Ÿ‡ด Romania", RU: "๐Ÿ‡ท๐Ÿ‡บ Russia", RW: "๐Ÿ‡ท๐Ÿ‡ผ Rwanda", KN: "๐Ÿ‡ฐ๐Ÿ‡ณ Saint Kitts and Nevis", LC: "๐Ÿ‡ฑ๐Ÿ‡จ Saint Lucia", VC: "๐Ÿ‡ป๐Ÿ‡จ Saint Vincent and the Grenadines", WS: "๐Ÿ‡ผ๐Ÿ‡ธ Samoa", SM: "๐Ÿ‡ธ๐Ÿ‡ฒ San Marino", ST: "๐Ÿ‡ธ๐Ÿ‡น Sao Tome and Principe", SA: "๐Ÿ‡ธ๐Ÿ‡ฆ Saudi Arabia", SN: "๐Ÿ‡ธ๐Ÿ‡ณ Senegal", RS: "๐Ÿ‡ท๐Ÿ‡ธ Serbia", SC: "๐Ÿ‡ธ๐Ÿ‡จ Seychelles", SL: "๐Ÿ‡ธ๐Ÿ‡ฑ Sierra Leone", SG: "๐Ÿ‡ธ๐Ÿ‡ฌ Singapore", SK: "๐Ÿ‡ธ๐Ÿ‡ฐ Slovakia", SI: "๐Ÿ‡ธ๐Ÿ‡ฎ Slovenia", SB: "๐Ÿ‡ธ๐Ÿ‡ง Solomon Islands", SO: "๐Ÿ‡ธ๐Ÿ‡ด Somalia", ZA: "๐Ÿ‡ฟ๐Ÿ‡ฆ South Africa", SS: "๐Ÿ‡ธ๐Ÿ‡ธ South Sudan", ES: "๐Ÿ‡ช๐Ÿ‡ธ Spain", LK: "๐Ÿ‡ฑ๐Ÿ‡ฐ Sri Lanka", SD: "๐Ÿ‡ธ๐Ÿ‡ฉ Sudan", SR: "๐Ÿ‡ธ๐Ÿ‡ท Suriname", SE: "๐Ÿ‡ธ๐Ÿ‡ช Sweden", CH: "๐Ÿ‡จ๐Ÿ‡ญ Switzerland", SY: "๐Ÿ‡ธ๐Ÿ‡พ Syria", TW: "๐Ÿ‡น๐Ÿ‡ผ Taiwan", TJ: "๐Ÿ‡น๐Ÿ‡ฏ Tajikistan", TZ: "๐Ÿ‡น๐Ÿ‡ฟ Tanzania", TH: "๐Ÿ‡น๐Ÿ‡ญ Thailand", TL: "๐Ÿ‡น๐Ÿ‡ฑ Timor-Leste", TG: "๐Ÿ‡น๐Ÿ‡ฌ Togo", TO: "๐Ÿ‡น๐Ÿ‡ด Tonga", TT: "๐Ÿ‡น๐Ÿ‡น Trinidad and Tobago", TN: "๐Ÿ‡น๐Ÿ‡ณ Tunisia", TR: "๐Ÿ‡น๐Ÿ‡ท Turkey", TM: "๐Ÿ‡น๐Ÿ‡ฒ Turkmenistan", TV: "๐Ÿ‡น๐Ÿ‡ป Tuvalu", UG: "๐Ÿ‡บ๐Ÿ‡ฌ Uganda", UA: "๐Ÿ‡บ๐Ÿ‡ฆ Ukraine", AE: "๐Ÿ‡ฆ๐Ÿ‡ช United Arab Emirates", GB: "๐Ÿ‡ฌ๐Ÿ‡ง United Kingdom", US: "๐Ÿ‡บ๐Ÿ‡ธ United States", UY: "๐Ÿ‡บ๐Ÿ‡พ Uruguay", UZ: "๐Ÿ‡บ๐Ÿ‡ฟ Uzbekistan", VU: "๐Ÿ‡ป๐Ÿ‡บ Vanuatu", VA: "๐Ÿ‡ป๐Ÿ‡ฆ Vatican City", VE: "๐Ÿ‡ป๐Ÿ‡ช Venezuela", VN: "๐Ÿ‡ป๐Ÿ‡ณ Vietnam", YE: "๐Ÿ‡พ๐Ÿ‡ช Yemen", ZM: "๐Ÿ‡ฟ๐Ÿ‡ฒ Zambia", ZW: "๐Ÿ‡ฟ๐Ÿ‡ผ Zimbabwe" }.freeze def country_options COUNTRY_MAPPING.keys.map { |key| [ COUNTRY_MAPPING[key], key ] } end def language_options I18n.available_locales .reject { |locale| EXCLUDED_LOCALES.include?(locale.to_s) } .map do |locale| label = LANGUAGE_MAPPING[locale.to_sym] || locale.to_s.humanize [ "#{label} (#{locale})", locale ] end .sort_by { |label, locale| label } end def timezone_options ActiveSupport::TimeZone.all .sort_by { |tz| [ tz.utc_offset, tz.name ] } .map do |tz| name = tz.name.split(" - ").first.gsub(" (US & Canada)", "") [ "(#{tz.formatted_offset}) #{name}", tz.tzinfo.identifier ] end end end