diff --git a/apps/locale/locales.js b/apps/locale/locales.js index 7e4105f3d..c704e0f90 100644 --- a/apps/locale/locales.js +++ b/apps/locale/locales.js @@ -177,7 +177,7 @@ var locales = { speed: "kmh", distance: { 0: "m", 1: "km" }, temperature: "°C", - ampm: { 0: "", 1: "" }, + ampm: { 0: "am", 1: "pm" }, 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", @@ -194,7 +194,7 @@ var locales = { speed: "kmh", distance: { 0: "m", 1: "km" }, temperature: "°C", - ampm: { 0: "", 1: "" }, + 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", @@ -210,7 +210,7 @@ var locales = { speed: "kmh", distance: { 0: "m", 1: "km" }, temperature: "°C", - ampm: { 0: "", 1: "" }, + 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-02-2020 abday: "zo,ma,di,wo,do,vr,za", @@ -258,7 +258,7 @@ var locales = { speed: "km/h", distance: { 0: "m", 1: "km" }, temperature: "°C", - ampm: { 0: "", 1: "" }, + ampm: { 0: "am", 1: "pm" }, 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", @@ -290,7 +290,7 @@ var locales = { speed: 'km/h', distance: { "0": "m", "1": "km" }, temperature: '°C', - ampm: { 0: "", 1: "" }, + ampm: { 0: "am", 1: "pm" }, 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", @@ -306,7 +306,7 @@ var locales = { speed: "km/t", distance: { 0: "m", 1: "km" }, temperature: "°C", - ampm: { 0: "", 1: "" }, + ampm: { 0: "am", 1: "pm" }, 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", @@ -322,7 +322,7 @@ var locales = { speed: "km/h", distance: { 0: "m", 1: "km" }, temperature: "°C", - ampm: { 0: "", 1: "" }, + ampm: { 0: "am", 1: "pm" }, 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", @@ -370,7 +370,7 @@ var locales = { speed: "kmh", distance: { 0: "m", 1: "km" }, temperature: "°C", - ampm: { 0: "", 1: "" }, + ampm: { 0: "am", 1: "pm" }, 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", @@ -403,7 +403,7 @@ var locales = { speed: "kmh", distance: { 0: "m", 1: "km" }, temperature: "°C", - ampm: { 0: "", 1: "" }, + ampm: { 0: "am", 1: "pm" }, 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", @@ -420,7 +420,7 @@ var locales = { speed: "kmh", distance: { 0: "m", 1: "km" }, temperature: "°C", - ampm: { 0: "", 1: "" }, + ampm: { 0: "am", 1: "pm" }, 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: "janv.,févr.,mars,avril,mai,juin,juil.,août,sept.,oct.,nov.,déc.", @@ -484,7 +484,7 @@ var locales = { speed: 'kmh', distance: { "0": "m", "1": "km" }, temperature: '°C', - ampm: { 0: "", 1: "" }, + ampm: { 0: "am", 1: "pm" }, 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", @@ -500,7 +500,7 @@ var locales = { speed: 'kmh', distance: { "0": "m", "1": "km" }, temperature: '°C', - ampm: { 0: "", 1: "" }, + ampm: { 0: "am", 1: "pm" }, 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", @@ -516,7 +516,7 @@ var locales = { speed: 'kmh', distance: { "0": "m", "1": "km" }, temperature: '°C', - ampm: { 0: "", 1: "" }, + ampm: { 0: "am", 1: "pm" }, 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", @@ -564,7 +564,7 @@ var locales = { speed: "km/h", distance: { 0: "m", 1: "km" }, temperature: "°C", - ampm: { 0: "", 1: "" }, + ampm: { 0: "am", 1: "pm" }, 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.", @@ -660,7 +660,7 @@ var locales = { speed: "kmh", distance: { 0: "m", 1: "km" }, temperature: "°C", - ampm: { 0: "", 1: "" }, + ampm: { 0: "am", 1: "pm" }, 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", @@ -676,7 +676,7 @@ var locales = { speed: "kmh", distance: { 0: "m", 1: "km" }, temperature: "°C", - ampm: { 0: "", 1: "" }, + ampm: { 0: "am", 1: "pm" }, 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", @@ -692,7 +692,7 @@ var locales = { speed: "kmt", distance: { 0: "m", 1: "km" }, temperature: "°C", - ampm: { 0: "", 1: "" }, + ampm: { 0: "am", 1: "pm" }, 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", @@ -708,7 +708,7 @@ var locales = { speed: "kmh", distance: { 0: "m", 1: "km" }, temperature: "°C", - ampm: { 0: "", 1: "" }, + ampm: { 0: "am", 1: "pm" }, 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", @@ -725,7 +725,7 @@ var locales = { speed: "kmh", distance: { 0: "m", 1: "km" }, temperature: "°C", - ampm: { 0: "", 1: "" }, + 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.", diff --git a/apps/locale/sanitycheck.js b/apps/locale/sanitycheck.js index 06c7ad3d6..ceca89b8d 100644 --- a/apps/locale/sanitycheck.js +++ b/apps/locale/sanitycheck.js @@ -4,15 +4,15 @@ */ const datetime_length_map = { // %A, %a, %B, %b vary depending on the locale, so they are calculated later - "%Y": [4, 4], - "%y": [2, 2], - "%m": [2, 2], - "%-m": [1, 2], - "%d": [2, 2], - "%-d": [1, 2], - "%HH": [2, 2], - "%MM": [2, 2], - "%SS": [2, 2], + "%Y": [4, 4, "2024", "2024"], + "%y": [2, 2, "24", "24"], + "%m": [2, 2, "10", "10"], + "%-m": [1, 2, "1", "10"], + "%d": [2, 2, "10", "10"], + "%-d": [1, 2, "1", "10"], + "%HH": [2, 2, "10", "10"], + "%MM": [2, 2, "10", "10"], + "%SS": [2, 2, "10", "10"], }; /** @@ -30,20 +30,21 @@ function getLengthOfDatetimeFormat(name, datetimeEspruino, locale, errors) { ["%a", locale.abday], ["%B", locale.month], ["%b", locale.abmonth], - ]){ + ]) { const length = [Infinity, 0]; for(const value of values.split(",")){ - if(length[0] > value.length) length[0] = value.length; - if(length[1] < value.length) length[1] = value.length; + if(length[0] > value.length) { length[0] = value.length; length[2] = value; } + if(length[1] < value.length) { length[1] = value.length; length[3] = value; } } length_map[symbol] = length; } // Find the length of the output - let formatLength = [0, 0]; + let formatLength = [0, 0, "", ""]; let i = 0; while (i < datetimeEspruino.length) { - if (datetimeEspruino[i] === "%") { + let ch = datetimeEspruino[i]; + if (ch === "%") { let match; for(const symbolLength of [2, 3]){ const length = length_map[datetimeEspruino.substring(i, i+symbolLength)]; @@ -57,16 +58,22 @@ function getLengthOfDatetimeFormat(name, datetimeEspruino, locale, errors) { if(match){ formatLength[0] += match.length[0]; formatLength[1] += match.length[1]; + formatLength[2] += match.length[2]; + formatLength[3] += match.length[3]; i += match.symbolLength; }else{ errors.push({name, value: datetimeEspruino, lang: locale.lang, error: `uses an unsupported format symbol: ${datetimeEspruino.substring(i, i+3)}`}); formatLength[0]++; formatLength[1]++; + formatLength[2]+=" "; + formatLength[3]+=" "; i++; } } else { formatLength[0]++; formatLength[1]++; + formatLength[2]+=ch; + formatLength[3]+=ch; i++; } } @@ -154,10 +161,10 @@ function checkLocale(locale, {speedUnits, distanceUnits, codePages, CODEPAGE_CON function checkFormatLength(name, value, min, max) { const length = getLengthOfDatetimeFormat(name, value, locale, errors); if (min && length[0] < min) { - errors.push({name, value, lang: locale.lang, error: `output must be longer than ${min-1} characters`}); + errors.push({name, value, lang: locale.lang, error: `output must be longer than ${min-1} characters (${length[2]} -> ${length[0]})`}); } if (max && length[1] > max) { - errors.push({name, value, lang: locale.lang, error: `output must be shorter than ${max+1} characters`}); + errors.push({name, value, lang: locale.lang, error: `output must be shorter than ${max+1} characters (${length[3]} -> ${length[1]})`}); } } function checkIsIn(name, value, listName, list) { diff --git a/bin/sanitycheck.js b/bin/sanitycheck.js index 0df4625f5..ec2644f6b 100755 --- a/bin/sanitycheck.js +++ b/bin/sanitycheck.js @@ -54,54 +54,56 @@ function WARN(msg, opt) { } /* These are errors that we temporarily allow */ var KNOWN_ERRORS = [ - "In locale en_CA, long date output must be shorter than 15 characters", - "In locale fr_FR, long date output must be shorter than 15 characters", - "In locale en_SE, long date output must be shorter than 15 characters", - "In locale en_NZ, long date output must be shorter than 15 characters", - "In locale en_AU, long date output must be shorter than 15 characters", - "In locale de_AT, long date output must be shorter than 15 characters", - "In locale en_IL, long date output must be shorter than 15 characters", - "In locale es_ES, long date output must be shorter than 15 characters", - "In locale fr_BE, long date output must be shorter than 15 characters", - "In locale fi_FI, long date output must be shorter than 15 characters", - "In locale de_CH, long date output must be shorter than 15 characters", - "In locale fr_CH, long date output must be shorter than 15 characters", - "In locale wae_CH, long date output must be shorter than 15 characters", - "In locale tr_TR, long date output must be shorter than 15 characters", - "In locale hu_HU, long date output must be shorter than 15 characters", - "In locale oc_FR, long date output must be shorter than 15 characters", - "In locale ca_ES, long date output must be shorter than 15 characters", - "In locale fr_BE, short month must be shorter than 5 characters", - "In locale fi_FI, short month must be shorter than 5 characters", - "In locale fr_CH, short month must be shorter than 5 characters", - "In locale oc_FR, short month must be shorter than 5 characters", - "In locale hr_HR, short month must be shorter than 5 characters", - "In locale ca_ES, short month must be shorter than 5 characters", - "In locale de_DE, meridian must be longer than 0 characters", - "In locale en_JP, meridian must be longer than 0 characters", - "In locale nl_NL, meridian must be longer than 0 characters", - "In locale fr_FR, meridian must be longer than 0 characters", - "In locale se_SE, meridian must be longer than 0 characters", - "In locale en_SE, meridian must be longer than 0 characters", - "In locale da_DK, meridian must be longer than 0 characters", - "In locale en_DK, meridian must be longer than 0 characters", - "In locale de_AT, meridian must be longer than 0 characters", - "In locale es_ES, meridian must be longer than 0 characters", - "In locale fr_BE, meridian must be longer than 0 characters", - "In locale it_CH, meridian must be longer than 0 characters", - "In locale it_IT, meridian must be longer than 0 characters", - "In locale wae_CH, meridian must be longer than 0 characters", - "In locale oc_FR, meridian must be longer than 0 characters", - "In locale pl_PL, meridian must be longer than 0 characters", - "In locale lv_LV, meridian must be longer than 0 characters", - "In locale nn_NO, meridian must be longer than 0 characters", - "In locale nb_NO, meridian must be longer than 0 characters", - "In locale ca_ES, meridian must be longer than 0 characters", - "In locale de_CH, meridian must be shorter than 4 characters", - "In locale hr_HR, meridian must be shorter than 4 characters", - "In locale sl_SI, meridian must be shorter than 4 characters", + "In locale en_CA, long date output must be shorter than 15 characters (Wednesday, September 10, 2024 -> 29)", + "In locale fr_FR, long date output must be shorter than 15 characters (10 septembre 2024 -> 17)", "In locale fr_FR, short month must be shorter than 5 characters", "In locale sv_SE, speed must be shorter than 5 characters", + "In locale en_SE, long date output must be shorter than 15 characters (September 10 2024 -> 17)", + "In locale en_NZ, long date output must be shorter than 15 characters (Wednesday, September 10, 2024 -> 29)", + "In locale en_AU, long date output must be shorter than 15 characters (Wednesday, September 10, 2024 -> 29)", + "In locale de_AT, long date output must be shorter than 15 characters (Donnerstag, 10. September 2024 -> 30)", + "In locale en_IL, long date output must be shorter than 15 characters (Wednesday, September 10, 2024 -> 29)", + "In locale es_ES, long date output must be shorter than 15 characters (miércoles, 10 de septiembre de 2024 -> 35)", + "In locale fr_BE, long date output must be shorter than 15 characters (dimanche septembre 10 2024 -> 26)", + "In locale fr_BE, short month must be shorter than 5 characters", + "In locale fr_BE, short month must be shorter than 5 characters", + "In locale fr_BE, short month must be shorter than 5 characters", + "In locale fr_BE, short month must be shorter than 5 characters", + "In locale fr_BE, short month must be shorter than 5 characters", + "In locale fi_FI, long date output must be shorter than 15 characters (keskiviikkona 10. maaliskuuta 2024 -> 34)", + "In locale fi_FI, short month must be shorter than 5 characters", + "In locale fi_FI, short month must be shorter than 5 characters", + "In locale fi_FI, short month must be shorter than 5 characters", + "In locale fi_FI, short month must be shorter than 5 characters", + "In locale fi_FI, short month must be shorter than 5 characters", + "In locale fi_FI, short month must be shorter than 5 characters", + "In locale fi_FI, short month must be shorter than 5 characters", + "In locale fi_FI, short month must be shorter than 5 characters", + "In locale fi_FI, short month must be shorter than 5 characters", + "In locale fi_FI, short month must be shorter than 5 characters", + "In locale fi_FI, short month must be shorter than 5 characters", + "In locale de_CH, meridian must be shorter than 4 characters", + "In locale de_CH, meridian must be shorter than 4 characters", + "In locale de_CH, long date output must be shorter than 15 characters (Donnerstag, 10. September 2024 -> 30)", + "In locale fr_CH, long date output must be shorter than 15 characters (dimanche 10 septembre 2024 -> 26)", + "In locale fr_CH, short month must be shorter than 5 characters", + "In locale fr_CH, short month must be shorter than 5 characters", + "In locale fr_CH, short month must be shorter than 5 characters", + "In locale fr_CH, short month must be shorter than 5 characters", + "In locale fr_CH, short month must be shorter than 5 characters", + "In locale wae_CH, long date output must be shorter than 15 characters (Sunntag, 10. Herbštmánet 2024 -> 29)", + "In locale tr_TR, long date output must be shorter than 15 characters (10 Haziran 2024 Pazartesi -> 25)", + "In locale hu_HU, long date output must be shorter than 15 characters (2024 Szep 10, Csütörtök -> 23)", + "In locale oc_FR, long date output must be shorter than 15 characters (divendres 10 setembre de 2024 -> 29)", + "In locale oc_FR, short month must be shorter than 5 characters", + "In locale oc_FR, short month must be shorter than 5 characters", + "In locale hr_HR, meridian must be shorter than 4 characters", + "In locale hr_HR, meridian must be shorter than 4 characters", + "In locale hr_HR, short month must be shorter than 5 characters", + "In locale sl_SI, meridian must be shorter than 4 characters", + "In locale sl_SI, meridian must be shorter than 4 characters", + "In locale ca_ES, long date output must be shorter than 15 characters (10 setembre 2024 -> 16)", + "In locale ca_ES, short month must be shorter than 5 characters", ]; /* These are warnings we know about but don't want in our output */ var KNOWN_WARNINGS = [