From c1be5a8a5292b5b4f226f3462e62b0964ffee3c2 Mon Sep 17 00:00:00 2001 From: Anton Date: Thu, 15 Feb 2024 12:54:27 +0100 Subject: [PATCH 01/18] Change locales.js to new format I have changed the file to the new format, but used the existing data. This will allow me to use git diff to ensure the new locale system creates data that is identical to the old data. --- apps/locale/locales.js | 2150 ++++++++++++++++++++++++++-------------- 1 file changed, 1420 insertions(+), 730 deletions(-) diff --git a/apps/locale/locales.js b/apps/locale/locales.js index a0d5ea0312..a2ac98c9bd 100644 --- a/apps/locale/locales.js +++ b/apps/locale/locales.js @@ -1,5 +1,9 @@ /* jshint esversion: 6 */ -const distanceUnits = { // how many meters per X? +/** + * Intermediate file format + */ + +const distanceUnits = { "m": 1, "ft": 0.3048, "yd": 0.9144, @@ -8,7 +12,7 @@ const distanceUnits = { // how many meters per X? "kmi": 1000, "nm": 1852 }; -const speedUnits = { // how many kph per X? +const speedUnits = { "kmh": 1, "kph": 1, "km/h": 1, @@ -19,797 +23,1483 @@ const speedUnits = { // how many kph per X? "kts": 1.852 }; -/* -For a codepage, 'map' is a map of char codes 128 and above. -Where there is no character, just use '.' -*/ const codePages = { - "ISO8859-1" : { - name : "ISO8859-1", - map : ` -€.‚ƒ„…†‡ˆ‰Š‹Œ.Ž. -.‘’“”•–—˜™š›œ.žŸ -.¡¢£¤¥¦§¨©ª«¬.®¯ -°±²³´µ¶·¸¹º»¼½¾¿ -ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ -ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß -àáâãäåæçèéêëìíîï -ðñòóôõö÷øùúûüýþÿ -`.replace(/[ \n]/g,"") + "ISO8859-1": { + "name": "ISO8859-1", + "map": "€.‚ƒ„…†‡ˆ‰Š‹Œ.Ž..‘’“”•–—˜™š›œ.žŸ.¡¢£¤¥¦§¨©ª«¬.®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ" } }; -// charFallbacks is now in core/js/utils.js as CODEPAGE_CONVERSIONS - -/* -timePattern / datePattern: - - %Y year four digits - %y last two digits of year (00..99) - %m month (01..12) - %d day of month (e.g, 01) - - %a locale's abbreviated weekday name (e.g., Sun) - %A locale's full weekday name (e.g., Sunday) - %b locale's abbreviated month name (e.g., Jan) - %B locale's full month name (e.g., January) - - %H hour (00..23) - %M minute (00..59) - %S second (00..60) - %p locale's equivalent of either AM or PM; blank if not known - %P like %p, but lower case -*/ - var locales = { - "en_GB": { // this is default - lang: "en_GB", - decimal_point: ".", - thousands_sep: ",", - currency_symbol: "£", currency_first: true, - int_curr_symbol: "GBP", - speed: 'mph', - distance: { "0": "yd", "1": "mi" }, - temperature: '°C', - ampm: { 0: "am", 1: "pm" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%b %d %Y", 1: "%d/%m/%Y" }, // Feb 28 2020" // "01/03/2020"(short) - abmonth: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", - month: "January,February,March,April,May,June,July,August,September,October,November,December", - abday: "Sun,Mon,Tue,Wed,Thu,Fri,Sat", - day: "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday", - // No translation for english... + "en_GB": { + "lang": "en_GB", + "decimal_point": ".", + "thousands_sep": ",", + "currency_symbol": "£", + "currency_first": true, + "int_curr_symbol": "GBP", + "speed": "mph", + "distance": { + "0": "yd", + "1": "mi" + }, + "temperature": "°C", + "ampm": { + "0": "am", + "1": "pm" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%b %d %Y", + "1": "%d/%m/%Y" + }, + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "month": "January,February,March,April,May,June,July,August,September,October,November,December", + "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", + "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" }, "en_US": { - lang: "en_US", - notes: "USA with MM/DD/YY date", - decimal_point: ".", - thousands_sep: ",", - currency_symbol: "$", currency_first: true, - int_curr_symbol: "USD", - speed: "mph", - distance: { 0: "ft", 1: "mi" }, - temperature: "°F", - ampm: { 0: "am", 1: "pm" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%b %d, %Y", 1: "%m/%d/%y" }, - abmonth: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", - month: "January,February,March,April,May,June,July,August,September,October,November,December", - abday: "Sun,Mon,Tue,Wed,Thu,Fri,Sat", - day: "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday", - // No translation for english... + "lang": "en_US", + "notes": "USA with MM/DD/YY date", + "decimal_point": ".", + "thousands_sep": ",", + "currency_symbol": "$", + "currency_first": true, + "int_curr_symbol": "USD", + "speed": "mph", + "distance": { + "0": "ft", + "1": "mi" + }, + "temperature": "°F", + "ampm": { + "0": "am", + "1": "pm" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%b %d, %Y", + "1": "%m/%d/%y" + }, + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "month": "January,February,March,April,May,June,July,August,September,October,November,December", + "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", + "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" }, "en_US 2": { - lang: "en_US 2", icon:"🇺🇸", - notes: "USA with YYYY-MM-DD date", - decimal_point: ".", - thousands_sep: ",", - currency_symbol: "$", currency_first: true, - int_curr_symbol: "USD", - speed: "mph", - distance: { 0: "ft", 1: "mi" }, - temperature: "°F", - ampm: { 0: "am", 1: "pm" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%b %d, %Y", 1: "%Y-%m-%d" }, - abmonth: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", - month: "January,February,March,April,May,June,July,August,September,October,November,December", - abday: "Sun,Mon,Tue,Wed,Thu,Fri,Sat", - day: "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday", - // No translation for english... + "lang": "en_US 2", + "icon": "🇺🇸", + "notes": "USA with YYYY-MM-DD date", + "decimal_point": ".", + "thousands_sep": ",", + "currency_symbol": "$", + "currency_first": true, + "int_curr_symbol": "USD", + "speed": "mph", + "distance": { + "0": "ft", + "1": "mi" + }, + "temperature": "°F", + "ampm": { + "0": "am", + "1": "pm" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%b %d, %Y", + "1": "%Y-%m-%d" + }, + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "month": "January,February,March,April,May,June,July,August,September,October,November,December", + "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", + "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" }, "en_IN": { - lang: "en_IN", - decimal_point: ".", - thousands_sep: ",", - currency_symbol: "Rs.", - currency_first: true, - int_curr_symbol: "INR", - speed: 'kmh', - distance: { "0": "m", "1": "km" }, - temperature: '°C', - ampm: { 0: "am", 1: "pm" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%d %b %Y", 1: "%d/%m/%Y" }, // 28 Feb 2020" // "28/03/2020"(short) - abmonth: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", - month: "January,February,March,April,May,June,July,August,September,October,November,December", - abday: "Sun,Mon,Tue,Wed,Thu,Fri,Sat", - day: "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday", - // No translation for english... + "lang": "en_IN", + "decimal_point": ".", + "thousands_sep": ",", + "currency_symbol": "Rs.", + "currency_first": true, + "int_curr_symbol": "INR", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "am", + "1": "pm" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%d %b %Y", + "1": "%d/%m/%Y" + }, + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "month": "January,February,March,April,May,June,July,August,September,October,November,December", + "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", + "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" }, "en_IE": { - lang: "en_IE", - decimal_point: ".", - thousands_sep: ",", - currency_symbol: "€", - int_curr_symbol: "EUR", - currency_first: true, - speed: 'kmh', - distance: { "0": "m", "1": "km" }, - temperature: '°C', - ampm: { 0: "am", 1: "pm" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%d %b %Y", 1: "%d/%m/%Y" }, // 28 Feb 2020" // "28/03/2020"(short) - abmonth: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", - month: "January,February,March,April,May,June,July,August,September,October,November,December", - abday: "Sun,Mon,Tue,Wed,Thu,Fri,Sat", - day: "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday", - // No translation for english... - }, - "en_NAV": { // navigation units nautical miles and knots - lang: "en_NAV", icon: "⛵✈️", - decimal_point: ".", - thousands_sep: ",", - currency_symbol: "£", currency_first: true, - int_curr_symbol: "GBP", - speed: 'kts', - distance: { "0": "m", "1": "nm" }, - temperature: '°C', - ampm: { 0: "am", 1: "pm" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%b %d %Y", 1: "%d/%m/%Y" }, // Feb 28 2020" // "01/03/2020"(short) - abmonth: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", - month: "January,February,March,April,May,June,July,August,September,October,November,December", - abday: "Sun,Mon,Tue,Wed,Thu,Fri,Sat", - day: "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday", - // No translation for english... + "lang": "en_IE", + "decimal_point": ".", + "thousands_sep": ",", + "currency_symbol": "€", + "int_curr_symbol": "EUR", + "currency_first": true, + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "am", + "1": "pm" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%d %b %Y", + "1": "%d/%m/%Y" + }, + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "month": "January,February,March,April,May,June,July,August,September,October,November,December", + "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", + "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" + }, + "en_NAV": { + "lang": "en_NAV", + "icon": "⛵✈️", + "decimal_point": ".", + "thousands_sep": ",", + "currency_symbol": "£", + "currency_first": true, + "int_curr_symbol": "GBP", + "speed": "kts", + "distance": { + "0": "m", + "1": "nm" + }, + "temperature": "°C", + "ampm": { + "0": "am", + "1": "pm" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%b %d %Y", + "1": "%d/%m/%Y" + }, + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "month": "January,February,March,April,May,June,July,August,September,October,November,December", + "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", + "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" }, "de_DE": { - lang: "de_DE", - decimal_point: ",", - thousands_sep: ".", - currency_symbol: "€", - int_curr_symbol: "EUR", - speed: "kmh", - distance: { 0: "m", 1: "km" }, - temperature: "°C", - ampm: { 0: "", 1: "" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%d. %b %Y", "1": "%d.%m.%Y" }, // 1. Mär 2020 // 01.03.20 - abmonth: "Jan,Feb,Mär,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez", - month: "Januar,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember", - abday: "So,Mo,Di,Mi,Do,Fr,Sa", - day: "Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag", - trans: { yes: "ja", Yes: "Ja", no: "nein", No: "Nein", ok: "ok", on: "an", off: "aus", - "< Back": "< Zurück", "Delete": "Löschen", "Mark Unread": "Als ungelesen markieren" } - }, - "en_JP": { // we do not have the font, so it is not ja_JP - lang: "en_JP", - decimal_point: ".", - thousands_sep: ",", - currency_symbol: "¥", - int_curr_symbol: "JPY", - speed: "kmh", - distance: { 0: "m", 1: "km" }, - temperature: "°C", - ampm: { 0: "", 1: "" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%Y/%m/%d", 1: "%y/%m/%d" }, - abmonth: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", - month: "January,February,March,April,May,June,July,August,September,October,November,December", - abday: "Sun,Mon,Tue,Wed,Thu,Fri,Sat", - day: "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday", - // No translation for english... + "lang": "de_DE", + "decimal_point": ",", + "thousands_sep": ".", + "currency_symbol": "€", + "int_curr_symbol": "EUR", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "", + "1": "" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%d. %b %Y", + "1": "%d.%m.%Y" + }, + "abmonth": "Jan,Feb,Mär,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez", + "month": "Januar,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember", + "abday": "So,Mo,Di,Mi,Do,Fr,Sa", + "day": "Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag", + "trans": { + "yes": "ja", + "Yes": "Ja", + "no": "nein", + "No": "Nein", + "ok": "ok", + "on": "an", + "off": "aus", + "< Back": "< Zurück", + "Delete": "Löschen", + "Mark Unread": "Als ungelesen markieren" + } + }, + "en_JP": { + "lang": "en_JP", + "decimal_point": ".", + "thousands_sep": ",", + "currency_symbol": "¥", + "int_curr_symbol": "JPY", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "", + "1": "" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%Y/%m/%d", + "1": "%y/%m/%d" + }, + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "month": "January,February,March,April,May,June,July,August,September,October,November,December", + "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", + "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" }, "nl_NL": { - lang: "nl_NL", - decimal_point: ",", - thousands_sep: ".", - currency_symbol: "€", - int_curr_symbol: "EUR", - speed: "kmh", - distance: { 0: "m", 1: "km" }, - temperature: "°C", - ampm: { 0: "", 1: "" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%d %b %Y", 1: "%d-%m-%Y" }, // 28 feb 2020 // 28-02-2020 - abday: "zo,ma,di,wo,do,vr,za", - day: "zondag,maandag,dinsdag,woensdag,donderdag,vrijdag,zaterdag", - abmonth: "jan,feb,mrt,apr,mei,jun,jul,aug,sep,okt,nov,dec", - month: "januari,februari,maart,april,mei,juni,juli,augustus,september,oktober,november,december", - trans: { yes: "ja", Yes: "Ja", no: "nee", No: "Nee", ok: "ok", on: "aan", off: "uit", - "< Back": "< Terug", "Delete": "Verwijderen", "Mark Unread": "Markeer als ongelezen" } - }, - "en_NL": { // English date units with Dutch number, currency and navigation units. - lang: "en_NL", - decimal_point: ",", - thousands_sep: ".", - currency_symbol: "€", - int_curr_symbol: "EUR", - speed: "km/h", - distance: { 0: "m", 1: "km" }, - temperature: "°C", - ampm: { 0: "am", 1: "pm" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%b %d %Y", 1: "%d/%m/%Y" }, // Feb 28 2020" // "01/03/2020"(short) - abmonth: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", - month: "January,February,March,April,May,June,July,August,September,October,November,December", - abday: "Sun,Mon,Tue,Wed,Thu,Fri,Sat", - day: "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday", + "lang": "nl_NL", + "decimal_point": ",", + "thousands_sep": ".", + "currency_symbol": "€", + "int_curr_symbol": "EUR", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "", + "1": "" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%d %b %Y", + "1": "%d-%m-%Y" + }, + "abday": "zo,ma,di,wo,do,vr,za", + "day": "zondag,maandag,dinsdag,woensdag,donderdag,vrijdag,zaterdag", + "abmonth": "jan,feb,mrt,apr,mei,jun,jul,aug,sep,okt,nov,dec", + "month": "januari,februari,maart,april,mei,juni,juli,augustus,september,oktober,november,december", + "trans": { + "yes": "ja", + "Yes": "Ja", + "no": "nee", + "No": "Nee", + "ok": "ok", + "on": "aan", + "off": "uit", + "< Back": "< Terug", + "Delete": "Verwijderen", + "Mark Unread": "Markeer als ongelezen" + } + }, + "en_NL": { + "lang": "en_NL", + "decimal_point": ",", + "thousands_sep": ".", + "currency_symbol": "€", + "int_curr_symbol": "EUR", + "speed": "km/h", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "am", + "1": "pm" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%b %d %Y", + "1": "%d/%m/%Y" + }, + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "month": "January,February,March,April,May,June,July,August,September,October,November,December", + "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", + "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" }, "en_CA": { - lang: "en_CA", - decimal_point: ".", - thousands_sep: ",", - currency_symbol: "$", - int_curr_symbol: "CAD", - speed: "km/h", - distance: { 0: "m", 1: "km" }, - temperature: "°C", - ampm: { 0: "am", 1: "pm" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%A, %B %d, %Y", "1": "%Y-%m-%d" }, // Sunday, March 1, 2020 // 2012-12-20 - abmonth: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", - month: "January,February,March,April,May,June,July,August,September,October,November,December", - abday: "Sun,Mon,Tue,Wed,Thu,Fri,Sat", - day: "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday", - // No translation for english... + "lang": "en_CA", + "decimal_point": ".", + "thousands_sep": ",", + "currency_symbol": "$", + "int_curr_symbol": "CAD", + "speed": "km/h", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "am", + "1": "pm" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%A, %B %d, %Y", + "1": "%Y-%m-%d" + }, + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "month": "January,February,March,April,May,June,July,August,September,October,November,December", + "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", + "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" }, "fr_FR": { - lang: "fr_FR", - decimal_point: ",", - thousands_sep: " ", - currency_symbol: "€", - int_curr_symbol: "EUR", - speed: "km/h", - distance: { 0: "m", 1: "km" }, - temperature: "°C", - ampm: { 0: "", 1: "" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%d %B %Y", "1": "%d/%m/%Y" }, // 1 mars 2020 // 01/03/2020 - abmonth: "janv,févr,mars,avril,mai,juin,juil,août,sept,oct,nov,déc", - month: "janvier,février,mars,avril,mai,juin,juillet,août,septembre,octobre,novembre,décembre", - abday: "dim,lun,mar,mer,jeu,ven,sam", - day: "dimanche,lundi,mardi,mercredi,jeudi,vendredi,samedi", - trans: { yes: "oui", Yes: "Oui", no: "non", No: "Non", ok: "ok", on: "on", off: "off" } + "lang": "fr_FR", + "decimal_point": ",", + "thousands_sep": " ", + "currency_symbol": "€", + "int_curr_symbol": "EUR", + "speed": "km/h", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "", + "1": "" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%d %B %Y", + "1": "%d/%m/%Y" + }, + "abmonth": "janv,févr,mars,avril,mai,juin,juil,août,sept,oct,nov,déc", + "month": "janvier,février,mars,avril,mai,juin,juillet,août,septembre,octobre,novembre,décembre", + "abday": "dim,lun,mar,mer,jeu,ven,sam", + "day": "dimanche,lundi,mardi,mercredi,jeudi,vendredi,samedi", + "trans": { + "yes": "oui", + "Yes": "Oui", + "no": "non", + "No": "Non", + "ok": "ok", + "on": "on", + "off": "off" + } }, "sv_SE": { - lang: "sv_SE", - decimal_point: ",", - thousands_sep: ".", - currency_symbol: "kr", - int_curr_symbol: "SKR", - speed: "km/tim", - distance: { 0: "m", 1: "km" }, - temperature: "°C", - ampm: { 0: "fm", 1: "em" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%b %d %Y", "1": "%Y-%m-%d" }, // feb 1 2020 // 2020-03-01 - abmonth: "jan,feb,mars,apr,maj,juni,juli,aug,sep,okt,nov,dec", - month: "januari,februari,mars,april,maj,juni,juli,augusti,september,oktober,november,december", - abday: "sön,mån,tis,ons,tors,fre,lör", - day: "söndag,måndag,tisdag,onsdag,torsdag,fredag,lördag", - trans: { yes: "ja", Yes: "Ja", no: "nej", No: "Nej", ok: "ok", on: "on", off: "off" } - }, - "en_SE": { // Swedish localisation with English text - lang: "en_SE", - decimal_point: ",", - thousands_sep: ".", - currency_symbol: "kr", - int_curr_symbol: "SKR", - speed: 'km/h', - distance: { "0": "m", "1": "km" }, - temperature: '°C', - ampm: { 0: "", 1: "" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%B %d %Y", "1": "%Y-%m-%d" }, // March 1 2020 // 2020-03-01 - abmonth: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", - month: "January,February,March,April,May,June,July,August,September,October,November,December", - abday: "Sun,Mon,Tue,Wed,Thu,Fri,Sat", - day: "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday", - // No translation for english... + "lang": "sv_SE", + "decimal_point": ",", + "thousands_sep": ".", + "currency_symbol": "kr", + "int_curr_symbol": "SKR", + "speed": "km/tim", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "fm", + "1": "em" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%b %d %Y", + "1": "%Y-%m-%d" + }, + "abmonth": "jan,feb,mars,apr,maj,juni,juli,aug,sep,okt,nov,dec", + "month": "januari,februari,mars,april,maj,juni,juli,augusti,september,oktober,november,december", + "abday": "sön,mån,tis,ons,tors,fre,lör", + "day": "söndag,måndag,tisdag,onsdag,torsdag,fredag,lördag", + "trans": { + "yes": "ja", + "Yes": "Ja", + "no": "nej", + "No": "Nej", + "ok": "ok", + "on": "on", + "off": "off" + } + }, + "en_SE": { + "lang": "en_SE", + "decimal_point": ",", + "thousands_sep": ".", + "currency_symbol": "kr", + "int_curr_symbol": "SKR", + "speed": "km/h", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "", + "1": "" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%B %d %Y", + "1": "%Y-%m-%d" + }, + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "month": "January,February,March,April,May,June,July,August,September,October,November,December", + "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", + "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" }, "da_DK": { - lang: "da_DK", - decimal_point: ",", - thousands_sep: ".", - currency_symbol: "kr", - int_curr_symbol: "DKK", - speed: "km/t", - distance: { 0: "m", 1: "km" }, - temperature: "°C", - ampm: { 0: "", 1: "" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%d. %b. %Y", 1: "%d/%m %Y" }, // 1. feb. 2020 // 01/02 2020 // a better short ver. is 1/2 2020 but its not supported - abmonth: "jan,feb,mar,apr,maj,jun,jul,aug,sep,okt,nov,dec", - month: "januar,februar,marts,april,maj,juni,juli,august,september,oktober,november,december", - abday: "søn,man,tir,ons,tor,fre,lør", - day: "søndag,mandag,tirsdag,onsdag,torsdag,fredag,lørdag", - trans: { yes: "ja", Yes: "Ja", no: "nej", No: "Nej", ok: "ok", on: "tændt", off: "slukket" } // no single danish translation for "on"/"off", should not be used - }, - "en_DK": { // Danish units with english language - lang: "en_DK", - decimal_point: ",", - thousands_sep: ".", - currency_symbol: "kr", - int_curr_symbol: "DKK", - speed: "km/h", - distance: { 0: "m", 1: "km" }, - temperature: "°C", - ampm: { 0: "", 1: "" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%d. %b. %Y", 1: "%d/%m %Y" }, // 1. feb. 2020 // 01/02 2020 // a better short ver. is 1/2 2020 but its not supported - abmonth: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", - month: "January,February,March,April,May,June,July,August,September,October,November,December", - abday: "Sun,Mon,Tue,Wed,Thu,Fri,Sat", - day: "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday", - // No translation for english... + "lang": "da_DK", + "decimal_point": ",", + "thousands_sep": ".", + "currency_symbol": "kr", + "int_curr_symbol": "DKK", + "speed": "km/t", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "", + "1": "" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%d. %b. %Y", + "1": "%d/%m %Y" + }, + "abmonth": "jan,feb,mar,apr,maj,jun,jul,aug,sep,okt,nov,dec", + "month": "januar,februar,marts,april,maj,juni,juli,august,september,oktober,november,december", + "abday": "søn,man,tir,ons,tor,fre,lør", + "day": "søndag,mandag,tirsdag,onsdag,torsdag,fredag,lørdag", + "trans": { + "yes": "ja", + "Yes": "Ja", + "no": "nej", + "No": "Nej", + "ok": "ok", + "on": "tændt", + "off": "slukket" + } + }, + "en_DK": { + "lang": "en_DK", + "decimal_point": ",", + "thousands_sep": ".", + "currency_symbol": "kr", + "int_curr_symbol": "DKK", + "speed": "km/h", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "", + "1": "" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%d. %b. %Y", + "1": "%d/%m %Y" + }, + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "month": "January,February,March,April,May,June,July,August,September,October,November,December", + "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", + "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" }, "en_NZ": { - lang: "en_NZ", - decimal_point: ".", - thousands_sep: ",", - currency_symbol: "$", - int_curr_symbol: "NZD", - speed: "kph", - distance: { 0: "m", 1: "km" }, - temperature: "°C", - ampm: { 0: "am", 1: "pm" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%A, %B %d, %Y", "1": "%d/%m/%y" }, // Sunday, 1 March 2020 // 1/3/20 - abmonth: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", - month: "January,February,March,April,May,June,July,August,September,October,November,December", - abday: "Sun,Mon,Tue,Wed,Thu,Fri,Sat", - day: "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday", - // No translation for english... + "lang": "en_NZ", + "decimal_point": ".", + "thousands_sep": ",", + "currency_symbol": "$", + "int_curr_symbol": "NZD", + "speed": "kph", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "am", + "1": "pm" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%A, %B %d, %Y", + "1": "%d/%m/%y" + }, + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "month": "January,February,March,April,May,June,July,August,September,October,November,December", + "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", + "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" }, "en_AU": { - lang: "en_AU", - decimal_point: ".", - thousands_sep: ",", - currency_symbol: "$", - int_curr_symbol: "AUD", - speed: "kmh", - distance: { 0: "m", 1: "km" }, - temperature: "°C", - ampm: { 0: "am", 1: "pm" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%A, %B %d, %Y", "1": "%d/%m/%y" }, // Sunday, 1 March 2020 // 1/3/20 - abmonth: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", - month: "January,February,March,April,May,June,July,August,September,October,November,December", - abday: "Sun,Mon,Tue,Wed,Thu,Fri,Sat", - day: "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday", - // No translation for english... + "lang": "en_AU", + "decimal_point": ".", + "thousands_sep": ",", + "currency_symbol": "$", + "int_curr_symbol": "AUD", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "am", + "1": "pm" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%A, %B %d, %Y", + "1": "%d/%m/%y" + }, + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "month": "January,February,March,April,May,June,July,August,September,October,November,December", + "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", + "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" }, "de_AT": { - lang: "de_AT", - decimal_point: ",", - thousands_sep: ".", - currency_symbol: "€", - int_curr_symbol: "EUR", - speed: "kmh", - distance: { 0: "m", 1: "km" }, - temperature: "°C", - ampm: { 0: "", 1: "" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%A, %d. %B %Y", "1": "%d.%m.%y" }, // Sonntag, 1. März 2020 // 01.03.20 - abmonth: "Jän,Feb,März,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez", - month: "Jänner,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember", - abday: "So,Mo,Di,Mi,Do,Fr,Sa", - day: "Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag", - trans: { yes: "ja", Yes: "Ja", no: "nein", No: "Nein", ok: "ok", on: "an", off: "aus", - "< Back": "< Zurück", "Delete": "Löschen", "Mark Unread": "Als ungelesen markieren" } + "lang": "de_AT", + "decimal_point": ",", + "thousands_sep": ".", + "currency_symbol": "€", + "int_curr_symbol": "EUR", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "", + "1": "" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%A, %d. %B %Y", + "1": "%d.%m.%y" + }, + "abmonth": "Jän,Feb,März,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez", + "month": "Jänner,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember", + "abday": "So,Mo,Di,Mi,Do,Fr,Sa", + "day": "Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag", + "trans": { + "yes": "ja", + "Yes": "Ja", + "no": "nein", + "No": "Nein", + "ok": "ok", + "on": "an", + "off": "aus", + "< Back": "< Zurück", + "Delete": "Löschen", + "Mark Unread": "Als ungelesen markieren" + } }, "en_IL": { - lang: "en_IL", - decimal_point: ",", - thousands_sep: ".", - currency_symbol: "ILS"/*"₪"*/, - int_curr_symbol: "ILS", - speed: "kmh", - distance: { 0: "m", 1: "km" }, - temperature: "°C", - ampm: { 0: "am", 1: "pm" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%A, %B %d, %Y", "1": "%d/%m/%Y" }, // Sunday, 1 March 2020 // 01/03/2020 - abmonth: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", - month: "January,February,March,April,May,June,July,August,September,October,November,December", - abday: "Sun,Mon,Tue,Wed,Thu,Fri,Sat", - day: "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday", - // No translation for english... + "lang": "en_IL", + "decimal_point": ",", + "thousands_sep": ".", + "currency_symbol": "ILS", + "int_curr_symbol": "ILS", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "am", + "1": "pm" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%A, %B %d, %Y", + "1": "%d/%m/%Y" + }, + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "month": "January,February,March,April,May,June,July,August,September,October,November,December", + "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", + "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" }, "es_ES": { - lang: "es_ES", - decimal_point: ",", - thousands_sep: ".", - currency_symbol: "€", - int_curr_symbol: "EUR", - speed: "kmh", - distance: { 0: "m", 1: "km" }, - temperature: "°C", - ampm: { 0: "", 1: "" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%A, %d de %B de %Y", "1": "%d/%m/%y" }, // domingo, 1 de marzo de 2020 // 01/03/20 - abmonth: "ene,feb,mar,abr,may,jun,jul,ago,sept,oct,nov,dic", - month: "enero,febrero,marzo,abril,mayo,junio,julio,agosto,septiembre,octubre,noviembre,diciembre", - abday: "dom,lun,mar,mié,jue,vie,sáb", - day: "domingo,lunes,martes,miércoles,jueves,viernes,sábado", - trans: { yes: "sí", Yes: "Sí", no: "no", No: "No", ok: "ok", on: "on", off: "off", - "< Back": "< Atrás", "Delete": "Borrar ", "Mark Unread": "Marcar como no leído" } + "lang": "es_ES", + "decimal_point": ",", + "thousands_sep": ".", + "currency_symbol": "€", + "int_curr_symbol": "EUR", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "", + "1": "" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%A, %d de %B de %Y", + "1": "%d/%m/%y" + }, + "abmonth": "ene,feb,mar,abr,may,jun,jul,ago,sept,oct,nov,dic", + "month": "enero,febrero,marzo,abril,mayo,junio,julio,agosto,septiembre,octubre,noviembre,diciembre", + "abday": "dom,lun,mar,mié,jue,vie,sáb", + "day": "domingo,lunes,martes,miércoles,jueves,viernes,sábado", + "trans": { + "yes": "sí", + "Yes": "Sí", + "no": "no", + "No": "No", + "ok": "ok", + "on": "on", + "off": "off", + "< Back": "< Atrás", + "Delete": "Borrar ", + "Mark Unread": "Marcar como no leído" + } }, "fr_BE": { - lang: "fr_BE", - decimal_point: ",", - thousands_sep: ".", - currency_symbol: "€", - int_curr_symbol: "EUR", - speed: "kmh", - distance: { 0: "m", 1: "km" }, - temperature: "°C", - ampm: { 0: "", 1: "" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%A %B %d %Y", "1": "%d/%m/%y" }, // dimanche 1 mars 2020 // 01/03/20 - abmonth: "anv.,févr.,mars,avril,mai,juin,juil.,août,sept.,oct.,nov.,déc.", - month: "janvier,février,mars,avril,mai,juin,juillet,août,septembre,octobre,novembre,décembre", - abday: "dim,lun,mar,mer,jeu,ven,sam", - day: "dimanche,lundi,mardi,mercredi,jeudi,vendredi,samedi", - trans: { yes: "oui", Yes: "Oui", no: "non", No: "Non", ok: "ok", on: "on", off: "off" } + "lang": "fr_BE", + "decimal_point": ",", + "thousands_sep": ".", + "currency_symbol": "€", + "int_curr_symbol": "EUR", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "", + "1": "" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%A %B %d %Y", + "1": "%d/%m/%y" + }, + "abmonth": "anv.,févr.,mars,avril,mai,juin,juil.,août,sept.,oct.,nov.,déc.", + "month": "janvier,février,mars,avril,mai,juin,juillet,août,septembre,octobre,novembre,décembre", + "abday": "dim,lun,mar,mer,jeu,ven,sam", + "day": "dimanche,lundi,mardi,mercredi,jeudi,vendredi,samedi", + "trans": { + "yes": "oui", + "Yes": "Oui", + "no": "non", + "No": "Non", + "ok": "ok", + "on": "on", + "off": "off" + } }, "fi_FI": { - lang: "fi_FI", - decimal_point: ",", - thousands_sep: ".", - currency_symbol: "€", - int_curr_symbol: "EUR", - speed: "kmh", - distance: { 0: "m", 1: "km" }, - temperature: "°C", - ampm: { 0: "ap", 1: "ip" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, // 17.00.00 // 17.00 - datePattern: { 0: "%A %d. %B %Y", "1": "%-d/%-m/%Y" }, // sunnuntai 1. maaliskuuta 2020 // 1.3.2020 - abmonth: "tammik,helmik,maalisk,huhtik,toukok,kesäk,heinäk,elok,syysk,lokak,marrask,jouluk", - month: "tammikuuta,helmikuuta,maaliskuuta,huhtikuuta,toukokuuta,kesäkuuta,heinäkuuta,elokuuta,syyskuuta,lokakuuta,marraskuuta,joulukuuta", - abday: "su,ma,ti,ke,to,pe,la", - day: "sunnuntaina,maanantaina,tiistaina,keskiviikkona,torstaina,perjantaina,lauantaina", - trans: { yes: "oui", Yes: "Oui", no: "no", No: "No", ok: "ok", on: "on", off: "off" } + "lang": "fi_FI", + "decimal_point": ",", + "thousands_sep": ".", + "currency_symbol": "€", + "int_curr_symbol": "EUR", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "ap", + "1": "ip" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%A %d. %B %Y", + "1": "%-d/%-m/%Y" + }, + "abmonth": "tammik,helmik,maalisk,huhtik,toukok,kesäk,heinäk,elok,syysk,lokak,marrask,jouluk", + "month": "tammikuuta,helmikuuta,maaliskuuta,huhtikuuta,toukokuuta,kesäkuuta,heinäkuuta,elokuuta,syyskuuta,lokakuuta,marraskuuta,joulukuuta", + "abday": "su,ma,ti,ke,to,pe,la", + "day": "sunnuntaina,maanantaina,tiistaina,keskiviikkona,torstaina,perjantaina,lauantaina", + "trans": { + "yes": "oui", + "Yes": "Oui", + "no": "no", + "No": "No", + "ok": "ok", + "on": "on", + "off": "off" + } }, "de_CH": { - lang: "de_CH", - decimal_point: ",", - thousands_sep: ".", - currency_symbol: "CHF", - int_curr_symbol: "CHF", - speed: "kmh", - distance: { 0: "m", 1: "km" }, - temperature: "°C", - ampm: { 0: "vorm", 1: " nachm" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%A, %d. %B %Y", "1": "%d.%m.%Y" }, // Sonntag, 1. März 2020 // 1.3.2020 - abmonth: "Jan,Feb,März,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez", - month: "Januar,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember", - abday: "So,Mo,Di,Mi,Do,Fr,Sa", - day: "Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag", - trans: { yes: "ja", Yes: "Ja", no: "nein", No: "Nein", ok: "ok", on: "an", off: "aus" } + "lang": "de_CH", + "decimal_point": ",", + "thousands_sep": ".", + "currency_symbol": "CHF", + "int_curr_symbol": "CHF", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "vorm", + "1": " nachm" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%A, %d. %B %Y", + "1": "%d.%m.%Y" + }, + "abmonth": "Jan,Feb,März,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez", + "month": "Januar,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember", + "abday": "So,Mo,Di,Mi,Do,Fr,Sa", + "day": "Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag", + "trans": { + "yes": "ja", + "Yes": "Ja", + "no": "nein", + "No": "Nein", + "ok": "ok", + "on": "an", + "off": "aus" + } }, "fr_CH": { - lang: "fr_CH", - decimal_point: ",", - thousands_sep: ".", - currency_symbol: "CHF", - int_curr_symbol: "CHF", - speed: "kmh", - distance: { 0: "m", 1: "km" }, - temperature: "°C", - ampm: { 0: "AM", 1: "PM" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%A %d %B %Y", "1": "%d/%m/%y" }, // dimanche 1 mars 2020 // 01/03/20 - abmonth: "anv.,févr.,mars,avril,mai,juin,juil.,août,sept.,oct.,nov.,déc.", - month: "janvier,février,mars,avril,mai,juin,juillet,août,septembre,octobre,novembre,décembre", - abday: "dim,lun,mar,mer,jeu,ven,sam", - day: "dimanche,lundi,mardi,mercredi,jeudi,vendredi,samedi", - trans: { yes: "oui", Yes: "Oui", no: "non", No: "Non", ok: "ok", on: "on", off: "off" } + "lang": "fr_CH", + "decimal_point": ",", + "thousands_sep": ".", + "currency_symbol": "CHF", + "int_curr_symbol": "CHF", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "AM", + "1": "PM" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%A %d %B %Y", + "1": "%d/%m/%y" + }, + "abmonth": "anv.,févr.,mars,avril,mai,juin,juil.,août,sept.,oct.,nov.,déc.", + "month": "janvier,février,mars,avril,mai,juin,juillet,août,septembre,octobre,novembre,décembre", + "abday": "dim,lun,mar,mer,jeu,ven,sam", + "day": "dimanche,lundi,mardi,mercredi,jeudi,vendredi,samedi", + "trans": { + "yes": "oui", + "Yes": "Oui", + "no": "non", + "No": "Non", + "ok": "ok", + "on": "on", + "off": "off" + } }, "it_CH": { - lang: "it_CH", - decimal_point: ",", - thousands_sep: ".", - currency_symbol: "CHF", - int_curr_symbol: "CHF", - speed: 'kmh', - distance: { "0": "m", "1": "km" }, - temperature: '°C', - ampm: { 0: "", 1: "" }, - timePattern: { 0: "%HH:%MM.%SS", 1: "%HH:%MM" }, // 17:00.00 // 17:00 - datePattern: { 0: "%d %b %Y", "1": "%d/%m/%Y" }, // 1 marzo 2020 // 01/03/2020 - abmonth: "gen,feb,mar,apr,mag,giu,lug,ago,set,ott,nov,dic", - month: "gennaio,febbraio,marzo,aprile,maggio,giugno,luglio,agosto,settembre,ottobre,novembre,dicembre", - abday: "dom,lun,mar,mer,gio,ven,sab", - day: "domenica,lunedì,martedì,mercoledì,giovedì,venerdì,sabato", - trans: { yes: "sì", Yes: "Sì", no: "no", No: "No", ok: "ok", on: "on", off: "off" } + "lang": "it_CH", + "decimal_point": ",", + "thousands_sep": ".", + "currency_symbol": "CHF", + "int_curr_symbol": "CHF", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "", + "1": "" + }, + "timePattern": { + "0": "%HH:%MM.%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%d %b %Y", + "1": "%d/%m/%Y" + }, + "abmonth": "gen,feb,mar,apr,mag,giu,lug,ago,set,ott,nov,dic", + "month": "gennaio,febbraio,marzo,aprile,maggio,giugno,luglio,agosto,settembre,ottobre,novembre,dicembre", + "abday": "dom,lun,mar,mer,gio,ven,sab", + "day": "domenica,lunedì,martedì,mercoledì,giovedì,venerdì,sabato", + "trans": { + "yes": "sì", + "Yes": "Sì", + "no": "no", + "No": "No", + "ok": "ok", + "on": "on", + "off": "off" + } }, "it_IT": { - lang: "it_IT", - decimal_point: ",", - thousands_sep: ".", - currency_symbol: "€", - int_curr_symbol: "EUR", - speed: 'kmh', - distance: { "0": "m", "1": "km" }, - temperature: '°C', - ampm: { 0: "", 1: "" }, - timePattern: { 0: "%HH:%MM.%SS", 1: "%HH:%MM" }, // 17:00.00 // 17:00 - datePattern: { 0: "%d %b %Y", "1": "%d/%m/%Y" }, // 1 marzo 2020 // 01/03/2020 - abmonth: "gen,feb,mar,apr,mag,giu,lug,ago,set,ott,nov,dic", - month: "gennaio,febbraio,marzo,aprile,maggio,giugno,luglio,agosto,settembre,ottobre,novembre,dicembre", - abday: "dom,lun,mar,mer,gio,ven,sab", - day: "domenica,lunedì,martedì,mercoledì,giovedì,venerdì,sabato", - trans: { yes: "sì", Yes: "Sì", no: "no", No: "No", ok: "ok", on: "on", off: "off" } + "lang": "it_IT", + "decimal_point": ",", + "thousands_sep": ".", + "currency_symbol": "€", + "int_curr_symbol": "EUR", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "", + "1": "" + }, + "timePattern": { + "0": "%HH:%MM.%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%d %b %Y", + "1": "%d/%m/%Y" + }, + "abmonth": "gen,feb,mar,apr,mag,giu,lug,ago,set,ott,nov,dic", + "month": "gennaio,febbraio,marzo,aprile,maggio,giugno,luglio,agosto,settembre,ottobre,novembre,dicembre", + "abday": "dom,lun,mar,mer,gio,ven,sab", + "day": "domenica,lunedì,martedì,mercoledì,giovedì,venerdì,sabato", + "trans": { + "yes": "sì", + "Yes": "Sì", + "no": "no", + "No": "No", + "ok": "ok", + "on": "on", + "off": "off" + } }, "wae_CH": { - lang: "wae_CH", - decimal_point: ",", - thousands_sep: ".", - currency_symbol: "CHF", - int_curr_symbol: "CHF", - speed: 'kmh', - distance: { "0": "m", "1": "km" }, - temperature: '°C', - ampm: { 0: "", 1: "" }, - timePattern: { 0: "%HH.%MM.%SS", 1: "%HH.%MM" }, // 17.00.00 // 17.00 - datePattern: { 0: "%A, %d. %B %Y", "1": "%Y-%m-%d" }, // Sunntag, 1. Märze 2020 // 2020-03-01 - abmonth: "Jen,Hor,Mär,Abr,Mei,Brá,Hei,Öig,Her,Wím,Win,Chr", - month: "Jenner,Hornig,Märze,Abrille,Meije,Bráčet,Heiwet,Öigšte,Herbštmánet,Wímánet,Wintermánet,Chrištmánet", - abday: "Sun,Män,Ziš,Mit,Fró,Fri,Sam", - day: "Sunntag,Mäntag,Zištag,Mittwuč,Fróntag,Fritag,Samštag", - trans: { yes: "sì", Yes: "Sì", no: "no", No: "No", ok: "ok", on: "on", off: "off" } - }, - "tr_TR": { // this is default - lang: "tr_TR", - decimal_point: ",", - thousands_sep: ".", - currency_symbol: "TL", - int_curr_symbol: "TRY", - speed: 'kmh', - distance: { "0": "m", "1": "km" }, - temperature: '°C', - ampm: { 0: "öö", 1: "ös" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%d %w %Y %A", 1: "%d/%m/%Y" }, // 1 Mart 2020 Pazar // "01/03/2020" - abmonth: "Oca,Sub,Mar,Nis,May,Haz,Tem,Agu,Eyl,Eki,Kas,Ara", - month: "Ocak,Subat,Mart,Nisan,Mayis,Haziran,Temmuz,Agustos,Eylul,Ekim,Kasim,Aralik", - abday: "Paz,Pzt,Sal,Car,Per,Cum,Cmt", - day: "Pazar,Pazartesi,Sali,Carsamba,Persembe,Cuma,Cumartesi", - trans: { yes: "evet", Yes: "Evet", no: "hayir", No: "Hayir", ok: "tamam", on: "acik", off: "kapali" } + "lang": "wae_CH", + "decimal_point": ",", + "thousands_sep": ".", + "currency_symbol": "CHF", + "int_curr_symbol": "CHF", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "", + "1": "" + }, + "timePattern": { + "0": "%HH.%MM.%SS", + "1": "%HH.%MM" + }, + "datePattern": { + "0": "%A, %d. %B %Y", + "1": "%Y-%m-%d" + }, + "abmonth": "Jen,Hor,Mär,Abr,Mei,Brá,Hei,Öig,Her,Wím,Win,Chr", + "month": "Jenner,Hornig,Märze,Abrille,Meije,Bráčet,Heiwet,Öigšte,Herbštmánet,Wímánet,Wintermánet,Chrištmánet", + "abday": "Sun,Män,Ziš,Mit,Fró,Fri,Sam", + "day": "Sunntag,Mäntag,Zištag,Mittwuč,Fróntag,Fritag,Samštag", + "trans": { + "yes": "sì", + "Yes": "Sì", + "no": "no", + "No": "No", + "ok": "ok", + "on": "on", + "off": "off" + } + }, + "tr_TR": { + "lang": "tr_TR", + "decimal_point": ",", + "thousands_sep": ".", + "currency_symbol": "TL", + "int_curr_symbol": "TRY", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "öö", + "1": "ös" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%d %w %Y %A", + "1": "%d/%m/%Y" + }, + "abmonth": "Oca,Sub,Mar,Nis,May,Haz,Tem,Agu,Eyl,Eki,Kas,Ara", + "month": "Ocak,Subat,Mart,Nisan,Mayis,Haziran,Temmuz,Agustos,Eylul,Ekim,Kasim,Aralik", + "abday": "Paz,Pzt,Sal,Car,Per,Cum,Cmt", + "day": "Pazar,Pazartesi,Sali,Carsamba,Persembe,Cuma,Cumartesi", + "trans": { + "yes": "evet", + "Yes": "Evet", + "no": "hayir", + "No": "Hayir", + "ok": "tamam", + "on": "acik", + "off": "kapali" + } }, "hu_HU": { - lang: "hu_HU", - decimal_point: ",", - thousands_sep: " ", - currency_symbol: "Ft", - int_curr_symbol: "HUF", - speed: 'kph', - distance: { "0": "m", "1": "km" }, - temperature: '°C', - ampm: { 0: "de", 1: "du" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%Y %b %d, %A", 1: "%Y.%m.%d" }, // 2020 Feb 28, Péntek" // "2020.03.01."(short) - abmonth: "Jan,Feb,Már,Ápr,Máj,Jún,Júl,Aug,Szep,Okt,Nov,Dec", - month: "Január,Február,Március,Április,Május,Június,Július,Augusztus,Szeptember,Október,November,December", - abday: "Vas,Hét,Ke,Szer,Csüt,Pén,Szom", - day: "Vasárnap,Hétfő,Kedd,Szerda,Csütörtök,Péntek,Szombat", - trans: { yes: "igen", Yes: "Igen", no: "nem", No: "Nem", ok: "ok", on: "be", off: "ki" } + "lang": "hu_HU", + "decimal_point": ",", + "thousands_sep": " ", + "currency_symbol": "Ft", + "int_curr_symbol": "HUF", + "speed": "kph", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "de", + "1": "du" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%Y %b %d, %A", + "1": "%Y.%m.%d" + }, + "abmonth": "Jan,Feb,Már,Ápr,Máj,Jún,Júl,Aug,Szep,Okt,Nov,Dec", + "month": "Január,Február,Március,Április,Május,Június,Július,Augusztus,Szeptember,Október,November,December", + "abday": "Vas,Hét,Ke,Szer,Csüt,Pén,Szom", + "day": "Vasárnap,Hétfő,Kedd,Szerda,Csütörtök,Péntek,Szombat", + "trans": { + "yes": "igen", + "Yes": "Igen", + "no": "nem", + "No": "Nem", + "ok": "ok", + "on": "be", + "off": "ki" + } }, "oc_FR": { - lang: "oc_FR", - decimal_point: ",", - thousands_sep: " ", - currency_symbol: "€", - int_curr_symbol: "EUR", - speed: "km/h", - distance: { 0: "m", 1: "km" }, - temperature: "°C", - ampm: { 0: "", 1: "" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%A %d %B de %Y", "1": "%d/%m/%Y" }, // dimenge 1 de març de 2020 // 01/03/2020 - abmonth: "gen.,febr.,març,abril,mai,junh,julh,ago.,set.,oct.,nov.,dec.", - month: "genièr,febrièr,març,abril,mai,junh,julhet,agost,setembre,octòbre,novembre,decembre", - abday: "dg,dl,dm,dc,dj,dv,ds", - day: "dimenge,diluns,dimars,dimècres,dijòus,divendres,dissabte", - trans: { yes: "òc", Yes: "Òc", no: "non", No: "Non", ok: "ok", on: "on", off: "off" } + "lang": "oc_FR", + "decimal_point": ",", + "thousands_sep": " ", + "currency_symbol": "€", + "int_curr_symbol": "EUR", + "speed": "km/h", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "", + "1": "" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%A %d %B de %Y", + "1": "%d/%m/%Y" + }, + "abmonth": "gen.,febr.,març,abril,mai,junh,julh,ago.,set.,oct.,nov.,dec.", + "month": "genièr,febrièr,març,abril,mai,junh,julhet,agost,setembre,octòbre,novembre,decembre", + "abday": "dg,dl,dm,dc,dj,dv,ds", + "day": "dimenge,diluns,dimars,dimècres,dijòus,divendres,dissabte", + "trans": { + "yes": "òc", + "Yes": "Òc", + "no": "non", + "No": "Non", + "ok": "ok", + "on": "on", + "off": "off" + } }, "pt_BR": { - lang: "pt_BR", - decimal_point: ",", - thousands_sep: ".", - currency_symbol: "R$", currency_first: true, - int_curr_symbol: "BRL", - speed: "kmh", - distance: { 0: "m", 1: "km" }, - temperature: "°C", - ampm: { 0: "am", 1: "pm" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%d %b %Y", 1: "%d/%m/%y" }, - abmonth: "Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set,Out,Nov,Dez", - month: "Janeiro,Fevereiro,Março,Abril,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro", - abday: "Dom,Seg,Ter,Qua,Qui,Sex,Sab", - day: "Domingo,Segunda-feira,Terça-feira,Quarta-feira,Quinta-feira,Sexta-feira,Sábado", - trans: { yes: "sim", Yes: "Sim", no: "não", No: "Não", ok: "confirmar", on: "ativado", off: "desativado" } - }, - "cs_CZ": { // THIS NEVER WORKED PROPERLY - many chars are not in the ISO8859-1 codepage and we use CODEPAGE_CONVERSIONS - lang: "cs_CZ", - decimal_point: ",", - thousands_sep: " ", - currency_symbol: "Kč", - int_curr_symbol: " CZK", - speed: 'kmh', - distance: { "0": "m", "1": "km" }, - temperature: '°C', - ampm: { 0: "dop", 1: "odp" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%d. %b %Y", 1: "%d.%m.%Y" }, // "30. led 2020" // "30.01.2020"(short) - abmonth: "led,úno,bře,dub,kvě,čvn,čvc,srp,zář,říj,lis,pro", - month: "leden,únor,březen,duben,květen,červen,červenec,srpen,září,říjen,listopad,prosinec", - abday: "ne,po,út,st,čt,pá,so", - day: "neděle,pondělí,úterý,středa,čtvrtek,pátek,sobota", - trans: { yes: "ano", Yes: "Ano", no: "ne", No: "Ne", ok: "ok", on: "zap", off: "vyp" } - }, - "hr_HR": { - lang: "hr_HR", - decimal_point: ",", - thousands_sep: ".", - currency_symbol: "€", - int_curr_symbol: "EUR", - speed: "km/h", - distance: { 0: "m", 1: "km" }, - temperature: "°C", - ampm: { 0: "dop.", 1: "pop." }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%-d. %b %Y", 1: "%-d.%-m.%Y" }, // "3. jan. 2020" // "3.1.2020"(short) - abmonth: "sij.,velj.,ožu.,tra.,svi,lip.,srp.,kol.,ruj.,lis.,stu.,pro.", - month: "siječanj,veljača,ožujak,travanj,svibanj,lipanj,srpanj,kolovoz,rujan,listopad,studeni,prosinac", - abday: "ned.,pon.,uto.,sri.,čet.,pet.,sub.", - day: "nedjelja,ponedjeljak,utorak,srijeda,četvrtak,petak,subota", - trans: { yes: "da", Yes: "Da", no: "ne", No: "Ne", ok: "ok", on: "Uklj.", off: "Isklj.", "< Back": "< Natrag" } + "lang": "pt_BR", + "decimal_point": ",", + "thousands_sep": ".", + "currency_symbol": "R$", + "currency_first": true, + "int_curr_symbol": "BRL", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "am", + "1": "pm" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%d %b %Y", + "1": "%d/%m/%y" + }, + "abmonth": "Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set,Out,Nov,Dez", + "month": "Janeiro,Fevereiro,Março,Abril,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro", + "abday": "Dom,Seg,Ter,Qua,Qui,Sex,Sab", + "day": "Domingo,Segunda-feira,Terça-feira,Quarta-feira,Quinta-feira,Sexta-feira,Sábado", + "trans": { + "yes": "sim", + "Yes": "Sim", + "no": "não", + "No": "Não", + "ok": "confirmar", + "on": "ativado", + "off": "desativado" + } + }, + "cs_CZ": { + "lang": "cs_CZ", + "decimal_point": ",", + "thousands_sep": " ", + "currency_symbol": "Kč", + "int_curr_symbol": " CZK", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "dop", + "1": "odp" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%d. %b %Y", + "1": "%d.%m.%Y" + }, + "abmonth": "led,úno,bře,dub,kvě,čvn,čvc,srp,zář,říj,lis,pro", + "month": "leden,únor,březen,duben,květen,červen,červenec,srpen,září,říjen,listopad,prosinec", + "abday": "ne,po,út,st,čt,pá,so", + "day": "neděle,pondělí,úterý,středa,čtvrtek,pátek,sobota", + "trans": { + "yes": "ano", + "Yes": "Ano", + "no": "ne", + "No": "Ne", + "ok": "ok", + "on": "zap", + "off": "vyp" + } + }, + "hr_HR": { + "lang": "hr_HR", + "decimal_point": ",", + "thousands_sep": ".", + "currency_symbol": "€", + "int_curr_symbol": "EUR", + "speed": "km/h", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "dop.", + "1": "pop." + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%-d. %b %Y", + "1": "%-d.%-m.%Y" + }, + "abmonth": "sij.,velj.,ožu.,tra.,svi,lip.,srp.,kol.,ruj.,lis.,stu.,pro.", + "month": "siječanj,veljača,ožujak,travanj,svibanj,lipanj,srpanj,kolovoz,rujan,listopad,studeni,prosinac", + "abday": "ned.,pon.,uto.,sri.,čet.,pet.,sub.", + "day": "nedjelja,ponedjeljak,utorak,srijeda,četvrtak,petak,subota", + "trans": { + "yes": "da", + "Yes": "Da", + "no": "ne", + "No": "Ne", + "ok": "ok", + "on": "Uklj.", + "off": "Isklj.", + "< Back": "< Natrag" + } }, "sl_SI": { - lang: "sl_SI", - decimal_point: ",", - thousands_sep: ".", - currency_symbol: "€", - int_curr_symbol: "EUR", - speed: "km/h", - distance: { 0: "m", 1: "km" }, - temperature: "°C", - ampm: { 0: "dop.", 1: "pop." }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%-d. %b %Y", 1: "%-d.%-m.%Y" }, // "3. jan. 2020" // "3.1.2020"(short) - abmonth: "jan.,feb.,mar.,apr.,maj,jun.,jul.,avg.,sep.,okt.,nov.,dec.", - month: "januar,februar,marec,april,maj,junij,julij,avgust,september,oktober,november,december", - abday: "ned.,pon.,tor.,sre.,čet.,pet.,sob.", - day: "nedelja,ponedeljek,torek,sreda,četrtek,petek,sobota", - trans: { yes: "da", Yes: "Da", no: "ne", No: "Ne", ok: "ok", on: "Vklj.", off: "Izklj.", "< Back": "< Nazaj" } + "lang": "sl_SI", + "decimal_point": ",", + "thousands_sep": ".", + "currency_symbol": "€", + "int_curr_symbol": "EUR", + "speed": "km/h", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "dop.", + "1": "pop." + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%-d. %b %Y", + "1": "%-d.%-m.%Y" + }, + "abmonth": "jan.,feb.,mar.,apr.,maj,jun.,jul.,avg.,sep.,okt.,nov.,dec.", + "month": "januar,februar,marec,april,maj,junij,julij,avgust,september,oktober,november,december", + "abday": "ned.,pon.,tor.,sre.,čet.,pet.,sob.", + "day": "nedelja,ponedeljek,torek,sreda,četrtek,petek,sobota", + "trans": { + "yes": "da", + "Yes": "Da", + "no": "ne", + "No": "Ne", + "ok": "ok", + "on": "Vklj.", + "off": "Izklj.", + "< Back": "< Nazaj" + } }, "pt_PT": { - lang: "pt_PT", - decimal_point: ",", - thousands_sep: " ", - currency_symbol: "€", - int_curr_symbol: "EUR", - speed: "kmh", - distance: { 0: "m", 1: "km" }, - temperature: "°C", - ampm: { 0: "am", 1: "pm" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%d %b %Y", 1: "%d/%m/%y" }, - abmonth: "Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set,Out,Nov,Dez", - month: "Janeiro,Fevereiro,Março,Abril,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro", - abday: "Dom,Seg,Ter,Qua,Qui,Sex,Sab", - day: "Domingo,Segunda-feira,Terça-feira,Quarta-feira,Quinta-feira,Sexta-feira,Sábado", - trans: { yes: "sim", Yes: "Sim", no: "não", No: "Não", ok: "ok", on: "on", off: "off" } + "lang": "pt_PT", + "decimal_point": ",", + "thousands_sep": " ", + "currency_symbol": "€", + "int_curr_symbol": "EUR", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "am", + "1": "pm" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%d %b %Y", + "1": "%d/%m/%y" + }, + "abmonth": "Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set,Out,Nov,Dez", + "month": "Janeiro,Fevereiro,Março,Abril,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro", + "abday": "Dom,Seg,Ter,Qua,Qui,Sex,Sab", + "day": "Domingo,Segunda-feira,Terça-feira,Quarta-feira,Quinta-feira,Sexta-feira,Sábado", + "trans": { + "yes": "sim", + "Yes": "Sim", + "no": "não", + "No": "Não", + "ok": "ok", + "on": "on", + "off": "off" + } }, "pl_PL": { - lang: "pl_PL", - decimal_point: ",", - thousands_sep: " ", - currency_symbol: "zł", - int_curr_symbol: "PLN", - speed: "kmh", - distance: { 0: "m", 1: "km" }, - temperature: "°C", - ampm: { 0: "", 1: "" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%d. %b %Y", "1": "%d.%m.%Y" }, // 1. Mar 2021 // 01.03.2021 - abmonth: "Sty,Lut,Mar,Kwi,Maj,Cze,Lip,Sie,Wrz,Paź,Lis,Gru", - month: "Styczeń,Luty,Marzec,Kwiecień,Maj,Czerwiec,Lipiec,Sierpień,Wrzesień,Październik,Listopad,Grudzień", - abday: "Ndz,Pon,Wt,Śr,Czw,Pt,Sob", - day: "Niedziela,Poniedziałek,Wtorek,Środa,Czwartek,Piątek,Sobota", - trans: { yes: "tak", Yes: "Tak", no: "nie", No: "Nie", ok: "ok", on: "on", off: "off", "< Back": "< Wstecz" } - }, - "lv_LV": { // Using charfallbacks - lang: "lv_LV", - decimal_point: ",", - thousands_sep: " ", - currency_symbol: "€", - int_curr_symbol: "EUR", - speed: "kmh", - distance: { 0: "m", 1: "km" }, - temperature: "°C", - ampm: { 0: "", 1: "" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%d. %b %Y", "1": "%d.%m.%Y" }, // 1. Mar 2020 // 01.03.20 - abmonth: "Jan,Feb,Mar,Apr,Mai,Jūn,Jūl,Aug,Sep,Okt,Nov,Dec", - month: "Janvāris,Februāris,Marts,Aprīlis,Maijs,Jūnijs,Jūlijs,Augusts,Septemberis,Oktobris,Novembris,Decembris", - abday: "Pr,Ot,Tr,Ce,Pk,Se,Sv", - day: "Pirmdiena,Otrdiena,Trešdiena,Ceturtdiena,Piektdiena,Sestdiena,Svētdiena", - trans: { yes: "jā", Yes: "Jā", no: "nē", No: "Nē", ok: "labi", on: "Ieslēgt", off: "Izslēgt", "< Back": "< Atpakaļ" } - }, - "nn_NO": { // Using charfallbacks - lang: "nn_NO", - decimal_point: ",", - thousands_sep: " ", - currency_symbol: "kr", - int_curr_symbol: "NOK", - speed: "kmt", - distance: { 0: "m", 1: "km" }, - temperature: "°C", - ampm: { 0: "", 1: "" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%d. %b %Y", "1": "%d.%m.%Y" }, // 1. Mar 2020 // 01.03.20 - abmonth: "Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Des", - month: "Januar,Februar,Mars,April,Mai,Juni,Juli,August,September,Oktober,November,Desember", - abday: "Su,Må,Ty,On,To,Fr,La", - day: "Sundag,Måndag,Tysdag,Onsdag,Torsdag,Fredag,Laurdag", - trans: { yes: "ja", Yes: "Ja", no: "nei", No: "Nei", ok: "ok", on: "på", off: "av", "< Back": "< Tilbake", "Delete": "Slett", "Mark Unread": "Merk som ulesen" } - }, - "nb_NO": { // Using charfallbacks - lang: "nb_NO", - decimal_point: ",", - thousands_sep: " ", - currency_symbol: "kr", - int_curr_symbol: "NOK", - speed: "kmh", - distance: { 0: "m", 1: "km" }, - temperature: "°C", - ampm: { 0: "", 1: "" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%d. %b %Y", "1": "%d.%m.%Y" }, // 1. Mar 2020 // 01.03.20 - abmonth: "Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Des", - month: "Januar,Februar,Mars,April,Mai,Juni,Juli,August,September,Oktober,November,Desember", - abday: "Sø,Ma,Ti,On,To,Fr,Lø", - day: "Søndag,Mandag,Tirsdag,Onsdag,Torsdag,Fredag,Lørdag", - trans: { yes: "ja", Yes: "Ja", no: "nei", No: "Nei", ok: "ok", on: "på", off: "av", "< Back": "< Tilbake", "Delete": "Slett", "Mark Unread": "Merk som ulest" } + "lang": "pl_PL", + "decimal_point": ",", + "thousands_sep": " ", + "currency_symbol": "zł", + "int_curr_symbol": "PLN", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "", + "1": "" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%d. %b %Y", + "1": "%d.%m.%Y" + }, + "abmonth": "Sty,Lut,Mar,Kwi,Maj,Cze,Lip,Sie,Wrz,Paź,Lis,Gru", + "month": "Styczeń,Luty,Marzec,Kwiecień,Maj,Czerwiec,Lipiec,Sierpień,Wrzesień,Październik,Listopad,Grudzień", + "abday": "Ndz,Pon,Wt,Śr,Czw,Pt,Sob", + "day": "Niedziela,Poniedziałek,Wtorek,Środa,Czwartek,Piątek,Sobota", + "trans": { + "yes": "tak", + "Yes": "Tak", + "no": "nie", + "No": "Nie", + "ok": "ok", + "on": "on", + "off": "off", + "< Back": "< Wstecz" + } + }, + "lv_LV": { + "lang": "lv_LV", + "decimal_point": ",", + "thousands_sep": " ", + "currency_symbol": "€", + "int_curr_symbol": "EUR", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "", + "1": "" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%d. %b %Y", + "1": "%d.%m.%Y" + }, + "abmonth": "Jan,Feb,Mar,Apr,Mai,Jūn,Jūl,Aug,Sep,Okt,Nov,Dec", + "month": "Janvāris,Februāris,Marts,Aprīlis,Maijs,Jūnijs,Jūlijs,Augusts,Septemberis,Oktobris,Novembris,Decembris", + "abday": "Pr,Ot,Tr,Ce,Pk,Se,Sv", + "day": "Pirmdiena,Otrdiena,Trešdiena,Ceturtdiena,Piektdiena,Sestdiena,Svētdiena", + "trans": { + "yes": "jā", + "Yes": "Jā", + "no": "nē", + "No": "Nē", + "ok": "labi", + "on": "Ieslēgt", + "off": "Izslēgt", + "< Back": "< Atpakaļ" + } + }, + "nn_NO": { + "lang": "nn_NO", + "decimal_point": ",", + "thousands_sep": " ", + "currency_symbol": "kr", + "int_curr_symbol": "NOK", + "speed": "kmt", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "", + "1": "" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%d. %b %Y", + "1": "%d.%m.%Y" + }, + "abmonth": "Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Des", + "month": "Januar,Februar,Mars,April,Mai,Juni,Juli,August,September,Oktober,November,Desember", + "abday": "Su,Må,Ty,On,To,Fr,La", + "day": "Sundag,Måndag,Tysdag,Onsdag,Torsdag,Fredag,Laurdag", + "trans": { + "yes": "ja", + "Yes": "Ja", + "no": "nei", + "No": "Nei", + "ok": "ok", + "on": "på", + "off": "av", + "< Back": "< Tilbake", + "Delete": "Slett", + "Mark Unread": "Merk som ulesen" + } + }, + "nb_NO": { + "lang": "nb_NO", + "decimal_point": ",", + "thousands_sep": " ", + "currency_symbol": "kr", + "int_curr_symbol": "NOK", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "", + "1": "" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%d. %b %Y", + "1": "%d.%m.%Y" + }, + "abmonth": "Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Des", + "month": "Januar,Februar,Mars,April,Mai,Juni,Juli,August,September,Oktober,November,Desember", + "abday": "Sø,Ma,Ti,On,To,Fr,Lø", + "day": "Søndag,Mandag,Tirsdag,Onsdag,Torsdag,Fredag,Lørdag", + "trans": { + "yes": "ja", + "Yes": "Ja", + "no": "nei", + "No": "Nei", + "ok": "ok", + "on": "på", + "off": "av", + "< Back": "< Tilbake", + "Delete": "Slett", + "Mark Unread": "Merk som ulest" + } }, "ca_ES": { - lang: "ca_ES", - icon: "🇪🇺", - decimal_point: ",", - thousands_sep: ".", - currency_symbol: "€", - int_curr_symbol: "EUR", - speed: "kmh", - distance: { 0: "m", 1: "km" }, - temperature: "°C", - ampm: { 0: "", 1: "" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%d %B %Y", "1": "%d/%m/%y" }, - abmonth: "gen.,febr.,març,abr.,maig,juny,jul.,ag.,set.,oct.,nov.,des.", - month: "gener,febrer,març,abril,maig,juny,juliol,agost,setembre,octobre,novembre,desembre", - abday: "dg.,dl.,dt.,dc.,dj.,dv.,ds.", - day: "diumenge,dilluns,dimarts,dimecres,dijous,divendres,dissabte", - trans: { yes: "sí", Yes: "Sí", no: "no", No: "No", ok: "d'acord", on: "on", off: "off", - "< Back": "< Enrere", "Delete": "Esborra", "Mark Unread": "Marca com a no llegit" } - }, -/*, + "lang": "ca_ES", + "icon": "🇪🇺", + "decimal_point": ",", + "thousands_sep": ".", + "currency_symbol": "€", + "int_curr_symbol": "EUR", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "", + "1": "" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%d %B %Y", + "1": "%d/%m/%y" + }, + "abmonth": "gen.,febr.,març,abr.,maig,juny,jul.,ag.,set.,oct.,nov.,des.", + "month": "gener,febrer,març,abril,maig,juny,juliol,agost,setembre,octobre,novembre,desembre", + "abday": "dg.,dl.,dt.,dc.,dj.,dv.,ds.", + "day": "diumenge,dilluns,dimarts,dimecres,dijous,divendres,dissabte", + "trans": { + "yes": "sí", + "Yes": "Sí", + "no": "no", + "No": "No", + "ok": "d'acord", + "on": "on", + "off": "off", + "< Back": "< Enrere", + "Delete": "Esborra", + "Mark Unread": "Marca com a no llegit" + } + }/*, "he_IL": { // This won't work until we get a font - see https://github.com/espruino/BangleApps/issues/399 codePage : "ISO8859-8", lang: "he_IL", From e4f5d36058820910138eb25185418860819daa3d Mon Sep 17 00:00:00 2001 From: Anton Date: Sat, 16 Mar 2024 21:09:26 +0100 Subject: [PATCH 02/18] Show generated locale diff --- apps/locale/locales.js | 625 ++++++++++++++++++++++++----------------- 1 file changed, 368 insertions(+), 257 deletions(-) diff --git a/apps/locale/locales.js b/apps/locale/locales.js index a2ac98c9bd..d12182c9a5 100644 --- a/apps/locale/locales.js +++ b/apps/locale/locales.js @@ -1,6 +1,7 @@ /* jshint esversion: 6 */ /** - * Intermediate file format + * This file is autogenerated. If you need to edit it, please do so in 'apps/locale/locales-meta.js' instead. + * This was last updated 16/03/2024, 21.03.30 */ const distanceUnits = { @@ -33,6 +34,9 @@ const codePages = { var locales = { "en_GB": { "lang": "en_GB", + "icon": "🇬🇧", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ".", "thousands_sep": ",", "currency_symbol": "£", @@ -56,14 +60,17 @@ var locales = { "0": "%b %d %Y", "1": "%d/%m/%Y" }, - "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sept,Oct,Nov,Dec", "month": "January,February,March,April,May,June,July,August,September,October,November,December", "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" }, "en_US": { "lang": "en_US", + "icon": "🇺🇸", "notes": "USA with MM/DD/YY date", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ".", "thousands_sep": ",", "currency_symbol": "$", @@ -76,16 +83,16 @@ var locales = { }, "temperature": "°F", "ampm": { - "0": "am", - "1": "pm" + "0": "AM", + "1": "PM" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%b %d, %Y", - "1": "%m/%d/%y" + "0": "%b %-d, %Y", + "1": "%-m/%-d/%y" }, "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", "month": "January,February,March,April,May,June,July,August,September,October,November,December", @@ -96,6 +103,8 @@ var locales = { "lang": "en_US 2", "icon": "🇺🇸", "notes": "USA with YYYY-MM-DD date", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ".", "thousands_sep": ",", "currency_symbol": "$", @@ -108,8 +117,8 @@ var locales = { }, "temperature": "°F", "ampm": { - "0": "am", - "1": "pm" + "0": "AM", + "1": "PM" }, "timePattern": { "0": "%HH:%MM:%SS", @@ -126,6 +135,9 @@ var locales = { }, "en_IN": { "lang": "en_IN", + "icon": "🇮🇳", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ".", "thousands_sep": ",", "currency_symbol": "Rs.", @@ -146,21 +158,24 @@ var locales = { "1": "%HH:%MM" }, "datePattern": { - "0": "%d %b %Y", - "1": "%d/%m/%Y" + "0": "%-d %b %Y", + "1": "%d/%m/%y" }, - "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sept,Oct,Nov,Dec", "month": "January,February,March,April,May,June,July,August,September,October,November,December", "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" }, "en_IE": { "lang": "en_IE", + "icon": "🇮🇪", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ".", "thousands_sep": ",", "currency_symbol": "€", - "int_curr_symbol": "EUR", "currency_first": true, + "int_curr_symbol": "EUR", "speed": "kmh", "distance": { "0": "m", @@ -176,17 +191,19 @@ var locales = { "1": "%HH:%MM" }, "datePattern": { - "0": "%d %b %Y", + "0": "%-d %b %Y", "1": "%d/%m/%Y" }, - "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sept,Oct,Nov,Dec", "month": "January,February,March,April,May,June,July,August,September,October,November,December", "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" }, "en_NAV": { "lang": "en_NAV", - "icon": "⛵✈️", + "icon": "⛵✈️", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ".", "thousands_sep": ",", "currency_symbol": "£", @@ -210,13 +227,16 @@ var locales = { "0": "%b %d %Y", "1": "%d/%m/%Y" }, - "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sept,Oct,Nov,Dec", "month": "January,February,March,April,May,June,July,August,September,October,November,December", "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" }, "de_DE": { "lang": "de_DE", + "icon": "🇩🇪", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": ".", "currency_symbol": "€", @@ -228,8 +248,8 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "", - "1": "" + "0": "AM", + "1": "PM" }, "timePattern": { "0": "%HH:%MM:%SS", @@ -239,9 +259,9 @@ var locales = { "0": "%d. %b %Y", "1": "%d.%m.%Y" }, - "abmonth": "Jan,Feb,Mär,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez", + "abmonth": "Jan.,Feb.,März,Apr.,Mai,Juni,Juli,Aug.,Sept.,Okt.,Nov.,Dez.", "month": "Januar,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember", - "abday": "So,Mo,Di,Mi,Do,Fr,Sa", + "abday": "So.,Mo.,Di.,Mi.,Do.,Fr.,Sa.", "day": "Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag", "trans": { "yes": "ja", @@ -258,6 +278,9 @@ var locales = { }, "en_JP": { "lang": "en_JP", + "icon": "🇯🇵", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ".", "thousands_sep": ",", "currency_symbol": "¥", @@ -269,8 +292,8 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "", - "1": "" + "0": "am", + "1": "pm" }, "timePattern": { "0": "%HH:%MM:%SS", @@ -278,18 +301,22 @@ var locales = { }, "datePattern": { "0": "%Y/%m/%d", - "1": "%y/%m/%d" + "1": "%Y/%m/%d" }, - "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sept,Oct,Nov,Dec", "month": "January,February,March,April,May,June,July,August,September,October,November,December", "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" }, "nl_NL": { "lang": "nl_NL", + "icon": "🇳🇱", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": ".", "currency_symbol": "€", + "currency_first": true, "int_curr_symbol": "EUR", "speed": "kmh", "distance": { @@ -298,21 +325,21 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "", - "1": "" + "0": "a.m.", + "1": "p.m." }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%d %b %Y", + "0": "%-d %b %Y", "1": "%d-%m-%Y" }, - "abday": "zo,ma,di,wo,do,vr,za", - "day": "zondag,maandag,dinsdag,woensdag,donderdag,vrijdag,zaterdag", "abmonth": "jan,feb,mrt,apr,mei,jun,jul,aug,sep,okt,nov,dec", "month": "januari,februari,maart,april,mei,juni,juli,augustus,september,oktober,november,december", + "abday": "zo,ma,di,wo,do,vr,za", + "day": "zondag,maandag,dinsdag,woensdag,donderdag,vrijdag,zaterdag", "trans": { "yes": "ja", "Yes": "Ja", @@ -328,9 +355,13 @@ var locales = { }, "en_NL": { "lang": "en_NL", + "icon": "🇳🇱", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": ".", "currency_symbol": "€", + "currency_first": true, "int_curr_symbol": "EUR", "speed": "km/h", "distance": { @@ -350,16 +381,20 @@ var locales = { "0": "%b %d %Y", "1": "%d/%m/%Y" }, - "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sept,Oct,Nov,Dec", "month": "January,February,March,April,May,June,July,August,September,October,November,December", "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" }, "en_CA": { "lang": "en_CA", + "icon": "🇨🇦", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ".", "thousands_sep": ",", "currency_symbol": "$", + "currency_first": true, "int_curr_symbol": "CAD", "speed": "km/h", "distance": { @@ -368,15 +403,15 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "am", - "1": "pm" + "0": "a.m.", + "1": "p.m." }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%A, %B %d, %Y", + "0": "%b %-d, %Y", "1": "%Y-%m-%d" }, "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", @@ -386,6 +421,9 @@ var locales = { }, "fr_FR": { "lang": "fr_FR", + "icon": "🇫🇷", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": " ", "currency_symbol": "€", @@ -397,20 +435,20 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "", - "1": "" + "0": "AM", + "1": "PM" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%d %B %Y", + "0": "%-d %b %Y", "1": "%d/%m/%Y" }, - "abmonth": "janv,févr,mars,avril,mai,juin,juil,août,sept,oct,nov,déc", + "abmonth": "janv.,févr.,mars,avr.,mai,juin,juil.,août,sept.,oct.,nov.,déc.", "month": "janvier,février,mars,avril,mai,juin,juillet,août,septembre,octobre,novembre,décembre", - "abday": "dim,lun,mar,mer,jeu,ven,sam", + "abday": "dim.,lun.,mar.,mer.,jeu.,ven.,sam.", "day": "dimanche,lundi,mardi,mercredi,jeudi,vendredi,samedi", "trans": { "yes": "oui", @@ -424,10 +462,13 @@ var locales = { }, "sv_SE": { "lang": "sv_SE", + "icon": "🇸🇪", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ",", - "thousands_sep": ".", + "thousands_sep": " ", "currency_symbol": "kr", - "int_curr_symbol": "SKR", + "int_curr_symbol": "SEK", "speed": "km/tim", "distance": { "0": "m", @@ -446,7 +487,7 @@ var locales = { "0": "%b %d %Y", "1": "%Y-%m-%d" }, - "abmonth": "jan,feb,mars,apr,maj,juni,juli,aug,sep,okt,nov,dec", + "abmonth": "jan.,feb.,mars,apr.,maj,juni,juli,aug.,sep.,okt.,nov.,dec.", "month": "januari,februari,mars,april,maj,juni,juli,augusti,september,oktober,november,december", "abday": "sön,mån,tis,ons,tors,fre,lör", "day": "söndag,måndag,tisdag,onsdag,torsdag,fredag,lördag", @@ -462,10 +503,13 @@ var locales = { }, "en_SE": { "lang": "en_SE", + "icon": "🇸🇪", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ",", - "thousands_sep": ".", + "thousands_sep": " ", "currency_symbol": "kr", - "int_curr_symbol": "SKR", + "int_curr_symbol": "SEK", "speed": "km/h", "distance": { "0": "m", @@ -473,8 +517,8 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "", - "1": "" + "0": "am", + "1": "pm" }, "timePattern": { "0": "%HH:%MM:%SS", @@ -484,16 +528,19 @@ var locales = { "0": "%B %d %Y", "1": "%Y-%m-%d" }, - "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sept,Oct,Nov,Dec", "month": "January,February,March,April,May,June,July,August,September,October,November,December", "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" }, "da_DK": { "lang": "da_DK", + "icon": "🇩🇰", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": ".", - "currency_symbol": "kr", + "currency_symbol": "kr.", "int_curr_symbol": "DKK", "speed": "km/t", "distance": { @@ -502,36 +549,37 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "", - "1": "" + "0": "AM", + "1": "PM" }, "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" + "0": "%HH.%MM.%SS", + "1": "%HH.%MM" }, "datePattern": { - "0": "%d. %b. %Y", - "1": "%d/%m %Y" + "0": "%-d. %b %Y", + "1": "%d.%m.%Y" }, - "abmonth": "jan,feb,mar,apr,maj,jun,jul,aug,sep,okt,nov,dec", + "abmonth": "jan.,feb.,mar.,apr.,maj,jun.,jul.,aug.,sep.,okt.,nov.,dec.", "month": "januar,februar,marts,april,maj,juni,juli,august,september,oktober,november,december", - "abday": "søn,man,tir,ons,tor,fre,lør", + "abday": "søn.,man.,tirs.,ons.,tors.,fre.,lør.", "day": "søndag,mandag,tirsdag,onsdag,torsdag,fredag,lørdag", "trans": { "yes": "ja", "Yes": "Ja", "no": "nej", "No": "Nej", - "ok": "ok", - "on": "tændt", - "off": "slukket" + "ok": "ok" } }, "en_DK": { "lang": "en_DK", + "icon": "🇩🇰", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": ".", - "currency_symbol": "kr", + "currency_symbol": "kr.", "int_curr_symbol": "DKK", "speed": "km/h", "distance": { @@ -540,27 +588,31 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "", - "1": "" + "0": "am", + "1": "pm" }, "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" + "0": "%HH.%MM.%SS", + "1": "%HH.%MM" }, "datePattern": { - "0": "%d. %b. %Y", - "1": "%d/%m %Y" + "0": "%-d %b %Y", + "1": "%d/%m/%Y" }, - "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sept,Oct,Nov,Dec", "month": "January,February,March,April,May,June,July,August,September,October,November,December", "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" }, "en_NZ": { "lang": "en_NZ", + "icon": "🇳🇿", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ".", "thousands_sep": ",", "currency_symbol": "$", + "currency_first": true, "int_curr_symbol": "NZD", "speed": "kph", "distance": { @@ -577,19 +629,23 @@ var locales = { "1": "%HH:%MM" }, "datePattern": { - "0": "%A, %B %d, %Y", - "1": "%d/%m/%y" + "0": "%-d %b %Y", + "1": "%d/%m/%Y" }, - "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sept,Oct,Nov,Dec", "month": "January,February,March,April,May,June,July,August,September,October,November,December", "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" }, "en_AU": { "lang": "en_AU", + "icon": "🇦🇺", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ".", "thousands_sep": ",", "currency_symbol": "$", + "currency_first": true, "int_curr_symbol": "AUD", "speed": "kmh", "distance": { @@ -606,19 +662,23 @@ var locales = { "1": "%HH:%MM" }, "datePattern": { - "0": "%A, %B %d, %Y", - "1": "%d/%m/%y" + "0": "%-d %b %Y", + "1": "%-d/%-m/%y" }, - "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "abmonth": "Jan,Feb,Mar,Apr,May,June,July,Aug,Sept,Oct,Nov,Dec", "month": "January,February,March,April,May,June,July,August,September,October,November,December", "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" }, "de_AT": { "lang": "de_AT", + "icon": "🇦🇹", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ",", - "thousands_sep": ".", + "thousands_sep": " ", "currency_symbol": "€", + "currency_first": true, "int_curr_symbol": "EUR", "speed": "kmh", "distance": { @@ -627,20 +687,20 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "", - "1": "" + "0": "AM", + "1": "PM" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%A, %d. %B %Y", + "0": "%d.%m.%Y", "1": "%d.%m.%y" }, - "abmonth": "Jän,Feb,März,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez", + "abmonth": "Jän.,Feb.,März,Apr.,Mai,Juni,Juli,Aug.,Sep.,Okt.,Nov.,Dez.", "month": "Jänner,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember", - "abday": "So,Mo,Di,Mi,Do,Fr,Sa", + "abday": "So.,Mo.,Di.,Mi.,Do.,Fr.,Sa.", "day": "Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag", "trans": { "yes": "ja", @@ -657,9 +717,13 @@ var locales = { }, "en_IL": { "lang": "en_IL", - "decimal_point": ",", - "thousands_sep": ".", + "icon": "🇮🇱", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ".", + "thousands_sep": ",", "currency_symbol": "ILS", + "currency_first": true, "int_curr_symbol": "ILS", "speed": "kmh", "distance": { @@ -676,16 +740,19 @@ var locales = { "1": "%HH:%MM" }, "datePattern": { - "0": "%A, %B %d, %Y", + "0": "%-d %b %Y", "1": "%d/%m/%Y" }, - "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sept,Oct,Nov,Dec", "month": "January,February,March,April,May,June,July,August,September,October,November,December", "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" }, "es_ES": { "lang": "es_ES", + "icon": "🇪🇸", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": ".", "currency_symbol": "€", @@ -697,16 +764,16 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "", - "1": "" + "0": "a. m.", + "1": "p. m." }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%A, %d de %B de %Y", - "1": "%d/%m/%y" + "0": "%-d %b %Y", + "1": "%-d/%-m/%y" }, "abmonth": "ene,feb,mar,abr,may,jun,jul,ago,sept,oct,nov,dic", "month": "enero,febrero,marzo,abril,mayo,junio,julio,agosto,septiembre,octubre,noviembre,diciembre", @@ -727,8 +794,11 @@ var locales = { }, "fr_BE": { "lang": "fr_BE", + "icon": "🇧🇪", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ",", - "thousands_sep": ".", + "thousands_sep": " ", "currency_symbol": "€", "int_curr_symbol": "EUR", "speed": "kmh", @@ -738,20 +808,20 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "", - "1": "" + "0": "AM", + "1": "PM" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%A %B %d %Y", - "1": "%d/%m/%y" + "0": "%-d %b %Y", + "1": "%-d/%m/%y" }, - "abmonth": "anv.,févr.,mars,avril,mai,juin,juil.,août,sept.,oct.,nov.,déc.", + "abmonth": "janv.,févr.,mars,avr.,mai,juin,juil.,août,sept.,oct.,nov.,déc.", "month": "janvier,février,mars,avril,mai,juin,juillet,août,septembre,octobre,novembre,décembre", - "abday": "dim,lun,mar,mer,jeu,ven,sam", + "abday": "dim.,lun.,mar.,mer.,jeu.,ven.,sam.", "day": "dimanche,lundi,mardi,mercredi,jeudi,vendredi,samedi", "trans": { "yes": "oui", @@ -765,8 +835,11 @@ var locales = { }, "fi_FI": { "lang": "fi_FI", + "icon": "🇫🇮", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ",", - "thousands_sep": ".", + "thousands_sep": " ", "currency_symbol": "€", "int_curr_symbol": "EUR", "speed": "kmh", @@ -776,18 +849,18 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "ap", - "1": "ip" + "0": "ap.", + "1": "ip." }, "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" + "0": "%HH.%MM.%SS", + "1": "%HH.%MM" }, "datePattern": { - "0": "%A %d. %B %Y", - "1": "%-d/%-m/%Y" + "0": "%-d.%-m.%Y", + "1": "%-d.%-m.%Y" }, - "abmonth": "tammik,helmik,maalisk,huhtik,toukok,kesäk,heinäk,elok,syysk,lokak,marrask,jouluk", + "abmonth": "tammik.,helmik.,maalisk.,huhtik.,toukok.,kesäk.,heinäk.,elok.,syysk.,lokak.,marrask.,jouluk.", "month": "tammikuuta,helmikuuta,maaliskuuta,huhtikuuta,toukokuuta,kesäkuuta,heinäkuuta,elokuuta,syyskuuta,lokakuuta,marraskuuta,joulukuuta", "abday": "su,ma,ti,ke,to,pe,la", "day": "sunnuntaina,maanantaina,tiistaina,keskiviikkona,torstaina,perjantaina,lauantaina", @@ -803,10 +876,14 @@ var locales = { }, "de_CH": { "lang": "de_CH", - "decimal_point": ",", - "thousands_sep": ".", - "currency_symbol": "CHF", - "int_curr_symbol": "CHF", + "icon": "🇨🇭", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ".", + "thousands_sep": "'", + "currency_symbol": "CHW", + "currency_first": true, + "int_curr_symbol": "CHW", "speed": "kmh", "distance": { "0": "m", @@ -815,19 +892,19 @@ var locales = { "temperature": "°C", "ampm": { "0": "vorm", - "1": " nachm" + "1": "nachm" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%A, %d. %B %Y", - "1": "%d.%m.%Y" + "0": "%d.%m.%Y", + "1": "%d.%m.%y" }, - "abmonth": "Jan,Feb,März,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez", + "abmonth": "Jan.,Feb.,März,Apr.,Mai,Juni,Juli,Aug.,Sept.,Okt.,Nov.,Dez.", "month": "Januar,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember", - "abday": "So,Mo,Di,Mi,Do,Fr,Sa", + "abday": "So.,Mo.,Di.,Mi.,Do.,Fr.,Sa.", "day": "Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag", "trans": { "yes": "ja", @@ -841,10 +918,13 @@ var locales = { }, "fr_CH": { "lang": "fr_CH", + "icon": "🇨🇭", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ",", - "thousands_sep": ".", - "currency_symbol": "CHF", - "int_curr_symbol": "CHF", + "thousands_sep": " ", + "currency_symbol": "CHW", + "int_curr_symbol": "CHW", "speed": "kmh", "distance": { "0": "m", @@ -860,12 +940,12 @@ var locales = { "1": "%HH:%MM" }, "datePattern": { - "0": "%A %d %B %Y", - "1": "%d/%m/%y" + "0": "%-d %b %Y", + "1": "%d.%m.%y" }, - "abmonth": "anv.,févr.,mars,avril,mai,juin,juil.,août,sept.,oct.,nov.,déc.", + "abmonth": "janv.,févr.,mars,avr.,mai,juin,juil.,août,sept.,oct.,nov.,déc.", "month": "janvier,février,mars,avril,mai,juin,juillet,août,septembre,octobre,novembre,décembre", - "abday": "dim,lun,mar,mer,jeu,ven,sam", + "abday": "dim.,lun.,mar.,mer.,jeu.,ven.,sam.", "day": "dimanche,lundi,mardi,mercredi,jeudi,vendredi,samedi", "trans": { "yes": "oui", @@ -879,10 +959,14 @@ var locales = { }, "it_CH": { "lang": "it_CH", - "decimal_point": ",", - "thousands_sep": ".", - "currency_symbol": "CHF", - "int_curr_symbol": "CHF", + "icon": "🇨🇭", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ".", + "thousands_sep": "'", + "currency_symbol": "CHW", + "currency_first": true, + "int_curr_symbol": "CHW", "speed": "kmh", "distance": { "0": "m", @@ -890,16 +974,16 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "", - "1": "" + "0": "AM", + "1": "PM" }, "timePattern": { - "0": "%HH:%MM.%SS", + "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%d %b %Y", - "1": "%d/%m/%Y" + "0": "%-d %b %Y", + "1": "%d.%m.%y" }, "abmonth": "gen,feb,mar,apr,mag,giu,lug,ago,set,ott,nov,dic", "month": "gennaio,febbraio,marzo,aprile,maggio,giugno,luglio,agosto,settembre,ottobre,novembre,dicembre", @@ -917,6 +1001,9 @@ var locales = { }, "it_IT": { "lang": "it_IT", + "icon": "🇮🇹", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": ".", "currency_symbol": "€", @@ -928,16 +1015,16 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "", - "1": "" + "0": "AM", + "1": "PM" }, "timePattern": { - "0": "%HH:%MM.%SS", + "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%d %b %Y", - "1": "%d/%m/%Y" + "0": "%-d %b %Y", + "1": "%d/%m/%y" }, "abmonth": "gen,feb,mar,apr,mag,giu,lug,ago,set,ott,nov,dic", "month": "gennaio,febbraio,marzo,aprile,maggio,giugno,luglio,agosto,settembre,ottobre,novembre,dicembre", @@ -955,10 +1042,14 @@ var locales = { }, "wae_CH": { "lang": "wae_CH", + "icon": "🇨🇭", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ",", - "thousands_sep": ".", - "currency_symbol": "CHF", - "int_curr_symbol": "CHF", + "thousands_sep": "'", + "currency_symbol": "CHW", + "currency_first": true, + "int_curr_symbol": "CHW", "speed": "kmh", "distance": { "0": "m", @@ -966,21 +1057,21 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "", - "1": "" + "0": "AM", + "1": "PM" }, "timePattern": { - "0": "%HH.%MM.%SS", - "1": "%HH.%MM" + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" }, "datePattern": { - "0": "%A, %d. %B %Y", + "0": "%-d. %b %Y", "1": "%Y-%m-%d" }, "abmonth": "Jen,Hor,Mär,Abr,Mei,Brá,Hei,Öig,Her,Wím,Win,Chr", - "month": "Jenner,Hornig,Märze,Abrille,Meije,Bráčet,Heiwet,Öigšte,Herbštmánet,Wímánet,Wintermánet,Chrištmánet", + "month": "Jenner,Hornig,Märze,Abrille,Meije,Brácet,Heiwet,Öigšte,Herbštmánet,Wímánet,Wintermánet,Chrištmánet", "abday": "Sun,Män,Ziš,Mit,Fró,Fri,Sam", - "day": "Sunntag,Mäntag,Zištag,Mittwuč,Fróntag,Fritag,Samštag", + "day": "Sunntag,Mäntag,Zištag,Mittwuc,Fróntag,Fritag,Samštag", "trans": { "yes": "sì", "Yes": "Sì", @@ -993,9 +1084,13 @@ var locales = { }, "tr_TR": { "lang": "tr_TR", + "icon": "🇹🇷", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": ".", "currency_symbol": "TL", + "currency_first": true, "int_curr_symbol": "TRY", "speed": "kmh", "distance": { @@ -1004,21 +1099,21 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "öö", - "1": "ös" + "0": "ÖÖ", + "1": "ÖS" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%d %w %Y %A", - "1": "%d/%m/%Y" + "0": "%-d %b %Y", + "1": "%-d.%m.%Y" }, "abmonth": "Oca,Sub,Mar,Nis,May,Haz,Tem,Agu,Eyl,Eki,Kas,Ara", - "month": "Ocak,Subat,Mart,Nisan,Mayis,Haziran,Temmuz,Agustos,Eylul,Ekim,Kasim,Aralik", - "abday": "Paz,Pzt,Sal,Car,Per,Cum,Cmt", - "day": "Pazar,Pazartesi,Sali,Carsamba,Persembe,Cuma,Cumartesi", + "month": "Ocak,Subat,Mart,Nisan,Mayis,Haziran,Temmuz,Agustos,Eylül,Ekim,Kasim,Aralik", + "abday": "Paz,Pzt,Sal,Çar,Per,Cum,Cmt", + "day": "Pazar,Pazartesi,Sali,Çarsamba,Persembe,Cuma,Cumartesi", "trans": { "yes": "evet", "Yes": "Evet", @@ -1031,6 +1126,9 @@ var locales = { }, "hu_HU": { "lang": "hu_HU", + "icon": "🇭🇺", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": " ", "currency_symbol": "Ft", @@ -1042,21 +1140,21 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "de", - "1": "du" + "0": "de.", + "1": "du." }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%Y %b %d, %A", - "1": "%Y.%m.%d" + "0": "%Y. %b %-d.", + "1": "%Y. %m. %d." }, - "abmonth": "Jan,Feb,Már,Ápr,Máj,Jún,Júl,Aug,Szep,Okt,Nov,Dec", - "month": "Január,Február,Március,Április,Május,Június,Július,Augusztus,Szeptember,Október,November,December", - "abday": "Vas,Hét,Ke,Szer,Csüt,Pén,Szom", - "day": "Vasárnap,Hétfő,Kedd,Szerda,Csütörtök,Péntek,Szombat", + "abmonth": "jan.,febr.,márc.,ápr.,máj.,jún.,júl.,aug.,szept.,okt.,nov.,dec.", + "month": "január,február,március,április,május,június,július,augusztus,szeptember,október,november,december", + "abday": "V,H,K,Sze,Cs,P,Szo", + "day": "vasárnap,hétfö,kedd,szerda,csütörtök,péntek,szombat", "trans": { "yes": "igen", "Yes": "Igen", @@ -1069,6 +1167,9 @@ var locales = { }, "oc_FR": { "lang": "oc_FR", + "icon": "🇫🇷", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": " ", "currency_symbol": "€", @@ -1080,20 +1181,20 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "", - "1": "" + "0": "AM", + "1": "PM" }, "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" + "0": "%HHh%MM:%SS", + "1": "%HHh%MM" }, "datePattern": { - "0": "%A %d %B de %Y", - "1": "%d/%m/%Y" + "0": "%-d %b %Y", + "1": "%-d/%m/%y" }, - "abmonth": "gen.,febr.,març,abril,mai,junh,julh,ago.,set.,oct.,nov.,dec.", - "month": "genièr,febrièr,març,abril,mai,junh,julhet,agost,setembre,octòbre,novembre,decembre", - "abday": "dg,dl,dm,dc,dj,dv,ds", + "abmonth": "gen.,feb.,març,abr.,mai,junh,jul.,ago.,set.,oct.,nov.,dec.", + "month": "de genièr,de febrièr,de març,d'abril,de mai,de junh,de julhet,d'agost,de setembre,d'octòbre,de novembre,de decembre", + "abday": "dimenge,diluns,dimars,dimècres,dijòus,divendres,dissabte", "day": "dimenge,diluns,dimars,dimècres,dijòus,divendres,dissabte", "trans": { "yes": "òc", @@ -1107,6 +1208,9 @@ var locales = { }, "pt_BR": { "lang": "pt_BR", + "icon": "🇧🇷", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": ".", "currency_symbol": "R$", @@ -1119,21 +1223,21 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "am", - "1": "pm" + "0": "AM", + "1": "PM" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%d %b %Y", - "1": "%d/%m/%y" + "0": "%-d de %b de %Y", + "1": "%d/%m/%Y" }, - "abmonth": "Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set,Out,Nov,Dez", - "month": "Janeiro,Fevereiro,Março,Abril,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro", - "abday": "Dom,Seg,Ter,Qua,Qui,Sex,Sab", - "day": "Domingo,Segunda-feira,Terça-feira,Quarta-feira,Quinta-feira,Sexta-feira,Sábado", + "abmonth": "jan.,fev.,mar.,abr.,mai.,jun.,jul.,ago.,set.,out.,nov.,dez.", + "month": "janeiro,fevereiro,março,abril,maio,junho,julho,agosto,setembro,outubro,novembro,dezembro", + "abday": "dom.,seg.,ter.,qua.,qui.,sex.,sáb.", + "day": "domingo,segunda-feira,terça-feira,quarta-feira,quinta-feira,sexta-feira,sábado", "trans": { "yes": "sim", "Yes": "Sim", @@ -1146,10 +1250,13 @@ var locales = { }, "cs_CZ": { "lang": "cs_CZ", + "icon": "🇨🇿", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": " ", - "currency_symbol": "Kč", - "int_curr_symbol": " CZK", + "currency_symbol": "Kc", + "int_curr_symbol": "CZK", "speed": "kmh", "distance": { "0": "m", @@ -1157,21 +1264,21 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "dop", - "1": "odp" + "0": "dop.", + "1": "odp." }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%d. %b %Y", - "1": "%d.%m.%Y" + "0": "%-d. %-m. %Y", + "1": "%d.%m.%y" }, - "abmonth": "led,úno,bře,dub,kvě,čvn,čvc,srp,zář,říj,lis,pro", - "month": "leden,únor,březen,duben,květen,červen,červenec,srpen,září,říjen,listopad,prosinec", - "abday": "ne,po,út,st,čt,pá,so", - "day": "neděle,pondělí,úterý,středa,čtvrtek,pátek,sobota", + "abmonth": "led,úno,bre,dub,kve,cvn,cvc,srp,zár,ríj,lis,pro", + "month": "ledna,února,brezna,dubna,kvetna,cervna,cervence,srpna,zárí,ríjna,listopadu,prosince", + "abday": "ne,po,út,st,ct,pá,so", + "day": "nedele,pondelí,úterý,streda,ctvrtek,pátek,sobota", "trans": { "yes": "ano", "Yes": "Ano", @@ -1184,6 +1291,9 @@ var locales = { }, "hr_HR": { "lang": "hr_HR", + "icon": "🇭🇷", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": ".", "currency_symbol": "€", @@ -1203,13 +1313,13 @@ var locales = { "1": "%HH:%MM" }, "datePattern": { - "0": "%-d. %b %Y", - "1": "%-d.%-m.%Y" + "0": "%-d. %b %Y.", + "1": "%d. %m. %Y." }, - "abmonth": "sij.,velj.,ožu.,tra.,svi,lip.,srp.,kol.,ruj.,lis.,stu.,pro.", - "month": "siječanj,veljača,ožujak,travanj,svibanj,lipanj,srpanj,kolovoz,rujan,listopad,studeni,prosinac", - "abday": "ned.,pon.,uto.,sri.,čet.,pet.,sub.", - "day": "nedjelja,ponedjeljak,utorak,srijeda,četvrtak,petak,subota", + "abmonth": "sij,velj,ožu,tra,svi,lip,srp,kol,ruj,lis,stu,pro", + "month": "sijecnja,veljace,ožujka,travnja,svibnja,lipnja,srpnja,kolovoza,rujna,listopada,studenoga,prosinca", + "abday": "ned,pon,uto,sri,cet,pet,sub", + "day": "nedjelja,ponedjeljak,utorak,srijeda,cetvrtak,petak,subota", "trans": { "yes": "da", "Yes": "Da", @@ -1223,6 +1333,9 @@ var locales = { }, "sl_SI": { "lang": "sl_SI", + "icon": "🇸🇮", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": ".", "currency_symbol": "€", @@ -1243,12 +1356,12 @@ var locales = { }, "datePattern": { "0": "%-d. %b %Y", - "1": "%-d.%-m.%Y" + "1": "%-d. %-m. %y" }, "abmonth": "jan.,feb.,mar.,apr.,maj,jun.,jul.,avg.,sep.,okt.,nov.,dec.", "month": "januar,februar,marec,april,maj,junij,julij,avgust,september,oktober,november,december", - "abday": "ned.,pon.,tor.,sre.,čet.,pet.,sob.", - "day": "nedelja,ponedeljek,torek,sreda,četrtek,petek,sobota", + "abday": "ned.,pon.,tor.,sre.,cet.,pet.,sob.", + "day": "nedelja,ponedeljek,torek,sreda,cetrtek,petek,sobota", "trans": { "yes": "da", "Yes": "Da", @@ -1262,6 +1375,9 @@ var locales = { }, "pt_PT": { "lang": "pt_PT", + "icon": "🇵🇹", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": " ", "currency_symbol": "€", @@ -1273,21 +1389,21 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "am", - "1": "pm" + "0": "a.m.", + "1": "p.m." }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%d %b %Y", + "0": "%d/%m/%Y", "1": "%d/%m/%y" }, - "abmonth": "Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set,Out,Nov,Dez", - "month": "Janeiro,Fevereiro,Março,Abril,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro", - "abday": "Dom,Seg,Ter,Qua,Qui,Sex,Sab", - "day": "Domingo,Segunda-feira,Terça-feira,Quarta-feira,Quinta-feira,Sexta-feira,Sábado", + "abmonth": "jan.,fev.,mar.,abr.,mai.,jun.,jul.,ago.,set.,out.,nov.,dez.", + "month": "janeiro,fevereiro,março,abril,maio,junho,julho,agosto,setembro,outubro,novembro,dezembro", + "abday": "domingo,segunda,terça,quarta,quinta,sexta,sábado", + "day": "domingo,segunda-feira,terça-feira,quarta-feira,quinta-feira,sexta-feira,sábado", "trans": { "yes": "sim", "Yes": "Sim", @@ -1300,6 +1416,9 @@ var locales = { }, "pl_PL": { "lang": "pl_PL", + "icon": "🇵🇱", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": " ", "currency_symbol": "zł", @@ -1311,21 +1430,21 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "", - "1": "" + "0": "AM", + "1": "PM" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%d. %b %Y", - "1": "%d.%m.%Y" + "0": "%-d %b %Y", + "1": "%-d.%m.%Y" }, - "abmonth": "Sty,Lut,Mar,Kwi,Maj,Cze,Lip,Sie,Wrz,Paź,Lis,Gru", - "month": "Styczeń,Luty,Marzec,Kwiecień,Maj,Czerwiec,Lipiec,Sierpień,Wrzesień,Październik,Listopad,Grudzień", - "abday": "Ndz,Pon,Wt,Śr,Czw,Pt,Sob", - "day": "Niedziela,Poniedziałek,Wtorek,Środa,Czwartek,Piątek,Sobota", + "abmonth": "sty,lut,mar,kwi,maj,cze,lip,sie,wrz,paź,lis,gru", + "month": "stycznia,lutego,marca,kwietnia,maja,czerwca,lipca,sierpnia,wrzesnia,października,listopada,grudnia", + "abday": "niedz.,pon.,wt.,sr.,czw.,pt.,sob.", + "day": "niedziela,poniedziałek,wtorek,sroda,czwartek,piątek,sobota", "trans": { "yes": "tak", "Yes": "Tak", @@ -1339,6 +1458,9 @@ var locales = { }, "lv_LV": { "lang": "lv_LV", + "icon": "🇱🇻", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": " ", "currency_symbol": "€", @@ -1350,21 +1472,21 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "", - "1": "" + "0": "priekšp.", + "1": "pēcp." }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%d. %b %Y", - "1": "%d.%m.%Y" + "0": "%Y. gada %-d. %b", + "1": "%d.%m.%y" }, - "abmonth": "Jan,Feb,Mar,Apr,Mai,Jūn,Jūl,Aug,Sep,Okt,Nov,Dec", - "month": "Janvāris,Februāris,Marts,Aprīlis,Maijs,Jūnijs,Jūlijs,Augusts,Septemberis,Oktobris,Novembris,Decembris", - "abday": "Pr,Ot,Tr,Ce,Pk,Se,Sv", - "day": "Pirmdiena,Otrdiena,Trešdiena,Ceturtdiena,Piektdiena,Sestdiena,Svētdiena", + "abmonth": "janv.,febr.,marts,apr.,maijs,jūn.,jūl.,aug.,sept.,okt.,nov.,dec.", + "month": "janvāris,februāris,marts,aprīlis,maijs,jūnijs,jūlijs,augusts,septembris,oktobris,novembris,decembris", + "abday": "svētd.,pirmd.,otrd.,trešd.,ceturtd.,piektd.,sestd.", + "day": "svētdiena,pirmdiena,otrdiena,trešdiena,ceturtdiena,piektdiena,sestdiena", "trans": { "yes": "jā", "Yes": "Jā", @@ -1378,6 +1500,9 @@ var locales = { }, "nn_NO": { "lang": "nn_NO", + "icon": "🇳🇴", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": " ", "currency_symbol": "kr", @@ -1389,21 +1514,21 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "", - "1": "" + "0": "f.m.", + "1": "e.m." }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%d. %b %Y", + "0": "%-d. %b %Y", "1": "%d.%m.%Y" }, - "abmonth": "Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Des", - "month": "Januar,Februar,Mars,April,Mai,Juni,Juli,August,September,Oktober,November,Desember", - "abday": "Su,Må,Ty,On,To,Fr,La", - "day": "Sundag,Måndag,Tysdag,Onsdag,Torsdag,Fredag,Laurdag", + "abmonth": "jan.,feb.,mars,apr.,mai,juni,juli,aug.,sep.,okt.,nov.,des.", + "month": "januar,februar,mars,april,mai,juni,juli,august,september,oktober,november,desember", + "abday": "sø.,må.,ty.,on.,to.,fr.,la.", + "day": "søndag,måndag,tysdag,onsdag,torsdag,fredag,laurdag", "trans": { "yes": "ja", "Yes": "Ja", @@ -1419,6 +1544,9 @@ var locales = { }, "nb_NO": { "lang": "nb_NO", + "icon": "🇳🇴", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": " ", "currency_symbol": "kr", @@ -1430,21 +1558,21 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "", - "1": "" + "0": "a.m.", + "1": "p.m." }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%d. %b %Y", + "0": "%-d. %b %Y", "1": "%d.%m.%Y" }, - "abmonth": "Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Des", - "month": "Januar,Februar,Mars,April,Mai,Juni,Juli,August,September,Oktober,November,Desember", - "abday": "Sø,Ma,Ti,On,To,Fr,Lø", - "day": "Søndag,Mandag,Tirsdag,Onsdag,Torsdag,Fredag,Lørdag", + "abmonth": "jan.,feb.,mars,apr.,mai,juni,juli,aug.,sep.,okt.,nov.,des.", + "month": "januar,februar,mars,april,mai,juni,juli,august,september,oktober,november,desember", + "abday": "søn.,man.,tir.,ons.,tor.,fre.,lør.", + "day": "søndag,mandag,tirsdag,onsdag,torsdag,fredag,lørdag", "trans": { "yes": "ja", "Yes": "Ja", @@ -1460,7 +1588,9 @@ var locales = { }, "ca_ES": { "lang": "ca_ES", - "icon": "🇪🇺", + "icon": "🇪🇸", + "calendar": "gregory", + "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": ".", "currency_symbol": "€", @@ -1472,19 +1602,19 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "", - "1": "" + "0": "a. m.", + "1": "p. m." }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%d %B %Y", - "1": "%d/%m/%y" + "0": "%-d %b %Y", + "1": "%-d/%-m/%y" }, - "abmonth": "gen.,febr.,març,abr.,maig,juny,jul.,ag.,set.,oct.,nov.,des.", - "month": "gener,febrer,març,abril,maig,juny,juliol,agost,setembre,octobre,novembre,desembre", + "abmonth": "de gen.,de febr.,de març,d'abr.,de maig,de juny,de jul.,d'ag.,de set.,d'oct.,de nov.,de des.", + "month": "de gener,de febrer,de març,d'abril,de maig,de juny,de juliol,d'agost,de setembre,d'octubre,de novembre,de desembre", "abday": "dg.,dl.,dt.,dc.,dj.,dv.,ds.", "day": "diumenge,dilluns,dimarts,dimecres,dijous,divendres,dissabte", "trans": { @@ -1495,28 +1625,9 @@ var locales = { "ok": "d'acord", "on": "on", "off": "off", - "< Back": "< Enrere", + "< Back": "< Enrere", "Delete": "Esborra", "Mark Unread": "Marca com a no llegit" } - }/*, - "he_IL": { // This won't work until we get a font - see https://github.com/espruino/BangleApps/issues/399 - codePage : "ISO8859-8", - lang: "he_IL", - decimal_point: ",", - thousands_sep: ".", - currency_symbol: "₪", - int_curr_symbol: "ILS", - speed: "קמ״ש", - distance: { 0: "מ׳", 1: "ק״מ" }, - temperature: "°C", - ampm: {0:"am",1:"pm"}, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, - datePattern: { 0: "%A, %B %d, %Y", "1": "%d/%m/%Y" }, // Sunday, 1 March 2020 // 01/03/2020 - abmonth: "ינו,פבר,מרץ,אפר,מאי,יונ,יול,אוג,ספט,אוק,נוב,דצמ", - month: "ינואר,פברואר,מרץ,אפריל,מאי,יוני,יולי,אוגוסט,ספטמבר,אוקטובר,נובמבר,דצמבר", - abday: "א׳,ב׳,ג׳,ד׳,ה,ו׳,ש׳", - day: "ראשון,שני,שלישי,רביעי,חמישי,שישי,שבת", - trans: { yes: "כן", Yes: "כן", no: "לא", No: "לא", ok: "אישור", on: "פעיל", off: "כבוי" } - }*/ + } }; From e3a5113d18652bc600c56cfb8190633a22b9c726 Mon Sep 17 00:00:00 2001 From: Anton Date: Sat, 16 Mar 2024 21:27:03 +0100 Subject: [PATCH 03/18] Autogenerate locale data from CLDR --- .gitignore | 1 + apps/locale/ChangeLog | 1 + apps/locale/locales-meta.js | 634 ++++++++++++++ apps/locale/locales.js | 1633 ----------------------------------- apps/locale/metadata.json | 2 +- bin/create-locales-js.mjs | 518 +++++++++++ package-lock.json | 573 ++++++++++++ package.json | 7 +- 8 files changed, 1734 insertions(+), 1635 deletions(-) create mode 100644 apps/locale/locales-meta.js delete mode 100644 apps/locale/locales.js create mode 100755 bin/create-locales-js.mjs diff --git a/.gitignore b/.gitignore index 7687a770a9..b2f6f50050 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ appdates.csv _config.yml tests/Layout/bin/tmp.* tests/Layout/testresult.bmp +apps/locale/locales.js apps.local.json _site .jekyll-cache diff --git a/apps/locale/ChangeLog b/apps/locale/ChangeLog index d21cb1a56c..dfa5f1c506 100644 --- a/apps/locale/ChangeLog +++ b/apps/locale/ChangeLog @@ -19,3 +19,4 @@ 0.16: Remove global variables that used RAM Add second 'dp' argument for decimal places in distance/speed/temp (fix #1523) 0.17: Fix regression where long month names were 'undefined' (fix #1641) +0.18: Use locale data from CLDR diff --git a/apps/locale/locales-meta.js b/apps/locale/locales-meta.js new file mode 100644 index 0000000000..a18e2584bf --- /dev/null +++ b/apps/locale/locales-meta.js @@ -0,0 +1,634 @@ +/* jshint esversion: 6 */ + +/** + * How many meters per X? + */ +exports.distanceUnits = { + m: 1, + ft: 0.3048, + yd: 0.9144, + mi: 1609.34, + km: 1000, + kmi: 1000, + nm: 1852, +}; + +/** + * How many kph per X? + */ +exports.speedUnits = { + kmh: 1, + kph: 1, + "km/h": 1, + kmt: 1, + "km/t": 1, + "km/tim": 1, + mph: 1.60934, + kts: 1.852, +}; + +/** + * For a codepage, 'map' is a map of char codes 128 and above. + * Where there is no character, just use '.' + */ +exports.codePages = { + "ISO8859-1": { + name: "ISO8859-1", + map: ` + €.‚ƒ„…†‡ˆ‰Š‹Œ.Ž. + .‘’“”•–—˜™š›œ.žŸ + .¡¢£¤¥¦§¨©ª«¬.®¯ + °±²³´µ¶·¸¹º»¼½¾¿ + ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ + ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß + àáâãäåæçèéêëìíîï + ðñòóôõö÷øùúûüýþÿ + `.replace(/[ \n]/g, ""), + }, +}; + +/** + * Espruino does not support all unicode characters. + * This is a list of unsupported characters that map to a similar character which is supported. + */ +exports.character_fallback_map = { + // letters + Č: "C", + č: "c", + Ě: "E", + ě: "e", + Ğ: "G", + ğ: "g", + ı: "i", + Ő: "Ö", + ő: "ö", + Ř: "R", + ř: "r", + Ś: "S", + ś: "s", + Ş: "S", + ş: "s", + + // separators + " ": " ", + " ": " ", + "’": "'", + + // currencies + "₹": "Rs.", + "₪": "ILS", + "₺": "TL", +}; + +// charFallbacks is now in core/js/utils.js as CODEPAGE_CONVERSIONS + +/** + * timePattern / datePattern: + * + * %Y year, all digits (2004, 2020, 32100) + * %y year, last two digits (04, 20, 00) + * %m month, two digits (01, 12) + * %-m month, one or two digits (1, 12) + * %d day of month, two digits (01, 26) + * %-d day of month, one or two digits (1, 26) + * + * %A locale's weekday name, full (e.g., Sunday) + * %a locale's weekday name, abbreviated (e.g., Sun) + * %B locale's month name, full (e.g., January) + * %b locale's month name, abbreviated (e.g., Jan) + * + * %HH hours, two digits (00..23) + * %MM minutes, two digits (00..59) + * %SS seconds, two digits (00..60) + * %P locale's equivalent of either am or pm, lowercase + * %p locale's equivalent of either AM or PM, uppercase + */ + +/** + * A list of all supported locales. + * + * To add a new locale, you must manually define: + * - `calendar` (try 'gregory') + * - `numberingSystem` (try 'latn') + * All other values are autogenerated but you can override them here if you disagree with the autogenerated result. + * If your locale is unsupported, you can define a `fallbackLang` that will be used for default values. + * + * If your language contains fancy unicode characters, they are probably not supported by Espruino. + * In that case, you can define a fallback character in `character_fallback_map`. + * + * To see the final output of the autogenerator, run: + * node bin/create-locales-js.mjs LOCALECODE + * + * LOCALECODE is the locale that you want to see the output for, e.g. "en_US". + */ +exports.locales = { + en_GB: { + // this is default + calendar: "gregory", + numberingSystem: "latn", + speed: "mph", + distance: { 0: "yd", 1: "mi" }, + datePattern: { 0: "%b %d %Y", 1: "%d/%m/%Y" }, + }, + en_US: { + notes: "USA with MM/DD/YY date", + calendar: "gregory", + numberingSystem: "latn", + speed: "mph", + distance: { 0: "ft", 1: "mi" }, + temperature: "°F", + timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, + }, + "en_US 2": { + notes: "USA with YYYY-MM-DD date", + calendar: "gregory", + numberingSystem: "latn", + speed: "mph", + distance: { 0: "ft", 1: "mi" }, + temperature: "°F", + timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, + datePattern: { 0: "%b %d, %Y", 1: "%Y-%m-%d" }, + }, + en_IN: { + calendar: "gregory", + numberingSystem: "latn", + speed: "kmh", + timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, + }, + en_IE: { + calendar: "gregory", + numberingSystem: "latn", + speed: "kmh", + }, + en_NAV: { + // navigation units nautical miles and knots + fallbackLang: "en_GB", // the locale generator doesn't know what NAV is, so give it a different lang to take values from + icon: "⛵✈️", + calendar: "gregory", + numberingSystem: "latn", + speed: "kts", + distance: { 0: "m", 1: "nm" }, + }, + de_DE: { + calendar: "gregory", + numberingSystem: "latn", + speed: "kmh", + datePattern: { 0: "%d. %b %Y", 1: "%d.%m.%Y" }, // 1. März 2020 // 01.03.20 + trans: { + yes: "ja", + Yes: "Ja", + no: "nein", + No: "Nein", + ok: "ok", + on: "an", + off: "aus", + "< Back": "< Zurück", + Delete: "Löschen", + "Mark Unread": "Als ungelesen markieren", + }, + }, + en_JP: { + // we do not have the font, so it is not ja_JP + fallbackLang: "en_GB", // en_JP is not supported by the generator, so we give it somewhere else to grab the english names from + calendar: "gregory", + numberingSystem: "latn", + currency_symbol: "¥", + currency_first: false, + speed: "kmh", + distance: { 0: "m", 1: "km" }, + datePattern: { 0: "%Y/%m/%d", 1: "%Y/%m/%d" }, + }, + nl_NL: { + calendar: "gregory", + numberingSystem: "latn", + speed: "kmh", + trans: { + yes: "ja", + Yes: "Ja", + no: "nee", + No: "Nee", + ok: "ok", + on: "aan", + off: "uit", + "< Back": "< Terug", + Delete: "Verwijderen", + "Mark Unread": "Markeer als ongelezen", + }, + }, + en_NL: { + // English date units with Dutch number, currency and navigation units. + calendar: "gregory", + numberingSystem: "latn", + datePattern: { 0: "%b %d %Y", 1: "%d/%m/%Y" }, // Feb 28 2020" // "01/03/2020"(short) + }, + en_CA: { + calendar: "gregory", + numberingSystem: "latn", + timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, + }, + fr_FR: { + calendar: "gregory", + numberingSystem: "latn", + trans: { + yes: "oui", + Yes: "Oui", + no: "non", + No: "Non", + ok: "ok", + on: "on", + off: "off", + }, + }, + sv_SE: { + calendar: "gregory", + numberingSystem: "latn", + speed: "km/tim", + datePattern: { 0: "%b %d %Y", 1: "%Y-%m-%d" }, // feb 1 2020 // 2020-03-01 + trans: { + yes: "ja", + Yes: "Ja", + no: "nej", + No: "Nej", + ok: "ok", + on: "on", + off: "off", + }, + }, + en_SE: { + // Swedish localisation with English text + calendar: "gregory", + numberingSystem: "latn", + datePattern: { 0: "%B %d %Y", 1: "%Y-%m-%d" }, // March 1 2020 // 2020-03-01 + }, + da_DK: { + calendar: "gregory", + numberingSystem: "latn", + speed: "km/t", + trans: { yes: "ja", Yes: "Ja", no: "nej", No: "Nej", ok: "ok" }, + }, + en_DK: { + // Danish units with english language + calendar: "gregory", + numberingSystem: "latn", + }, + en_NZ: { + calendar: "gregory", + numberingSystem: "latn", + speed: "kph", + timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, + }, + en_AU: { + calendar: "gregory", + numberingSystem: "latn", + speed: "kmh", + timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, + }, + de_AT: { + calendar: "gregory", + numberingSystem: "latn", + speed: "kmh", + trans: { + yes: "ja", + Yes: "Ja", + no: "nein", + No: "Nein", + ok: "ok", + on: "an", + off: "aus", + "< Back": "< Zurück", + Delete: "Löschen", + "Mark Unread": "Als ungelesen markieren", + }, + }, + en_IL: { + calendar: "gregory", + numberingSystem: "latn", + speed: "kmh", + }, + es_ES: { + calendar: "gregory", + numberingSystem: "latn", + speed: "kmh", + trans: { + yes: "sí", + Yes: "Sí", + no: "no", + No: "No", + ok: "ok", + on: "on", + off: "off", + "< Back": "< Atrás", + Delete: "Borrar ", + "Mark Unread": "Marcar como no leído", + }, + }, + fr_BE: { + calendar: "gregory", + numberingSystem: "latn", + speed: "kmh", + trans: { + yes: "oui", + Yes: "Oui", + no: "non", + No: "Non", + ok: "ok", + on: "on", + off: "off", + }, + }, + fi_FI: { + calendar: "gregory", + numberingSystem: "latn", + speed: "kmh", + trans: { + yes: "oui", + Yes: "Oui", + no: "no", + No: "No", + ok: "ok", + on: "on", + off: "off", + }, + }, + de_CH: { + calendar: "gregory", + numberingSystem: "latn", + speed: "kmh", + ampm: { 0: "vorm", 1: "nachm" }, + trans: { + yes: "ja", + Yes: "Ja", + no: "nein", + No: "Nein", + ok: "ok", + on: "an", + off: "aus", + }, + }, + fr_CH: { + calendar: "gregory", + numberingSystem: "latn", + speed: "kmh", + trans: { + yes: "oui", + Yes: "Oui", + no: "non", + No: "Non", + ok: "ok", + on: "on", + off: "off", + }, + }, + it_CH: { + calendar: "gregory", + numberingSystem: "latn", + speed: "kmh", + trans: { + yes: "sì", + Yes: "Sì", + no: "no", + No: "No", + ok: "ok", + on: "on", + off: "off", + }, + }, + it_IT: { + calendar: "gregory", + numberingSystem: "latn", + speed: "kmh", + trans: { + yes: "sì", + Yes: "Sì", + no: "no", + No: "No", + ok: "ok", + on: "on", + off: "off", + }, + }, + wae_CH: { + calendar: "gregory", + numberingSystem: "latn", + speed: "kmh", + trans: { + yes: "sì", + Yes: "Sì", + no: "no", + No: "No", + ok: "ok", + on: "on", + off: "off", + }, + }, + tr_TR: { + calendar: "gregory", + numberingSystem: "latn", + speed: "kmh", + trans: { + yes: "evet", + Yes: "Evet", + no: "hayir", + No: "Hayir", + ok: "tamam", + on: "acik", + off: "kapali", + }, + }, + hu_HU: { + calendar: "gregory", + numberingSystem: "latn", + speed: "kph", + trans: { + yes: "igen", + Yes: "Igen", + no: "nem", + No: "Nem", + ok: "ok", + on: "be", + off: "ki", + }, + }, + oc_FR: { + calendar: "gregory", + numberingSystem: "latn", + trans: { + yes: "òc", + Yes: "Òc", + no: "non", + No: "Non", + ok: "ok", + on: "on", + off: "off", + }, + }, + pt_BR: { + calendar: "gregory", + numberingSystem: "latn", + speed: "kmh", + trans: { + yes: "sim", + Yes: "Sim", + no: "não", + No: "Não", + ok: "confirmar", + on: "ativado", + off: "desativado", + }, + }, + cs_CZ: { + calendar: "gregory", + numberingSystem: "latn", + speed: "kmh", + trans: { + yes: "ano", + Yes: "Ano", + no: "ne", + No: "Ne", + ok: "ok", + on: "zap", + off: "vyp", + }, + }, + hr_HR: { + calendar: "gregory", + numberingSystem: "latn", + ampm: { 0: "dop.", 1: "pop." }, + trans: { + yes: "da", + Yes: "Da", + no: "ne", + No: "Ne", + ok: "ok", + on: "Uklj.", + off: "Isklj.", + "< Back": "< Natrag", + }, + }, + sl_SI: { + calendar: "gregory", + numberingSystem: "latn", + trans: { + yes: "da", + Yes: "Da", + no: "ne", + No: "Ne", + ok: "ok", + on: "Vklj.", + off: "Izklj.", + "< Back": "< Nazaj", + }, + }, + pt_PT: { + calendar: "gregory", + numberingSystem: "latn", + speed: "kmh", + trans: { + yes: "sim", + Yes: "Sim", + no: "não", + No: "Não", + ok: "ok", + on: "on", + off: "off", + }, + }, + pl_PL: { + calendar: "gregory", + numberingSystem: "latn", + speed: "kmh", + trans: { + yes: "tak", + Yes: "Tak", + no: "nie", + No: "Nie", + ok: "ok", + on: "on", + off: "off", + "< Back": "< Wstecz", + }, + }, + lv_LV: { + calendar: "gregory", + numberingSystem: "latn", + speed: "kmh", + trans: { + yes: "jā", + Yes: "Jā", + no: "nē", + No: "Nē", + ok: "labi", + on: "Ieslēgt", + off: "Izslēgt", + "< Back": "< Atpakaļ", + }, + }, + nn_NO: { + calendar: "gregory", + numberingSystem: "latn", + speed: "kmt", + trans: { + yes: "ja", + Yes: "Ja", + no: "nei", + No: "Nei", + ok: "ok", + on: "på", + off: "av", + "< Back": "< Tilbake", + Delete: "Slett", + "Mark Unread": "Merk som ulesen", + }, + }, + nb_NO: { + calendar: "gregory", + numberingSystem: "latn", + speed: "kmh", + trans: { + yes: "ja", + Yes: "Ja", + no: "nei", + No: "Nei", + ok: "ok", + on: "på", + off: "av", + "< Back": "< Tilbake", + Delete: "Slett", + "Mark Unread": "Merk som ulest", + }, + }, + ca_ES: { + calendar: "gregory", + numberingSystem: "latn", + speed: "kmh", + trans: { + yes: "sí", + Yes: "Sí", + no: "no", + No: "No", + ok: "d'acord", + on: "on", + off: "off", + "< Back": "< Enrere", + Delete: "Esborra", + "Mark Unread": "Marca com a no llegit", + }, + }, + /* + "he_IL": { // This won't work until we get a font - see https://github.com/espruino/BangleApps/issues/399 + codePage : "ISO8859-8", + lang: "he_IL", + calendar: "gregory", + numberingSystem: "latn", + speed: "קמ״ש", + distance: { 0: "מ׳", 1: "ק״מ" }, + timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, + datePattern: { 0: "%A, %B %d, %Y", "1": "%d/%m/%Y" }, // Sunday, 1 March 2020 // 01/03/2020 + abmonth: "ינו,פבר,מרץ,אפר,מאי,יונ,יול,אוג,ספט,אוק,נוב,דצמ", + month: "ינואר,פברואר,מרץ,אפריל,מאי,יוני,יולי,אוגוסט,ספטמבר,אוקטובר,נובמבר,דצמבר", + abday: "א׳,ב׳,ג׳,ד׳,ה,ו׳,ש׳", + day: "ראשון,שני,שלישי,רביעי,חמישי,שישי,שבת", + trans: { yes: "כן", Yes: "כן", no: "לא", No: "לא", ok: "אישור", on: "פעיל", off: "כבוי" } + } +*/ +}; diff --git a/apps/locale/locales.js b/apps/locale/locales.js deleted file mode 100644 index d12182c9a5..0000000000 --- a/apps/locale/locales.js +++ /dev/null @@ -1,1633 +0,0 @@ -/* jshint esversion: 6 */ -/** - * This file is autogenerated. If you need to edit it, please do so in 'apps/locale/locales-meta.js' instead. - * This was last updated 16/03/2024, 21.03.30 - */ - -const distanceUnits = { - "m": 1, - "ft": 0.3048, - "yd": 0.9144, - "mi": 1609.34, - "km": 1000, - "kmi": 1000, - "nm": 1852 -}; -const speedUnits = { - "kmh": 1, - "kph": 1, - "km/h": 1, - "kmt": 1, - "km/t": 1, - "km/tim": 1, - "mph": 1.60934, - "kts": 1.852 -}; - -const codePages = { - "ISO8859-1": { - "name": "ISO8859-1", - "map": "€.‚ƒ„…†‡ˆ‰Š‹Œ.Ž..‘’“”•–—˜™š›œ.žŸ.¡¢£¤¥¦§¨©ª«¬.®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ" - } -}; - -var locales = { - "en_GB": { - "lang": "en_GB", - "icon": "🇬🇧", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ".", - "thousands_sep": ",", - "currency_symbol": "£", - "currency_first": true, - "int_curr_symbol": "GBP", - "speed": "mph", - "distance": { - "0": "yd", - "1": "mi" - }, - "temperature": "°C", - "ampm": { - "0": "am", - "1": "pm" - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%b %d %Y", - "1": "%d/%m/%Y" - }, - "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sept,Oct,Nov,Dec", - "month": "January,February,March,April,May,June,July,August,September,October,November,December", - "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", - "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" - }, - "en_US": { - "lang": "en_US", - "icon": "🇺🇸", - "notes": "USA with MM/DD/YY date", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ".", - "thousands_sep": ",", - "currency_symbol": "$", - "currency_first": true, - "int_curr_symbol": "USD", - "speed": "mph", - "distance": { - "0": "ft", - "1": "mi" - }, - "temperature": "°F", - "ampm": { - "0": "AM", - "1": "PM" - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%b %-d, %Y", - "1": "%-m/%-d/%y" - }, - "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", - "month": "January,February,March,April,May,June,July,August,September,October,November,December", - "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", - "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" - }, - "en_US 2": { - "lang": "en_US 2", - "icon": "🇺🇸", - "notes": "USA with YYYY-MM-DD date", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ".", - "thousands_sep": ",", - "currency_symbol": "$", - "currency_first": true, - "int_curr_symbol": "USD", - "speed": "mph", - "distance": { - "0": "ft", - "1": "mi" - }, - "temperature": "°F", - "ampm": { - "0": "AM", - "1": "PM" - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%b %d, %Y", - "1": "%Y-%m-%d" - }, - "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", - "month": "January,February,March,April,May,June,July,August,September,October,November,December", - "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", - "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" - }, - "en_IN": { - "lang": "en_IN", - "icon": "🇮🇳", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ".", - "thousands_sep": ",", - "currency_symbol": "Rs.", - "currency_first": true, - "int_curr_symbol": "INR", - "speed": "kmh", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "am", - "1": "pm" - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%-d %b %Y", - "1": "%d/%m/%y" - }, - "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sept,Oct,Nov,Dec", - "month": "January,February,March,April,May,June,July,August,September,October,November,December", - "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", - "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" - }, - "en_IE": { - "lang": "en_IE", - "icon": "🇮🇪", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ".", - "thousands_sep": ",", - "currency_symbol": "€", - "currency_first": true, - "int_curr_symbol": "EUR", - "speed": "kmh", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "am", - "1": "pm" - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%-d %b %Y", - "1": "%d/%m/%Y" - }, - "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sept,Oct,Nov,Dec", - "month": "January,February,March,April,May,June,July,August,September,October,November,December", - "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", - "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" - }, - "en_NAV": { - "lang": "en_NAV", - "icon": "⛵✈️", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ".", - "thousands_sep": ",", - "currency_symbol": "£", - "currency_first": true, - "int_curr_symbol": "GBP", - "speed": "kts", - "distance": { - "0": "m", - "1": "nm" - }, - "temperature": "°C", - "ampm": { - "0": "am", - "1": "pm" - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%b %d %Y", - "1": "%d/%m/%Y" - }, - "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sept,Oct,Nov,Dec", - "month": "January,February,March,April,May,June,July,August,September,October,November,December", - "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", - "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" - }, - "de_DE": { - "lang": "de_DE", - "icon": "🇩🇪", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ",", - "thousands_sep": ".", - "currency_symbol": "€", - "int_curr_symbol": "EUR", - "speed": "kmh", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "AM", - "1": "PM" - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%d. %b %Y", - "1": "%d.%m.%Y" - }, - "abmonth": "Jan.,Feb.,März,Apr.,Mai,Juni,Juli,Aug.,Sept.,Okt.,Nov.,Dez.", - "month": "Januar,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember", - "abday": "So.,Mo.,Di.,Mi.,Do.,Fr.,Sa.", - "day": "Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag", - "trans": { - "yes": "ja", - "Yes": "Ja", - "no": "nein", - "No": "Nein", - "ok": "ok", - "on": "an", - "off": "aus", - "< Back": "< Zurück", - "Delete": "Löschen", - "Mark Unread": "Als ungelesen markieren" - } - }, - "en_JP": { - "lang": "en_JP", - "icon": "🇯🇵", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ".", - "thousands_sep": ",", - "currency_symbol": "¥", - "int_curr_symbol": "JPY", - "speed": "kmh", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "am", - "1": "pm" - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%Y/%m/%d", - "1": "%Y/%m/%d" - }, - "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sept,Oct,Nov,Dec", - "month": "January,February,March,April,May,June,July,August,September,October,November,December", - "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", - "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" - }, - "nl_NL": { - "lang": "nl_NL", - "icon": "🇳🇱", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ",", - "thousands_sep": ".", - "currency_symbol": "€", - "currency_first": true, - "int_curr_symbol": "EUR", - "speed": "kmh", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "a.m.", - "1": "p.m." - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%-d %b %Y", - "1": "%d-%m-%Y" - }, - "abmonth": "jan,feb,mrt,apr,mei,jun,jul,aug,sep,okt,nov,dec", - "month": "januari,februari,maart,april,mei,juni,juli,augustus,september,oktober,november,december", - "abday": "zo,ma,di,wo,do,vr,za", - "day": "zondag,maandag,dinsdag,woensdag,donderdag,vrijdag,zaterdag", - "trans": { - "yes": "ja", - "Yes": "Ja", - "no": "nee", - "No": "Nee", - "ok": "ok", - "on": "aan", - "off": "uit", - "< Back": "< Terug", - "Delete": "Verwijderen", - "Mark Unread": "Markeer als ongelezen" - } - }, - "en_NL": { - "lang": "en_NL", - "icon": "🇳🇱", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ",", - "thousands_sep": ".", - "currency_symbol": "€", - "currency_first": true, - "int_curr_symbol": "EUR", - "speed": "km/h", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "am", - "1": "pm" - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%b %d %Y", - "1": "%d/%m/%Y" - }, - "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sept,Oct,Nov,Dec", - "month": "January,February,March,April,May,June,July,August,September,October,November,December", - "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", - "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" - }, - "en_CA": { - "lang": "en_CA", - "icon": "🇨🇦", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ".", - "thousands_sep": ",", - "currency_symbol": "$", - "currency_first": true, - "int_curr_symbol": "CAD", - "speed": "km/h", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "a.m.", - "1": "p.m." - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%b %-d, %Y", - "1": "%Y-%m-%d" - }, - "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", - "month": "January,February,March,April,May,June,July,August,September,October,November,December", - "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", - "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" - }, - "fr_FR": { - "lang": "fr_FR", - "icon": "🇫🇷", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ",", - "thousands_sep": " ", - "currency_symbol": "€", - "int_curr_symbol": "EUR", - "speed": "km/h", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "AM", - "1": "PM" - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%-d %b %Y", - "1": "%d/%m/%Y" - }, - "abmonth": "janv.,févr.,mars,avr.,mai,juin,juil.,août,sept.,oct.,nov.,déc.", - "month": "janvier,février,mars,avril,mai,juin,juillet,août,septembre,octobre,novembre,décembre", - "abday": "dim.,lun.,mar.,mer.,jeu.,ven.,sam.", - "day": "dimanche,lundi,mardi,mercredi,jeudi,vendredi,samedi", - "trans": { - "yes": "oui", - "Yes": "Oui", - "no": "non", - "No": "Non", - "ok": "ok", - "on": "on", - "off": "off" - } - }, - "sv_SE": { - "lang": "sv_SE", - "icon": "🇸🇪", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ",", - "thousands_sep": " ", - "currency_symbol": "kr", - "int_curr_symbol": "SEK", - "speed": "km/tim", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "fm", - "1": "em" - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%b %d %Y", - "1": "%Y-%m-%d" - }, - "abmonth": "jan.,feb.,mars,apr.,maj,juni,juli,aug.,sep.,okt.,nov.,dec.", - "month": "januari,februari,mars,april,maj,juni,juli,augusti,september,oktober,november,december", - "abday": "sön,mån,tis,ons,tors,fre,lör", - "day": "söndag,måndag,tisdag,onsdag,torsdag,fredag,lördag", - "trans": { - "yes": "ja", - "Yes": "Ja", - "no": "nej", - "No": "Nej", - "ok": "ok", - "on": "on", - "off": "off" - } - }, - "en_SE": { - "lang": "en_SE", - "icon": "🇸🇪", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ",", - "thousands_sep": " ", - "currency_symbol": "kr", - "int_curr_symbol": "SEK", - "speed": "km/h", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "am", - "1": "pm" - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%B %d %Y", - "1": "%Y-%m-%d" - }, - "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sept,Oct,Nov,Dec", - "month": "January,February,March,April,May,June,July,August,September,October,November,December", - "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", - "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" - }, - "da_DK": { - "lang": "da_DK", - "icon": "🇩🇰", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ",", - "thousands_sep": ".", - "currency_symbol": "kr.", - "int_curr_symbol": "DKK", - "speed": "km/t", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "AM", - "1": "PM" - }, - "timePattern": { - "0": "%HH.%MM.%SS", - "1": "%HH.%MM" - }, - "datePattern": { - "0": "%-d. %b %Y", - "1": "%d.%m.%Y" - }, - "abmonth": "jan.,feb.,mar.,apr.,maj,jun.,jul.,aug.,sep.,okt.,nov.,dec.", - "month": "januar,februar,marts,april,maj,juni,juli,august,september,oktober,november,december", - "abday": "søn.,man.,tirs.,ons.,tors.,fre.,lør.", - "day": "søndag,mandag,tirsdag,onsdag,torsdag,fredag,lørdag", - "trans": { - "yes": "ja", - "Yes": "Ja", - "no": "nej", - "No": "Nej", - "ok": "ok" - } - }, - "en_DK": { - "lang": "en_DK", - "icon": "🇩🇰", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ",", - "thousands_sep": ".", - "currency_symbol": "kr.", - "int_curr_symbol": "DKK", - "speed": "km/h", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "am", - "1": "pm" - }, - "timePattern": { - "0": "%HH.%MM.%SS", - "1": "%HH.%MM" - }, - "datePattern": { - "0": "%-d %b %Y", - "1": "%d/%m/%Y" - }, - "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sept,Oct,Nov,Dec", - "month": "January,February,March,April,May,June,July,August,September,October,November,December", - "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", - "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" - }, - "en_NZ": { - "lang": "en_NZ", - "icon": "🇳🇿", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ".", - "thousands_sep": ",", - "currency_symbol": "$", - "currency_first": true, - "int_curr_symbol": "NZD", - "speed": "kph", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "am", - "1": "pm" - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%-d %b %Y", - "1": "%d/%m/%Y" - }, - "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sept,Oct,Nov,Dec", - "month": "January,February,March,April,May,June,July,August,September,October,November,December", - "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", - "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" - }, - "en_AU": { - "lang": "en_AU", - "icon": "🇦🇺", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ".", - "thousands_sep": ",", - "currency_symbol": "$", - "currency_first": true, - "int_curr_symbol": "AUD", - "speed": "kmh", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "am", - "1": "pm" - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%-d %b %Y", - "1": "%-d/%-m/%y" - }, - "abmonth": "Jan,Feb,Mar,Apr,May,June,July,Aug,Sept,Oct,Nov,Dec", - "month": "January,February,March,April,May,June,July,August,September,October,November,December", - "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", - "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" - }, - "de_AT": { - "lang": "de_AT", - "icon": "🇦🇹", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ",", - "thousands_sep": " ", - "currency_symbol": "€", - "currency_first": true, - "int_curr_symbol": "EUR", - "speed": "kmh", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "AM", - "1": "PM" - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%d.%m.%Y", - "1": "%d.%m.%y" - }, - "abmonth": "Jän.,Feb.,März,Apr.,Mai,Juni,Juli,Aug.,Sep.,Okt.,Nov.,Dez.", - "month": "Jänner,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember", - "abday": "So.,Mo.,Di.,Mi.,Do.,Fr.,Sa.", - "day": "Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag", - "trans": { - "yes": "ja", - "Yes": "Ja", - "no": "nein", - "No": "Nein", - "ok": "ok", - "on": "an", - "off": "aus", - "< Back": "< Zurück", - "Delete": "Löschen", - "Mark Unread": "Als ungelesen markieren" - } - }, - "en_IL": { - "lang": "en_IL", - "icon": "🇮🇱", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ".", - "thousands_sep": ",", - "currency_symbol": "ILS", - "currency_first": true, - "int_curr_symbol": "ILS", - "speed": "kmh", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "am", - "1": "pm" - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%-d %b %Y", - "1": "%d/%m/%Y" - }, - "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sept,Oct,Nov,Dec", - "month": "January,February,March,April,May,June,July,August,September,October,November,December", - "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", - "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" - }, - "es_ES": { - "lang": "es_ES", - "icon": "🇪🇸", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ",", - "thousands_sep": ".", - "currency_symbol": "€", - "int_curr_symbol": "EUR", - "speed": "kmh", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "a. m.", - "1": "p. m." - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%-d %b %Y", - "1": "%-d/%-m/%y" - }, - "abmonth": "ene,feb,mar,abr,may,jun,jul,ago,sept,oct,nov,dic", - "month": "enero,febrero,marzo,abril,mayo,junio,julio,agosto,septiembre,octubre,noviembre,diciembre", - "abday": "dom,lun,mar,mié,jue,vie,sáb", - "day": "domingo,lunes,martes,miércoles,jueves,viernes,sábado", - "trans": { - "yes": "sí", - "Yes": "Sí", - "no": "no", - "No": "No", - "ok": "ok", - "on": "on", - "off": "off", - "< Back": "< Atrás", - "Delete": "Borrar ", - "Mark Unread": "Marcar como no leído" - } - }, - "fr_BE": { - "lang": "fr_BE", - "icon": "🇧🇪", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ",", - "thousands_sep": " ", - "currency_symbol": "€", - "int_curr_symbol": "EUR", - "speed": "kmh", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "AM", - "1": "PM" - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%-d %b %Y", - "1": "%-d/%m/%y" - }, - "abmonth": "janv.,févr.,mars,avr.,mai,juin,juil.,août,sept.,oct.,nov.,déc.", - "month": "janvier,février,mars,avril,mai,juin,juillet,août,septembre,octobre,novembre,décembre", - "abday": "dim.,lun.,mar.,mer.,jeu.,ven.,sam.", - "day": "dimanche,lundi,mardi,mercredi,jeudi,vendredi,samedi", - "trans": { - "yes": "oui", - "Yes": "Oui", - "no": "non", - "No": "Non", - "ok": "ok", - "on": "on", - "off": "off" - } - }, - "fi_FI": { - "lang": "fi_FI", - "icon": "🇫🇮", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ",", - "thousands_sep": " ", - "currency_symbol": "€", - "int_curr_symbol": "EUR", - "speed": "kmh", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "ap.", - "1": "ip." - }, - "timePattern": { - "0": "%HH.%MM.%SS", - "1": "%HH.%MM" - }, - "datePattern": { - "0": "%-d.%-m.%Y", - "1": "%-d.%-m.%Y" - }, - "abmonth": "tammik.,helmik.,maalisk.,huhtik.,toukok.,kesäk.,heinäk.,elok.,syysk.,lokak.,marrask.,jouluk.", - "month": "tammikuuta,helmikuuta,maaliskuuta,huhtikuuta,toukokuuta,kesäkuuta,heinäkuuta,elokuuta,syyskuuta,lokakuuta,marraskuuta,joulukuuta", - "abday": "su,ma,ti,ke,to,pe,la", - "day": "sunnuntaina,maanantaina,tiistaina,keskiviikkona,torstaina,perjantaina,lauantaina", - "trans": { - "yes": "oui", - "Yes": "Oui", - "no": "no", - "No": "No", - "ok": "ok", - "on": "on", - "off": "off" - } - }, - "de_CH": { - "lang": "de_CH", - "icon": "🇨🇭", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ".", - "thousands_sep": "'", - "currency_symbol": "CHW", - "currency_first": true, - "int_curr_symbol": "CHW", - "speed": "kmh", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "vorm", - "1": "nachm" - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%d.%m.%Y", - "1": "%d.%m.%y" - }, - "abmonth": "Jan.,Feb.,März,Apr.,Mai,Juni,Juli,Aug.,Sept.,Okt.,Nov.,Dez.", - "month": "Januar,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember", - "abday": "So.,Mo.,Di.,Mi.,Do.,Fr.,Sa.", - "day": "Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag", - "trans": { - "yes": "ja", - "Yes": "Ja", - "no": "nein", - "No": "Nein", - "ok": "ok", - "on": "an", - "off": "aus" - } - }, - "fr_CH": { - "lang": "fr_CH", - "icon": "🇨🇭", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ",", - "thousands_sep": " ", - "currency_symbol": "CHW", - "int_curr_symbol": "CHW", - "speed": "kmh", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "AM", - "1": "PM" - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%-d %b %Y", - "1": "%d.%m.%y" - }, - "abmonth": "janv.,févr.,mars,avr.,mai,juin,juil.,août,sept.,oct.,nov.,déc.", - "month": "janvier,février,mars,avril,mai,juin,juillet,août,septembre,octobre,novembre,décembre", - "abday": "dim.,lun.,mar.,mer.,jeu.,ven.,sam.", - "day": "dimanche,lundi,mardi,mercredi,jeudi,vendredi,samedi", - "trans": { - "yes": "oui", - "Yes": "Oui", - "no": "non", - "No": "Non", - "ok": "ok", - "on": "on", - "off": "off" - } - }, - "it_CH": { - "lang": "it_CH", - "icon": "🇨🇭", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ".", - "thousands_sep": "'", - "currency_symbol": "CHW", - "currency_first": true, - "int_curr_symbol": "CHW", - "speed": "kmh", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "AM", - "1": "PM" - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%-d %b %Y", - "1": "%d.%m.%y" - }, - "abmonth": "gen,feb,mar,apr,mag,giu,lug,ago,set,ott,nov,dic", - "month": "gennaio,febbraio,marzo,aprile,maggio,giugno,luglio,agosto,settembre,ottobre,novembre,dicembre", - "abday": "dom,lun,mar,mer,gio,ven,sab", - "day": "domenica,lunedì,martedì,mercoledì,giovedì,venerdì,sabato", - "trans": { - "yes": "sì", - "Yes": "Sì", - "no": "no", - "No": "No", - "ok": "ok", - "on": "on", - "off": "off" - } - }, - "it_IT": { - "lang": "it_IT", - "icon": "🇮🇹", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ",", - "thousands_sep": ".", - "currency_symbol": "€", - "int_curr_symbol": "EUR", - "speed": "kmh", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "AM", - "1": "PM" - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%-d %b %Y", - "1": "%d/%m/%y" - }, - "abmonth": "gen,feb,mar,apr,mag,giu,lug,ago,set,ott,nov,dic", - "month": "gennaio,febbraio,marzo,aprile,maggio,giugno,luglio,agosto,settembre,ottobre,novembre,dicembre", - "abday": "dom,lun,mar,mer,gio,ven,sab", - "day": "domenica,lunedì,martedì,mercoledì,giovedì,venerdì,sabato", - "trans": { - "yes": "sì", - "Yes": "Sì", - "no": "no", - "No": "No", - "ok": "ok", - "on": "on", - "off": "off" - } - }, - "wae_CH": { - "lang": "wae_CH", - "icon": "🇨🇭", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ",", - "thousands_sep": "'", - "currency_symbol": "CHW", - "currency_first": true, - "int_curr_symbol": "CHW", - "speed": "kmh", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "AM", - "1": "PM" - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%-d. %b %Y", - "1": "%Y-%m-%d" - }, - "abmonth": "Jen,Hor,Mär,Abr,Mei,Brá,Hei,Öig,Her,Wím,Win,Chr", - "month": "Jenner,Hornig,Märze,Abrille,Meije,Brácet,Heiwet,Öigšte,Herbštmánet,Wímánet,Wintermánet,Chrištmánet", - "abday": "Sun,Män,Ziš,Mit,Fró,Fri,Sam", - "day": "Sunntag,Mäntag,Zištag,Mittwuc,Fróntag,Fritag,Samštag", - "trans": { - "yes": "sì", - "Yes": "Sì", - "no": "no", - "No": "No", - "ok": "ok", - "on": "on", - "off": "off" - } - }, - "tr_TR": { - "lang": "tr_TR", - "icon": "🇹🇷", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ",", - "thousands_sep": ".", - "currency_symbol": "TL", - "currency_first": true, - "int_curr_symbol": "TRY", - "speed": "kmh", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "ÖÖ", - "1": "ÖS" - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%-d %b %Y", - "1": "%-d.%m.%Y" - }, - "abmonth": "Oca,Sub,Mar,Nis,May,Haz,Tem,Agu,Eyl,Eki,Kas,Ara", - "month": "Ocak,Subat,Mart,Nisan,Mayis,Haziran,Temmuz,Agustos,Eylül,Ekim,Kasim,Aralik", - "abday": "Paz,Pzt,Sal,Çar,Per,Cum,Cmt", - "day": "Pazar,Pazartesi,Sali,Çarsamba,Persembe,Cuma,Cumartesi", - "trans": { - "yes": "evet", - "Yes": "Evet", - "no": "hayir", - "No": "Hayir", - "ok": "tamam", - "on": "acik", - "off": "kapali" - } - }, - "hu_HU": { - "lang": "hu_HU", - "icon": "🇭🇺", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ",", - "thousands_sep": " ", - "currency_symbol": "Ft", - "int_curr_symbol": "HUF", - "speed": "kph", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "de.", - "1": "du." - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%Y. %b %-d.", - "1": "%Y. %m. %d." - }, - "abmonth": "jan.,febr.,márc.,ápr.,máj.,jún.,júl.,aug.,szept.,okt.,nov.,dec.", - "month": "január,február,március,április,május,június,július,augusztus,szeptember,október,november,december", - "abday": "V,H,K,Sze,Cs,P,Szo", - "day": "vasárnap,hétfö,kedd,szerda,csütörtök,péntek,szombat", - "trans": { - "yes": "igen", - "Yes": "Igen", - "no": "nem", - "No": "Nem", - "ok": "ok", - "on": "be", - "off": "ki" - } - }, - "oc_FR": { - "lang": "oc_FR", - "icon": "🇫🇷", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ",", - "thousands_sep": " ", - "currency_symbol": "€", - "int_curr_symbol": "EUR", - "speed": "km/h", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "AM", - "1": "PM" - }, - "timePattern": { - "0": "%HHh%MM:%SS", - "1": "%HHh%MM" - }, - "datePattern": { - "0": "%-d %b %Y", - "1": "%-d/%m/%y" - }, - "abmonth": "gen.,feb.,març,abr.,mai,junh,jul.,ago.,set.,oct.,nov.,dec.", - "month": "de genièr,de febrièr,de març,d'abril,de mai,de junh,de julhet,d'agost,de setembre,d'octòbre,de novembre,de decembre", - "abday": "dimenge,diluns,dimars,dimècres,dijòus,divendres,dissabte", - "day": "dimenge,diluns,dimars,dimècres,dijòus,divendres,dissabte", - "trans": { - "yes": "òc", - "Yes": "Òc", - "no": "non", - "No": "Non", - "ok": "ok", - "on": "on", - "off": "off" - } - }, - "pt_BR": { - "lang": "pt_BR", - "icon": "🇧🇷", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ",", - "thousands_sep": ".", - "currency_symbol": "R$", - "currency_first": true, - "int_curr_symbol": "BRL", - "speed": "kmh", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "AM", - "1": "PM" - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%-d de %b de %Y", - "1": "%d/%m/%Y" - }, - "abmonth": "jan.,fev.,mar.,abr.,mai.,jun.,jul.,ago.,set.,out.,nov.,dez.", - "month": "janeiro,fevereiro,março,abril,maio,junho,julho,agosto,setembro,outubro,novembro,dezembro", - "abday": "dom.,seg.,ter.,qua.,qui.,sex.,sáb.", - "day": "domingo,segunda-feira,terça-feira,quarta-feira,quinta-feira,sexta-feira,sábado", - "trans": { - "yes": "sim", - "Yes": "Sim", - "no": "não", - "No": "Não", - "ok": "confirmar", - "on": "ativado", - "off": "desativado" - } - }, - "cs_CZ": { - "lang": "cs_CZ", - "icon": "🇨🇿", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ",", - "thousands_sep": " ", - "currency_symbol": "Kc", - "int_curr_symbol": "CZK", - "speed": "kmh", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "dop.", - "1": "odp." - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%-d. %-m. %Y", - "1": "%d.%m.%y" - }, - "abmonth": "led,úno,bre,dub,kve,cvn,cvc,srp,zár,ríj,lis,pro", - "month": "ledna,února,brezna,dubna,kvetna,cervna,cervence,srpna,zárí,ríjna,listopadu,prosince", - "abday": "ne,po,út,st,ct,pá,so", - "day": "nedele,pondelí,úterý,streda,ctvrtek,pátek,sobota", - "trans": { - "yes": "ano", - "Yes": "Ano", - "no": "ne", - "No": "Ne", - "ok": "ok", - "on": "zap", - "off": "vyp" - } - }, - "hr_HR": { - "lang": "hr_HR", - "icon": "🇭🇷", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ",", - "thousands_sep": ".", - "currency_symbol": "€", - "int_curr_symbol": "EUR", - "speed": "km/h", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "dop.", - "1": "pop." - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%-d. %b %Y.", - "1": "%d. %m. %Y." - }, - "abmonth": "sij,velj,ožu,tra,svi,lip,srp,kol,ruj,lis,stu,pro", - "month": "sijecnja,veljace,ožujka,travnja,svibnja,lipnja,srpnja,kolovoza,rujna,listopada,studenoga,prosinca", - "abday": "ned,pon,uto,sri,cet,pet,sub", - "day": "nedjelja,ponedjeljak,utorak,srijeda,cetvrtak,petak,subota", - "trans": { - "yes": "da", - "Yes": "Da", - "no": "ne", - "No": "Ne", - "ok": "ok", - "on": "Uklj.", - "off": "Isklj.", - "< Back": "< Natrag" - } - }, - "sl_SI": { - "lang": "sl_SI", - "icon": "🇸🇮", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ",", - "thousands_sep": ".", - "currency_symbol": "€", - "int_curr_symbol": "EUR", - "speed": "km/h", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "dop.", - "1": "pop." - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%-d. %b %Y", - "1": "%-d. %-m. %y" - }, - "abmonth": "jan.,feb.,mar.,apr.,maj,jun.,jul.,avg.,sep.,okt.,nov.,dec.", - "month": "januar,februar,marec,april,maj,junij,julij,avgust,september,oktober,november,december", - "abday": "ned.,pon.,tor.,sre.,cet.,pet.,sob.", - "day": "nedelja,ponedeljek,torek,sreda,cetrtek,petek,sobota", - "trans": { - "yes": "da", - "Yes": "Da", - "no": "ne", - "No": "Ne", - "ok": "ok", - "on": "Vklj.", - "off": "Izklj.", - "< Back": "< Nazaj" - } - }, - "pt_PT": { - "lang": "pt_PT", - "icon": "🇵🇹", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ",", - "thousands_sep": " ", - "currency_symbol": "€", - "int_curr_symbol": "EUR", - "speed": "kmh", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "a.m.", - "1": "p.m." - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%d/%m/%Y", - "1": "%d/%m/%y" - }, - "abmonth": "jan.,fev.,mar.,abr.,mai.,jun.,jul.,ago.,set.,out.,nov.,dez.", - "month": "janeiro,fevereiro,março,abril,maio,junho,julho,agosto,setembro,outubro,novembro,dezembro", - "abday": "domingo,segunda,terça,quarta,quinta,sexta,sábado", - "day": "domingo,segunda-feira,terça-feira,quarta-feira,quinta-feira,sexta-feira,sábado", - "trans": { - "yes": "sim", - "Yes": "Sim", - "no": "não", - "No": "Não", - "ok": "ok", - "on": "on", - "off": "off" - } - }, - "pl_PL": { - "lang": "pl_PL", - "icon": "🇵🇱", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ",", - "thousands_sep": " ", - "currency_symbol": "zł", - "int_curr_symbol": "PLN", - "speed": "kmh", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "AM", - "1": "PM" - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%-d %b %Y", - "1": "%-d.%m.%Y" - }, - "abmonth": "sty,lut,mar,kwi,maj,cze,lip,sie,wrz,paź,lis,gru", - "month": "stycznia,lutego,marca,kwietnia,maja,czerwca,lipca,sierpnia,wrzesnia,października,listopada,grudnia", - "abday": "niedz.,pon.,wt.,sr.,czw.,pt.,sob.", - "day": "niedziela,poniedziałek,wtorek,sroda,czwartek,piątek,sobota", - "trans": { - "yes": "tak", - "Yes": "Tak", - "no": "nie", - "No": "Nie", - "ok": "ok", - "on": "on", - "off": "off", - "< Back": "< Wstecz" - } - }, - "lv_LV": { - "lang": "lv_LV", - "icon": "🇱🇻", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ",", - "thousands_sep": " ", - "currency_symbol": "€", - "int_curr_symbol": "EUR", - "speed": "kmh", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "priekšp.", - "1": "pēcp." - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%Y. gada %-d. %b", - "1": "%d.%m.%y" - }, - "abmonth": "janv.,febr.,marts,apr.,maijs,jūn.,jūl.,aug.,sept.,okt.,nov.,dec.", - "month": "janvāris,februāris,marts,aprīlis,maijs,jūnijs,jūlijs,augusts,septembris,oktobris,novembris,decembris", - "abday": "svētd.,pirmd.,otrd.,trešd.,ceturtd.,piektd.,sestd.", - "day": "svētdiena,pirmdiena,otrdiena,trešdiena,ceturtdiena,piektdiena,sestdiena", - "trans": { - "yes": "jā", - "Yes": "Jā", - "no": "nē", - "No": "Nē", - "ok": "labi", - "on": "Ieslēgt", - "off": "Izslēgt", - "< Back": "< Atpakaļ" - } - }, - "nn_NO": { - "lang": "nn_NO", - "icon": "🇳🇴", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ",", - "thousands_sep": " ", - "currency_symbol": "kr", - "int_curr_symbol": "NOK", - "speed": "kmt", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "f.m.", - "1": "e.m." - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%-d. %b %Y", - "1": "%d.%m.%Y" - }, - "abmonth": "jan.,feb.,mars,apr.,mai,juni,juli,aug.,sep.,okt.,nov.,des.", - "month": "januar,februar,mars,april,mai,juni,juli,august,september,oktober,november,desember", - "abday": "sø.,må.,ty.,on.,to.,fr.,la.", - "day": "søndag,måndag,tysdag,onsdag,torsdag,fredag,laurdag", - "trans": { - "yes": "ja", - "Yes": "Ja", - "no": "nei", - "No": "Nei", - "ok": "ok", - "on": "på", - "off": "av", - "< Back": "< Tilbake", - "Delete": "Slett", - "Mark Unread": "Merk som ulesen" - } - }, - "nb_NO": { - "lang": "nb_NO", - "icon": "🇳🇴", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ",", - "thousands_sep": " ", - "currency_symbol": "kr", - "int_curr_symbol": "NOK", - "speed": "kmh", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "a.m.", - "1": "p.m." - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%-d. %b %Y", - "1": "%d.%m.%Y" - }, - "abmonth": "jan.,feb.,mars,apr.,mai,juni,juli,aug.,sep.,okt.,nov.,des.", - "month": "januar,februar,mars,april,mai,juni,juli,august,september,oktober,november,desember", - "abday": "søn.,man.,tir.,ons.,tor.,fre.,lør.", - "day": "søndag,mandag,tirsdag,onsdag,torsdag,fredag,lørdag", - "trans": { - "yes": "ja", - "Yes": "Ja", - "no": "nei", - "No": "Nei", - "ok": "ok", - "on": "på", - "off": "av", - "< Back": "< Tilbake", - "Delete": "Slett", - "Mark Unread": "Merk som ulest" - } - }, - "ca_ES": { - "lang": "ca_ES", - "icon": "🇪🇸", - "calendar": "gregory", - "numberingSystem": "latn", - "decimal_point": ",", - "thousands_sep": ".", - "currency_symbol": "€", - "int_curr_symbol": "EUR", - "speed": "kmh", - "distance": { - "0": "m", - "1": "km" - }, - "temperature": "°C", - "ampm": { - "0": "a. m.", - "1": "p. m." - }, - "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" - }, - "datePattern": { - "0": "%-d %b %Y", - "1": "%-d/%-m/%y" - }, - "abmonth": "de gen.,de febr.,de març,d'abr.,de maig,de juny,de jul.,d'ag.,de set.,d'oct.,de nov.,de des.", - "month": "de gener,de febrer,de març,d'abril,de maig,de juny,de juliol,d'agost,de setembre,d'octubre,de novembre,de desembre", - "abday": "dg.,dl.,dt.,dc.,dj.,dv.,ds.", - "day": "diumenge,dilluns,dimarts,dimecres,dijous,divendres,dissabte", - "trans": { - "yes": "sí", - "Yes": "Sí", - "no": "no", - "No": "No", - "ok": "d'acord", - "on": "on", - "off": "off", - "< Back": "< Enrere", - "Delete": "Esborra", - "Mark Unread": "Marca com a no llegit" - } - } -}; diff --git a/apps/locale/metadata.json b/apps/locale/metadata.json index 54ad64e805..cb45f0622c 100644 --- a/apps/locale/metadata.json +++ b/apps/locale/metadata.json @@ -1,7 +1,7 @@ { "id": "locale", "name": "Languages", - "version": "0.17", + "version": "0.18", "description": "Translations for different countries", "icon": "locale.png", "type": "locale", diff --git a/bin/create-locales-js.mjs b/bin/create-locales-js.mjs new file mode 100755 index 0000000000..632a6ca57f --- /dev/null +++ b/bin/create-locales-js.mjs @@ -0,0 +1,518 @@ +#!/usr/bin/env node + +/** + * @file + * Will generate the `apps/locale/locales.js` file that contains locale-specific information for each supported language. + * Most of the information is gathered automatically from sources like CLDR, but some of it is manually set in `apps/locale/locales-meta.js`. + * + * Remember to run `npm install`, otherwise this script won't have access to the necessary libraries. + * + * To generate all locales, run: + * node bin/create-locales-js.mjs + * + * To see the output for a single locale, run: + * node bin/create-locales-js.mjs LOCALECODE + * + * LOCALECODE is the locale that you want to see the output for, e.g. "en_US". The locale must be defined in `apps/locale/locales-meta.js`. + */ + +import process from "node:process"; +import fs from "node:fs"; +import path from "node:path"; +import cldr from "cldr"; +import clm from "country-locale-map"; +import meta from "../apps/locale/locales-meta.js"; + +/** + * The name of the file that we import the metadata and seed locales from. + * This is only used for human-readable prompts. + */ +const inputPathFriendlyName = "apps/locale/locales-meta.js"; + +/** + * The file that the full locales will be written to. + */ +const outputPath = "apps/locale/locales.js"; + +/** + * An overview of all keys in a locale object. + * This is useful for multiple things: + * - ensure there are no unsupported keys in the seed data (add the key here and in the generator code if you need to support a new key) + * - ensure that keys in the output locales are always printed in this order. That helps a lot when looking at diffs of what changed + */ +const localeKeys = [ + "lang", + "fallbackLang", + "icon", + "notes", + "calendar", + "numberingSystem", + "decimal_point", + "thousands_sep", + "currency_symbol", + "currency_first", + "int_curr_symbol", + "speed", + "distance", + "temperature", + "ampm", + "timePattern", + "datePattern", + "abmonth", + "month", + "abday", + "day", + "trans", +]; + +/** + * Maps from the Unicode standard datetime format to the custom datetime format used by Espruino. + * The Unicode standard is a superset of Espruinos, so some mappings are only approximations and other mappings are not supported at all. + * + * + * The unicode datetime format is documented here: + * https://www.unicode.org/reports/tr35/tr35-29.html#Date_Format_Patterns + * + * + * The Espruino datetime format is as follows: + * + * %Y year, all digits (2004, 2020, 32100) + * %y year, last two digits (04, 20, 00) + * %m month, two digits (01, 12) + * %-m month, one or two digits (1, 12) + * %d day of month, two digits (01, 26) + * %-d day of month, one or two digits (1, 26) + * + * %A locale's weekday name, full (e.g., Sunday) + * %a locale's weekday name, abbreviated (e.g., Sun) + * %B locale's month name, full (e.g., January) + * %b locale's month name, abbreviated (e.g., Jan) + * + * %HH hours, two digits (00..23) + * %MM minutes, two digits (00..59) + * %SS seconds, two digits (00..60) + * %P locale's equivalent of either am or pm, lowercase + * %p locale's equivalent of either AM or PM, uppercase + */ +const datetime_format_map = { + y: "%Y", + yy: "%y", + yyy: "%Y", + yyyy: "%Y", + Y: "%Y", + YY: "%y", + YYY: "%Y", + YYYY: "%Y", + M: "%-m", + MM: "%m", + MMM: "%b", + MMMM: "%B", + MMMMM: "%b", + L: "%-m", + LL: "%m", + LLL: "%b", + LLLL: "%B", + LLLLL: "%b", + d: "%-d", + dd: "%d", + E: "%a", + EE: "%a", + EEE: "%a", + EEEE: "%A", + EEEEE: "%a", + EEEEEE: "%a", + eee: "%a", + eeee: "%A", + eeeee: "%a", + eeeeee: "%a", + ccc: "%a", + cccc: "%A", + ccccc: "%a", + cccccc: "%a", + a: "%p", + h: "%HH", + hh: "%HH", + H: "%HH", + HH: "%HH", + m: "%MM", + mm: "%MM", + s: "%SS", + ss: "%SS", +}; + +/** + * Takes a Unicode datetime format string and returns a datetime format string that Espruino can parse. + * The Unicode standard is a superset of Espruinos, so some mappings are only approximations and other mappings are not supported at all. + * + * @param {string} datetimeUnicode - The datetime Unicode format + * @returns {string} - The datetime Espruino format + */ +function transformDatetimeFormat(datetimeUnicode) { + let datetimeEspruino = ""; + let formatBuffer = ""; + function commitBuffer(i) { + if (formatBuffer[0] === "'") { + if (formatBuffer.length > 1 && formatBuffer.at(-1) === "'") { + datetimeEspruino += formatBuffer.slice(1, -1); + formatBuffer = ""; + } + } else if ( + formatBuffer.length > 0 && + formatBuffer[0] !== datetimeUnicode[i] + ) { + datetimeEspruino += datetime_format_map[formatBuffer] ?? formatBuffer; + formatBuffer = ""; + } + } + for (let i = 0; i < datetimeUnicode.length; i++) { + commitBuffer(i); + formatBuffer += datetimeUnicode[i]; + } + commitBuffer(datetimeUnicode.length); + return datetimeEspruino; +} + +/** + * Most country codes have a corresponding emoji flag, this function will return that emoji. + * WARNING: There is no check to see if the emoji is supported by various ecosystems. + * + * @param {string} countryCode - The two-letter country code + * @returns {string} - The emoji for that country + */ +function getFlagEmoji(countryCode) { + const codePoints = countryCode + .toUpperCase() + .split("") + .map((char) => 127397 + char.charCodeAt()); + return String.fromCodePoint(...codePoints); +} + +/** + * We use the Ecmascript standard to define which calendar to use, but the CLDR package sometimes uses different names. + * This maps from Ecmascript calendar ids to CLDR calendar ids. + */ +const calendar_id_map = { + gregory: "gregorian", + "islamic-civil": "islamicc", +}; + +/** + * Checks if the CLDR database contains data on the specified locale. + * The check is memoized so it is fine to call this many times. + * + * @param {string} localeId - The locale id to check. + * @returns {boolean} - True if the data exists, false if not. + */ +function checkCLDR(localeId) { + if (idInCLDR.has(localeId)) return true; + if (cldr.localeIds.includes(localeId.toLowerCase())) { + idInCLDR.add(localeId); + return true; + } else { + return false; + } +} +const idInCLDR = new Set(); + +/** + * The main function that takes a minimal seed locale and generates all other locale values based on the seed. + * Refer to the documentation at the top of this file to learn more. + * + * @param {string} localeName - The user-facing locale name. Locale names must start with a valid locale id such as "en_US". + * @param {object} locales - The manually defined locale data. + * @returns {boolean} - The full locale information. + * @throws if it is unable to determine what a value should be, the error message should explain what value needs to be set manually. + */ +function generateLocale(localeName, locales) { + let locale = locales[localeName]; + + for (const key of Object.keys(locale)) { + if (!localeKeys.includes(key)) { + throw new TypeError( + `The locale ${localeName} contains a key '${key}' that is not supported. Maybe you misspelled it?`, + ); + } + } + + if (!locale.calendar) { + throw new TypeError( + `The locale ${localeName} must define a valid calendar`, + ); + } + const calendar = calendar_id_map[locale.calendar] ?? locale.calendar; + + if (!locale.numberingSystem) { + throw new TypeError( + `The locale ${localeName} must define a valid numbering system`, + ); + } + const numberingSystem = locale.numberingSystem; + + const localeMatch = localeName.match( + /^(?[a-zA-Z_]*_(?:(?[A-Z]{2})|(?[A-Z]{3})))(?:$|[^a-zA-Z_])/u, + ); + const localeId = localeMatch?.groups?.localeId; + const countryIdA2 = localeMatch?.groups?.countryIdA2; + const countryIdA3 = localeMatch?.groups?.countryIdA3; + if (!localeId || (!countryIdA2 && !countryIdA3)) { + throw new TypeError( + `The locale ${localeName} must start with a valid locale id, such as "en_US" or "da_DK"`, + ); + } + const countryId = countryIdA2 || clm.getAlpha2ByAlpha3(countryIdA3); + + if (locale.lang && locale.lang !== localeName) { + throw new TypeError( + `locale.lang is not identical to the locale key for locale ${localeName}, please make it`, + ); + } + locale.lang ||= localeName; + + let fallbackLocale; + if (locale.fallbackLang) { + fallbackLocale = generateLocale(locale.fallbackLang, locales); + } + + if (!locale.icon) { + locale.icon ||= countryId + ? getFlagEmoji(countryId) + : undefined || fallbackLocale?.icon; + if (!locale.icon) { + throw new TypeError( + `Unable to determine a suitable icon for locale ${localeName}, please provide it manually`, + ); + } + } + if (!locale.decimal_point || !locale.thousands_sep) { + if (checkCLDR(localeId)) { + const numberSymbols = cldr.extractNumberSymbols( + localeId, + numberingSystem, + ); + locale.decimal_point ||= numberSymbols.decimal; + locale.thousands_sep ||= numberSymbols.group; + } + locale.decimal_point ||= fallbackLocale?.decimal_point; + locale.thousands_sep ||= fallbackLocale?.thousands_sep; + if (!locale.decimal_point || !locale.thousands_sep) { + throw new TypeError( + `Could not determine the decimal and thousands separators for locale ${localeName}, please provide them manually`, + ); + } + } + const currencyId = + locale.int_curr_symbol || + clm.getCurrencyByAlpha2(countryId) || + fallbackLocale?.int_curr_symbol; + if (!locale.currency_symbol) { + if (checkCLDR(localeId)) { + const currencyInfo = cldr.extractCurrencyInfoById(localeId)?.[currencyId]; + locale.currency_symbol = currencyInfo?.symbol; + } + locale.currency_symbol ||= fallbackLocale?.currency_symbol || currencyId; + if (!locale.currency_symbol) { + throw new TypeError( + `Could not determine the currency symbol for locale ${localeName}, please provide it manually`, + ); + } + } + if (!("currency_first" in locale) || locale.currency_first === undefined) { + if (checkCLDR(localeId)) { + const currencyFormat = cldr + .extractNumberFormats(localeId, numberingSystem) + ?.currency?.default?.split(";")?.[0]; + if (currencyFormat?.includes("¤")) { + locale.currency_first = !Boolean( + Math.round(currencyFormat.indexOf("¤") / currencyFormat.length), + ); + } + } + if (!("currency_first" in locale) || locale.currency_first === undefined) { + locale.currency_first = fallbackLocale?.currency_first; + } + if (!("currency_first" in locale) || locale.currency_first === undefined) { + throw new TypeError( + `Could not determine the position of the currency symbol for locale ${localeName}, please set this manually`, + ); + } + } + if (!locale.int_curr_symbol) { + if (!currencyId) { + throw new TypeError( + `Could not determine currency id for locale ${localeName}, please provide it manually`, + ); + } + locale.int_curr_symbol ||= currencyId; + } + locale.speed ||= fallbackLocale?.speed || "km/h"; // true 99% of the time, some locales prefer a translated name but often still accept the english version + locale.distance ||= {}; + locale.distance["0"] ||= fallbackLocale?.distance["0"] || "m"; // true 99% of the time + locale.distance["1"] ||= fallbackLocale?.distance["1"] || "km"; // true 99% of the time + locale.temperature ||= fallbackLocale?.temperature || "°C"; // true 99% of the time + if (!locale.ampm?.["0"] || !locale.ampm?.["1"]) { + locale.ampm ||= {}; + if (checkCLDR(localeId)) { + const dayPeriods = cldr.extractDayPeriods(localeId, calendar)?.format + ?.abbreviated; + locale.ampm["0"] ||= dayPeriods.am; + locale.ampm["1"] ||= dayPeriods.pm; + } + locale.ampm["0"] ||= fallbackLocale?.ampm?.["0"]; + locale.ampm["1"] ||= fallbackLocale?.ampm?.["1"]; + if (!locale.ampm?.["0"] || !locale.ampm?.["1"]) { + throw new TypeError( + `Could not determine AM/PM format for locale ${localeName}, please provide it manually`, + ); + } + } + if (!locale.timePattern?.["0"] || !locale.timePattern?.["1"]) { + locale.timePattern ||= {}; + if (checkCLDR(localeId)) { + const timeFormats = cldr.extractTimeFormats(localeId, calendar); + locale.timePattern["0"] ||= transformDatetimeFormat(timeFormats.medium); + locale.timePattern["1"] ||= transformDatetimeFormat(timeFormats.short); + } + locale.timePattern["0"] ||= fallbackLocale?.timePattern["0"]; + locale.timePattern["1"] ||= fallbackLocale?.timePattern["1"]; + if (!locale.timePattern?.["0"] || !locale.timePattern?.["1"]) { + throw new TypeError( + `Could not determine time format for locale ${localeName}, please provide it manually`, + ); + } + } + if (!locale.datePattern?.["0"] || !locale.datePattern?.["1"]) { + locale.datePattern ||= {}; + if (checkCLDR(localeId)) { + const dateFormats = cldr.extractDateFormats(localeId, calendar); + locale.datePattern["0"] ||= transformDatetimeFormat(dateFormats.medium); + locale.datePattern["1"] ||= transformDatetimeFormat(dateFormats.short); + } + locale.datePattern["0"] ||= fallbackLocale?.datePattern["0"]; + locale.datePattern["1"] ||= fallbackLocale?.datePattern["1"]; + if (!locale.datePattern?.["0"] || !locale.datePattern?.["1"]) { + throw new TypeError( + `Could not determine date format for locale ${localeName}, please provide it manually`, + ); + } + } + if (!locale.abmonth || !locale.month) { + if (checkCLDR(localeId)) { + const months = cldr.extractMonthNames(localeId, calendar); + locale.abmonth ||= months?.format?.abbreviated?.join(","); + locale.month ||= months?.format?.wide?.join(","); + } + locale.abmonth ||= fallbackLocale?.abmonth; + locale.month ||= fallbackLocale?.month; + if (!locale.abmonth || !locale.month) { + throw new TypeError( + `Could not determine month names for locale ${localeName}, please provide them manually`, + ); + } + } + if (!locale.abday || !locale.day) { + if (checkCLDR(localeId)) { + const days = cldr.extractDayNames(localeId, calendar); + locale.abday ||= days?.format?.abbreviated?.join(","); + locale.day ||= days?.format?.wide?.join(","); + } + locale.abday ||= fallbackLocale?.abday; + locale.day ||= fallbackLocale?.day; + if (!locale.abday || !locale.day) { + throw new TypeError( + `Could not determine day names for locale ${localeName}, please provide them manually`, + ); + } + } + + // Save space by deleting fields that will evaluate to false + for (const key of Object.keys(locale)) { + if (locale[key] === false) { + delete locale[key]; + } + } + + // There is no need to include information about how we internally generate the language + delete locale.fallbackLang; + + locale = approximateChars(locale); + + // Order all keys in the locale to ensure consistent output + const orderedLocale = {}; + for (const key of localeKeys) { + if (key in locale) orderedLocale[key] = locale[key]; + } + + return orderedLocale; +} + +/** + * Replaces unsupported string characters with similar characters that are supported. + * WARNING: This only works for characters that have been defined in `character_fallback_map`. + * + * @param {object} object - The object where all strings should be checked for unsupported characters. + * @returns {object} - The same object, strings are now using supported characters. + */ +function approximateChars(object) { + for (let [key, value] of Object.entries(object)) { + if (typeof value === "string") { + for (const [char, repl] of Object.entries(meta.character_fallback_map)) { + value = value.replaceAll(char, repl); + } + object[key] = value; + } else if ( + typeof value === "object" && + value !== null && + !Array.isArray(value) + ) { + approximateChars(value); + } + } + return object; +} + +/** + * Outputs the metadata and locales as a JS file. + * + * @param {object} meta - The metadata + * @param {object} locales - The generated locales + */ +function outputLocales(meta, locales) { + let content = `/* jshint esversion: 6 */ +/** + * This file is autogenerated. If you need to edit it, please do so in '${inputPathFriendlyName}' instead. + * This was last updated ${new Date().toLocaleString()} + */ +`; + + const indent = 2; + content += `\nconst distanceUnits = ${JSON.stringify(meta.distanceUnits, undefined, indent)};\n`; + content += `const speedUnits = ${JSON.stringify(meta.speedUnits, undefined, indent)};\n`; + content += `\nconst codePages = ${JSON.stringify(meta.codePages, undefined, indent)};\n`; + content += `\nvar locales = ${JSON.stringify(locales, undefined, indent)};\n`; + + fs.writeFileSync(path.resolve(outputPath), content); +} + +const devLocaleName = process.argv[2]; +if (devLocaleName) { + console.log("Dev mode, creating", devLocaleName); + const devLocale = meta.locales[devLocaleName]; + if (!devLocale) { + throw new TypeError( + `You need to define the locale in '${inputPathFriendlyName}' before this program can work. The key must be '${devLocaleName}'.`, + ); + } + console.log(generateLocale(devLocaleName, meta.locales)); +} else { + const localeNames = Object.keys(meta.locales); + const createdLocales = {}; + console.log( + `Creating ${localeNames.length} locales, this might take a minute...`, + ); + for (const localeName of localeNames) { + createdLocales[localeName] = generateLocale(localeName, meta.locales); + } + console.log(`Writing locales to '${outputPath}'`); + outputLocales(meta, createdLocales); + console.log(`Succesfully created all locales!`); +} diff --git a/package-lock.json b/package-lock.json index 839a961826..756b8e1805 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,9 @@ "acorn": "^7.2.0" }, "devDependencies": { + "@types/cldr": "^7.1.4", + "cldr": "^7.5.0", + "country-locale-map": "^1.9.4", "eslint": "^8.57.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-plugin-import": "^2.29.1", @@ -152,6 +155,12 @@ "node": ">= 8" } }, + "node_modules/@types/cldr": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/@types/cldr/-/cldr-7.1.4.tgz", + "integrity": "sha512-p4J5+33G/iniIYGkt8ry/rCoBtJWSC2xFpW9LCygtkBNznKb870KFT/LCEU2Jd9h/6g1PteglodpWBjWdCKlpA==", + "dev": true + }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -164,6 +173,15 @@ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, + "node_modules/@xmldom/xmldom": { + "version": "0.8.10", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", + "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -487,6 +505,24 @@ "node": ">=6" } }, + "node_modules/cctx": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cctx/-/cctx-1.0.1.tgz", + "integrity": "sha512-AcWAyflX8kGUaYMyvCLzRpcOe4MyMYioPzqoQ8AIrNFSQS2ddKLW46fIKc4wiTPai6b/Pebx2acBc1vPjGWGpA==", + "dev": true + }, + "node_modules/chainsaw": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.0.9.tgz", + "integrity": "sha512-nG8PYH+/4xB+8zkV4G844EtfvZ5tTiLFoX3dZ4nhF4t3OCKIb9UvaFyNmeZO2zOSmRWzBoTD+napN6hiL+EgcA==", + "dev": true, + "dependencies": { + "traverse": ">=0.3.0 <0.4" + }, + "engines": { + "node": "*" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -542,6 +578,23 @@ "node": ">= 6" } }, + "node_modules/cldr": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/cldr/-/cldr-7.5.0.tgz", + "integrity": "sha512-2qy3ASYFbNToTujNnk5Y8ak++B4TH/G+S8AEOrN1xUFZhxhmqWDPUGnOFGyId61vD2Trf+yE65wVzIcdE/bpPg==", + "dev": true, + "dependencies": { + "@xmldom/xmldom": "^0.8.0", + "escodegen": "^2.0.0", + "esprima": "^4.0.1", + "memoizeasync": "^1.1.0", + "passerror": "^1.1.1", + "pegjs": "^0.10.0", + "seq": "^0.3.5", + "unicoderegexp": "^0.4.1", + "xpath": "^0.0.33" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -581,6 +634,105 @@ "node": ">= 0.4.0" } }, + "node_modules/country-locale-map": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/country-locale-map/-/country-locale-map-1.9.4.tgz", + "integrity": "sha512-mRg2rrNfZBgJ09pfHloaFHRcVoKJ8FR/Q0wInYdA9+oBwA+rb6z9m7wtEXcmS2tbD65ZY68mjLTneq589RkTMw==", + "dev": true, + "dependencies": { + "cctx": "^1.0.1", + "fuzzball": "^2.1.2", + "nodemon": "^3.0.2" + } + }, + "node_modules/country-locale-map/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/country-locale-map/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/country-locale-map/node_modules/nodemon": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.0.tgz", + "integrity": "sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/country-locale-map/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/country-locale-map/node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/country-locale-map/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -798,6 +950,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, "node_modules/eslint": { "version": "8.57.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", @@ -1027,6 +1200,19 @@ "node": ">=0.4.0" } }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/esquery": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", @@ -1246,6 +1432,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/fuzzball": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fuzzball/-/fuzzball-2.1.2.tgz", + "integrity": "sha512-wVBw/a73M3luaX6ZHt9vIoEKT/rLqBkzdBRhQzWw/IQyIt0qnqc0IAJDCkX3CLgj2tRIUAfgDUT8G6YuMpmNXg==", + "dev": true, + "dependencies": { + "heap": ">=0.2.0", + "setimmediate": "^1.0.5", + "string.fromcodepoint": "^0.2.1", + "string.prototype.codepointat": "^0.2.0" + } + }, "node_modules/get-intrinsic": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", @@ -1431,6 +1629,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hashish": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/hashish/-/hashish-0.0.4.tgz", + "integrity": "sha512-xyD4XgslstNAs72ENaoFvgMwtv8xhiDtC2AtzCG+8yF7W/Knxxm9BX+e2s25mm+HxMKh0rBmXVOEGF3zNImXvA==", + "dev": true, + "dependencies": { + "traverse": ">=0.2.4" + }, + "engines": { + "node": "*" + } + }, "node_modules/hasown": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", @@ -1452,6 +1662,12 @@ "he": "bin/he" } }, + "node_modules/heap": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", + "dev": true + }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", @@ -1924,6 +2140,22 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/lru-cache": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz", + "integrity": "sha512-dVmQmXPBlTgFw77hm60ud//l2bCuDKkqC2on1EBoM7s9Urm9IQDrnujwZ93NFnAq0dVZ0HBXTS7PwEG+YE7+EQ==", + "dev": true + }, + "node_modules/memoizeasync": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/memoizeasync/-/memoizeasync-1.1.0.tgz", + "integrity": "sha512-HMfzdLqClZo8HMyuM9B6TqnXCNhw82iVWRLqd2cAdXi063v2iJB4mQfWFeKVByN8VUwhmDZ8NMhryBwKrPRf8Q==", + "dev": true, + "dependencies": { + "lru-cache": "2.5.0", + "passerror": "1.1.1" + } + }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -2256,6 +2488,15 @@ "node": ">=6" } }, + "node_modules/passerror": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/passerror/-/passerror-1.1.1.tgz", + "integrity": "sha512-PwrEQJBkJMxnxG+tdraz95vTstYnCRqiURNbGtg/vZHLgcAODc9hbiD5ZumGUoh3bpw0F0qKLje7Vd2Fd5Lx3g==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -2289,6 +2530,18 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "node_modules/pegjs": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/pegjs/-/pegjs-0.10.0.tgz", + "integrity": "sha512-qI5+oFNEGi3L5HAxDwN2LA4Gg7irF70Zs25edhjld9QemOgp0CbvMtbFcMvFtEo1OityPrcCzkQFB8JP/hxgow==", + "dev": true, + "bin": { + "pegjs": "bin/pegjs" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -2592,6 +2845,19 @@ "semver": "bin/semver.js" } }, + "node_modules/seq": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/seq/-/seq-0.3.5.tgz", + "integrity": "sha512-sisY2Ln1fj43KBkRtXkesnRHYNdswIkIibvNe/0UKm2GZxjMbqmccpiatoKr/k2qX5VKiLU8xm+tz/74LAho4g==", + "dev": true, + "dependencies": { + "chainsaw": ">=0.0.7 <0.1", + "hashish": ">=0.0.2 <0.1" + }, + "engines": { + "node": "*" + } + }, "node_modules/set-function-length": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", @@ -2624,6 +2890,12 @@ "node": ">= 0.4" } }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -2680,6 +2952,16 @@ "semver": "bin/semver.js" } }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -2689,6 +2971,18 @@ "safe-buffer": "~5.2.0" } }, + "node_modules/string.fromcodepoint": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string.fromcodepoint/-/string.fromcodepoint-0.2.1.tgz", + "integrity": "sha512-n69H31OnxSGSZyZbgBlvYIXlrMhJQ0dQAX1js1QDhpaUH6zmU3QYlj07bCwCNlPOu3oRXIubGPl2gDGnHsiCqg==", + "dev": true + }, + "node_modules/string.prototype.codepointat": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz", + "integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==", + "dev": true + }, "node_modules/string.prototype.trim": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", @@ -2830,6 +3124,15 @@ "nodetouch": "bin/nodetouch.js" } }, + "node_modules/traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/tsconfig-paths": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", @@ -2960,6 +3263,12 @@ "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", "dev": true }, + "node_modules/unicoderegexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/unicoderegexp/-/unicoderegexp-0.4.1.tgz", + "integrity": "sha512-ydh8D5mdd2ldTS25GtZJEgLciuF0Qf2n3rwPhonELk3HioX201ClYGvZMc1bCmx6nblZiADQwbMWekeIqs51qw==", + "dev": true + }, "node_modules/union": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", @@ -3061,6 +3370,21 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, + "node_modules/xpath": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.33.tgz", + "integrity": "sha512-NNXnzrkDrAzalLhIUc01jO2mOzXGXh1JwPgkihcLLzw98c0WgYDmmjSh1Kl3wzaxSVWMuA+fe0WTWOBDWCBmNA==", + "dev": true, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -3168,6 +3492,12 @@ "fastq": "^1.6.0" } }, + "@types/cldr": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/@types/cldr/-/cldr-7.1.4.tgz", + "integrity": "sha512-p4J5+33G/iniIYGkt8ry/rCoBtJWSC2xFpW9LCygtkBNznKb870KFT/LCEU2Jd9h/6g1PteglodpWBjWdCKlpA==", + "dev": true + }, "@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -3180,6 +3510,12 @@ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, + "@xmldom/xmldom": { + "version": "0.8.10", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", + "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", + "dev": true + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -3415,6 +3751,21 @@ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, + "cctx": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cctx/-/cctx-1.0.1.tgz", + "integrity": "sha512-AcWAyflX8kGUaYMyvCLzRpcOe4MyMYioPzqoQ8AIrNFSQS2ddKLW46fIKc4wiTPai6b/Pebx2acBc1vPjGWGpA==", + "dev": true + }, + "chainsaw": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.0.9.tgz", + "integrity": "sha512-nG8PYH+/4xB+8zkV4G844EtfvZ5tTiLFoX3dZ4nhF4t3OCKIb9UvaFyNmeZO2zOSmRWzBoTD+napN6hiL+EgcA==", + "dev": true, + "requires": { + "traverse": ">=0.3.0 <0.4" + } + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -3452,6 +3803,23 @@ } } }, + "cldr": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/cldr/-/cldr-7.5.0.tgz", + "integrity": "sha512-2qy3ASYFbNToTujNnk5Y8ak++B4TH/G+S8AEOrN1xUFZhxhmqWDPUGnOFGyId61vD2Trf+yE65wVzIcdE/bpPg==", + "dev": true, + "requires": { + "@xmldom/xmldom": "^0.8.0", + "escodegen": "^2.0.0", + "esprima": "^4.0.1", + "memoizeasync": "^1.1.0", + "passerror": "^1.1.1", + "pegjs": "^0.10.0", + "seq": "^0.3.5", + "unicoderegexp": "^0.4.1", + "xpath": "^0.0.33" + } + }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -3485,6 +3853,79 @@ "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==", "dev": true }, + "country-locale-map": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/country-locale-map/-/country-locale-map-1.9.4.tgz", + "integrity": "sha512-mRg2rrNfZBgJ09pfHloaFHRcVoKJ8FR/Q0wInYdA9+oBwA+rb6z9m7wtEXcmS2tbD65ZY68mjLTneq589RkTMw==", + "dev": true, + "requires": { + "cctx": "^1.0.1", + "fuzzball": "^2.1.2", + "nodemon": "^3.0.2" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "nodemon": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.0.tgz", + "integrity": "sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA==", + "dev": true, + "requires": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + } + }, + "semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "requires": { + "semver": "^7.5.3" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -3649,6 +4090,18 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, + "escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "source-map": "~0.6.1" + } + }, "eslint": { "version": "8.57.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", @@ -3829,6 +4282,12 @@ } } }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, "esquery": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", @@ -3988,6 +4447,18 @@ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true }, + "fuzzball": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fuzzball/-/fuzzball-2.1.2.tgz", + "integrity": "sha512-wVBw/a73M3luaX6ZHt9vIoEKT/rLqBkzdBRhQzWw/IQyIt0qnqc0IAJDCkX3CLgj2tRIUAfgDUT8G6YuMpmNXg==", + "dev": true, + "requires": { + "heap": ">=0.2.0", + "setimmediate": "^1.0.5", + "string.fromcodepoint": "^0.2.1", + "string.prototype.codepointat": "^0.2.0" + } + }, "get-intrinsic": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", @@ -4110,6 +4581,15 @@ "has-symbols": "^1.0.3" } }, + "hashish": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/hashish/-/hashish-0.0.4.tgz", + "integrity": "sha512-xyD4XgslstNAs72ENaoFvgMwtv8xhiDtC2AtzCG+8yF7W/Knxxm9BX+e2s25mm+HxMKh0rBmXVOEGF3zNImXvA==", + "dev": true, + "requires": { + "traverse": ">=0.2.4" + } + }, "hasown": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", @@ -4125,6 +4605,12 @@ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, + "heap": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", + "dev": true + }, "html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", @@ -4462,6 +4948,22 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "lru-cache": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz", + "integrity": "sha512-dVmQmXPBlTgFw77hm60ud//l2bCuDKkqC2on1EBoM7s9Urm9IQDrnujwZ93NFnAq0dVZ0HBXTS7PwEG+YE7+EQ==", + "dev": true + }, + "memoizeasync": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/memoizeasync/-/memoizeasync-1.1.0.tgz", + "integrity": "sha512-HMfzdLqClZo8HMyuM9B6TqnXCNhw82iVWRLqd2cAdXi063v2iJB4mQfWFeKVByN8VUwhmDZ8NMhryBwKrPRf8Q==", + "dev": true, + "requires": { + "lru-cache": "2.5.0", + "passerror": "1.1.1" + } + }, "mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -4705,6 +5207,12 @@ "callsites": "^3.0.0" } }, + "passerror": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/passerror/-/passerror-1.1.1.tgz", + "integrity": "sha512-PwrEQJBkJMxnxG+tdraz95vTstYnCRqiURNbGtg/vZHLgcAODc9hbiD5ZumGUoh3bpw0F0qKLje7Vd2Fd5Lx3g==", + "dev": true + }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -4729,6 +5237,12 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "pegjs": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/pegjs/-/pegjs-0.10.0.tgz", + "integrity": "sha512-qI5+oFNEGi3L5HAxDwN2LA4Gg7irF70Zs25edhjld9QemOgp0CbvMtbFcMvFtEo1OityPrcCzkQFB8JP/hxgow==", + "dev": true + }, "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -4922,6 +5436,16 @@ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true }, + "seq": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/seq/-/seq-0.3.5.tgz", + "integrity": "sha512-sisY2Ln1fj43KBkRtXkesnRHYNdswIkIibvNe/0UKm2GZxjMbqmccpiatoKr/k2qX5VKiLU8xm+tz/74LAho4g==", + "dev": true, + "requires": { + "chainsaw": ">=0.0.7 <0.1", + "hashish": ">=0.0.2 <0.1" + } + }, "set-function-length": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", @@ -4948,6 +5472,12 @@ "has-property-descriptors": "^1.0.2" } }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -4991,6 +5521,13 @@ } } }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -5000,6 +5537,18 @@ "safe-buffer": "~5.2.0" } }, + "string.fromcodepoint": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string.fromcodepoint/-/string.fromcodepoint-0.2.1.tgz", + "integrity": "sha512-n69H31OnxSGSZyZbgBlvYIXlrMhJQ0dQAX1js1QDhpaUH6zmU3QYlj07bCwCNlPOu3oRXIubGPl2gDGnHsiCqg==", + "dev": true + }, + "string.prototype.codepointat": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz", + "integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==", + "dev": true + }, "string.prototype.trim": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", @@ -5102,6 +5651,12 @@ "nopt": "~1.0.10" } }, + "traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", + "dev": true + }, "tsconfig-paths": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", @@ -5199,6 +5754,12 @@ "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", "dev": true }, + "unicoderegexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/unicoderegexp/-/unicoderegexp-0.4.1.tgz", + "integrity": "sha512-ydh8D5mdd2ldTS25GtZJEgLciuF0Qf2n3rwPhonELk3HioX201ClYGvZMc1bCmx6nblZiADQwbMWekeIqs51qw==", + "dev": true + }, "union": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", @@ -5279,6 +5840,18 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, + "xpath": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.33.tgz", + "integrity": "sha512-NNXnzrkDrAzalLhIUc01jO2mOzXGXh1JwPgkihcLLzw98c0WgYDmmjSh1Kl3wzaxSVWMuA+fe0WTWOBDWCBmNA==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 3689750a65..21c1e4965f 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,9 @@ "license": "MIT", "repository": "https://github.com/espruino/BangleApps", "devDependencies": { + "@types/cldr": "^7.1.4", + "cldr": "^7.5.0", + "country-locale-map": "^1.9.4", "eslint": "^8.57.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-plugin-import": "^2.29.1", @@ -16,11 +19,13 @@ "lint-apps": "node bin/sync-lint-exemptions.mjs && eslint ./apps --ext .js", "test": "node bin/sanitycheck.js && npm run lint-apps && eslint ./modules --ext .js", "update-local-apps": "./bin/create_apps_json.sh apps.local.json", + "update-locales": "./bin/create-locales-js.mjs", "local": "npm-watch & npx http-server -a localhost -c-1", "start": "npx http-server -c-1" }, "watch": { - "update-local-apps": "apps/*/metadata.json" + "update-local-apps": "apps/*/metadata.json", + "update-locales": "apps/locale/locales-meta.js" }, "dependencies": { "acorn": "^7.2.0" From 371837e1d5cb7b2dd4bdaea2e97ec7d1f6b9e533 Mon Sep 17 00:00:00 2001 From: Anton Date: Sun, 17 Mar 2024 12:40:06 +0100 Subject: [PATCH 04/18] Override `ca_ES` flag --- apps/locale/locales-meta.js | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/locale/locales-meta.js b/apps/locale/locales-meta.js index a18e2584bf..e1ca308a21 100644 --- a/apps/locale/locales-meta.js +++ b/apps/locale/locales-meta.js @@ -598,6 +598,7 @@ exports.locales = { }, }, ca_ES: { + icon: "🇪🇺", calendar: "gregory", numberingSystem: "latn", speed: "kmh", From 048aee4f0c8385a0008f25fbe03a3713ebb3f0a8 Mon Sep 17 00:00:00 2001 From: Anton Date: Mon, 18 Mar 2024 08:41:57 +0100 Subject: [PATCH 05/18] Use standalone formatting --- bin/create-locales-js.mjs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bin/create-locales-js.mjs b/bin/create-locales-js.mjs index 632a6ca57f..22873631a0 100755 --- a/bin/create-locales-js.mjs +++ b/bin/create-locales-js.mjs @@ -352,7 +352,7 @@ function generateLocale(localeName, locales) { if (!locale.ampm?.["0"] || !locale.ampm?.["1"]) { locale.ampm ||= {}; if (checkCLDR(localeId)) { - const dayPeriods = cldr.extractDayPeriods(localeId, calendar)?.format + const dayPeriods = cldr.extractDayPeriods(localeId, calendar)?.standAlone ?.abbreviated; locale.ampm["0"] ||= dayPeriods.am; locale.ampm["1"] ||= dayPeriods.pm; @@ -398,8 +398,8 @@ function generateLocale(localeName, locales) { if (!locale.abmonth || !locale.month) { if (checkCLDR(localeId)) { const months = cldr.extractMonthNames(localeId, calendar); - locale.abmonth ||= months?.format?.abbreviated?.join(","); - locale.month ||= months?.format?.wide?.join(","); + locale.abmonth ||= months?.standAlone?.abbreviated?.join(","); + locale.month ||= months?.standAlone?.wide?.join(","); } locale.abmonth ||= fallbackLocale?.abmonth; locale.month ||= fallbackLocale?.month; @@ -412,8 +412,8 @@ function generateLocale(localeName, locales) { if (!locale.abday || !locale.day) { if (checkCLDR(localeId)) { const days = cldr.extractDayNames(localeId, calendar); - locale.abday ||= days?.format?.abbreviated?.join(","); - locale.day ||= days?.format?.wide?.join(","); + locale.abday ||= days?.standAlone?.abbreviated?.join(","); + locale.day ||= days?.standAlone?.wide?.join(","); } locale.abday ||= fallbackLocale?.abday; locale.day ||= fallbackLocale?.day; From 7551f094ed98e44beeba3158e179f1b0784d5974 Mon Sep 17 00:00:00 2001 From: Anton Date: Mon, 29 Apr 2024 18:48:10 +0200 Subject: [PATCH 06/18] Merge fixes --- apps/locale/locales-meta.js | 6 ++++++ bin/create-locales-js.mjs | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/apps/locale/locales-meta.js b/apps/locale/locales-meta.js index e1ca308a21..59a3990bb9 100644 --- a/apps/locale/locales-meta.js +++ b/apps/locale/locales-meta.js @@ -120,6 +120,12 @@ exports.character_fallback_map = { * node bin/create-locales-js.mjs LOCALECODE * * LOCALECODE is the locale that you want to see the output for, e.g. "en_US". + * + * In locales: + * abmonth: short months (must be <5 chars, ideally 3) + * month: normal month names + * abday: short days (must be <5 chars, ideally 3) + * day: normal day names */ exports.locales = { en_GB: { diff --git a/bin/create-locales-js.mjs b/bin/create-locales-js.mjs index 22873631a0..46edf9cce3 100755 --- a/bin/create-locales-js.mjs +++ b/bin/create-locales-js.mjs @@ -478,6 +478,10 @@ function approximateChars(object) { */ function outputLocales(meta, locales) { let content = `/* jshint esversion: 6 */ +/* exported distanceUnits */ +/* exported speedUnits */ +/* exported codePages */ +/* exported locales */ /** * This file is autogenerated. If you need to edit it, please do so in '${inputPathFriendlyName}' instead. * This was last updated ${new Date().toLocaleString()} From 85f79a4696b3a72bdcd8fa34be65d30ff8f3a096 Mon Sep 17 00:00:00 2001 From: Anton Date: Tue, 30 Apr 2024 00:17:15 +0200 Subject: [PATCH 07/18] Restrict names and ampm lengths --- apps/locale/locales-meta.js | 53 ++++++++++++++++++-- bin/create-locales-js.mjs | 98 +++++++++++++++++++++++++++++++++---- 2 files changed, 137 insertions(+), 14 deletions(-) diff --git a/apps/locale/locales-meta.js b/apps/locale/locales-meta.js index 59a3990bb9..3d1c861b2b 100644 --- a/apps/locale/locales-meta.js +++ b/apps/locale/locales-meta.js @@ -120,11 +120,11 @@ exports.character_fallback_map = { * node bin/create-locales-js.mjs LOCALECODE * * LOCALECODE is the locale that you want to see the output for, e.g. "en_US". - * + * * In locales: * abmonth: short months (must be <5 chars, ideally 3) * month: normal month names - * abday: short days (must be <5 chars, ideally 3) + * abday: short days (must be <5 chars, ideally 3) * day: normal day names */ exports.locales = { @@ -135,6 +135,7 @@ exports.locales = { speed: "mph", distance: { 0: "yd", 1: "mi" }, datePattern: { 0: "%b %d %Y", 1: "%d/%m/%Y" }, + abmonth: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", }, en_US: { notes: "USA with MM/DD/YY date", @@ -160,11 +161,13 @@ exports.locales = { numberingSystem: "latn", speed: "kmh", timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, + abmonth: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", }, en_IE: { calendar: "gregory", numberingSystem: "latn", speed: "kmh", + abmonth: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", }, en_NAV: { // navigation units nautical miles and knots @@ -208,6 +211,7 @@ exports.locales = { calendar: "gregory", numberingSystem: "latn", speed: "kmh", + ampm: { 0: "AM", 1: "PM" }, trans: { yes: "ja", Yes: "Ja", @@ -226,15 +230,19 @@ exports.locales = { calendar: "gregory", numberingSystem: "latn", datePattern: { 0: "%b %d %Y", 1: "%d/%m/%Y" }, // Feb 28 2020" // "01/03/2020"(short) + abmonth: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", }, en_CA: { calendar: "gregory", numberingSystem: "latn", + ampm: { 0: "am", 1: "pm" }, timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, }, fr_FR: { calendar: "gregory", numberingSystem: "latn", + abmonth: "janv,févr,mars,avr,mai,juin,juil,août,sept,oct,nov,déc", + abday: "dim,lun,mar,mer,jeu,ven,sam", trans: { yes: "oui", Yes: "Oui", @@ -250,6 +258,7 @@ exports.locales = { numberingSystem: "latn", speed: "km/tim", datePattern: { 0: "%b %d %Y", 1: "%Y-%m-%d" }, // feb 1 2020 // 2020-03-01 + abmonth: "jan,feb,mars,apr,maj,juni,juli,aug,sep,okt,nov,dec", trans: { yes: "ja", Yes: "Ja", @@ -265,29 +274,35 @@ exports.locales = { calendar: "gregory", numberingSystem: "latn", datePattern: { 0: "%B %d %Y", 1: "%Y-%m-%d" }, // March 1 2020 // 2020-03-01 + abmonth: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", }, da_DK: { calendar: "gregory", numberingSystem: "latn", speed: "km/t", + abmonth: "jan,feb,mar,apr,maj,jun,jul,aug,sep,okt,nov,dec", + abday: "søn,man,tir,ons,tor,fre,lør", trans: { yes: "ja", Yes: "Ja", no: "nej", No: "Nej", ok: "ok" }, }, en_DK: { // Danish units with english language calendar: "gregory", numberingSystem: "latn", + abmonth: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", }, en_NZ: { calendar: "gregory", numberingSystem: "latn", speed: "kph", timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, + abmonth: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", }, en_AU: { calendar: "gregory", numberingSystem: "latn", speed: "kmh", timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, + abmonth: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", }, de_AT: { calendar: "gregory", @@ -310,11 +325,13 @@ exports.locales = { calendar: "gregory", numberingSystem: "latn", speed: "kmh", + abmonth: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", }, es_ES: { calendar: "gregory", numberingSystem: "latn", speed: "kmh", + ampm: { 0: "AM", 1: "PM" }, trans: { yes: "sí", Yes: "Sí", @@ -332,6 +349,8 @@ exports.locales = { calendar: "gregory", numberingSystem: "latn", speed: "kmh", + abmonth: "janv,févr,mars,avr,mai,juin,juil,août,sept,oct,nov,déc", + abday: "dim,lun,mar,mer,jeu,ven,sam", trans: { yes: "oui", Yes: "Oui", @@ -346,6 +365,8 @@ exports.locales = { calendar: "gregory", numberingSystem: "latn", speed: "kmh", + ampm: { 0: "ap", 1: "ip" }, + abmonth: "tamm,helm,maal,huht,touk,kesä,hein,elo,syys,loka,marr,joul", trans: { yes: "oui", Yes: "Oui", @@ -360,7 +381,7 @@ exports.locales = { calendar: "gregory", numberingSystem: "latn", speed: "kmh", - ampm: { 0: "vorm", 1: "nachm" }, + ampm: { 0: "VM", 1: "NM" }, trans: { yes: "ja", Yes: "Ja", @@ -375,6 +396,8 @@ exports.locales = { calendar: "gregory", numberingSystem: "latn", speed: "kmh", + abmonth: "janv,févr,mars,avr,mai,juin,juil,août,sept,oct,nov,déc", + abday: "dim,lun,mar,mer,jeu,ven,sam", trans: { yes: "oui", Yes: "Oui", @@ -445,6 +468,8 @@ exports.locales = { calendar: "gregory", numberingSystem: "latn", speed: "kph", + ampm: { 0: "de", 1: "du" }, + abmonth: "jan,feb,már,ápr,máj,jún,júl,aug,szep,okt,nov,dec", trans: { yes: "igen", Yes: "Igen", @@ -458,6 +483,8 @@ exports.locales = { oc_FR: { calendar: "gregory", numberingSystem: "latn", + abmonth: "gen,feb,març,abr,mai,junh,jul,ago,set,oct,nov,dec", + abday: "dg,dl,dm,dc,dj,dv,ds", trans: { yes: "òc", Yes: "Òc", @@ -472,6 +499,8 @@ exports.locales = { calendar: "gregory", numberingSystem: "latn", speed: "kmh", + abmonth: "jan,fev,mar,abr,mai,jun,jul,ago,set,out,nov,dez", + abday: "dom,seg,ter,qua,qui,sex,sáb", trans: { yes: "sim", Yes: "Sim", @@ -486,6 +515,7 @@ exports.locales = { calendar: "gregory", numberingSystem: "latn", speed: "kmh", + ampm: { 0: "dop", 1: "odp" }, trans: { yes: "ano", Yes: "Ano", @@ -499,7 +529,7 @@ exports.locales = { hr_HR: { calendar: "gregory", numberingSystem: "latn", - ampm: { 0: "dop.", 1: "pop." }, + ampm: { 0: "dop", 1: "pop" }, trans: { yes: "da", Yes: "Da", @@ -514,6 +544,9 @@ exports.locales = { sl_SI: { calendar: "gregory", numberingSystem: "latn", + ampm: { 0: "dop", 1: "pop" }, + abmonth: "jan,feb,mar,apr,maj,jun,jul,avg,sep,okt,nov,dec", + abday: "ned,pon,tor,sre,čet,pet,sob", trans: { yes: "da", Yes: "Da", @@ -529,6 +562,9 @@ exports.locales = { calendar: "gregory", numberingSystem: "latn", speed: "kmh", + ampm: { 0: "am", 1: "pm" }, + abmonth: "jan,fev,mar,abr,mai,jun,jul,ago,set,out,nov,dez", + abday: "dom,seg,ter,qua,qui,sex,sáb", trans: { yes: "sim", Yes: "Sim", @@ -543,6 +579,7 @@ exports.locales = { calendar: "gregory", numberingSystem: "latn", speed: "kmh", + abday: "ndz,pon,wt,śr,czw,pt,sob", trans: { yes: "tak", Yes: "Tak", @@ -558,6 +595,9 @@ exports.locales = { calendar: "gregory", numberingSystem: "latn", speed: "kmh", + ampm: { 0: "pri", 1: "pēc" }, + abmonth: "jan,feb,mar,apr,mai,jūn,jūl,aug,sep,okt,nov,dec", + abday: "sv,pr,ot,tr,ce,pk,se", trans: { yes: "jā", Yes: "Jā", @@ -573,6 +613,7 @@ exports.locales = { calendar: "gregory", numberingSystem: "latn", speed: "kmt", + ampm: { 0: "FM", 1: "EM" }, trans: { yes: "ja", Yes: "Ja", @@ -590,6 +631,8 @@ exports.locales = { calendar: "gregory", numberingSystem: "latn", speed: "kmh", + ampm: { 0: "AM", 1: "PM" }, + abday: "søn,man,tir,ons,tor,fre,lør", trans: { yes: "ja", Yes: "Ja", @@ -608,6 +651,8 @@ exports.locales = { calendar: "gregory", numberingSystem: "latn", speed: "kmh", + ampm: { 0: "AM", 1: "PM" }, + abmonth: "gen,febr,març,abr,maig,juny,jul,ag,set,oct,nov,des", trans: { yes: "sí", Yes: "Sí", diff --git a/bin/create-locales-js.mjs b/bin/create-locales-js.mjs index 46edf9cce3..a1e4dfeb7b 100755 --- a/bin/create-locales-js.mjs +++ b/bin/create-locales-js.mjs @@ -10,10 +10,14 @@ * To generate all locales, run: * node bin/create-locales-js.mjs * + * To generate all locales and be notified of minor issues, run: + * node bin/create-locales-js.mjs --ideal + * * To see the output for a single locale, run: * node bin/create-locales-js.mjs LOCALECODE * * LOCALECODE is the locale that you want to see the output for, e.g. "en_US". The locale must be defined in `apps/locale/locales-meta.js`. + * When outputting a single locale, the `--ideal` flag is automatically set. */ import process from "node:process"; @@ -445,6 +449,67 @@ function generateLocale(localeName, locales) { return orderedLocale; } +/** + * Checks whether a generated locale conforms to some basic standards. + * It is possible that the CLDR data does not conform to a standard, in which case manual data must be entered. + * + * @param {object} locale - The locale to test. + * @param {boolean} ideal - If true, logs comments about aspects that could be more ideal. + * @returns {boolean} - True if the locale is conformant, false if something needs to be changed. + */ +function checkLocale(locale, ideal = false) { + let localePasses = true; + for (const month of locale.abmonth.split(",")) { + if (month.length > 4) { + console.error( + `abmonth "${month}" in locale ${locale.lang} must not be longer than 4 characters`, + ); + localePasses = false; + } + if (ideal && month.length > 3) { + console.warn( + `abmonth "${month}" in locale ${locale.lang} should ideally not be longer than 3 characters`, + ); + } + } + for (const day of locale.abday.split(",")) { + if (day.length > 4) { + console.error( + `abday "${day}" in locale ${locale.lang} must not be longer than 4 characters`, + ); + localePasses = false; + } + if (ideal && day.length > 3) { + console.warn( + `abday "${day}" in locale ${locale.lang} should ideally not be longer than 3 characters`, + ); + } + } + if (locale.ampm["0"].length > 3) { + console.error( + `AM "${locale.ampm["0"]}" in locale ${locale.lang} must not be longer than 3 characters`, + ); + localePasses = false; + } + if (ideal && locale.ampm["0"].length > 2) { + console.warn( + `AM "${locale.ampm["0"]}" in locale ${locale.lang} should ideally not be longer than 2 characters`, + ); + } + if (locale.ampm["1"].length > 3) { + console.error( + `PM "${locale.ampm["1"]}" in locale ${locale.lang} must not be longer than 3 characters`, + ); + localePasses = false; + } + if (ideal && locale.ampm["1"].length > 2) { + console.warn( + `PM "${locale.ampm["1"]}" in locale ${locale.lang} should ideally not be longer than 2 characters`, + ); + } + return localePasses; +} + /** * Replaces unsupported string characters with similar characters that are supported. * WARNING: This only works for characters that have been defined in `character_fallback_map`. @@ -483,8 +548,8 @@ function outputLocales(meta, locales) { /* exported codePages */ /* exported locales */ /** - * This file is autogenerated. If you need to edit it, please do so in '${inputPathFriendlyName}' instead. - * This was last updated ${new Date().toLocaleString()} + * THIS FILE IS AUTOGENERATED. + * If you need to edit it, please do so in '${inputPathFriendlyName}' instead. */ `; @@ -497,26 +562,39 @@ function outputLocales(meta, locales) { fs.writeFileSync(path.resolve(outputPath), content); } -const devLocaleName = process.argv[2]; -if (devLocaleName) { - console.log("Dev mode, creating", devLocaleName); - const devLocale = meta.locales[devLocaleName]; +const idealFlag = "--ideal"; +const arg = process.argv[2]; +if (arg && arg !== idealFlag) { + console.log("Dev mode, creating", arg); + const devLocale = meta.locales[arg]; if (!devLocale) { throw new TypeError( - `You need to define the locale in '${inputPathFriendlyName}' before this program can work. The key must be '${devLocaleName}'.`, + `You need to define the locale in '${inputPathFriendlyName}' before this program can work. The key must be '${arg}'.`, ); } - console.log(generateLocale(devLocaleName, meta.locales)); + const generatedLocale = generateLocale(arg, meta.locales); + console.log(generatedLocale); + checkLocale(generatedLocale, true); } else { const localeNames = Object.keys(meta.locales); const createdLocales = {}; console.log( `Creating ${localeNames.length} locales, this might take a minute...`, ); + let localesPassed = true; for (const localeName of localeNames) { - createdLocales[localeName] = generateLocale(localeName, meta.locales); + const generatedLocale = generateLocale(localeName, meta.locales); + createdLocales[localeName] = generatedLocale; + const localePassed = checkLocale(generatedLocale, arg === idealFlag); + if (!localePassed) localesPassed = false; } console.log(`Writing locales to '${outputPath}'`); outputLocales(meta, createdLocales); - console.log(`Succesfully created all locales!`); + if (localesPassed) { + console.log(`Succesfully created all locales!`); + } else { + throw new Error( + "Some locales do not conform to standards, please fix this.", + ); + } } From 57320607c2d89d70380eba31fd30c1ce689a1ae1 Mon Sep 17 00:00:00 2001 From: Anton Date: Tue, 30 Apr 2024 00:17:58 +0200 Subject: [PATCH 08/18] Include generated locales --- .gitignore | 1 - apps/locale/locales.js | 1637 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1637 insertions(+), 1 deletion(-) create mode 100644 apps/locale/locales.js diff --git a/.gitignore b/.gitignore index b2f6f50050..7687a770a9 100644 --- a/.gitignore +++ b/.gitignore @@ -8,7 +8,6 @@ appdates.csv _config.yml tests/Layout/bin/tmp.* tests/Layout/testresult.bmp -apps/locale/locales.js apps.local.json _site .jekyll-cache diff --git a/apps/locale/locales.js b/apps/locale/locales.js new file mode 100644 index 0000000000..4a482b136d --- /dev/null +++ b/apps/locale/locales.js @@ -0,0 +1,1637 @@ +/* jshint esversion: 6 */ +/* exported distanceUnits */ +/* exported speedUnits */ +/* exported codePages */ +/* exported locales */ +/** + * THIS FILE IS AUTOGENERATED. + * If you need to edit it, please do so in 'apps/locale/locales-meta.js' instead. + */ + +const distanceUnits = { + "m": 1, + "ft": 0.3048, + "yd": 0.9144, + "mi": 1609.34, + "km": 1000, + "kmi": 1000, + "nm": 1852 +}; +const speedUnits = { + "kmh": 1, + "kph": 1, + "km/h": 1, + "kmt": 1, + "km/t": 1, + "km/tim": 1, + "mph": 1.60934, + "kts": 1.852 +}; + +const codePages = { + "ISO8859-1": { + "name": "ISO8859-1", + "map": "€.‚ƒ„…†‡ˆ‰Š‹Œ.Ž..‘’“”•–—˜™š›œ.žŸ.¡¢£¤¥¦§¨©ª«¬.®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ" + } +}; + +var locales = { + "en_GB": { + "lang": "en_GB", + "icon": "🇬🇧", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ".", + "thousands_sep": ",", + "currency_symbol": "£", + "currency_first": true, + "int_curr_symbol": "GBP", + "speed": "mph", + "distance": { + "0": "yd", + "1": "mi" + }, + "temperature": "°C", + "ampm": { + "0": "am", + "1": "pm" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%b %d %Y", + "1": "%d/%m/%Y" + }, + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "month": "January,February,March,April,May,June,July,August,September,October,November,December", + "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", + "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" + }, + "en_US": { + "lang": "en_US", + "icon": "🇺🇸", + "notes": "USA with MM/DD/YY date", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ".", + "thousands_sep": ",", + "currency_symbol": "$", + "currency_first": true, + "int_curr_symbol": "USD", + "speed": "mph", + "distance": { + "0": "ft", + "1": "mi" + }, + "temperature": "°F", + "ampm": { + "0": "AM", + "1": "PM" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%b %-d, %Y", + "1": "%-m/%-d/%y" + }, + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "month": "January,February,March,April,May,June,July,August,September,October,November,December", + "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", + "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" + }, + "en_US 2": { + "lang": "en_US 2", + "icon": "🇺🇸", + "notes": "USA with YYYY-MM-DD date", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ".", + "thousands_sep": ",", + "currency_symbol": "$", + "currency_first": true, + "int_curr_symbol": "USD", + "speed": "mph", + "distance": { + "0": "ft", + "1": "mi" + }, + "temperature": "°F", + "ampm": { + "0": "AM", + "1": "PM" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%b %d, %Y", + "1": "%Y-%m-%d" + }, + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "month": "January,February,March,April,May,June,July,August,September,October,November,December", + "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", + "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" + }, + "en_IN": { + "lang": "en_IN", + "icon": "🇮🇳", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ".", + "thousands_sep": ",", + "currency_symbol": "Rs.", + "currency_first": true, + "int_curr_symbol": "INR", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "am", + "1": "pm" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%-d %b %Y", + "1": "%d/%m/%y" + }, + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "month": "January,February,March,April,May,June,July,August,September,October,November,December", + "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", + "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" + }, + "en_IE": { + "lang": "en_IE", + "icon": "🇮🇪", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ".", + "thousands_sep": ",", + "currency_symbol": "€", + "currency_first": true, + "int_curr_symbol": "EUR", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "am", + "1": "pm" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%-d %b %Y", + "1": "%d/%m/%Y" + }, + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "month": "January,February,March,April,May,June,July,August,September,October,November,December", + "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", + "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" + }, + "en_NAV": { + "lang": "en_NAV", + "icon": "⛵✈️", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ".", + "thousands_sep": ",", + "currency_symbol": "£", + "currency_first": true, + "int_curr_symbol": "GBP", + "speed": "kts", + "distance": { + "0": "m", + "1": "nm" + }, + "temperature": "°C", + "ampm": { + "0": "am", + "1": "pm" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%b %d %Y", + "1": "%d/%m/%Y" + }, + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "month": "January,February,March,April,May,June,July,August,September,October,November,December", + "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", + "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" + }, + "de_DE": { + "lang": "de_DE", + "icon": "🇩🇪", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ",", + "thousands_sep": ".", + "currency_symbol": "€", + "int_curr_symbol": "EUR", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "AM", + "1": "PM" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%d. %b %Y", + "1": "%d.%m.%Y" + }, + "abmonth": "Jan,Feb,Mär,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez", + "month": "Januar,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember", + "abday": "So,Mo,Di,Mi,Do,Fr,Sa", + "day": "Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag", + "trans": { + "yes": "ja", + "Yes": "Ja", + "no": "nein", + "No": "Nein", + "ok": "ok", + "on": "an", + "off": "aus", + "< Back": "< Zurück", + "Delete": "Löschen", + "Mark Unread": "Als ungelesen markieren" + } + }, + "en_JP": { + "lang": "en_JP", + "icon": "🇯🇵", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ".", + "thousands_sep": ",", + "currency_symbol": "¥", + "int_curr_symbol": "JPY", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "am", + "1": "pm" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%Y/%m/%d", + "1": "%Y/%m/%d" + }, + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "month": "January,February,March,April,May,June,July,August,September,October,November,December", + "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", + "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" + }, + "nl_NL": { + "lang": "nl_NL", + "icon": "🇳🇱", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ",", + "thousands_sep": ".", + "currency_symbol": "€", + "currency_first": true, + "int_curr_symbol": "EUR", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "AM", + "1": "PM" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%-d %b %Y", + "1": "%d-%m-%Y" + }, + "abmonth": "jan,feb,mrt,apr,mei,jun,jul,aug,sep,okt,nov,dec", + "month": "januari,februari,maart,april,mei,juni,juli,augustus,september,oktober,november,december", + "abday": "zo,ma,di,wo,do,vr,za", + "day": "zondag,maandag,dinsdag,woensdag,donderdag,vrijdag,zaterdag", + "trans": { + "yes": "ja", + "Yes": "Ja", + "no": "nee", + "No": "Nee", + "ok": "ok", + "on": "aan", + "off": "uit", + "< Back": "< Terug", + "Delete": "Verwijderen", + "Mark Unread": "Markeer als ongelezen" + } + }, + "en_NL": { + "lang": "en_NL", + "icon": "🇳🇱", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ",", + "thousands_sep": ".", + "currency_symbol": "€", + "currency_first": true, + "int_curr_symbol": "EUR", + "speed": "km/h", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "am", + "1": "pm" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%b %d %Y", + "1": "%d/%m/%Y" + }, + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "month": "January,February,March,April,May,June,July,August,September,October,November,December", + "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", + "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" + }, + "en_CA": { + "lang": "en_CA", + "icon": "🇨🇦", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ".", + "thousands_sep": ",", + "currency_symbol": "$", + "currency_first": true, + "int_curr_symbol": "CAD", + "speed": "km/h", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "am", + "1": "pm" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%b %-d, %Y", + "1": "%Y-%m-%d" + }, + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "month": "January,February,March,April,May,June,July,August,September,October,November,December", + "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", + "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" + }, + "fr_FR": { + "lang": "fr_FR", + "icon": "🇫🇷", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ",", + "thousands_sep": " ", + "currency_symbol": "€", + "int_curr_symbol": "EUR", + "speed": "km/h", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "AM", + "1": "PM" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%-d %b %Y", + "1": "%d/%m/%Y" + }, + "abmonth": "janv,févr,mars,avr,mai,juin,juil,août,sept,oct,nov,déc", + "month": "janvier,février,mars,avril,mai,juin,juillet,août,septembre,octobre,novembre,décembre", + "abday": "dim,lun,mar,mer,jeu,ven,sam", + "day": "dimanche,lundi,mardi,mercredi,jeudi,vendredi,samedi", + "trans": { + "yes": "oui", + "Yes": "Oui", + "no": "non", + "No": "Non", + "ok": "ok", + "on": "on", + "off": "off" + } + }, + "sv_SE": { + "lang": "sv_SE", + "icon": "🇸🇪", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ",", + "thousands_sep": " ", + "currency_symbol": "kr", + "int_curr_symbol": "SEK", + "speed": "km/tim", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "fm", + "1": "em" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%b %d %Y", + "1": "%Y-%m-%d" + }, + "abmonth": "jan,feb,mars,apr,maj,juni,juli,aug,sep,okt,nov,dec", + "month": "januari,februari,mars,april,maj,juni,juli,augusti,september,oktober,november,december", + "abday": "sön,mån,tis,ons,tors,fre,lör", + "day": "söndag,måndag,tisdag,onsdag,torsdag,fredag,lördag", + "trans": { + "yes": "ja", + "Yes": "Ja", + "no": "nej", + "No": "Nej", + "ok": "ok", + "on": "on", + "off": "off" + } + }, + "en_SE": { + "lang": "en_SE", + "icon": "🇸🇪", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ",", + "thousands_sep": " ", + "currency_symbol": "kr", + "int_curr_symbol": "SEK", + "speed": "km/h", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "am", + "1": "pm" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%B %d %Y", + "1": "%Y-%m-%d" + }, + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "month": "January,February,March,April,May,June,July,August,September,October,November,December", + "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", + "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" + }, + "da_DK": { + "lang": "da_DK", + "icon": "🇩🇰", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ",", + "thousands_sep": ".", + "currency_symbol": "kr.", + "int_curr_symbol": "DKK", + "speed": "km/t", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "AM", + "1": "PM" + }, + "timePattern": { + "0": "%HH.%MM.%SS", + "1": "%HH.%MM" + }, + "datePattern": { + "0": "%-d. %b %Y", + "1": "%d.%m.%Y" + }, + "abmonth": "jan,feb,mar,apr,maj,jun,jul,aug,sep,okt,nov,dec", + "month": "januar,februar,marts,april,maj,juni,juli,august,september,oktober,november,december", + "abday": "søn,man,tir,ons,tor,fre,lør", + "day": "søndag,mandag,tirsdag,onsdag,torsdag,fredag,lørdag", + "trans": { + "yes": "ja", + "Yes": "Ja", + "no": "nej", + "No": "Nej", + "ok": "ok" + } + }, + "en_DK": { + "lang": "en_DK", + "icon": "🇩🇰", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ",", + "thousands_sep": ".", + "currency_symbol": "kr.", + "int_curr_symbol": "DKK", + "speed": "km/h", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "am", + "1": "pm" + }, + "timePattern": { + "0": "%HH.%MM.%SS", + "1": "%HH.%MM" + }, + "datePattern": { + "0": "%-d %b %Y", + "1": "%d/%m/%Y" + }, + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "month": "January,February,March,April,May,June,July,August,September,October,November,December", + "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", + "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" + }, + "en_NZ": { + "lang": "en_NZ", + "icon": "🇳🇿", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ".", + "thousands_sep": ",", + "currency_symbol": "$", + "currency_first": true, + "int_curr_symbol": "NZD", + "speed": "kph", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "am", + "1": "pm" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%-d %b %Y", + "1": "%d/%m/%Y" + }, + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "month": "January,February,March,April,May,June,July,August,September,October,November,December", + "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", + "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" + }, + "en_AU": { + "lang": "en_AU", + "icon": "🇦🇺", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ".", + "thousands_sep": ",", + "currency_symbol": "$", + "currency_first": true, + "int_curr_symbol": "AUD", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "am", + "1": "pm" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%-d %b %Y", + "1": "%-d/%-m/%y" + }, + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "month": "January,February,March,April,May,June,July,August,September,October,November,December", + "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", + "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" + }, + "de_AT": { + "lang": "de_AT", + "icon": "🇦🇹", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ",", + "thousands_sep": " ", + "currency_symbol": "€", + "currency_first": true, + "int_curr_symbol": "EUR", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "AM", + "1": "PM" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%d.%m.%Y", + "1": "%d.%m.%y" + }, + "abmonth": "Jän,Feb,Mär,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez", + "month": "Jänner,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember", + "abday": "So,Mo,Di,Mi,Do,Fr,Sa", + "day": "Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag", + "trans": { + "yes": "ja", + "Yes": "Ja", + "no": "nein", + "No": "Nein", + "ok": "ok", + "on": "an", + "off": "aus", + "< Back": "< Zurück", + "Delete": "Löschen", + "Mark Unread": "Als ungelesen markieren" + } + }, + "en_IL": { + "lang": "en_IL", + "icon": "🇮🇱", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ".", + "thousands_sep": ",", + "currency_symbol": "ILS", + "currency_first": true, + "int_curr_symbol": "ILS", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "am", + "1": "pm" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%-d %b %Y", + "1": "%d/%m/%Y" + }, + "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", + "month": "January,February,March,April,May,June,July,August,September,October,November,December", + "abday": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", + "day": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" + }, + "es_ES": { + "lang": "es_ES", + "icon": "🇪🇸", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ",", + "thousands_sep": ".", + "currency_symbol": "€", + "int_curr_symbol": "EUR", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "AM", + "1": "PM" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%-d %b %Y", + "1": "%-d/%-m/%y" + }, + "abmonth": "ene,feb,mar,abr,may,jun,jul,ago,sept,oct,nov,dic", + "month": "enero,febrero,marzo,abril,mayo,junio,julio,agosto,septiembre,octubre,noviembre,diciembre", + "abday": "dom,lun,mar,mié,jue,vie,sáb", + "day": "domingo,lunes,martes,miércoles,jueves,viernes,sábado", + "trans": { + "yes": "sí", + "Yes": "Sí", + "no": "no", + "No": "No", + "ok": "ok", + "on": "on", + "off": "off", + "< Back": "< Atrás", + "Delete": "Borrar ", + "Mark Unread": "Marcar como no leído" + } + }, + "fr_BE": { + "lang": "fr_BE", + "icon": "🇧🇪", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ",", + "thousands_sep": " ", + "currency_symbol": "€", + "int_curr_symbol": "EUR", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "AM", + "1": "PM" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%-d %b %Y", + "1": "%-d/%m/%y" + }, + "abmonth": "janv,févr,mars,avr,mai,juin,juil,août,sept,oct,nov,déc", + "month": "janvier,février,mars,avril,mai,juin,juillet,août,septembre,octobre,novembre,décembre", + "abday": "dim,lun,mar,mer,jeu,ven,sam", + "day": "dimanche,lundi,mardi,mercredi,jeudi,vendredi,samedi", + "trans": { + "yes": "oui", + "Yes": "Oui", + "no": "non", + "No": "Non", + "ok": "ok", + "on": "on", + "off": "off" + } + }, + "fi_FI": { + "lang": "fi_FI", + "icon": "🇫🇮", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ",", + "thousands_sep": " ", + "currency_symbol": "€", + "int_curr_symbol": "EUR", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "ap", + "1": "ip" + }, + "timePattern": { + "0": "%HH.%MM.%SS", + "1": "%HH.%MM" + }, + "datePattern": { + "0": "%-d.%-m.%Y", + "1": "%-d.%-m.%Y" + }, + "abmonth": "tamm,helm,maal,huht,touk,kesä,hein,elo,syys,loka,marr,joul", + "month": "tammikuu,helmikuu,maaliskuu,huhtikuu,toukokuu,kesäkuu,heinäkuu,elokuu,syyskuu,lokakuu,marraskuu,joulukuu", + "abday": "su,ma,ti,ke,to,pe,la", + "day": "sunnuntai,maanantai,tiistai,keskiviikko,torstai,perjantai,lauantai", + "trans": { + "yes": "oui", + "Yes": "Oui", + "no": "no", + "No": "No", + "ok": "ok", + "on": "on", + "off": "off" + } + }, + "de_CH": { + "lang": "de_CH", + "icon": "🇨🇭", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ".", + "thousands_sep": "'", + "currency_symbol": "CHW", + "currency_first": true, + "int_curr_symbol": "CHW", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "VM", + "1": "NM" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%d.%m.%Y", + "1": "%d.%m.%y" + }, + "abmonth": "Jan,Feb,Mär,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez", + "month": "Januar,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember", + "abday": "So,Mo,Di,Mi,Do,Fr,Sa", + "day": "Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag", + "trans": { + "yes": "ja", + "Yes": "Ja", + "no": "nein", + "No": "Nein", + "ok": "ok", + "on": "an", + "off": "aus" + } + }, + "fr_CH": { + "lang": "fr_CH", + "icon": "🇨🇭", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ",", + "thousands_sep": " ", + "currency_symbol": "CHW", + "int_curr_symbol": "CHW", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "AM", + "1": "PM" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%-d %b %Y", + "1": "%d.%m.%y" + }, + "abmonth": "janv,févr,mars,avr,mai,juin,juil,août,sept,oct,nov,déc", + "month": "janvier,février,mars,avril,mai,juin,juillet,août,septembre,octobre,novembre,décembre", + "abday": "dim,lun,mar,mer,jeu,ven,sam", + "day": "dimanche,lundi,mardi,mercredi,jeudi,vendredi,samedi", + "trans": { + "yes": "oui", + "Yes": "Oui", + "no": "non", + "No": "Non", + "ok": "ok", + "on": "on", + "off": "off" + } + }, + "it_CH": { + "lang": "it_CH", + "icon": "🇨🇭", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ".", + "thousands_sep": "'", + "currency_symbol": "CHW", + "currency_first": true, + "int_curr_symbol": "CHW", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "AM", + "1": "PM" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%-d %b %Y", + "1": "%d.%m.%y" + }, + "abmonth": "gen,feb,mar,apr,mag,giu,lug,ago,set,ott,nov,dic", + "month": "gennaio,febbraio,marzo,aprile,maggio,giugno,luglio,agosto,settembre,ottobre,novembre,dicembre", + "abday": "dom,lun,mar,mer,gio,ven,sab", + "day": "domenica,lunedì,martedì,mercoledì,giovedì,venerdì,sabato", + "trans": { + "yes": "sì", + "Yes": "Sì", + "no": "no", + "No": "No", + "ok": "ok", + "on": "on", + "off": "off" + } + }, + "it_IT": { + "lang": "it_IT", + "icon": "🇮🇹", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ",", + "thousands_sep": ".", + "currency_symbol": "€", + "int_curr_symbol": "EUR", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "AM", + "1": "PM" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%-d %b %Y", + "1": "%d/%m/%y" + }, + "abmonth": "gen,feb,mar,apr,mag,giu,lug,ago,set,ott,nov,dic", + "month": "gennaio,febbraio,marzo,aprile,maggio,giugno,luglio,agosto,settembre,ottobre,novembre,dicembre", + "abday": "dom,lun,mar,mer,gio,ven,sab", + "day": "domenica,lunedì,martedì,mercoledì,giovedì,venerdì,sabato", + "trans": { + "yes": "sì", + "Yes": "Sì", + "no": "no", + "No": "No", + "ok": "ok", + "on": "on", + "off": "off" + } + }, + "wae_CH": { + "lang": "wae_CH", + "icon": "🇨🇭", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ",", + "thousands_sep": "'", + "currency_symbol": "CHW", + "currency_first": true, + "int_curr_symbol": "CHW", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "AM", + "1": "PM" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%-d. %b %Y", + "1": "%Y-%m-%d" + }, + "abmonth": "Jen,Hor,Mär,Abr,Mei,Brá,Hei,Öig,Her,Wím,Win,Chr", + "month": "Jenner,Hornig,Märze,Abrille,Meije,Brácet,Heiwet,Öigšte,Herbštmánet,Wímánet,Wintermánet,Chrištmánet", + "abday": "Sun,Män,Ziš,Mit,Fró,Fri,Sam", + "day": "Sunntag,Mäntag,Zištag,Mittwuc,Fróntag,Fritag,Samštag", + "trans": { + "yes": "sì", + "Yes": "Sì", + "no": "no", + "No": "No", + "ok": "ok", + "on": "on", + "off": "off" + } + }, + "tr_TR": { + "lang": "tr_TR", + "icon": "🇹🇷", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ",", + "thousands_sep": ".", + "currency_symbol": "TL", + "currency_first": true, + "int_curr_symbol": "TRY", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "ÖÖ", + "1": "ÖS" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%-d %b %Y", + "1": "%-d.%m.%Y" + }, + "abmonth": "Oca,Sub,Mar,Nis,May,Haz,Tem,Agu,Eyl,Eki,Kas,Ara", + "month": "Ocak,Subat,Mart,Nisan,Mayis,Haziran,Temmuz,Agustos,Eylül,Ekim,Kasim,Aralik", + "abday": "Paz,Pzt,Sal,Çar,Per,Cum,Cmt", + "day": "Pazar,Pazartesi,Sali,Çarsamba,Persembe,Cuma,Cumartesi", + "trans": { + "yes": "evet", + "Yes": "Evet", + "no": "hayir", + "No": "Hayir", + "ok": "tamam", + "on": "acik", + "off": "kapali" + } + }, + "hu_HU": { + "lang": "hu_HU", + "icon": "🇭🇺", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ",", + "thousands_sep": " ", + "currency_symbol": "Ft", + "int_curr_symbol": "HUF", + "speed": "kph", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "de", + "1": "du" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%Y. %b %-d.", + "1": "%Y. %m. %d." + }, + "abmonth": "jan,feb,már,ápr,máj,jún,júl,aug,szep,okt,nov,dec", + "month": "január,február,március,április,május,június,július,augusztus,szeptember,október,november,december", + "abday": "V,H,K,Sze,Cs,P,Szo", + "day": "vasárnap,hétfö,kedd,szerda,csütörtök,péntek,szombat", + "trans": { + "yes": "igen", + "Yes": "Igen", + "no": "nem", + "No": "Nem", + "ok": "ok", + "on": "be", + "off": "ki" + } + }, + "oc_FR": { + "lang": "oc_FR", + "icon": "🇫🇷", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ",", + "thousands_sep": " ", + "currency_symbol": "€", + "int_curr_symbol": "EUR", + "speed": "km/h", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "AM", + "1": "PM" + }, + "timePattern": { + "0": "%HHh%MM:%SS", + "1": "%HHh%MM" + }, + "datePattern": { + "0": "%-d %b %Y", + "1": "%-d/%m/%y" + }, + "abmonth": "gen,feb,març,abr,mai,junh,jul,ago,set,oct,nov,dec", + "month": "genièr,febrièr,març,abril,mai,junh,julhet,agost,setembre,octòbre,novembre,decembre", + "abday": "dg,dl,dm,dc,dj,dv,ds", + "day": "dimenge,diluns,dimars,dimècres,dijòus,divendres,dissabte", + "trans": { + "yes": "òc", + "Yes": "Òc", + "no": "non", + "No": "Non", + "ok": "ok", + "on": "on", + "off": "off" + } + }, + "pt_BR": { + "lang": "pt_BR", + "icon": "🇧🇷", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ",", + "thousands_sep": ".", + "currency_symbol": "R$", + "currency_first": true, + "int_curr_symbol": "BRL", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "AM", + "1": "PM" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%-d de %b de %Y", + "1": "%d/%m/%Y" + }, + "abmonth": "jan,fev,mar,abr,mai,jun,jul,ago,set,out,nov,dez", + "month": "janeiro,fevereiro,março,abril,maio,junho,julho,agosto,setembro,outubro,novembro,dezembro", + "abday": "dom,seg,ter,qua,qui,sex,sáb", + "day": "domingo,segunda-feira,terça-feira,quarta-feira,quinta-feira,sexta-feira,sábado", + "trans": { + "yes": "sim", + "Yes": "Sim", + "no": "não", + "No": "Não", + "ok": "confirmar", + "on": "ativado", + "off": "desativado" + } + }, + "cs_CZ": { + "lang": "cs_CZ", + "icon": "🇨🇿", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ",", + "thousands_sep": " ", + "currency_symbol": "Kc", + "int_curr_symbol": "CZK", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "dop", + "1": "odp" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%-d. %-m. %Y", + "1": "%d.%m.%y" + }, + "abmonth": "led,úno,bre,dub,kve,cvn,cvc,srp,zár,ríj,lis,pro", + "month": "leden,únor,brezen,duben,kveten,cerven,cervenec,srpen,zárí,ríjen,listopad,prosinec", + "abday": "ne,po,út,st,ct,pá,so", + "day": "nedele,pondelí,úterý,streda,ctvrtek,pátek,sobota", + "trans": { + "yes": "ano", + "Yes": "Ano", + "no": "ne", + "No": "Ne", + "ok": "ok", + "on": "zap", + "off": "vyp" + } + }, + "hr_HR": { + "lang": "hr_HR", + "icon": "🇭🇷", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ",", + "thousands_sep": ".", + "currency_symbol": "€", + "int_curr_symbol": "EUR", + "speed": "km/h", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "dop", + "1": "pop" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%-d. %b %Y.", + "1": "%d. %m. %Y." + }, + "abmonth": "sij,velj,ožu,tra,svi,lip,srp,kol,ruj,lis,stu,pro", + "month": "sijecanj,veljaca,ožujak,travanj,svibanj,lipanj,srpanj,kolovoz,rujan,listopad,studeni,prosinac", + "abday": "ned,pon,uto,sri,cet,pet,sub", + "day": "nedjelja,ponedjeljak,utorak,srijeda,cetvrtak,petak,subota", + "trans": { + "yes": "da", + "Yes": "Da", + "no": "ne", + "No": "Ne", + "ok": "ok", + "on": "Uklj.", + "off": "Isklj.", + "< Back": "< Natrag" + } + }, + "sl_SI": { + "lang": "sl_SI", + "icon": "🇸🇮", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ",", + "thousands_sep": ".", + "currency_symbol": "€", + "int_curr_symbol": "EUR", + "speed": "km/h", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "dop", + "1": "pop" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%-d. %b %Y", + "1": "%-d. %-m. %y" + }, + "abmonth": "jan,feb,mar,apr,maj,jun,jul,avg,sep,okt,nov,dec", + "month": "januar,februar,marec,april,maj,junij,julij,avgust,september,oktober,november,december", + "abday": "ned,pon,tor,sre,cet,pet,sob", + "day": "nedelja,ponedeljek,torek,sreda,cetrtek,petek,sobota", + "trans": { + "yes": "da", + "Yes": "Da", + "no": "ne", + "No": "Ne", + "ok": "ok", + "on": "Vklj.", + "off": "Izklj.", + "< Back": "< Nazaj" + } + }, + "pt_PT": { + "lang": "pt_PT", + "icon": "🇵🇹", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ",", + "thousands_sep": " ", + "currency_symbol": "€", + "int_curr_symbol": "EUR", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "am", + "1": "pm" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%d/%m/%Y", + "1": "%d/%m/%y" + }, + "abmonth": "jan,fev,mar,abr,mai,jun,jul,ago,set,out,nov,dez", + "month": "janeiro,fevereiro,março,abril,maio,junho,julho,agosto,setembro,outubro,novembro,dezembro", + "abday": "dom,seg,ter,qua,qui,sex,sáb", + "day": "domingo,segunda-feira,terça-feira,quarta-feira,quinta-feira,sexta-feira,sábado", + "trans": { + "yes": "sim", + "Yes": "Sim", + "no": "não", + "No": "Não", + "ok": "ok", + "on": "on", + "off": "off" + } + }, + "pl_PL": { + "lang": "pl_PL", + "icon": "🇵🇱", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ",", + "thousands_sep": " ", + "currency_symbol": "zł", + "int_curr_symbol": "PLN", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "AM", + "1": "PM" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%-d %b %Y", + "1": "%-d.%m.%Y" + }, + "abmonth": "sty,lut,mar,kwi,maj,cze,lip,sie,wrz,paź,lis,gru", + "month": "styczeń,luty,marzec,kwiecień,maj,czerwiec,lipiec,sierpień,wrzesień,październik,listopad,grudzień", + "abday": "ndz,pon,wt,sr,czw,pt,sob", + "day": "niedziela,poniedziałek,wtorek,sroda,czwartek,piątek,sobota", + "trans": { + "yes": "tak", + "Yes": "Tak", + "no": "nie", + "No": "Nie", + "ok": "ok", + "on": "on", + "off": "off", + "< Back": "< Wstecz" + } + }, + "lv_LV": { + "lang": "lv_LV", + "icon": "🇱🇻", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ",", + "thousands_sep": " ", + "currency_symbol": "€", + "int_curr_symbol": "EUR", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "pri", + "1": "pēc" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%Y. gada %-d. %b", + "1": "%d.%m.%y" + }, + "abmonth": "jan,feb,mar,apr,mai,jūn,jūl,aug,sep,okt,nov,dec", + "month": "janvāris,februāris,marts,aprīlis,maijs,jūnijs,jūlijs,augusts,septembris,oktobris,novembris,decembris", + "abday": "sv,pr,ot,tr,ce,pk,se", + "day": "Svētdiena,Pirmdiena,Otrdiena,Trešdiena,Ceturtdiena,Piektdiena,Sestdiena", + "trans": { + "yes": "jā", + "Yes": "Jā", + "no": "nē", + "No": "Nē", + "ok": "labi", + "on": "Ieslēgt", + "off": "Izslēgt", + "< Back": "< Atpakaļ" + } + }, + "nn_NO": { + "lang": "nn_NO", + "icon": "🇳🇴", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ",", + "thousands_sep": " ", + "currency_symbol": "kr", + "int_curr_symbol": "NOK", + "speed": "kmt", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "FM", + "1": "EM" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%-d. %b %Y", + "1": "%d.%m.%Y" + }, + "abmonth": "jan,feb,mar,apr,mai,jun,jul,aug,sep,okt,nov,des", + "month": "januar,februar,mars,april,mai,juni,juli,august,september,oktober,november,desember", + "abday": "søn,mån,tys,ons,tor,fre,lau", + "day": "søndag,måndag,tysdag,onsdag,torsdag,fredag,laurdag", + "trans": { + "yes": "ja", + "Yes": "Ja", + "no": "nei", + "No": "Nei", + "ok": "ok", + "on": "på", + "off": "av", + "< Back": "< Tilbake", + "Delete": "Slett", + "Mark Unread": "Merk som ulesen" + } + }, + "nb_NO": { + "lang": "nb_NO", + "icon": "🇳🇴", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ",", + "thousands_sep": " ", + "currency_symbol": "kr", + "int_curr_symbol": "NOK", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "AM", + "1": "PM" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%-d. %b %Y", + "1": "%d.%m.%Y" + }, + "abmonth": "jan,feb,mar,apr,mai,jun,jul,aug,sep,okt,nov,des", + "month": "januar,februar,mars,april,mai,juni,juli,august,september,oktober,november,desember", + "abday": "søn,man,tir,ons,tor,fre,lør", + "day": "søndag,mandag,tirsdag,onsdag,torsdag,fredag,lørdag", + "trans": { + "yes": "ja", + "Yes": "Ja", + "no": "nei", + "No": "Nei", + "ok": "ok", + "on": "på", + "off": "av", + "< Back": "< Tilbake", + "Delete": "Slett", + "Mark Unread": "Merk som ulest" + } + }, + "ca_ES": { + "lang": "ca_ES", + "icon": "🇪🇺", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ",", + "thousands_sep": ".", + "currency_symbol": "€", + "int_curr_symbol": "EUR", + "speed": "kmh", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "AM", + "1": "PM" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%-d %b %Y", + "1": "%-d/%-m/%y" + }, + "abmonth": "gen,febr,març,abr,maig,juny,jul,ag,set,oct,nov,des", + "month": "gener,febrer,març,abril,maig,juny,juliol,agost,setembre,octubre,novembre,desembre", + "abday": "dg.,dl.,dt.,dc.,dj.,dv.,ds.", + "day": "diumenge,dilluns,dimarts,dimecres,dijous,divendres,dissabte", + "trans": { + "yes": "sí", + "Yes": "Sí", + "no": "no", + "No": "No", + "ok": "d'acord", + "on": "on", + "off": "off", + "< Back": "< Enrere", + "Delete": "Esborra", + "Mark Unread": "Marca com a no llegit" + } + } +}; From 9c27dd6726cf97c461181d6791e55d3350c8a968 Mon Sep 17 00:00:00 2001 From: Anton Date: Tue, 30 Apr 2024 00:20:55 +0200 Subject: [PATCH 09/18] Remove currency information --- apps/locale/locales-meta.js | 9 +--- apps/locale/locales.js | 100 ------------------------------------ bin/create-locales-js.mjs | 47 ----------------- 3 files changed, 1 insertion(+), 155 deletions(-) diff --git a/apps/locale/locales-meta.js b/apps/locale/locales-meta.js index 3d1c861b2b..afaafcbd12 100644 --- a/apps/locale/locales-meta.js +++ b/apps/locale/locales-meta.js @@ -73,11 +73,6 @@ exports.character_fallback_map = { " ": " ", " ": " ", "’": "'", - - // currencies - "₹": "Rs.", - "₪": "ILS", - "₺": "TL", }; // charFallbacks is now in core/js/utils.js as CODEPAGE_CONVERSIONS @@ -201,8 +196,6 @@ exports.locales = { fallbackLang: "en_GB", // en_JP is not supported by the generator, so we give it somewhere else to grab the english names from calendar: "gregory", numberingSystem: "latn", - currency_symbol: "¥", - currency_first: false, speed: "kmh", distance: { 0: "m", 1: "km" }, datePattern: { 0: "%Y/%m/%d", 1: "%Y/%m/%d" }, @@ -226,7 +219,7 @@ exports.locales = { }, }, en_NL: { - // English date units with Dutch number, currency and navigation units. + // English date units with Dutch number and navigation units. calendar: "gregory", numberingSystem: "latn", datePattern: { 0: "%b %d %Y", 1: "%d/%m/%Y" }, // Feb 28 2020" // "01/03/2020"(short) diff --git a/apps/locale/locales.js b/apps/locale/locales.js index 4a482b136d..e9a9fdcf83 100644 --- a/apps/locale/locales.js +++ b/apps/locale/locales.js @@ -43,9 +43,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ".", "thousands_sep": ",", - "currency_symbol": "£", - "currency_first": true, - "int_curr_symbol": "GBP", "speed": "mph", "distance": { "0": "yd", @@ -77,9 +74,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ".", "thousands_sep": ",", - "currency_symbol": "$", - "currency_first": true, - "int_curr_symbol": "USD", "speed": "mph", "distance": { "0": "ft", @@ -111,9 +105,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ".", "thousands_sep": ",", - "currency_symbol": "$", - "currency_first": true, - "int_curr_symbol": "USD", "speed": "mph", "distance": { "0": "ft", @@ -144,9 +135,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ".", "thousands_sep": ",", - "currency_symbol": "Rs.", - "currency_first": true, - "int_curr_symbol": "INR", "speed": "kmh", "distance": { "0": "m", @@ -177,9 +165,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ".", "thousands_sep": ",", - "currency_symbol": "€", - "currency_first": true, - "int_curr_symbol": "EUR", "speed": "kmh", "distance": { "0": "m", @@ -210,9 +195,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ".", "thousands_sep": ",", - "currency_symbol": "£", - "currency_first": true, - "int_curr_symbol": "GBP", "speed": "kts", "distance": { "0": "m", @@ -243,8 +225,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": ".", - "currency_symbol": "€", - "int_curr_symbol": "EUR", "speed": "kmh", "distance": { "0": "m", @@ -287,8 +267,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ".", "thousands_sep": ",", - "currency_symbol": "¥", - "int_curr_symbol": "JPY", "speed": "kmh", "distance": { "0": "m", @@ -319,9 +297,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": ".", - "currency_symbol": "€", - "currency_first": true, - "int_curr_symbol": "EUR", "speed": "kmh", "distance": { "0": "m", @@ -364,9 +339,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": ".", - "currency_symbol": "€", - "currency_first": true, - "int_curr_symbol": "EUR", "speed": "km/h", "distance": { "0": "m", @@ -397,9 +369,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ".", "thousands_sep": ",", - "currency_symbol": "$", - "currency_first": true, - "int_curr_symbol": "CAD", "speed": "km/h", "distance": { "0": "m", @@ -430,8 +399,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": " ", - "currency_symbol": "€", - "int_curr_symbol": "EUR", "speed": "km/h", "distance": { "0": "m", @@ -471,8 +438,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": " ", - "currency_symbol": "kr", - "int_curr_symbol": "SEK", "speed": "km/tim", "distance": { "0": "m", @@ -512,8 +477,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": " ", - "currency_symbol": "kr", - "int_curr_symbol": "SEK", "speed": "km/h", "distance": { "0": "m", @@ -544,8 +507,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": ".", - "currency_symbol": "kr.", - "int_curr_symbol": "DKK", "speed": "km/t", "distance": { "0": "m", @@ -583,8 +544,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": ".", - "currency_symbol": "kr.", - "int_curr_symbol": "DKK", "speed": "km/h", "distance": { "0": "m", @@ -615,9 +574,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ".", "thousands_sep": ",", - "currency_symbol": "$", - "currency_first": true, - "int_curr_symbol": "NZD", "speed": "kph", "distance": { "0": "m", @@ -648,9 +604,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ".", "thousands_sep": ",", - "currency_symbol": "$", - "currency_first": true, - "int_curr_symbol": "AUD", "speed": "kmh", "distance": { "0": "m", @@ -681,9 +634,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": " ", - "currency_symbol": "€", - "currency_first": true, - "int_curr_symbol": "EUR", "speed": "kmh", "distance": { "0": "m", @@ -726,9 +676,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ".", "thousands_sep": ",", - "currency_symbol": "ILS", - "currency_first": true, - "int_curr_symbol": "ILS", "speed": "kmh", "distance": { "0": "m", @@ -759,8 +706,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": ".", - "currency_symbol": "€", - "int_curr_symbol": "EUR", "speed": "kmh", "distance": { "0": "m", @@ -803,8 +748,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": " ", - "currency_symbol": "€", - "int_curr_symbol": "EUR", "speed": "kmh", "distance": { "0": "m", @@ -844,8 +787,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": " ", - "currency_symbol": "€", - "int_curr_symbol": "EUR", "speed": "kmh", "distance": { "0": "m", @@ -885,9 +826,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ".", "thousands_sep": "'", - "currency_symbol": "CHW", - "currency_first": true, - "int_curr_symbol": "CHW", "speed": "kmh", "distance": { "0": "m", @@ -927,8 +865,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": " ", - "currency_symbol": "CHW", - "int_curr_symbol": "CHW", "speed": "kmh", "distance": { "0": "m", @@ -968,9 +904,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ".", "thousands_sep": "'", - "currency_symbol": "CHW", - "currency_first": true, - "int_curr_symbol": "CHW", "speed": "kmh", "distance": { "0": "m", @@ -1010,8 +943,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": ".", - "currency_symbol": "€", - "int_curr_symbol": "EUR", "speed": "kmh", "distance": { "0": "m", @@ -1051,9 +982,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": "'", - "currency_symbol": "CHW", - "currency_first": true, - "int_curr_symbol": "CHW", "speed": "kmh", "distance": { "0": "m", @@ -1093,9 +1021,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": ".", - "currency_symbol": "TL", - "currency_first": true, - "int_curr_symbol": "TRY", "speed": "kmh", "distance": { "0": "m", @@ -1135,8 +1060,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": " ", - "currency_symbol": "Ft", - "int_curr_symbol": "HUF", "speed": "kph", "distance": { "0": "m", @@ -1176,8 +1099,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": " ", - "currency_symbol": "€", - "int_curr_symbol": "EUR", "speed": "km/h", "distance": { "0": "m", @@ -1217,9 +1138,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": ".", - "currency_symbol": "R$", - "currency_first": true, - "int_curr_symbol": "BRL", "speed": "kmh", "distance": { "0": "m", @@ -1259,8 +1177,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": " ", - "currency_symbol": "Kc", - "int_curr_symbol": "CZK", "speed": "kmh", "distance": { "0": "m", @@ -1300,8 +1216,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": ".", - "currency_symbol": "€", - "int_curr_symbol": "EUR", "speed": "km/h", "distance": { "0": "m", @@ -1342,8 +1256,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": ".", - "currency_symbol": "€", - "int_curr_symbol": "EUR", "speed": "km/h", "distance": { "0": "m", @@ -1384,8 +1296,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": " ", - "currency_symbol": "€", - "int_curr_symbol": "EUR", "speed": "kmh", "distance": { "0": "m", @@ -1425,8 +1335,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": " ", - "currency_symbol": "zł", - "int_curr_symbol": "PLN", "speed": "kmh", "distance": { "0": "m", @@ -1467,8 +1375,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": " ", - "currency_symbol": "€", - "int_curr_symbol": "EUR", "speed": "kmh", "distance": { "0": "m", @@ -1509,8 +1415,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": " ", - "currency_symbol": "kr", - "int_curr_symbol": "NOK", "speed": "kmt", "distance": { "0": "m", @@ -1553,8 +1457,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": " ", - "currency_symbol": "kr", - "int_curr_symbol": "NOK", "speed": "kmh", "distance": { "0": "m", @@ -1597,8 +1499,6 @@ var locales = { "numberingSystem": "latn", "decimal_point": ",", "thousands_sep": ".", - "currency_symbol": "€", - "int_curr_symbol": "EUR", "speed": "kmh", "distance": { "0": "m", diff --git a/bin/create-locales-js.mjs b/bin/create-locales-js.mjs index a1e4dfeb7b..eab54761fd 100755 --- a/bin/create-locales-js.mjs +++ b/bin/create-locales-js.mjs @@ -53,9 +53,6 @@ const localeKeys = [ "numberingSystem", "decimal_point", "thousands_sep", - "currency_symbol", - "currency_first", - "int_curr_symbol", "speed", "distance", "temperature", @@ -304,50 +301,6 @@ function generateLocale(localeName, locales) { ); } } - const currencyId = - locale.int_curr_symbol || - clm.getCurrencyByAlpha2(countryId) || - fallbackLocale?.int_curr_symbol; - if (!locale.currency_symbol) { - if (checkCLDR(localeId)) { - const currencyInfo = cldr.extractCurrencyInfoById(localeId)?.[currencyId]; - locale.currency_symbol = currencyInfo?.symbol; - } - locale.currency_symbol ||= fallbackLocale?.currency_symbol || currencyId; - if (!locale.currency_symbol) { - throw new TypeError( - `Could not determine the currency symbol for locale ${localeName}, please provide it manually`, - ); - } - } - if (!("currency_first" in locale) || locale.currency_first === undefined) { - if (checkCLDR(localeId)) { - const currencyFormat = cldr - .extractNumberFormats(localeId, numberingSystem) - ?.currency?.default?.split(";")?.[0]; - if (currencyFormat?.includes("¤")) { - locale.currency_first = !Boolean( - Math.round(currencyFormat.indexOf("¤") / currencyFormat.length), - ); - } - } - if (!("currency_first" in locale) || locale.currency_first === undefined) { - locale.currency_first = fallbackLocale?.currency_first; - } - if (!("currency_first" in locale) || locale.currency_first === undefined) { - throw new TypeError( - `Could not determine the position of the currency symbol for locale ${localeName}, please set this manually`, - ); - } - } - if (!locale.int_curr_symbol) { - if (!currencyId) { - throw new TypeError( - `Could not determine currency id for locale ${localeName}, please provide it manually`, - ); - } - locale.int_curr_symbol ||= currencyId; - } locale.speed ||= fallbackLocale?.speed || "km/h"; // true 99% of the time, some locales prefer a translated name but often still accept the english version locale.distance ||= {}; locale.distance["0"] ||= fallbackLocale?.distance["0"] || "m"; // true 99% of the time From 295eab05f0dcd632cdc8358d031754cfd4ff7f21 Mon Sep 17 00:00:00 2001 From: Anton Date: Tue, 30 Apr 2024 01:12:12 +0200 Subject: [PATCH 10/18] Remove country-locale-map dependency --- bin/create-locales-js.mjs | 8 +- package-lock.json | 269 -------------------------------------- package.json | 1 - 3 files changed, 5 insertions(+), 273 deletions(-) diff --git a/bin/create-locales-js.mjs b/bin/create-locales-js.mjs index eab54761fd..a11dbbd2d3 100755 --- a/bin/create-locales-js.mjs +++ b/bin/create-locales-js.mjs @@ -24,7 +24,6 @@ import process from "node:process"; import fs from "node:fs"; import path from "node:path"; import cldr from "cldr"; -import clm from "country-locale-map"; import meta from "../apps/locale/locales-meta.js"; /** @@ -254,13 +253,16 @@ function generateLocale(localeName, locales) { ); const localeId = localeMatch?.groups?.localeId; const countryIdA2 = localeMatch?.groups?.countryIdA2; + + // If ever needed, you can convert A3 locale id's to A2 here. const countryIdA3 = localeMatch?.groups?.countryIdA3; - if (!localeId || (!countryIdA2 && !countryIdA3)) { + + if ((!localeId || !countryIdA2) && !locale.fallbackLang) { throw new TypeError( `The locale ${localeName} must start with a valid locale id, such as "en_US" or "da_DK"`, ); } - const countryId = countryIdA2 || clm.getAlpha2ByAlpha3(countryIdA3); + const countryId = countryIdA2; if (locale.lang && locale.lang !== localeName) { throw new TypeError( diff --git a/package-lock.json b/package-lock.json index d5a44bc368..f186da7747 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,6 @@ "devDependencies": { "@types/cldr": "^7.1.4", "cldr": "^7.5.0", - "country-locale-map": "^1.9.4", "eslint": "^8.57.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-plugin-import": "^2.29.1", @@ -505,12 +504,6 @@ "node": ">=6" } }, - "node_modules/cctx": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cctx/-/cctx-1.0.1.tgz", - "integrity": "sha512-AcWAyflX8kGUaYMyvCLzRpcOe4MyMYioPzqoQ8AIrNFSQS2ddKLW46fIKc4wiTPai6b/Pebx2acBc1vPjGWGpA==", - "dev": true - }, "node_modules/chainsaw": { "version": "0.0.9", "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.0.9.tgz", @@ -634,105 +627,6 @@ "node": ">= 0.4.0" } }, - "node_modules/country-locale-map": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/country-locale-map/-/country-locale-map-1.9.4.tgz", - "integrity": "sha512-mRg2rrNfZBgJ09pfHloaFHRcVoKJ8FR/Q0wInYdA9+oBwA+rb6z9m7wtEXcmS2tbD65ZY68mjLTneq589RkTMw==", - "dev": true, - "dependencies": { - "cctx": "^1.0.1", - "fuzzball": "^2.1.2", - "nodemon": "^3.0.2" - } - }, - "node_modules/country-locale-map/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/country-locale-map/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/country-locale-map/node_modules/nodemon": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.0.tgz", - "integrity": "sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA==", - "dev": true, - "dependencies": { - "chokidar": "^3.5.2", - "debug": "^4", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^7.5.3", - "simple-update-notifier": "^2.0.0", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/country-locale-map/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/country-locale-map/node_modules/simple-update-notifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", - "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", - "dev": true, - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/country-locale-map/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -1432,18 +1326,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fuzzball": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fuzzball/-/fuzzball-2.1.2.tgz", - "integrity": "sha512-wVBw/a73M3luaX6ZHt9vIoEKT/rLqBkzdBRhQzWw/IQyIt0qnqc0IAJDCkX3CLgj2tRIUAfgDUT8G6YuMpmNXg==", - "dev": true, - "dependencies": { - "heap": ">=0.2.0", - "setimmediate": "^1.0.5", - "string.fromcodepoint": "^0.2.1", - "string.prototype.codepointat": "^0.2.0" - } - }, "node_modules/get-intrinsic": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", @@ -1662,12 +1544,6 @@ "he": "bin/he" } }, - "node_modules/heap": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", - "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", - "dev": true - }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", @@ -2890,12 +2766,6 @@ "node": ">= 0.4" } }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -2971,18 +2841,6 @@ "safe-buffer": "~5.2.0" } }, - "node_modules/string.fromcodepoint": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/string.fromcodepoint/-/string.fromcodepoint-0.2.1.tgz", - "integrity": "sha512-n69H31OnxSGSZyZbgBlvYIXlrMhJQ0dQAX1js1QDhpaUH6zmU3QYlj07bCwCNlPOu3oRXIubGPl2gDGnHsiCqg==", - "dev": true - }, - "node_modules/string.prototype.codepointat": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz", - "integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==", - "dev": true - }, "node_modules/string.prototype.trim": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", @@ -3379,12 +3237,6 @@ "node": ">=0.6.0" } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -3751,12 +3603,6 @@ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, - "cctx": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cctx/-/cctx-1.0.1.tgz", - "integrity": "sha512-AcWAyflX8kGUaYMyvCLzRpcOe4MyMYioPzqoQ8AIrNFSQS2ddKLW46fIKc4wiTPai6b/Pebx2acBc1vPjGWGpA==", - "dev": true - }, "chainsaw": { "version": "0.0.9", "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.0.9.tgz", @@ -3853,79 +3699,6 @@ "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==", "dev": true }, - "country-locale-map": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/country-locale-map/-/country-locale-map-1.9.4.tgz", - "integrity": "sha512-mRg2rrNfZBgJ09pfHloaFHRcVoKJ8FR/Q0wInYdA9+oBwA+rb6z9m7wtEXcmS2tbD65ZY68mjLTneq589RkTMw==", - "dev": true, - "requires": { - "cctx": "^1.0.1", - "fuzzball": "^2.1.2", - "nodemon": "^3.0.2" - }, - "dependencies": { - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "nodemon": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.0.tgz", - "integrity": "sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA==", - "dev": true, - "requires": { - "chokidar": "^3.5.2", - "debug": "^4", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^7.5.3", - "simple-update-notifier": "^2.0.0", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - } - }, - "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "simple-update-notifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", - "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", - "dev": true, - "requires": { - "semver": "^7.5.3" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -4447,18 +4220,6 @@ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true }, - "fuzzball": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fuzzball/-/fuzzball-2.1.2.tgz", - "integrity": "sha512-wVBw/a73M3luaX6ZHt9vIoEKT/rLqBkzdBRhQzWw/IQyIt0qnqc0IAJDCkX3CLgj2tRIUAfgDUT8G6YuMpmNXg==", - "dev": true, - "requires": { - "heap": ">=0.2.0", - "setimmediate": "^1.0.5", - "string.fromcodepoint": "^0.2.1", - "string.prototype.codepointat": "^0.2.0" - } - }, "get-intrinsic": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", @@ -4605,12 +4366,6 @@ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, - "heap": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", - "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", - "dev": true - }, "html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", @@ -5472,12 +5227,6 @@ "has-property-descriptors": "^1.0.2" } }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -5537,18 +5286,6 @@ "safe-buffer": "~5.2.0" } }, - "string.fromcodepoint": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/string.fromcodepoint/-/string.fromcodepoint-0.2.1.tgz", - "integrity": "sha512-n69H31OnxSGSZyZbgBlvYIXlrMhJQ0dQAX1js1QDhpaUH6zmU3QYlj07bCwCNlPOu3oRXIubGPl2gDGnHsiCqg==", - "dev": true - }, - "string.prototype.codepointat": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz", - "integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==", - "dev": true - }, "string.prototype.trim": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", @@ -5846,12 +5583,6 @@ "integrity": "sha512-NNXnzrkDrAzalLhIUc01jO2mOzXGXh1JwPgkihcLLzw98c0WgYDmmjSh1Kl3wzaxSVWMuA+fe0WTWOBDWCBmNA==", "dev": true }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 74fc08b48e..318ad604db 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,6 @@ "devDependencies": { "@types/cldr": "^7.1.4", "cldr": "^7.5.0", - "country-locale-map": "^1.9.4", "eslint": "^8.57.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-plugin-import": "^2.29.1", From 070b4ab0bedcd0f8ec3ba5ae0f92fde23bc51928 Mon Sep 17 00:00:00 2001 From: Anton Date: Tue, 7 May 2024 16:43:25 +0200 Subject: [PATCH 11/18] Update generator --- bin/create-locales-js.mjs | 192 +++++++++++++++++++++++++++++++------- 1 file changed, 157 insertions(+), 35 deletions(-) diff --git a/bin/create-locales-js.mjs b/bin/create-locales-js.mjs index a11dbbd2d3..67c1c8a7cb 100755 --- a/bin/create-locales-js.mjs +++ b/bin/create-locales-js.mjs @@ -24,6 +24,7 @@ import process from "node:process"; import fs from "node:fs"; import path from "node:path"; import cldr from "cldr"; +import Utils from "../core/js/utils.js"; import meta from "../apps/locale/locales-meta.js"; /** @@ -129,7 +130,7 @@ const datetime_format_map = { cccc: "%A", ccccc: "%a", cccccc: "%a", - a: "%p", + a: "", // should be %p but espruino time pattern should not include am/pm h: "%HH", hh: "%HH", H: "%HH", @@ -139,6 +140,27 @@ const datetime_format_map = { s: "%SS", ss: "%SS", }; +/** + * Maps the Espruino datetime format to max character lengths. + * Used when determining if a format is too long. + */ +const datetime_length_map = { + "%Y": 4, + "%y": 2, + "%m": 2, + "%-m": 2, + "%d": 2, + "%-d": 2, + "%A": 13, + "%a": 4, + "%B": 11, + "%b": 4, + "%HH": 2, + "%MM": 2, + "%SS": 2, + "%P": 0, + "%p": 0, +}; /** * Takes a Unicode datetime format string and returns a datetime format string that Espruino can parse. @@ -169,9 +191,42 @@ function transformDatetimeFormat(datetimeUnicode) { formatBuffer += datetimeUnicode[i]; } commitBuffer(datetimeUnicode.length); + // If we remove am/pm we sometimes need to remove some whitespace as well + datetimeEspruino = datetimeEspruino.trim(); return datetimeEspruino; } +/** + * Takes an Espruino datetime format string and returns the maximum possible length of characters that the format could use. + * + * @param {string} datetimeEspruino - The datetime Espruino format + * @returns {number} - The maximum possible length of the format + */ +function getLengthOfDatetimeFormat(datetimeEspruino) { + let formatLength = 0; + let formatBuffer = ""; + function commitBuffer(i) { + if (formatBuffer.length === 0) { + if (datetimeEspruino[i] === "%") { + formatBuffer = "%"; + } else { + formatLength++; + } + } else { + formatBuffer += datetimeEspruino[i]; + const length = datetime_length_map[formatBuffer]; + if (length !== undefined) { + formatLength += length; + formatBuffer = ""; + } + } + } + for (let i = 0; i < datetimeEspruino.length; i++) { + commitBuffer(i); + } + return formatLength; +} + /** * Most country codes have a corresponding emoji flag, this function will return that emoji. * WARNING: There is no check to see if the emoji is supported by various ecosystems. @@ -409,76 +464,95 @@ function generateLocale(localeName, locales) { * It is possible that the CLDR data does not conform to a standard, in which case manual data must be entered. * * @param {object} locale - The locale to test. - * @param {boolean} ideal - If true, logs comments about aspects that could be more ideal. + * @param {boolean} checkIdeal - If true, logs comments about aspects that could be more ideal. * @returns {boolean} - True if the locale is conformant, false if something needs to be changed. */ -function checkLocale(locale, ideal = false) { +function checkLocale(locale, checkIdeal = false) { let localePasses = true; - for (const month of locale.abmonth.split(",")) { - if (month.length > 4) { + function checkLength(name, string, max, ideal) { + if (string.length > max) { console.error( - `abmonth "${month}" in locale ${locale.lang} must not be longer than 4 characters`, + `${name} "${string}" in locale ${locale.lang} must not be longer than ${max} characters`, ); localePasses = false; } - if (ideal && month.length > 3) { + if (checkIdeal && ideal && string.length > ideal) { console.warn( - `abmonth "${month}" in locale ${locale.lang} should ideally not be longer than 3 characters`, + `${name} "${string}" in locale ${locale.lang} should ideally not be longer than ${ideal} characters`, ); } } - for (const day of locale.abday.split(",")) { - if (day.length > 4) { + function checkFormatLength(name, format, max, ideal) { + const length = getLengthOfDatetimeFormat(format); + if (length > max) { console.error( - `abday "${day}" in locale ${locale.lang} must not be longer than 4 characters`, + `${name} "${format}" in locale ${locale.lang} must not be longer than ${max} characters`, ); localePasses = false; } - if (ideal && day.length > 3) { + if (checkIdeal && ideal && length > ideal) { console.warn( - `abday "${day}" in locale ${locale.lang} should ideally not be longer than 3 characters`, + `${name} "${format}" in locale ${locale.lang} should ideally not be longer than ${ideal} characters`, ); } } - if (locale.ampm["0"].length > 3) { - console.error( - `AM "${locale.ampm["0"]}" in locale ${locale.lang} must not be longer than 3 characters`, - ); - localePasses = false; + function checkIsIn(name, value, listName, list) { + if (!list.includes(value)) { + console.error( + `${name} "${value}" must be included in the ${listName} map`, + ); + localePasses = false; + } } - if (ideal && locale.ampm["0"].length > 2) { - console.warn( - `AM "${locale.ampm["0"]}" in locale ${locale.lang} should ideally not be longer than 2 characters`, - ); + checkLength("decimal point", locale.decimal_point, 1); + checkLength("thousands separator", locale.decimal_point, 1); + checkLength("speed", locale.speed, 4); + const speedUnits = Object.keys(meta.speedUnits); + checkIsIn("speed", locale.speed, "speedUnits", speedUnits); + checkLength("distance", locale.distance["0"], 3, 2); + checkLength("distance", locale.distance["1"], 3, 2); + const distanceUnits = Object.keys(meta.distanceUnits); + checkIsIn("distance", locale.distance["0"], "distanceUnits", distanceUnits); + checkIsIn("distance", locale.distance["1"], "distanceUnits", distanceUnits); + checkLength("temperature", locale.temperature, 2); + checkLength("AM", locale.ampm["0"], 3, 2); + checkLength("PM", locale.ampm["1"], 3, 2); + checkFormatLength("long time", locale.timePattern["0"], 8); + checkFormatLength("short time", locale.timePattern["1"], 5); + checkFormatLength("long date", locale.datePattern["0"], 14, 12); + checkFormatLength("short date", locale.datePattern["1"], 11, 9); + for (const abmonth of locale.abmonth.split(",")) { + checkLength("abmonth", abmonth, 4, 3); } - if (locale.ampm["1"].length > 3) { - console.error( - `PM "${locale.ampm["1"]}" in locale ${locale.lang} must not be longer than 3 characters`, - ); - localePasses = false; + for (const month of locale.month.split(",")) { + checkLength("month", month, 11); } - if (ideal && locale.ampm["1"].length > 2) { - console.warn( - `PM "${locale.ampm["1"]}" in locale ${locale.lang} should ideally not be longer than 2 characters`, - ); + for (const abday of locale.abday.split(",")) { + checkLength("abday", abday, 4, 3); + } + for (const day of locale.day.split(",")) { + checkLength("day", day, 13); } return localePasses; } /** * Replaces unsupported string characters with similar characters that are supported. - * WARNING: This only works for characters that have been defined in `character_fallback_map`. * * @param {object} object - The object where all strings should be checked for unsupported characters. * @returns {object} - The same object, strings are now using supported characters. */ function approximateChars(object) { for (let [key, value] of Object.entries(object)) { + // emoji icons are not used on the watch, so they are free to use fancy chars + if (key === "icon") continue; if (typeof value === "string") { - for (const [char, repl] of Object.entries(meta.character_fallback_map)) { - value = value.replaceAll(char, repl); + const stringChars = value.split(""); + let newString = ""; + for (const char of stringChars) { + newString += codePageLookup(char); } - object[key] = value; + object[key] = newString; } else if ( typeof value === "object" && value !== null && @@ -488,6 +562,22 @@ function approximateChars(object) { } } return object; + function codePageLookup(char) { + const charCode = char.charCodeAt(); + if (charCode >= 32 && charCode < 128) { + // ASCII - fully supported + return char; + } else if (meta.codePages["ISO8859-1"].map.indexOf(char) >= 0) { + // At upload time, the char can be converted to a custom codepage + return char; + } else if (Utils.CODEPAGE_CONVERSIONS[char]) { + // There is a custom fallback char for this, return it + return Utils.CODEPAGE_CONVERSIONS[char]; + } + throw new Error( + `Character ${char} (${charCode}) is not supported by Banglejs. Please add it to CODEPAGE_CONVERSIONS.`, + ); + } } /** @@ -501,6 +591,9 @@ function outputLocales(meta, locales) { /* exported distanceUnits */ /* exported speedUnits */ /* exported codePages */ +/* exported datePatterns */ +/* exported timePatterns */ +/* exported meridians */ /* exported locales */ /** * THIS FILE IS AUTOGENERATED. @@ -508,10 +601,39 @@ function outputLocales(meta, locales) { */ `; + const localeValues = Object.values(locales); + const datePatterns = { + 0: [ + ...new Set(localeValues.map((locale) => locale.datePattern["0"])), + ].sort(), + 1: [ + ...new Set(localeValues.map((locale) => locale.datePattern["1"])), + ].sort(), + }; + const timePatterns = { + 0: [ + ...new Set(localeValues.map((locale) => locale.timePattern["0"])), + ].sort(), + 1: [ + ...new Set(localeValues.map((locale) => locale.timePattern["1"])), + ].sort(), + }; + const meridians = { + 0: [ + ...new Set(localeValues.map((locale) => locale.ampm["0"])), + ].sort(), + 1: [ + ...new Set(localeValues.map((locale) => locale.ampm["1"])), + ].sort(), + } + const indent = 2; content += `\nconst distanceUnits = ${JSON.stringify(meta.distanceUnits, undefined, indent)};\n`; content += `const speedUnits = ${JSON.stringify(meta.speedUnits, undefined, indent)};\n`; content += `\nconst codePages = ${JSON.stringify(meta.codePages, undefined, indent)};\n`; + content += `\nconst datePatterns = ${JSON.stringify(datePatterns, undefined, indent)};\n`; + content += `\nconst timePatterns = ${JSON.stringify(timePatterns, undefined, indent)};\n`; + content += `\nconst meridians = ${JSON.stringify(meridians, undefined, indent)};\n`; content += `\nvar locales = ${JSON.stringify(locales, undefined, indent)};\n`; fs.writeFileSync(path.resolve(outputPath), content); From 47519d39b3eabf36c6384f1d3ec44086e6f2bbdf Mon Sep 17 00:00:00 2001 From: Anton Date: Tue, 7 May 2024 16:44:19 +0200 Subject: [PATCH 12/18] Support custom formats --- apps/locale/locale.html | 171 +++++++++++++++++++++++++++++----------- 1 file changed, 125 insertions(+), 46 deletions(-) diff --git a/apps/locale/locale.html b/apps/locale/locale.html index 8ec818aaea..b94d4d040a 100644 --- a/apps/locale/locale.html +++ b/apps/locale/locale.html @@ -3,8 +3,9 @@ @@ -15,13 +16,15 @@
- + +

- + +
+

-

Then click

@@ -91,7 +94,6 @@ /*else if (chCode<256) // it's non-ascii, but <256 - just escape it n = chCode;*/ else { - if (CODEPAGE_CONVERSIONS[ch]) return CODEPAGE_CONVERSIONS[ch]; console.error(`Locale ${lang}: Character ${ch} (${chCode}) is not in Code Page ${codePage.name}`); return undefined; } @@ -99,41 +101,14 @@ return '\\x'+(n+256).toString(16).slice(-2); } - // do some sanity checks - Object.keys(locales).forEach(function(localeName) { - var locale = locales[localeName]; - if (locale.trans && !locale.trans.on) console.error(localeName+": If translations are provided, 'on' *must* be included"); - if (distanceUnits[locale.distance[0]]===undefined) console.error(localeName+": Unknown distance unit "+locale.distance[0]); - if (distanceUnits[locale.distance[1]]===undefined) console.error(localeName+": Unknown distance unit "+locale.distance[1]); - if (speedUnits[locale.speed]===undefined) console.error(localeName+": Unknown speed unit "+locale.speed); - if (locale.temperature!='°C' && locale.temperature!='°F') - console.error(localeName+": Unknown temperature unit "+locale.temperature); - // Now check that codepage is ok and all chars in translation are in that codepage - const codePageName = "ISO8859-1"; - if (locale.codePage) codePageName = locale.codePage; - const codePage = codePages[codePageName]; - if (codePage===undefined) console.error(localeName+": Unknown codePage "+codePageName); - function checkChars(v,path) { - if ("object"==typeof v) - Object.keys(v).forEach(k=>checkChars(v[k], path+"."+k)); - else if ("string"==typeof v) - for (var i=0;i { + pattern = pattern.replace(e,"${"+replaceList[e]+"}"); + }); + pattern = eval(`let d = new Date();\`${pattern}\``); + return pattern; + } + function dataList(id, options, formatter){ + let output = ``; + for(const option of options){ + let formatted = option; + formatted = formatter?.(formatted) || formatted; + output+=`\n` + } + output += "\n"; + return output; + } + var date = new Date(); - document.getElementById("examples").innerHTML = ` + // TODO: This warning should have a link to an article explaining how the formats work, and how long they are allowed to be + document.getElementById("customize-warning").innerText = customizeLocale ? "⚠️ If you make the formats too long, some apps will not work!" : ""; + document.getElementById("examples-short-long").innerHTML = ` ShortLong Day${exports.dow(date,1)}${exports.dow(date,0)} Month${exports.month(date,1)}${exports.month(date,0)} -Date${exports.date(date,1)}${exports.date(date,0)} -Time${exports.time(date,1)}${exports.time(date,0)} -Number${exports.number(12.3456789)}${exports.number(12.3456789,4)} -Distance${exports.distance(12.34,0)}${exports.distance(12345.6,1)} -Speed${exports.speed(123)} -Temperature${exports.temp(12,0)} +${customizeLocale ? `Date Pattern + + + ${dataList("short-date-patterns", datePatterns["1"], patternOutput)} + + + + ${dataList("long-date-patterns", datePatterns["0"], patternOutput)} + + ` + : ""} +Date + ${exports.date(date,1)} + ${exports.date(date,0)} + +${customizeLocale ? `Time Pattern + + + ${dataList("short-time-patterns", timePatterns["1"], patternOutput)} + + + + ${dataList("long-time-patterns", timePatterns["0"], patternOutput)} + + ` + : ""} +Time + ${exports.time(date,1)} + ${exports.time(date,0)} + + Number${exports.number(12.3456789)}${exports.number(12.3456789,4)} + Distance${exports.distance(12.34,0)}${exports.distance(12345.6,1)} +`; +document.getElementById("examples").innerHTML = ` +Value +${customizeLocale ? `Meridian format + + + ${dataList("meridian-ams", meridians["0"])} + + + + ${dataList("meridian-pms", meridians["1"])} + + ` + : ""} +Meridian + ${exports.meridian(new Date(0))} / + ${exports.meridian(new Date(43200000))} + +Speed${exports.speed(123)} +Temperature${exports.temp(12,0)} `; + + if(customizeLocale){ + document.querySelector("input#short-date-pattern").addEventListener("input", event => { + locale.datePattern["1"] = event.target.value; + document.querySelector("td#short-date-pattern-output").innerText = patternOutput(event.target.value); + }); + document.querySelector("input#long-date-pattern").addEventListener("input", event => { + locale.datePattern["0"] = event.target.value; + document.querySelector("td#long-date-pattern-output").innerText = patternOutput(event.target.value); + }); + document.querySelector("input#short-time-pattern").addEventListener("input", event => { + locale.timePattern["1"] = event.target.value; + document.querySelector("td#short-time-pattern-output").innerText = patternOutput(event.target.value); + }); + document.querySelector("input#long-time-pattern").addEventListener("input", event => { + locale.timePattern["0"] = event.target.value; + document.querySelector("td#long-time-pattern-output").innerText = patternOutput(event.target.value); + }); + document.querySelector("input#meridian-am").addEventListener("input", event => { + locale.ampm["0"] = event.target.value; + document.querySelector("span#meridian-am-output").innerText = patternOutput(event.target.value); + }); + document.querySelector("input#meridian-pm").addEventListener("input", event => { + locale.ampm["1"] = event.target.value; + document.querySelector("span#meridian-pm-output").innerText = patternOutput(event.target.value); + }); + } return getLocaleModule(false); } + var lang; + var locale; + var customizeLocale; var languageSelector = document.getElementById("languages"); + var customizeSelector = document.getElementById('customize'); languageSelector.innerHTML = Object.keys(locales).map(l=>{ var locale = locales[l]; var localeParts = l.split("_"); // en_GB -> ["en","GB"] @@ -274,17 +346,24 @@ return `` }).join("\n"); languageSelector.addEventListener('change', function() { - const lang = languageSelector.options[languageSelector.selectedIndex].value; - createLocaleModule(lang); + lang = languageSelector.options[languageSelector.selectedIndex].value; + locale = locales[lang] + createLocaleModule(); + }); + customizeSelector.addEventListener('change', function() { + customizeLocale = customizeSelector.checked; + createLocaleModule(); }); // initial value - createLocaleModule(languageSelector.options[languageSelector.selectedIndex].value); + lang = languageSelector.options[languageSelector.selectedIndex].value; + locale = locales[lang]; + customizeLocale = false; + createLocaleModule(); document.getElementById("upload").addEventListener("click", function() { - const lang = languageSelector.options[languageSelector.selectedIndex].value; var localeModule = createLocaleModule(lang); console.log("Locale Module is:",localeModule); From eee4b6735eb97dd75c5b1515ebd18212b9a7979b Mon Sep 17 00:00:00 2001 From: Anton Date: Tue, 7 May 2024 16:44:40 +0200 Subject: [PATCH 13/18] Update locales --- apps/locale/locales-meta.js | 121 ++++++++++++++++++++++++------------ 1 file changed, 81 insertions(+), 40 deletions(-) diff --git a/apps/locale/locales-meta.js b/apps/locale/locales-meta.js index afaafcbd12..b8ab0864bb 100644 --- a/apps/locale/locales-meta.js +++ b/apps/locale/locales-meta.js @@ -22,7 +22,6 @@ exports.speedUnits = { "km/h": 1, kmt: 1, "km/t": 1, - "km/tim": 1, mph: 1.60934, kts: 1.852, }; @@ -47,34 +46,6 @@ exports.codePages = { }, }; -/** - * Espruino does not support all unicode characters. - * This is a list of unsupported characters that map to a similar character which is supported. - */ -exports.character_fallback_map = { - // letters - Č: "C", - č: "c", - Ě: "E", - ě: "e", - Ğ: "G", - ğ: "g", - ı: "i", - Ő: "Ö", - ő: "ö", - Ř: "R", - ř: "r", - Ś: "S", - ś: "s", - Ş: "S", - ş: "s", - - // separators - " ": " ", - " ": " ", - "’": "'", -}; - // charFallbacks is now in core/js/utils.js as CODEPAGE_CONVERSIONS /** @@ -116,11 +87,21 @@ exports.character_fallback_map = { * * LOCALECODE is the locale that you want to see the output for, e.g. "en_US". * - * In locales: + * Limits: + * decimal_point: must be 1 char + * thousands_sep: must be 1 char + * speed: must be <5 chars + * distance: must be <4 chars, ideally 2 + * temperature: must be <4 chars, ideally 2 + * am/pm: must be <4 chars, ideally 2 + * long time: must be <9 chars + * short time: must be <6 char + * long date: must be <15 chars, ideally <13 + * short date: must be <12 chars, ideally <10 * abmonth: short months (must be <5 chars, ideally 3) - * month: normal month names + * month: normal month names (current longest is 11 chars) * abday: short days (must be <5 chars, ideally 3) - * day: normal day names + * day: normal day names (current longest is 13 chars) */ exports.locales = { en_GB: { @@ -139,7 +120,6 @@ exports.locales = { speed: "mph", distance: { 0: "ft", 1: "mi" }, temperature: "°F", - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, }, "en_US 2": { notes: "USA with YYYY-MM-DD date", @@ -148,14 +128,12 @@ exports.locales = { speed: "mph", distance: { 0: "ft", 1: "mi" }, temperature: "°F", - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, datePattern: { 0: "%b %d, %Y", 1: "%Y-%m-%d" }, }, en_IN: { calendar: "gregory", numberingSystem: "latn", speed: "kmh", - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, abmonth: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", }, en_IE: { @@ -229,7 +207,6 @@ exports.locales = { calendar: "gregory", numberingSystem: "latn", ampm: { 0: "am", 1: "pm" }, - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, }, fr_FR: { calendar: "gregory", @@ -246,10 +223,16 @@ exports.locales = { off: "off", }, }, + fr_MC: { + calendar: "gregory", + numberingSystem: "latn", + abmonth: "janv,févr,mars,avr,mai,juin,juil,août,sept,oct,nov,déc", + abday: "dim,lun,mar,mer,jeu,ven,sam", + }, sv_SE: { calendar: "gregory", numberingSystem: "latn", - speed: "km/tim", + speed: "km/t", datePattern: { 0: "%b %d %Y", 1: "%Y-%m-%d" }, // feb 1 2020 // 2020-03-01 abmonth: "jan,feb,mars,apr,maj,juni,juli,aug,sep,okt,nov,dec", trans: { @@ -266,7 +249,6 @@ exports.locales = { // Swedish localisation with English text calendar: "gregory", numberingSystem: "latn", - datePattern: { 0: "%B %d %Y", 1: "%Y-%m-%d" }, // March 1 2020 // 2020-03-01 abmonth: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", }, da_DK: { @@ -287,14 +269,12 @@ exports.locales = { calendar: "gregory", numberingSystem: "latn", speed: "kph", - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, abmonth: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", }, en_AU: { calendar: "gregory", numberingSystem: "latn", speed: "kmh", - timePattern: { 0: "%HH:%MM:%SS", 1: "%HH:%MM" }, abmonth: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", }, de_AT: { @@ -354,6 +334,15 @@ exports.locales = { off: "off", }, }, + nl_BE: { + calendar: "gregory", + numberingSystem: "latn", + ampm: { 0: "AM", 1: "PM" }, + }, + de_BE: { + calendar: "gregory", + numberingSystem: "latn", + }, fi_FI: { calendar: "gregory", numberingSystem: "latn", @@ -462,6 +451,10 @@ exports.locales = { numberingSystem: "latn", speed: "kph", ampm: { 0: "de", 1: "du" }, + datePattern: { + 0: "%Y. %b %-d.", + 1: "%Y.%m.%d.", + }, abmonth: "jan,feb,már,ápr,máj,jún,júl,aug,szep,okt,nov,dec", trans: { yes: "igen", @@ -492,6 +485,10 @@ exports.locales = { calendar: "gregory", numberingSystem: "latn", speed: "kmh", + datePattern: { + 0: "%-d. %b %Y", + 1: "%d/%m/%Y", + }, abmonth: "jan,fev,mar,abr,mai,jun,jul,ago,set,out,nov,dez", abday: "dom,seg,ter,qua,qui,sex,sáb", trans: { @@ -523,6 +520,10 @@ exports.locales = { calendar: "gregory", numberingSystem: "latn", ampm: { 0: "dop", 1: "pop" }, + datePattern: { + 0: "%-d. %b %Y.", + 1: "%d.%m.%Y.", + }, trans: { yes: "da", Yes: "Da", @@ -589,6 +590,10 @@ exports.locales = { numberingSystem: "latn", speed: "kmh", ampm: { 0: "pri", 1: "pēc" }, + datePattern: { + 0: "%Y. %-d. %b", + 1: "%d.%m.%y", + }, abmonth: "jan,feb,mar,apr,mai,jūn,jūl,aug,sep,okt,nov,dec", abday: "sv,pr,ot,tr,ce,pk,se", trans: { @@ -659,6 +664,11 @@ exports.locales = { "Mark Unread": "Marca com a no llegit", }, }, + sq_AL: { + calendar: "gregory", + numberingSystem: "latn", + ampm: { 0: "AM", 1: "PM" }, + }, /* "he_IL": { // This won't work until we get a font - see https://github.com/espruino/BangleApps/issues/399 codePage : "ISO8859-8", @@ -676,4 +686,35 @@ exports.locales = { trans: { yes: "כן", Yes: "כן", no: "לא", No: "לא", ok: "אישור", on: "פעיל", off: "כבוי" } } */ + "ts_TS": { + icon: "🐛", + notes: "Produces the longest possible output. Useful for testing.", + calendar: "gregory", + numberingSystem: "latn", + decimal_point: ".", + thousands_sep: ",", + speed: "km/h", + distance: { + 0: "kmi", + 1: "kmi", + }, + temperature: "°C", + ampm: { + 0: "dop", + 1: "pop", + }, + timePattern: { + 0: "%HHh%MM:%SS", + 1: "%HHh%MM", + }, + datePattern: { + 0: "%b, %d, %Y", + 1: "%d. %m %Y", + }, + abmonth: "mema,mema,mema,mema,mema,mema,mema,mema,mema,mema,mema,mema", + month: + "mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum", + abday: "wewa,wewa,wewa,wewa,wewa,wewa,wewa", + day: "weswavammkkom,weswavammkkom,weswavammkkom,weswavammkkom,weswavammkkom,weswavammkkom,weswavammkkom", + }, }; From 4de636a2e7472244f8e0aa56057bc199662f01d7 Mon Sep 17 00:00:00 2001 From: Anton Date: Tue, 7 May 2024 16:45:53 +0200 Subject: [PATCH 14/18] Old locale data, new formatting --- apps/locale/locales.js | 428 ++++++++++++++++++++++++----------------- 1 file changed, 253 insertions(+), 175 deletions(-) diff --git a/apps/locale/locales.js b/apps/locale/locales.js index e9a9fdcf83..dbf61adf48 100644 --- a/apps/locale/locales.js +++ b/apps/locale/locales.js @@ -2,6 +2,9 @@ /* exported distanceUnits */ /* exported speedUnits */ /* exported codePages */ +/* exported datePatterns */ +/* exported timePatterns */ +/* exported meridians */ /* exported locales */ /** * THIS FILE IS AUTOGENERATED. @@ -23,7 +26,6 @@ const speedUnits = { "km/h": 1, "kmt": 1, "km/t": 1, - "km/tim": 1, "mph": 1.60934, "kts": 1.852 }; @@ -35,6 +37,82 @@ const codePages = { } }; +const datePatterns = { + "0": [ + "%-d. %b %Y", + "%A %B %d %Y", + "%A %d %B %Y", + "%A %d %B de %Y", + "%A %d. %B %Y", + "%A, %B %d, %Y", + "%A, %d de %B de %Y", + "%A, %d. %B %Y", + "%B %d %Y", + "%Y %b %d, %A", + "%Y/%m/%d", + "%b %d %Y", + "%b %d, %Y", + "%d %B %Y", + "%d %b %Y", + "%d %w %Y %A", + "%d. %b %Y", + "%d. %b. %Y" + ], + "1": [ + "%-d.%-m.%Y", + "%-d/%-m/%Y", + "%Y-%m-%d", + "%Y.%m.%d", + "%d-%m-%Y", + "%d.%m.%Y", + "%d.%m.%y", + "%d/%m %Y", + "%d/%m/%Y", + "%d/%m/%y", + "%m/%d/%y", + "%y/%m/%d" + ] +}; + +const timePatterns = { + "0": [ + "%HH.%MM.%SS", + "%HH:%MM.%SS", + "%HH:%MM:%SS" + ], + "1": [ + "%HH.%MM", + "%HH:%MM" + ] +}; + +const meridians = { + "0": [ + "AM", + "[none]", + "am", + "ap", + "de", + "dop", + "dop.", + "fm", + "vorm", + "öö" + ], + "1": [ + " nachm", + "PM", + "[none]", + "du", + "em", + "ip", + "odp", + "pm", + "pop.", + "ös" + ] +}; + var locales = { "en_GB": { "lang": "en_GB", @@ -81,16 +159,16 @@ var locales = { }, "temperature": "°F", "ampm": { - "0": "AM", - "1": "PM" + "0": "am", + "1": "pm" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%b %-d, %Y", - "1": "%-m/%-d/%y" + "0": "%b %d, %Y", + "1": "%m/%d/%y" }, "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", "month": "January,February,March,April,May,June,July,August,September,October,November,December", @@ -112,8 +190,8 @@ var locales = { }, "temperature": "°F", "ampm": { - "0": "AM", - "1": "PM" + "0": "am", + "1": "pm" }, "timePattern": { "0": "%HH:%MM:%SS", @@ -150,8 +228,8 @@ var locales = { "1": "%HH:%MM" }, "datePattern": { - "0": "%-d %b %Y", - "1": "%d/%m/%y" + "0": "%d %b %Y", + "1": "%d/%m/%Y" }, "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", "month": "January,February,March,April,May,June,July,August,September,October,November,December", @@ -180,7 +258,7 @@ var locales = { "1": "%HH:%MM" }, "datePattern": { - "0": "%-d %b %Y", + "0": "%d %b %Y", "1": "%d/%m/%Y" }, "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", @@ -190,7 +268,7 @@ var locales = { }, "en_NAV": { "lang": "en_NAV", - "icon": "⛵✈️", + "icon": "⛵✈️", "calendar": "gregory", "numberingSystem": "latn", "decimal_point": ".", @@ -232,8 +310,8 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "AM", - "1": "PM" + "0": "[none]", + "1": "[none]" }, "timePattern": { "0": "%HH:%MM:%SS", @@ -274,8 +352,8 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "am", - "1": "pm" + "0": "[none]", + "1": "[none]" }, "timePattern": { "0": "%HH:%MM:%SS", @@ -283,7 +361,7 @@ var locales = { }, "datePattern": { "0": "%Y/%m/%d", - "1": "%Y/%m/%d" + "1": "%y/%m/%d" }, "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", "month": "January,February,March,April,May,June,July,August,September,October,November,December", @@ -304,15 +382,15 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "AM", - "1": "PM" + "0": "[none]", + "1": "[none]" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%-d %b %Y", + "0": "%d %b %Y", "1": "%d-%m-%Y" }, "abmonth": "jan,feb,mrt,apr,mei,jun,jul,aug,sep,okt,nov,dec", @@ -384,7 +462,7 @@ var locales = { "1": "%HH:%MM" }, "datePattern": { - "0": "%b %-d, %Y", + "0": "%A, %B %d, %Y", "1": "%Y-%m-%d" }, "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", @@ -406,18 +484,18 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "AM", - "1": "PM" + "0": "[none]", + "1": "[none]" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%-d %b %Y", + "0": "%d %B %Y", "1": "%d/%m/%Y" }, - "abmonth": "janv,févr,mars,avr,mai,juin,juil,août,sept,oct,nov,déc", + "abmonth": "janv,févr,mars,avril,mai,juin,juil,août,sept,oct,nov,déc", "month": "janvier,février,mars,avril,mai,juin,juillet,août,septembre,octobre,novembre,décembre", "abday": "dim,lun,mar,mer,jeu,ven,sam", "day": "dimanche,lundi,mardi,mercredi,jeudi,vendredi,samedi", @@ -437,7 +515,7 @@ var locales = { "calendar": "gregory", "numberingSystem": "latn", "decimal_point": ",", - "thousands_sep": " ", + "thousands_sep": ".", "speed": "km/tim", "distance": { "0": "m", @@ -476,7 +554,7 @@ var locales = { "calendar": "gregory", "numberingSystem": "latn", "decimal_point": ",", - "thousands_sep": " ", + "thousands_sep": ".", "speed": "km/h", "distance": { "0": "m", @@ -484,8 +562,8 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "am", - "1": "pm" + "0": "[none]", + "1": "[none]" }, "timePattern": { "0": "%HH:%MM:%SS", @@ -589,8 +667,8 @@ var locales = { "1": "%HH:%MM" }, "datePattern": { - "0": "%-d %b %Y", - "1": "%d/%m/%Y" + "0": "%A, %B %d, %Y", + "1": "%d/%m/%y" }, "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", "month": "January,February,March,April,May,June,July,August,September,October,November,December", @@ -619,8 +697,8 @@ var locales = { "1": "%HH:%MM" }, "datePattern": { - "0": "%-d %b %Y", - "1": "%-d/%-m/%y" + "0": "%A, %B %d, %Y", + "1": "%d/%m/%y" }, "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", "month": "January,February,March,April,May,June,July,August,September,October,November,December", @@ -633,7 +711,7 @@ var locales = { "calendar": "gregory", "numberingSystem": "latn", "decimal_point": ",", - "thousands_sep": " ", + "thousands_sep": ".", "speed": "kmh", "distance": { "0": "m", @@ -641,18 +719,18 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "AM", - "1": "PM" + "0": "[none]", + "1": "[none]" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%d.%m.%Y", + "0": "%A, %d. %B %Y", "1": "%d.%m.%y" }, - "abmonth": "Jän,Feb,Mär,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez", + "abmonth": "Jän,Feb,März,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez", "month": "Jänner,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember", "abday": "So,Mo,Di,Mi,Do,Fr,Sa", "day": "Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag", @@ -674,8 +752,8 @@ var locales = { "icon": "🇮🇱", "calendar": "gregory", "numberingSystem": "latn", - "decimal_point": ".", - "thousands_sep": ",", + "decimal_point": ",", + "thousands_sep": ".", "speed": "kmh", "distance": { "0": "m", @@ -691,7 +769,7 @@ var locales = { "1": "%HH:%MM" }, "datePattern": { - "0": "%-d %b %Y", + "0": "%A, %B %d, %Y", "1": "%d/%m/%Y" }, "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", @@ -713,16 +791,16 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "AM", - "1": "PM" + "0": "[none]", + "1": "[none]" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%-d %b %Y", - "1": "%-d/%-m/%y" + "0": "%A, %d de %B de %Y", + "1": "%d/%m/%y" }, "abmonth": "ene,feb,mar,abr,may,jun,jul,ago,sept,oct,nov,dic", "month": "enero,febrero,marzo,abril,mayo,junio,julio,agosto,septiembre,octubre,noviembre,diciembre", @@ -747,7 +825,7 @@ var locales = { "calendar": "gregory", "numberingSystem": "latn", "decimal_point": ",", - "thousands_sep": " ", + "thousands_sep": ".", "speed": "kmh", "distance": { "0": "m", @@ -755,18 +833,18 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "AM", - "1": "PM" + "0": "[none]", + "1": "[none]" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%-d %b %Y", - "1": "%-d/%m/%y" + "0": "%A %B %d %Y", + "1": "%d/%m/%y" }, - "abmonth": "janv,févr,mars,avr,mai,juin,juil,août,sept,oct,nov,déc", + "abmonth": "janv.,févr.,mars,avril,mai,juin,juil.,août,sept.,oct.,nov.,déc.", "month": "janvier,février,mars,avril,mai,juin,juillet,août,septembre,octobre,novembre,décembre", "abday": "dim,lun,mar,mer,jeu,ven,sam", "day": "dimanche,lundi,mardi,mercredi,jeudi,vendredi,samedi", @@ -786,7 +864,7 @@ var locales = { "calendar": "gregory", "numberingSystem": "latn", "decimal_point": ",", - "thousands_sep": " ", + "thousands_sep": ".", "speed": "kmh", "distance": { "0": "m", @@ -798,17 +876,17 @@ var locales = { "1": "ip" }, "timePattern": { - "0": "%HH.%MM.%SS", - "1": "%HH.%MM" + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" }, "datePattern": { - "0": "%-d.%-m.%Y", - "1": "%-d.%-m.%Y" + "0": "%A %d. %B %Y", + "1": "%-d/%-m/%Y" }, - "abmonth": "tamm,helm,maal,huht,touk,kesä,hein,elo,syys,loka,marr,joul", - "month": "tammikuu,helmikuu,maaliskuu,huhtikuu,toukokuu,kesäkuu,heinäkuu,elokuu,syyskuu,lokakuu,marraskuu,joulukuu", + "abmonth": "tammik,helmik,maalisk,huhtik,toukok,kesäk,heinäk,elok,syysk,lokak,marrask,jouluk", + "month": "tammikuuta,helmikuuta,maaliskuuta,huhtikuuta,toukokuuta,kesäkuuta,heinäkuuta,elokuuta,syyskuuta,lokakuuta,marraskuuta,joulukuuta", "abday": "su,ma,ti,ke,to,pe,la", - "day": "sunnuntai,maanantai,tiistai,keskiviikko,torstai,perjantai,lauantai", + "day": "sunnuntaina,maanantaina,tiistaina,keskiviikkona,torstaina,perjantaina,lauantaina", "trans": { "yes": "oui", "Yes": "Oui", @@ -824,8 +902,8 @@ var locales = { "icon": "🇨🇭", "calendar": "gregory", "numberingSystem": "latn", - "decimal_point": ".", - "thousands_sep": "'", + "decimal_point": ",", + "thousands_sep": ".", "speed": "kmh", "distance": { "0": "m", @@ -833,18 +911,18 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "VM", - "1": "NM" + "0": "vorm", + "1": " nachm" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%d.%m.%Y", - "1": "%d.%m.%y" + "0": "%A, %d. %B %Y", + "1": "%d.%m.%Y" }, - "abmonth": "Jan,Feb,Mär,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez", + "abmonth": "Jan,Feb,März,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez", "month": "Januar,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember", "abday": "So,Mo,Di,Mi,Do,Fr,Sa", "day": "Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag", @@ -864,7 +942,7 @@ var locales = { "calendar": "gregory", "numberingSystem": "latn", "decimal_point": ",", - "thousands_sep": " ", + "thousands_sep": ".", "speed": "kmh", "distance": { "0": "m", @@ -880,10 +958,10 @@ var locales = { "1": "%HH:%MM" }, "datePattern": { - "0": "%-d %b %Y", - "1": "%d.%m.%y" + "0": "%A %d %B %Y", + "1": "%d/%m/%y" }, - "abmonth": "janv,févr,mars,avr,mai,juin,juil,août,sept,oct,nov,déc", + "abmonth": "janv.,févr.,mars,avril,mai,juin,juil.,août,sept.,oct.,nov.,déc.", "month": "janvier,février,mars,avril,mai,juin,juillet,août,septembre,octobre,novembre,décembre", "abday": "dim,lun,mar,mer,jeu,ven,sam", "day": "dimanche,lundi,mardi,mercredi,jeudi,vendredi,samedi", @@ -902,8 +980,8 @@ var locales = { "icon": "🇨🇭", "calendar": "gregory", "numberingSystem": "latn", - "decimal_point": ".", - "thousands_sep": "'", + "decimal_point": ",", + "thousands_sep": ".", "speed": "kmh", "distance": { "0": "m", @@ -911,16 +989,16 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "AM", - "1": "PM" + "0": "[none]", + "1": "[none]" }, "timePattern": { - "0": "%HH:%MM:%SS", + "0": "%HH:%MM.%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%-d %b %Y", - "1": "%d.%m.%y" + "0": "%d %b %Y", + "1": "%d/%m/%Y" }, "abmonth": "gen,feb,mar,apr,mag,giu,lug,ago,set,ott,nov,dic", "month": "gennaio,febbraio,marzo,aprile,maggio,giugno,luglio,agosto,settembre,ottobre,novembre,dicembre", @@ -950,16 +1028,16 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "AM", - "1": "PM" + "0": "[none]", + "1": "[none]" }, "timePattern": { - "0": "%HH:%MM:%SS", + "0": "%HH:%MM.%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%-d %b %Y", - "1": "%d/%m/%y" + "0": "%d %b %Y", + "1": "%d/%m/%Y" }, "abmonth": "gen,feb,mar,apr,mag,giu,lug,ago,set,ott,nov,dic", "month": "gennaio,febbraio,marzo,aprile,maggio,giugno,luglio,agosto,settembre,ottobre,novembre,dicembre", @@ -981,7 +1059,7 @@ var locales = { "calendar": "gregory", "numberingSystem": "latn", "decimal_point": ",", - "thousands_sep": "'", + "thousands_sep": ".", "speed": "kmh", "distance": { "0": "m", @@ -989,15 +1067,15 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "AM", - "1": "PM" + "0": "[none]", + "1": "[none]" }, "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" + "0": "%HH.%MM.%SS", + "1": "%HH.%MM" }, "datePattern": { - "0": "%-d. %b %Y", + "0": "%A, %d. %B %Y", "1": "%Y-%m-%d" }, "abmonth": "Jen,Hor,Mär,Abr,Mei,Brá,Hei,Öig,Her,Wím,Win,Chr", @@ -1028,21 +1106,21 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "ÖÖ", - "1": "ÖS" + "0": "öö", + "1": "ös" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%-d %b %Y", - "1": "%-d.%m.%Y" + "0": "%d %w %Y %A", + "1": "%d/%m/%Y" }, "abmonth": "Oca,Sub,Mar,Nis,May,Haz,Tem,Agu,Eyl,Eki,Kas,Ara", - "month": "Ocak,Subat,Mart,Nisan,Mayis,Haziran,Temmuz,Agustos,Eylül,Ekim,Kasim,Aralik", - "abday": "Paz,Pzt,Sal,Çar,Per,Cum,Cmt", - "day": "Pazar,Pazartesi,Sali,Çarsamba,Persembe,Cuma,Cumartesi", + "month": "Ocak,Subat,Mart,Nisan,Mayis,Haziran,Temmuz,Agustos,Eylul,Ekim,Kasim,Aralik", + "abday": "Paz,Pzt,Sal,Car,Per,Cum,Cmt", + "day": "Pazar,Pazartesi,Sali,Carsamba,Persembe,Cuma,Cumartesi", "trans": { "yes": "evet", "Yes": "Evet", @@ -1075,13 +1153,13 @@ var locales = { "1": "%HH:%MM" }, "datePattern": { - "0": "%Y. %b %-d.", - "1": "%Y. %m. %d." + "0": "%Y %b %d, %A", + "1": "%Y.%m.%d" }, - "abmonth": "jan,feb,már,ápr,máj,jún,júl,aug,szep,okt,nov,dec", - "month": "január,február,március,április,május,június,július,augusztus,szeptember,október,november,december", - "abday": "V,H,K,Sze,Cs,P,Szo", - "day": "vasárnap,hétfö,kedd,szerda,csütörtök,péntek,szombat", + "abmonth": "Jan,Feb,Már,Ápr,Máj,Jún,Júl,Aug,Szep,Okt,Nov,Dec", + "month": "Január,Február,Március,Április,Május,Június,Július,Augusztus,Szeptember,Október,November,December", + "abday": "Vas,Hét,Ke,Szer,Csüt,Pén,Szom", + "day": "Vasárnap,Hétfo,Kedd,Szerda,Csütörtök,Péntek,Szombat", "trans": { "yes": "igen", "Yes": "Igen", @@ -1106,18 +1184,18 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "AM", - "1": "PM" + "0": "[none]", + "1": "[none]" }, "timePattern": { - "0": "%HHh%MM:%SS", - "1": "%HHh%MM" + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" }, "datePattern": { - "0": "%-d %b %Y", - "1": "%-d/%m/%y" + "0": "%A %d %B de %Y", + "1": "%d/%m/%Y" }, - "abmonth": "gen,feb,març,abr,mai,junh,jul,ago,set,oct,nov,dec", + "abmonth": "gen.,febr.,març,abril,mai,junh,julh,ago.,set.,oct.,nov.,dec.", "month": "genièr,febrièr,març,abril,mai,junh,julhet,agost,setembre,octòbre,novembre,decembre", "abday": "dg,dl,dm,dc,dj,dv,ds", "day": "dimenge,diluns,dimars,dimècres,dijòus,divendres,dissabte", @@ -1145,21 +1223,21 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "AM", - "1": "PM" + "0": "am", + "1": "pm" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%-d de %b de %Y", - "1": "%d/%m/%Y" + "0": "%d %b %Y", + "1": "%d/%m/%y" }, - "abmonth": "jan,fev,mar,abr,mai,jun,jul,ago,set,out,nov,dez", - "month": "janeiro,fevereiro,março,abril,maio,junho,julho,agosto,setembro,outubro,novembro,dezembro", - "abday": "dom,seg,ter,qua,qui,sex,sáb", - "day": "domingo,segunda-feira,terça-feira,quarta-feira,quinta-feira,sexta-feira,sábado", + "abmonth": "Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set,Out,Nov,Dez", + "month": "Janeiro,Fevereiro,Março,Abril,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro", + "abday": "Dom,Seg,Ter,Qua,Qui,Sex,Sab", + "day": "Domingo,Segunda-feira,Terça-feira,Quarta-feira,Quinta-feira,Sexta-feira,Sábado", "trans": { "yes": "sim", "Yes": "Sim", @@ -1192,8 +1270,8 @@ var locales = { "1": "%HH:%MM" }, "datePattern": { - "0": "%-d. %-m. %Y", - "1": "%d.%m.%y" + "0": "%d. %b %Y", + "1": "%d.%m.%Y" }, "abmonth": "led,úno,bre,dub,kve,cvn,cvc,srp,zár,ríj,lis,pro", "month": "leden,únor,brezen,duben,kveten,cerven,cervenec,srpen,zárí,ríjen,listopad,prosinec", @@ -1223,20 +1301,20 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "dop", - "1": "pop" + "0": "dop.", + "1": "pop." }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%-d. %b %Y.", - "1": "%d. %m. %Y." + "0": "%-d. %b %Y", + "1": "%-d.%-m.%Y" }, - "abmonth": "sij,velj,ožu,tra,svi,lip,srp,kol,ruj,lis,stu,pro", + "abmonth": "sij.,velj.,ožu.,tra.,svi,lip.,srp.,kol.,ruj.,lis.,stu.,pro.", "month": "sijecanj,veljaca,ožujak,travanj,svibanj,lipanj,srpanj,kolovoz,rujan,listopad,studeni,prosinac", - "abday": "ned,pon,uto,sri,cet,pet,sub", + "abday": "ned.,pon.,uto.,sri.,cet.,pet.,sub.", "day": "nedjelja,ponedjeljak,utorak,srijeda,cetvrtak,petak,subota", "trans": { "yes": "da", @@ -1263,8 +1341,8 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "dop", - "1": "pop" + "0": "dop.", + "1": "pop." }, "timePattern": { "0": "%HH:%MM:%SS", @@ -1272,11 +1350,11 @@ var locales = { }, "datePattern": { "0": "%-d. %b %Y", - "1": "%-d. %-m. %y" + "1": "%-d.%-m.%Y" }, - "abmonth": "jan,feb,mar,apr,maj,jun,jul,avg,sep,okt,nov,dec", + "abmonth": "jan.,feb.,mar.,apr.,maj,jun.,jul.,avg.,sep.,okt.,nov.,dec.", "month": "januar,februar,marec,april,maj,junij,julij,avgust,september,oktober,november,december", - "abday": "ned,pon,tor,sre,cet,pet,sob", + "abday": "ned.,pon.,tor.,sre.,cet.,pet.,sob.", "day": "nedelja,ponedeljek,torek,sreda,cetrtek,petek,sobota", "trans": { "yes": "da", @@ -1311,13 +1389,13 @@ var locales = { "1": "%HH:%MM" }, "datePattern": { - "0": "%d/%m/%Y", + "0": "%d %b %Y", "1": "%d/%m/%y" }, - "abmonth": "jan,fev,mar,abr,mai,jun,jul,ago,set,out,nov,dez", - "month": "janeiro,fevereiro,março,abril,maio,junho,julho,agosto,setembro,outubro,novembro,dezembro", - "abday": "dom,seg,ter,qua,qui,sex,sáb", - "day": "domingo,segunda-feira,terça-feira,quarta-feira,quinta-feira,sexta-feira,sábado", + "abmonth": "Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set,Out,Nov,Dez", + "month": "Janeiro,Fevereiro,Março,Abril,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro", + "abday": "Dom,Seg,Ter,Qua,Qui,Sex,Sab", + "day": "Domingo,Segunda-feira,Terça-feira,Quarta-feira,Quinta-feira,Sexta-feira,Sábado", "trans": { "yes": "sim", "Yes": "Sim", @@ -1342,21 +1420,21 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "AM", - "1": "PM" + "0": "[none]", + "1": "[none]" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%-d %b %Y", - "1": "%-d.%m.%Y" + "0": "%d. %b %Y", + "1": "%d.%m.%Y" }, - "abmonth": "sty,lut,mar,kwi,maj,cze,lip,sie,wrz,paź,lis,gru", - "month": "styczeń,luty,marzec,kwiecień,maj,czerwiec,lipiec,sierpień,wrzesień,październik,listopad,grudzień", - "abday": "ndz,pon,wt,sr,czw,pt,sob", - "day": "niedziela,poniedziałek,wtorek,sroda,czwartek,piątek,sobota", + "abmonth": "Sty,Lut,Mar,Kwi,Maj,Cze,Lip,Sie,Wrz,Paz,Lis,Gru", + "month": "Styczen,Luty,Marzec,Kwiecien,Maj,Czerwiec,Lipiec,Sierpien,Wrzesien,Pazdziernik,Listopad,Grudzien", + "abday": "Ndz,Pon,Wt,Sr,Czw,Pt,Sob", + "day": "Niedziela,Poniedzialek,Wtorek,Sroda,Czwartek,Piatek,Sobota", "trans": { "yes": "tak", "Yes": "Tak", @@ -1382,30 +1460,30 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "pri", - "1": "pēc" + "0": "[none]", + "1": "[none]" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%Y. gada %-d. %b", - "1": "%d.%m.%y" + "0": "%d. %b %Y", + "1": "%d.%m.%Y" }, - "abmonth": "jan,feb,mar,apr,mai,jūn,jūl,aug,sep,okt,nov,dec", - "month": "janvāris,februāris,marts,aprīlis,maijs,jūnijs,jūlijs,augusts,septembris,oktobris,novembris,decembris", - "abday": "sv,pr,ot,tr,ce,pk,se", - "day": "Svētdiena,Pirmdiena,Otrdiena,Trešdiena,Ceturtdiena,Piektdiena,Sestdiena", + "abmonth": "Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dec", + "month": "Janvaris,Februaris,Marts,Aprilis,Maijs,Junijs,Julijs,Augusts,Septemberis,Oktobris,Novembris,Decembris", + "abday": "Pr,Ot,Tr,Ce,Pk,Se,Sv", + "day": "Pirmdiena,Otrdiena,Trešdiena,Ceturtdiena,Piektdiena,Sestdiena,Svetdiena", "trans": { - "yes": "jā", - "Yes": "Jā", - "no": "nē", - "No": "Nē", + "yes": "ja", + "Yes": "Ja", + "no": "ne", + "No": "Ne", "ok": "labi", - "on": "Ieslēgt", - "off": "Izslēgt", - "< Back": "< Atpakaļ" + "on": "Ieslegt", + "off": "Izslegt", + "< Back": "< Atpakal" } }, "nn_NO": { @@ -1422,21 +1500,21 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "FM", - "1": "EM" + "0": "[none]", + "1": "[none]" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%-d. %b %Y", + "0": "%d. %b %Y", "1": "%d.%m.%Y" }, - "abmonth": "jan,feb,mar,apr,mai,jun,jul,aug,sep,okt,nov,des", - "month": "januar,februar,mars,april,mai,juni,juli,august,september,oktober,november,desember", - "abday": "søn,mån,tys,ons,tor,fre,lau", - "day": "søndag,måndag,tysdag,onsdag,torsdag,fredag,laurdag", + "abmonth": "Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Des", + "month": "Januar,Februar,Mars,April,Mai,Juni,Juli,August,September,Oktober,November,Desember", + "abday": "Su,Må,Ty,On,To,Fr,La", + "day": "Sundag,Måndag,Tysdag,Onsdag,Torsdag,Fredag,Laurdag", "trans": { "yes": "ja", "Yes": "Ja", @@ -1464,21 +1542,21 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "AM", - "1": "PM" + "0": "[none]", + "1": "[none]" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%-d. %b %Y", + "0": "%d. %b %Y", "1": "%d.%m.%Y" }, - "abmonth": "jan,feb,mar,apr,mai,jun,jul,aug,sep,okt,nov,des", - "month": "januar,februar,mars,april,mai,juni,juli,august,september,oktober,november,desember", - "abday": "søn,man,tir,ons,tor,fre,lør", - "day": "søndag,mandag,tirsdag,onsdag,torsdag,fredag,lørdag", + "abmonth": "Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Des", + "month": "Januar,Februar,Mars,April,Mai,Juni,Juli,August,September,Oktober,November,Desember", + "abday": "Sø,Ma,Ti,On,To,Fr,Lø", + "day": "Søndag,Mandag,Tirsdag,Onsdag,Torsdag,Fredag,Lørdag", "trans": { "yes": "ja", "Yes": "Ja", @@ -1506,18 +1584,18 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "AM", - "1": "PM" + "0": "[none]", + "1": "[none]" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%-d %b %Y", - "1": "%-d/%-m/%y" + "0": "%d %B %Y", + "1": "%d/%m/%y" }, - "abmonth": "gen,febr,març,abr,maig,juny,jul,ag,set,oct,nov,des", + "abmonth": "gen.,febr.,març,abr.,maig,juny,jul.,ag.,set.,oct.,nov.,des.", "month": "gener,febrer,març,abril,maig,juny,juliol,agost,setembre,octubre,novembre,desembre", "abday": "dg.,dl.,dt.,dc.,dj.,dv.,ds.", "day": "diumenge,dilluns,dimarts,dimecres,dijous,divendres,dissabte", From 49ecbf1ecf0a733614dc6ec68b4a6db775851fc3 Mon Sep 17 00:00:00 2001 From: Anton Date: Tue, 7 May 2024 16:47:25 +0200 Subject: [PATCH 15/18] New locale data --- apps/locale/locales.js | 554 ++++++++++++++++++++++++++--------------- 1 file changed, 355 insertions(+), 199 deletions(-) diff --git a/apps/locale/locales.js b/apps/locale/locales.js index dbf61adf48..2e5150e33e 100644 --- a/apps/locale/locales.js +++ b/apps/locale/locales.js @@ -39,77 +39,82 @@ const codePages = { const datePatterns = { "0": [ + "%-d %b %Y", + "%-d. %-m. %Y", "%-d. %b %Y", - "%A %B %d %Y", - "%A %d %B %Y", - "%A %d %B de %Y", - "%A %d. %B %Y", - "%A, %B %d, %Y", - "%A, %d de %B de %Y", - "%A, %d. %B %Y", - "%B %d %Y", - "%Y %b %d, %A", + "%-d. %b %Y.", + "%-d.%-m.%Y", + "%Y. %-d. %b", + "%Y. %b %-d.", "%Y/%m/%d", + "%b %-d, %Y", "%b %d %Y", "%b %d, %Y", - "%d %B %Y", - "%d %b %Y", - "%d %w %Y %A", + "%b, %d, %Y", "%d. %b %Y", - "%d. %b. %Y" + "%d.%m.%Y", + "%d/%m/%Y" ], "1": [ + "%-d. %-m. %y", "%-d.%-m.%Y", - "%-d/%-m/%Y", + "%-d.%-m.%y", + "%-d.%m.%Y", + "%-d/%-m/%y", + "%-d/%m/%Y", + "%-d/%m/%y", + "%-m/%-d/%y", "%Y-%m-%d", - "%Y.%m.%d", + "%Y.%m.%d.", + "%Y/%m/%d", "%d-%m-%Y", + "%d. %m %Y", "%d.%m.%Y", + "%d.%m.%Y.", "%d.%m.%y", - "%d/%m %Y", "%d/%m/%Y", - "%d/%m/%y", - "%m/%d/%y", - "%y/%m/%d" + "%d/%m/%y" ] }; const timePatterns = { "0": [ "%HH.%MM.%SS", - "%HH:%MM.%SS", - "%HH:%MM:%SS" + "%HH:%MM:%SS", + "%HHh%MM:%SS" ], "1": [ "%HH.%MM", - "%HH:%MM" + "%HH:%MM", + "%HHh%MM" ] }; const meridians = { "0": [ "AM", - "[none]", + "FM", + "VM", "am", "ap", "de", "dop", - "dop.", "fm", - "vorm", - "öö" + "pri", + "ÖÖ" ], "1": [ - " nachm", + "EM", + "NM", "PM", - "[none]", "du", "em", "ip", "odp", + "pec", "pm", - "pop.", - "ös" + "pop", + "ÖS" ] }; @@ -159,16 +164,16 @@ var locales = { }, "temperature": "°F", "ampm": { - "0": "am", - "1": "pm" + "0": "AM", + "1": "PM" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%b %d, %Y", - "1": "%m/%d/%y" + "0": "%b %-d, %Y", + "1": "%-m/%-d/%y" }, "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", "month": "January,February,March,April,May,June,July,August,September,October,November,December", @@ -190,8 +195,8 @@ var locales = { }, "temperature": "°F", "ampm": { - "0": "am", - "1": "pm" + "0": "AM", + "1": "PM" }, "timePattern": { "0": "%HH:%MM:%SS", @@ -228,8 +233,8 @@ var locales = { "1": "%HH:%MM" }, "datePattern": { - "0": "%d %b %Y", - "1": "%d/%m/%Y" + "0": "%-d %b %Y", + "1": "%d/%m/%y" }, "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", "month": "January,February,March,April,May,June,July,August,September,October,November,December", @@ -258,7 +263,7 @@ var locales = { "1": "%HH:%MM" }, "datePattern": { - "0": "%d %b %Y", + "0": "%-d %b %Y", "1": "%d/%m/%Y" }, "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", @@ -268,7 +273,7 @@ var locales = { }, "en_NAV": { "lang": "en_NAV", - "icon": "⛵✈️", + "icon": "⛵✈️", "calendar": "gregory", "numberingSystem": "latn", "decimal_point": ".", @@ -310,8 +315,8 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "[none]", - "1": "[none]" + "0": "AM", + "1": "PM" }, "timePattern": { "0": "%HH:%MM:%SS", @@ -352,8 +357,8 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "[none]", - "1": "[none]" + "0": "am", + "1": "pm" }, "timePattern": { "0": "%HH:%MM:%SS", @@ -361,7 +366,7 @@ var locales = { }, "datePattern": { "0": "%Y/%m/%d", - "1": "%y/%m/%d" + "1": "%Y/%m/%d" }, "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", "month": "January,February,March,April,May,June,July,August,September,October,November,December", @@ -382,15 +387,15 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "[none]", - "1": "[none]" + "0": "AM", + "1": "PM" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%d %b %Y", + "0": "%-d %b %Y", "1": "%d-%m-%Y" }, "abmonth": "jan,feb,mrt,apr,mei,jun,jul,aug,sep,okt,nov,dec", @@ -462,7 +467,7 @@ var locales = { "1": "%HH:%MM" }, "datePattern": { - "0": "%A, %B %d, %Y", + "0": "%b %-d, %Y", "1": "%Y-%m-%d" }, "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", @@ -484,18 +489,18 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "[none]", - "1": "[none]" + "0": "AM", + "1": "PM" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%d %B %Y", + "0": "%-d %b %Y", "1": "%d/%m/%Y" }, - "abmonth": "janv,févr,mars,avril,mai,juin,juil,août,sept,oct,nov,déc", + "abmonth": "janv,févr,mars,avr,mai,juin,juil,août,sept,oct,nov,déc", "month": "janvier,février,mars,avril,mai,juin,juillet,août,septembre,octobre,novembre,décembre", "abday": "dim,lun,mar,mer,jeu,ven,sam", "day": "dimanche,lundi,mardi,mercredi,jeudi,vendredi,samedi", @@ -509,14 +514,44 @@ var locales = { "off": "off" } }, + "fr_MC": { + "lang": "fr_MC", + "icon": "🇲🇨", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ",", + "thousands_sep": " ", + "speed": "km/h", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "AM", + "1": "PM" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%-d %b %Y", + "1": "%d/%m/%Y" + }, + "abmonth": "janv,févr,mars,avr,mai,juin,juil,août,sept,oct,nov,déc", + "month": "janvier,février,mars,avril,mai,juin,juillet,août,septembre,octobre,novembre,décembre", + "abday": "dim,lun,mar,mer,jeu,ven,sam", + "day": "dimanche,lundi,mardi,mercredi,jeudi,vendredi,samedi" + }, "sv_SE": { "lang": "sv_SE", "icon": "🇸🇪", "calendar": "gregory", "numberingSystem": "latn", "decimal_point": ",", - "thousands_sep": ".", - "speed": "km/tim", + "thousands_sep": " ", + "speed": "km/t", "distance": { "0": "m", "1": "km" @@ -554,7 +589,7 @@ var locales = { "calendar": "gregory", "numberingSystem": "latn", "decimal_point": ",", - "thousands_sep": ".", + "thousands_sep": " ", "speed": "km/h", "distance": { "0": "m", @@ -562,15 +597,15 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "[none]", - "1": "[none]" + "0": "am", + "1": "pm" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%B %d %Y", + "0": "%-d %b %Y", "1": "%Y-%m-%d" }, "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", @@ -667,8 +702,8 @@ var locales = { "1": "%HH:%MM" }, "datePattern": { - "0": "%A, %B %d, %Y", - "1": "%d/%m/%y" + "0": "%-d %b %Y", + "1": "%d/%m/%Y" }, "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", "month": "January,February,March,April,May,June,July,August,September,October,November,December", @@ -697,8 +732,8 @@ var locales = { "1": "%HH:%MM" }, "datePattern": { - "0": "%A, %B %d, %Y", - "1": "%d/%m/%y" + "0": "%-d %b %Y", + "1": "%-d/%-m/%y" }, "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", "month": "January,February,March,April,May,June,July,August,September,October,November,December", @@ -711,7 +746,7 @@ var locales = { "calendar": "gregory", "numberingSystem": "latn", "decimal_point": ",", - "thousands_sep": ".", + "thousands_sep": " ", "speed": "kmh", "distance": { "0": "m", @@ -719,18 +754,18 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "[none]", - "1": "[none]" + "0": "AM", + "1": "PM" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%A, %d. %B %Y", + "0": "%d.%m.%Y", "1": "%d.%m.%y" }, - "abmonth": "Jän,Feb,März,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez", + "abmonth": "Jän,Feb,Mär,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez", "month": "Jänner,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember", "abday": "So,Mo,Di,Mi,Do,Fr,Sa", "day": "Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag", @@ -752,8 +787,8 @@ var locales = { "icon": "🇮🇱", "calendar": "gregory", "numberingSystem": "latn", - "decimal_point": ",", - "thousands_sep": ".", + "decimal_point": ".", + "thousands_sep": ",", "speed": "kmh", "distance": { "0": "m", @@ -769,7 +804,7 @@ var locales = { "1": "%HH:%MM" }, "datePattern": { - "0": "%A, %B %d, %Y", + "0": "%-d %b %Y", "1": "%d/%m/%Y" }, "abmonth": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", @@ -791,16 +826,16 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "[none]", - "1": "[none]" + "0": "AM", + "1": "PM" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%A, %d de %B de %Y", - "1": "%d/%m/%y" + "0": "%-d %b %Y", + "1": "%-d/%-m/%y" }, "abmonth": "ene,feb,mar,abr,may,jun,jul,ago,sept,oct,nov,dic", "month": "enero,febrero,marzo,abril,mayo,junio,julio,agosto,septiembre,octubre,noviembre,diciembre", @@ -825,7 +860,7 @@ var locales = { "calendar": "gregory", "numberingSystem": "latn", "decimal_point": ",", - "thousands_sep": ".", + "thousands_sep": " ", "speed": "kmh", "distance": { "0": "m", @@ -833,18 +868,18 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "[none]", - "1": "[none]" + "0": "AM", + "1": "PM" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%A %B %d %Y", - "1": "%d/%m/%y" + "0": "%-d %b %Y", + "1": "%-d/%m/%y" }, - "abmonth": "janv.,févr.,mars,avril,mai,juin,juil.,août,sept.,oct.,nov.,déc.", + "abmonth": "janv,févr,mars,avr,mai,juin,juil,août,sept,oct,nov,déc", "month": "janvier,février,mars,avril,mai,juin,juillet,août,septembre,octobre,novembre,décembre", "abday": "dim,lun,mar,mer,jeu,ven,sam", "day": "dimanche,lundi,mardi,mercredi,jeudi,vendredi,samedi", @@ -858,13 +893,73 @@ var locales = { "off": "off" } }, + "nl_BE": { + "lang": "nl_BE", + "icon": "🇧🇪", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ",", + "thousands_sep": ".", + "speed": "km/h", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "AM", + "1": "PM" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%-d %b %Y", + "1": "%-d/%m/%Y" + }, + "abmonth": "jan,feb,mrt,apr,mei,jun,jul,aug,sep,okt,nov,dec", + "month": "januari,februari,maart,april,mei,juni,juli,augustus,september,oktober,november,december", + "abday": "zo,ma,di,wo,do,vr,za", + "day": "zondag,maandag,dinsdag,woensdag,donderdag,vrijdag,zaterdag" + }, + "de_BE": { + "lang": "de_BE", + "icon": "🇧🇪", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ",", + "thousands_sep": ".", + "speed": "km/h", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "AM", + "1": "PM" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%d.%m.%Y", + "1": "%d.%m.%y" + }, + "abmonth": "Jan,Feb,Mär,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez", + "month": "Januar,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember", + "abday": "So,Mo,Di,Mi,Do,Fr,Sa", + "day": "Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag" + }, "fi_FI": { "lang": "fi_FI", "icon": "🇫🇮", "calendar": "gregory", "numberingSystem": "latn", "decimal_point": ",", - "thousands_sep": ".", + "thousands_sep": " ", "speed": "kmh", "distance": { "0": "m", @@ -876,17 +971,17 @@ var locales = { "1": "ip" }, "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" + "0": "%HH.%MM.%SS", + "1": "%HH.%MM" }, "datePattern": { - "0": "%A %d. %B %Y", - "1": "%-d/%-m/%Y" + "0": "%-d.%-m.%Y", + "1": "%-d.%-m.%Y" }, - "abmonth": "tammik,helmik,maalisk,huhtik,toukok,kesäk,heinäk,elok,syysk,lokak,marrask,jouluk", - "month": "tammikuuta,helmikuuta,maaliskuuta,huhtikuuta,toukokuuta,kesäkuuta,heinäkuuta,elokuuta,syyskuuta,lokakuuta,marraskuuta,joulukuuta", + "abmonth": "tamm,helm,maal,huht,touk,kesä,hein,elo,syys,loka,marr,joul", + "month": "tammikuu,helmikuu,maaliskuu,huhtikuu,toukokuu,kesäkuu,heinäkuu,elokuu,syyskuu,lokakuu,marraskuu,joulukuu", "abday": "su,ma,ti,ke,to,pe,la", - "day": "sunnuntaina,maanantaina,tiistaina,keskiviikkona,torstaina,perjantaina,lauantaina", + "day": "sunnuntai,maanantai,tiistai,keskiviikko,torstai,perjantai,lauantai", "trans": { "yes": "oui", "Yes": "Oui", @@ -902,8 +997,8 @@ var locales = { "icon": "🇨🇭", "calendar": "gregory", "numberingSystem": "latn", - "decimal_point": ",", - "thousands_sep": ".", + "decimal_point": ".", + "thousands_sep": "’", "speed": "kmh", "distance": { "0": "m", @@ -911,18 +1006,18 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "vorm", - "1": " nachm" + "0": "VM", + "1": "NM" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%A, %d. %B %Y", - "1": "%d.%m.%Y" + "0": "%d.%m.%Y", + "1": "%d.%m.%y" }, - "abmonth": "Jan,Feb,März,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez", + "abmonth": "Jan,Feb,Mär,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez", "month": "Januar,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember", "abday": "So,Mo,Di,Mi,Do,Fr,Sa", "day": "Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag", @@ -942,7 +1037,7 @@ var locales = { "calendar": "gregory", "numberingSystem": "latn", "decimal_point": ",", - "thousands_sep": ".", + "thousands_sep": " ", "speed": "kmh", "distance": { "0": "m", @@ -958,10 +1053,10 @@ var locales = { "1": "%HH:%MM" }, "datePattern": { - "0": "%A %d %B %Y", - "1": "%d/%m/%y" + "0": "%-d %b %Y", + "1": "%d.%m.%y" }, - "abmonth": "janv.,févr.,mars,avril,mai,juin,juil.,août,sept.,oct.,nov.,déc.", + "abmonth": "janv,févr,mars,avr,mai,juin,juil,août,sept,oct,nov,déc", "month": "janvier,février,mars,avril,mai,juin,juillet,août,septembre,octobre,novembre,décembre", "abday": "dim,lun,mar,mer,jeu,ven,sam", "day": "dimanche,lundi,mardi,mercredi,jeudi,vendredi,samedi", @@ -980,8 +1075,8 @@ var locales = { "icon": "🇨🇭", "calendar": "gregory", "numberingSystem": "latn", - "decimal_point": ",", - "thousands_sep": ".", + "decimal_point": ".", + "thousands_sep": "’", "speed": "kmh", "distance": { "0": "m", @@ -989,16 +1084,16 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "[none]", - "1": "[none]" + "0": "AM", + "1": "PM" }, "timePattern": { - "0": "%HH:%MM.%SS", + "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%d %b %Y", - "1": "%d/%m/%Y" + "0": "%-d %b %Y", + "1": "%d.%m.%y" }, "abmonth": "gen,feb,mar,apr,mag,giu,lug,ago,set,ott,nov,dic", "month": "gennaio,febbraio,marzo,aprile,maggio,giugno,luglio,agosto,settembre,ottobre,novembre,dicembre", @@ -1028,16 +1123,16 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "[none]", - "1": "[none]" + "0": "AM", + "1": "PM" }, "timePattern": { - "0": "%HH:%MM.%SS", + "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%d %b %Y", - "1": "%d/%m/%Y" + "0": "%-d %b %Y", + "1": "%d/%m/%y" }, "abmonth": "gen,feb,mar,apr,mag,giu,lug,ago,set,ott,nov,dic", "month": "gennaio,febbraio,marzo,aprile,maggio,giugno,luglio,agosto,settembre,ottobre,novembre,dicembre", @@ -1059,7 +1154,7 @@ var locales = { "calendar": "gregory", "numberingSystem": "latn", "decimal_point": ",", - "thousands_sep": ".", + "thousands_sep": "’", "speed": "kmh", "distance": { "0": "m", @@ -1067,15 +1162,15 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "[none]", - "1": "[none]" + "0": "AM", + "1": "PM" }, "timePattern": { - "0": "%HH.%MM.%SS", - "1": "%HH.%MM" + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" }, "datePattern": { - "0": "%A, %d. %B %Y", + "0": "%-d. %b %Y", "1": "%Y-%m-%d" }, "abmonth": "Jen,Hor,Mär,Abr,Mei,Brá,Hei,Öig,Her,Wím,Win,Chr", @@ -1106,21 +1201,21 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "öö", - "1": "ös" + "0": "ÖÖ", + "1": "ÖS" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%d %w %Y %A", - "1": "%d/%m/%Y" + "0": "%-d %b %Y", + "1": "%-d.%m.%Y" }, "abmonth": "Oca,Sub,Mar,Nis,May,Haz,Tem,Agu,Eyl,Eki,Kas,Ara", - "month": "Ocak,Subat,Mart,Nisan,Mayis,Haziran,Temmuz,Agustos,Eylul,Ekim,Kasim,Aralik", - "abday": "Paz,Pzt,Sal,Car,Per,Cum,Cmt", - "day": "Pazar,Pazartesi,Sali,Carsamba,Persembe,Cuma,Cumartesi", + "month": "Ocak,Subat,Mart,Nisan,Mayis,Haziran,Temmuz,Agustos,Eylül,Ekim,Kasim,Aralik", + "abday": "Paz,Pzt,Sal,Çar,Per,Cum,Cmt", + "day": "Pazar,Pazartesi,Sali,Çarsamba,Persembe,Cuma,Cumartesi", "trans": { "yes": "evet", "Yes": "Evet", @@ -1153,13 +1248,13 @@ var locales = { "1": "%HH:%MM" }, "datePattern": { - "0": "%Y %b %d, %A", - "1": "%Y.%m.%d" + "0": "%Y. %b %-d.", + "1": "%Y.%m.%d." }, - "abmonth": "Jan,Feb,Már,Ápr,Máj,Jún,Júl,Aug,Szep,Okt,Nov,Dec", - "month": "Január,Február,Március,Április,Május,Június,Július,Augusztus,Szeptember,Október,November,December", - "abday": "Vas,Hét,Ke,Szer,Csüt,Pén,Szom", - "day": "Vasárnap,Hétfo,Kedd,Szerda,Csütörtök,Péntek,Szombat", + "abmonth": "jan,feb,már,ápr,máj,jún,júl,aug,szep,okt,nov,dec", + "month": "január,február,március,április,május,június,július,augusztus,szeptember,október,november,december", + "abday": "V,H,K,Sze,Cs,P,Szo", + "day": "vasárnap,hétfo,kedd,szerda,csütörtök,péntek,szombat", "trans": { "yes": "igen", "Yes": "Igen", @@ -1184,18 +1279,18 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "[none]", - "1": "[none]" + "0": "AM", + "1": "PM" }, "timePattern": { - "0": "%HH:%MM:%SS", - "1": "%HH:%MM" + "0": "%HHh%MM:%SS", + "1": "%HHh%MM" }, "datePattern": { - "0": "%A %d %B de %Y", - "1": "%d/%m/%Y" + "0": "%-d %b %Y", + "1": "%-d/%m/%y" }, - "abmonth": "gen.,febr.,març,abril,mai,junh,julh,ago.,set.,oct.,nov.,dec.", + "abmonth": "gen,feb,març,abr,mai,junh,jul,ago,set,oct,nov,dec", "month": "genièr,febrièr,març,abril,mai,junh,julhet,agost,setembre,octòbre,novembre,decembre", "abday": "dg,dl,dm,dc,dj,dv,ds", "day": "dimenge,diluns,dimars,dimècres,dijòus,divendres,dissabte", @@ -1223,21 +1318,21 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "am", - "1": "pm" + "0": "AM", + "1": "PM" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%d %b %Y", - "1": "%d/%m/%y" + "0": "%-d. %b %Y", + "1": "%d/%m/%Y" }, - "abmonth": "Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set,Out,Nov,Dez", - "month": "Janeiro,Fevereiro,Março,Abril,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro", - "abday": "Dom,Seg,Ter,Qua,Qui,Sex,Sab", - "day": "Domingo,Segunda-feira,Terça-feira,Quarta-feira,Quinta-feira,Sexta-feira,Sábado", + "abmonth": "jan,fev,mar,abr,mai,jun,jul,ago,set,out,nov,dez", + "month": "janeiro,fevereiro,março,abril,maio,junho,julho,agosto,setembro,outubro,novembro,dezembro", + "abday": "dom,seg,ter,qua,qui,sex,sáb", + "day": "domingo,segunda-feira,terça-feira,quarta-feira,quinta-feira,sexta-feira,sábado", "trans": { "yes": "sim", "Yes": "Sim", @@ -1270,8 +1365,8 @@ var locales = { "1": "%HH:%MM" }, "datePattern": { - "0": "%d. %b %Y", - "1": "%d.%m.%Y" + "0": "%-d. %-m. %Y", + "1": "%d.%m.%y" }, "abmonth": "led,úno,bre,dub,kve,cvn,cvc,srp,zár,ríj,lis,pro", "month": "leden,únor,brezen,duben,kveten,cerven,cervenec,srpen,zárí,ríjen,listopad,prosinec", @@ -1301,20 +1396,20 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "dop.", - "1": "pop." + "0": "dop", + "1": "pop" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%-d. %b %Y", - "1": "%-d.%-m.%Y" + "0": "%-d. %b %Y.", + "1": "%d.%m.%Y." }, - "abmonth": "sij.,velj.,ožu.,tra.,svi,lip.,srp.,kol.,ruj.,lis.,stu.,pro.", + "abmonth": "sij,velj,ožu,tra,svi,lip,srp,kol,ruj,lis,stu,pro", "month": "sijecanj,veljaca,ožujak,travanj,svibanj,lipanj,srpanj,kolovoz,rujan,listopad,studeni,prosinac", - "abday": "ned.,pon.,uto.,sri.,cet.,pet.,sub.", + "abday": "ned,pon,uto,sri,cet,pet,sub", "day": "nedjelja,ponedjeljak,utorak,srijeda,cetvrtak,petak,subota", "trans": { "yes": "da", @@ -1341,8 +1436,8 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "dop.", - "1": "pop." + "0": "dop", + "1": "pop" }, "timePattern": { "0": "%HH:%MM:%SS", @@ -1350,11 +1445,11 @@ var locales = { }, "datePattern": { "0": "%-d. %b %Y", - "1": "%-d.%-m.%Y" + "1": "%-d. %-m. %y" }, - "abmonth": "jan.,feb.,mar.,apr.,maj,jun.,jul.,avg.,sep.,okt.,nov.,dec.", + "abmonth": "jan,feb,mar,apr,maj,jun,jul,avg,sep,okt,nov,dec", "month": "januar,februar,marec,april,maj,junij,julij,avgust,september,oktober,november,december", - "abday": "ned.,pon.,tor.,sre.,cet.,pet.,sob.", + "abday": "ned,pon,tor,sre,cet,pet,sob", "day": "nedelja,ponedeljek,torek,sreda,cetrtek,petek,sobota", "trans": { "yes": "da", @@ -1389,13 +1484,13 @@ var locales = { "1": "%HH:%MM" }, "datePattern": { - "0": "%d %b %Y", + "0": "%d/%m/%Y", "1": "%d/%m/%y" }, - "abmonth": "Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set,Out,Nov,Dez", - "month": "Janeiro,Fevereiro,Março,Abril,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro", - "abday": "Dom,Seg,Ter,Qua,Qui,Sex,Sab", - "day": "Domingo,Segunda-feira,Terça-feira,Quarta-feira,Quinta-feira,Sexta-feira,Sábado", + "abmonth": "jan,fev,mar,abr,mai,jun,jul,ago,set,out,nov,dez", + "month": "janeiro,fevereiro,março,abril,maio,junho,julho,agosto,setembro,outubro,novembro,dezembro", + "abday": "dom,seg,ter,qua,qui,sex,sáb", + "day": "domingo,segunda-feira,terça-feira,quarta-feira,quinta-feira,sexta-feira,sábado", "trans": { "yes": "sim", "Yes": "Sim", @@ -1420,21 +1515,21 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "[none]", - "1": "[none]" + "0": "AM", + "1": "PM" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%d. %b %Y", - "1": "%d.%m.%Y" + "0": "%-d %b %Y", + "1": "%-d.%m.%Y" }, - "abmonth": "Sty,Lut,Mar,Kwi,Maj,Cze,Lip,Sie,Wrz,Paz,Lis,Gru", - "month": "Styczen,Luty,Marzec,Kwiecien,Maj,Czerwiec,Lipiec,Sierpien,Wrzesien,Pazdziernik,Listopad,Grudzien", - "abday": "Ndz,Pon,Wt,Sr,Czw,Pt,Sob", - "day": "Niedziela,Poniedzialek,Wtorek,Sroda,Czwartek,Piatek,Sobota", + "abmonth": "sty,lut,mar,kwi,maj,cze,lip,sie,wrz,paz,lis,gru", + "month": "styczen,luty,marzec,kwiecien,maj,czerwiec,lipiec,sierpien,wrzesien,pazdziernik,listopad,grudzien", + "abday": "ndz,pon,wt,sr,czw,pt,sob", + "day": "niedziela,poniedzialek,wtorek,sroda,czwartek,piatek,sobota", "trans": { "yes": "tak", "Yes": "Tak", @@ -1460,21 +1555,21 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "[none]", - "1": "[none]" + "0": "pri", + "1": "pec" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%d. %b %Y", - "1": "%d.%m.%Y" + "0": "%Y. %-d. %b", + "1": "%d.%m.%y" }, - "abmonth": "Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dec", - "month": "Janvaris,Februaris,Marts,Aprilis,Maijs,Junijs,Julijs,Augusts,Septemberis,Oktobris,Novembris,Decembris", - "abday": "Pr,Ot,Tr,Ce,Pk,Se,Sv", - "day": "Pirmdiena,Otrdiena,Trešdiena,Ceturtdiena,Piektdiena,Sestdiena,Svetdiena", + "abmonth": "jan,feb,mar,apr,mai,jun,jul,aug,sep,okt,nov,dec", + "month": "janvaris,februaris,marts,aprilis,maijs,junijs,julijs,augusts,septembris,oktobris,novembris,decembris", + "abday": "sv,pr,ot,tr,ce,pk,se", + "day": "Svetdiena,Pirmdiena,Otrdiena,Trešdiena,Ceturtdiena,Piektdiena,Sestdiena", "trans": { "yes": "ja", "Yes": "Ja", @@ -1500,21 +1595,21 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "[none]", - "1": "[none]" + "0": "FM", + "1": "EM" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%d. %b %Y", + "0": "%-d. %b %Y", "1": "%d.%m.%Y" }, - "abmonth": "Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Des", - "month": "Januar,Februar,Mars,April,Mai,Juni,Juli,August,September,Oktober,November,Desember", - "abday": "Su,Må,Ty,On,To,Fr,La", - "day": "Sundag,Måndag,Tysdag,Onsdag,Torsdag,Fredag,Laurdag", + "abmonth": "jan,feb,mar,apr,mai,jun,jul,aug,sep,okt,nov,des", + "month": "januar,februar,mars,april,mai,juni,juli,august,september,oktober,november,desember", + "abday": "søn,mån,tys,ons,tor,fre,lau", + "day": "søndag,måndag,tysdag,onsdag,torsdag,fredag,laurdag", "trans": { "yes": "ja", "Yes": "Ja", @@ -1542,21 +1637,21 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "[none]", - "1": "[none]" + "0": "AM", + "1": "PM" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%d. %b %Y", + "0": "%-d. %b %Y", "1": "%d.%m.%Y" }, - "abmonth": "Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Des", - "month": "Januar,Februar,Mars,April,Mai,Juni,Juli,August,September,Oktober,November,Desember", - "abday": "Sø,Ma,Ti,On,To,Fr,Lø", - "day": "Søndag,Mandag,Tirsdag,Onsdag,Torsdag,Fredag,Lørdag", + "abmonth": "jan,feb,mar,apr,mai,jun,jul,aug,sep,okt,nov,des", + "month": "januar,februar,mars,april,mai,juni,juli,august,september,oktober,november,desember", + "abday": "søn,man,tir,ons,tor,fre,lør", + "day": "søndag,mandag,tirsdag,onsdag,torsdag,fredag,lørdag", "trans": { "yes": "ja", "Yes": "Ja", @@ -1584,18 +1679,18 @@ var locales = { }, "temperature": "°C", "ampm": { - "0": "[none]", - "1": "[none]" + "0": "AM", + "1": "PM" }, "timePattern": { "0": "%HH:%MM:%SS", "1": "%HH:%MM" }, "datePattern": { - "0": "%d %B %Y", - "1": "%d/%m/%y" + "0": "%-d %b %Y", + "1": "%-d/%-m/%y" }, - "abmonth": "gen.,febr.,març,abr.,maig,juny,jul.,ag.,set.,oct.,nov.,des.", + "abmonth": "gen,febr,març,abr,maig,juny,jul,ag,set,oct,nov,des", "month": "gener,febrer,març,abril,maig,juny,juliol,agost,setembre,octubre,novembre,desembre", "abday": "dg.,dl.,dt.,dc.,dj.,dv.,ds.", "day": "diumenge,dilluns,dimarts,dimecres,dijous,divendres,dissabte", @@ -1611,5 +1706,66 @@ var locales = { "Delete": "Esborra", "Mark Unread": "Marca com a no llegit" } + }, + "sq_AL": { + "lang": "sq_AL", + "icon": "🇦🇱", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ",", + "thousands_sep": " ", + "speed": "km/h", + "distance": { + "0": "m", + "1": "km" + }, + "temperature": "°C", + "ampm": { + "0": "AM", + "1": "PM" + }, + "timePattern": { + "0": "%HH:%MM:%SS", + "1": "%HH:%MM" + }, + "datePattern": { + "0": "%-d %b %Y", + "1": "%-d.%-m.%y" + }, + "abmonth": "jan,shk,mar,pri,maj,qer,korr,gush,sht,tet,nën,dhj", + "month": "janar,shkurt,mars,prill,maj,qershor,korrik,gusht,shtator,tetor,nëntor,dhjetor", + "abday": "die,hën,mar,mër,enj,pre,sht", + "day": "e diel,e hënë,e martë,e mërkurë,e enjte,e premte,e shtunë" + }, + "ts_TS": { + "lang": "ts_TS", + "icon": "🐛", + "notes": "Produces the longest possible output. Useful for testing.", + "calendar": "gregory", + "numberingSystem": "latn", + "decimal_point": ".", + "thousands_sep": ",", + "speed": "km/h", + "distance": { + "0": "kmi", + "1": "kmi" + }, + "temperature": "°C", + "ampm": { + "0": "dop", + "1": "pop" + }, + "timePattern": { + "0": "%HHh%MM:%SS", + "1": "%HHh%MM" + }, + "datePattern": { + "0": "%b, %d, %Y", + "1": "%d. %m %Y" + }, + "abmonth": "mema,mema,mema,mema,mema,mema,mema,mema,mema,mema,mema,mema", + "month": "mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum", + "abday": "wewa,wewa,wewa,wewa,wewa,wewa,wewa", + "day": "weswavammkkom,weswavammkkom,weswavammkkom,weswavammkkom,weswavammkkom,weswavammkkom,weswavammkkom" } }; From 28099db0563120b60949467add29a0df153fa94f Mon Sep 17 00:00:00 2001 From: Anton Date: Tue, 7 May 2024 16:51:56 +0200 Subject: [PATCH 16/18] Update core --- core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core b/core index dc682af217..7e9095073f 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit dc682af2179512525474c43ed616c801a9570ab8 +Subproject commit 7e9095073f2121afad4bf1d9514d3d049f7be680 From 0d2aa62892dcdfbd12a21da6b8406ca0cbd7d725 Mon Sep 17 00:00:00 2001 From: Anton Date: Wed, 7 Aug 2024 20:13:15 +0200 Subject: [PATCH 17/18] Revert "Support custom formats" This reverts commit 47519d39b3eabf36c6384f1d3ec44086e6f2bbdf. --- apps/locale/locale.html | 171 +++++++++++----------------------------- 1 file changed, 46 insertions(+), 125 deletions(-) diff --git a/apps/locale/locale.html b/apps/locale/locale.html index b94d4d040a..8ec818aaea 100644 --- a/apps/locale/locale.html +++ b/apps/locale/locale.html @@ -3,9 +3,8 @@ @@ -16,15 +15,13 @@
- - +

- -
-
+

+

Then click

@@ -94,6 +91,7 @@ /*else if (chCode<256) // it's non-ascii, but <256 - just escape it n = chCode;*/ else { + if (CODEPAGE_CONVERSIONS[ch]) return CODEPAGE_CONVERSIONS[ch]; console.error(`Locale ${lang}: Character ${ch} (${chCode}) is not in Code Page ${codePage.name}`); return undefined; } @@ -101,14 +99,41 @@ return '\\x'+(n+256).toString(16).slice(-2); } - function createLocaleModule() { + // do some sanity checks + Object.keys(locales).forEach(function(localeName) { + var locale = locales[localeName]; + if (locale.trans && !locale.trans.on) console.error(localeName+": If translations are provided, 'on' *must* be included"); + if (distanceUnits[locale.distance[0]]===undefined) console.error(localeName+": Unknown distance unit "+locale.distance[0]); + if (distanceUnits[locale.distance[1]]===undefined) console.error(localeName+": Unknown distance unit "+locale.distance[1]); + if (speedUnits[locale.speed]===undefined) console.error(localeName+": Unknown speed unit "+locale.speed); + if (locale.temperature!='°C' && locale.temperature!='°F') + console.error(localeName+": Unknown temperature unit "+locale.temperature); + // Now check that codepage is ok and all chars in translation are in that codepage + const codePageName = "ISO8859-1"; + if (locale.codePage) codePageName = locale.codePage; + const codePage = codePages[codePageName]; + if (codePage===undefined) console.error(localeName+": Unknown codePage "+codePageName); + function checkChars(v,path) { + if ("object"==typeof v) + Object.keys(v).forEach(k=>checkChars(v[k], path+"."+k)); + else if ("string"==typeof v) + for (var i=0;i { - pattern = pattern.replace(e,"${"+replaceList[e]+"}"); - }); - pattern = eval(`let d = new Date();\`${pattern}\``); - return pattern; - } - function dataList(id, options, formatter){ - let output = ``; - for(const option of options){ - let formatted = option; - formatted = formatter?.(formatted) || formatted; - output+=`\n` - } - output += "\n"; - return output; - } - var date = new Date(); - // TODO: This warning should have a link to an article explaining how the formats work, and how long they are allowed to be - document.getElementById("customize-warning").innerText = customizeLocale ? "⚠️ If you make the formats too long, some apps will not work!" : ""; - document.getElementById("examples-short-long").innerHTML = ` + document.getElementById("examples").innerHTML = ` ShortLong Day${exports.dow(date,1)}${exports.dow(date,0)} Month${exports.month(date,1)}${exports.month(date,0)} -${customizeLocale ? `Date Pattern - - - ${dataList("short-date-patterns", datePatterns["1"], patternOutput)} - - - - ${dataList("long-date-patterns", datePatterns["0"], patternOutput)} - - ` - : ""} -Date - ${exports.date(date,1)} - ${exports.date(date,0)} - -${customizeLocale ? `Time Pattern - - - ${dataList("short-time-patterns", timePatterns["1"], patternOutput)} - - - - ${dataList("long-time-patterns", timePatterns["0"], patternOutput)} - - ` - : ""} -Time - ${exports.time(date,1)} - ${exports.time(date,0)} - - Number${exports.number(12.3456789)}${exports.number(12.3456789,4)} - Distance${exports.distance(12.34,0)}${exports.distance(12345.6,1)} -`; -document.getElementById("examples").innerHTML = ` -Value -${customizeLocale ? `Meridian format - - - ${dataList("meridian-ams", meridians["0"])} - - - - ${dataList("meridian-pms", meridians["1"])} - - ` - : ""} -Meridian - ${exports.meridian(new Date(0))} / - ${exports.meridian(new Date(43200000))} - -Speed${exports.speed(123)} -Temperature${exports.temp(12,0)} +Date${exports.date(date,1)}${exports.date(date,0)} +Time${exports.time(date,1)}${exports.time(date,0)} +Number${exports.number(12.3456789)}${exports.number(12.3456789,4)} +Distance${exports.distance(12.34,0)}${exports.distance(12345.6,1)} +Speed${exports.speed(123)} +Temperature${exports.temp(12,0)} `; - - if(customizeLocale){ - document.querySelector("input#short-date-pattern").addEventListener("input", event => { - locale.datePattern["1"] = event.target.value; - document.querySelector("td#short-date-pattern-output").innerText = patternOutput(event.target.value); - }); - document.querySelector("input#long-date-pattern").addEventListener("input", event => { - locale.datePattern["0"] = event.target.value; - document.querySelector("td#long-date-pattern-output").innerText = patternOutput(event.target.value); - }); - document.querySelector("input#short-time-pattern").addEventListener("input", event => { - locale.timePattern["1"] = event.target.value; - document.querySelector("td#short-time-pattern-output").innerText = patternOutput(event.target.value); - }); - document.querySelector("input#long-time-pattern").addEventListener("input", event => { - locale.timePattern["0"] = event.target.value; - document.querySelector("td#long-time-pattern-output").innerText = patternOutput(event.target.value); - }); - document.querySelector("input#meridian-am").addEventListener("input", event => { - locale.ampm["0"] = event.target.value; - document.querySelector("span#meridian-am-output").innerText = patternOutput(event.target.value); - }); - document.querySelector("input#meridian-pm").addEventListener("input", event => { - locale.ampm["1"] = event.target.value; - document.querySelector("span#meridian-pm-output").innerText = patternOutput(event.target.value); - }); - } return getLocaleModule(false); } - var lang; - var locale; - var customizeLocale; var languageSelector = document.getElementById("languages"); - var customizeSelector = document.getElementById('customize'); languageSelector.innerHTML = Object.keys(locales).map(l=>{ var locale = locales[l]; var localeParts = l.split("_"); // en_GB -> ["en","GB"] @@ -346,24 +274,17 @@ return `` }).join("\n"); languageSelector.addEventListener('change', function() { - lang = languageSelector.options[languageSelector.selectedIndex].value; - locale = locales[lang] - createLocaleModule(); - }); - customizeSelector.addEventListener('change', function() { - customizeLocale = customizeSelector.checked; - createLocaleModule(); + const lang = languageSelector.options[languageSelector.selectedIndex].value; + createLocaleModule(lang); }); // initial value - lang = languageSelector.options[languageSelector.selectedIndex].value; - locale = locales[lang]; - customizeLocale = false; - createLocaleModule(); + createLocaleModule(languageSelector.options[languageSelector.selectedIndex].value); document.getElementById("upload").addEventListener("click", function() { + const lang = languageSelector.options[languageSelector.selectedIndex].value; var localeModule = createLocaleModule(lang); console.log("Locale Module is:",localeModule); From 4ddca3f9b077d5e4034c5696951ac5a3b473ef42 Mon Sep 17 00:00:00 2001 From: Anton Date: Wed, 7 Aug 2024 20:27:29 +0200 Subject: [PATCH 18/18] Improve test locale --- apps/locale/locales-meta.js | 21 +++++++++++++-------- apps/locale/locales.js | 16 ++++++++-------- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/apps/locale/locales-meta.js b/apps/locale/locales-meta.js index b8ab0864bb..6c98ace9f6 100644 --- a/apps/locale/locales-meta.js +++ b/apps/locale/locales-meta.js @@ -686,12 +686,18 @@ exports.locales = { trans: { yes: "כן", Yes: "כן", no: "לא", No: "לא", ok: "אישור", on: "פעיל", off: "כבוי" } } */ - "ts_TS": { + /** + * These test strings are designed to be as wide and tall as real locale strings can be. + * All apps should be able to display them properly, to ensure that they work with all locales. + * To make the strings as long as possible, wide characters like "w" and "m" is used, + * and to make them taller, "k" and "g" are used together. + */ + "ts_TS test": { icon: "🐛", notes: "Produces the longest possible output. Useful for testing.", calendar: "gregory", numberingSystem: "latn", - decimal_point: ".", + decimal_point: ",", thousands_sep: ",", speed: "km/h", distance: { @@ -701,7 +707,7 @@ exports.locales = { temperature: "°C", ampm: { 0: "dop", - 1: "pop", + 1: "odp", }, timePattern: { 0: "%HHh%MM:%SS", @@ -711,10 +717,9 @@ exports.locales = { 0: "%b, %d, %Y", 1: "%d. %m %Y", }, - abmonth: "mema,mema,mema,mema,mema,mema,mema,mema,mema,mema,mema,mema", - month: - "mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum", - abday: "wewa,wewa,wewa,wewa,wewa,wewa,wewa", - day: "weswavammkkom,weswavammkkom,weswavammkkom,weswavammkkom,weswavammkkom,weswavammkkom,weswavammkkom", + abmonth: Array(12).fill("mgmk").join(","), + month: Array(12).fill("megmmaskuum").join(","), + abday: Array(7).fill("mgmk").join(","), + day: Array(7).fill("megmavammkkom").join(","), }, }; diff --git a/apps/locale/locales.js b/apps/locale/locales.js index 2e5150e33e..13f76015c2 100644 --- a/apps/locale/locales.js +++ b/apps/locale/locales.js @@ -1737,13 +1737,13 @@ var locales = { "abday": "die,hën,mar,mër,enj,pre,sht", "day": "e diel,e hënë,e martë,e mërkurë,e enjte,e premte,e shtunë" }, - "ts_TS": { - "lang": "ts_TS", + "ts_TS test": { + "lang": "ts_TS test", "icon": "🐛", "notes": "Produces the longest possible output. Useful for testing.", "calendar": "gregory", "numberingSystem": "latn", - "decimal_point": ".", + "decimal_point": ",", "thousands_sep": ",", "speed": "km/h", "distance": { @@ -1753,7 +1753,7 @@ var locales = { "temperature": "°C", "ampm": { "0": "dop", - "1": "pop" + "1": "odp" }, "timePattern": { "0": "%HHh%MM:%SS", @@ -1763,9 +1763,9 @@ var locales = { "0": "%b, %d, %Y", "1": "%d. %m %Y" }, - "abmonth": "mema,mema,mema,mema,mema,mema,mema,mema,mema,mema,mema,mema", - "month": "mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum,mermmaskuum", - "abday": "wewa,wewa,wewa,wewa,wewa,wewa,wewa", - "day": "weswavammkkom,weswavammkkom,weswavammkkom,weswavammkkom,weswavammkkom,weswavammkkom,weswavammkkom" + "abmonth": "mgmk,mgmk,mgmk,mgmk,mgmk,mgmk,mgmk,mgmk,mgmk,mgmk,mgmk,mgmk", + "month": "megmmaskuum,megmmaskuum,megmmaskuum,megmmaskuum,megmmaskuum,megmmaskuum,megmmaskuum,megmmaskuum,megmmaskuum,megmmaskuum,megmmaskuum,megmmaskuum", + "abday": "mgmk,mgmk,mgmk,mgmk,mgmk,mgmk,mgmk", + "day": "megmavammkkom,megmavammkkom,megmavammkkom,megmavammkkom,megmavammkkom,megmavammkkom,megmavammkkom" } };