From 69531876463353cb3a9dba5c2acd75b99a7aa18a Mon Sep 17 00:00:00 2001 From: Ben Yackley <61990921+beyackle@users.noreply.github.com> Date: Thu, 14 Jan 2021 10:05:25 -0800 Subject: [PATCH 1/3] add check script for l10n files --- Composer/package.json | 3 +- Composer/packages/server/src/locales/fr.json | 2 +- Composer/packages/server/src/locales/it.json | 2 +- Composer/packages/server/src/locales/tr.json | 2 +- Composer/scripts/l10n-extractJson.js | 2 -- Composer/scripts/l10nCheck.js | 37 ++++++++++++++++++++ 6 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 Composer/scripts/l10nCheck.js diff --git a/Composer/package.json b/Composer/package.json index 357e6c0f20..fc77af5c7b 100644 --- a/Composer/package.json +++ b/Composer/package.json @@ -72,7 +72,8 @@ "l10n:extractJson": "node scripts/l10n-extractJson.js", "l10n:transform": "node scripts/l10n-transform.js", "l10n:babel": "babel --config-file ./babel.l10n.config.js --extensions \".ts,.tsx,.jsx,.js\" --out-dir l10ntemp ./packages", - "l10n": "yarn l10n:babel && yarn l10n:extract && yarn l10n:transform packages/server/src/locales/en-US.json && yarn l10n:extractJson packages/server/schemas && rimraf l10ntemp" + "l10n": "yarn l10n:babel && yarn l10n:extract && yarn l10n:transform packages/server/src/locales/en-US.json && yarn l10n:extractJson packages/server/schemas && rimraf l10ntemp", + "l10n:check": "node scripts/l10nCheck.js" }, "husky": { "hooks": { diff --git a/Composer/packages/server/src/locales/fr.json b/Composer/packages/server/src/locales/fr.json index da5d2d3f5e..f88b568d9d 100644 --- a/Composer/packages/server/src/locales/fr.json +++ b/Composer/packages/server/src/locales/fr.json @@ -1446,7 +1446,7 @@ "message": "élément ajouté" }, "itemcount_plural_0_no_schemas_1_one_schema_other_s_e1aea7f": { - "message": "{ itemCount, plural,\n =0 {aucun schéma}\n =1 {un schéma}\n autre {nombre de schémas}\n}.\n { itemCount, select,\n 0 {}\n autre {Appuyez sur la flèche bas pour naviguer dans les résultats de recherche}\n}" + "message": "{ itemCount, plural,\n =0 {aucun schéma}\n =1 {un schéma}\n other {nombre de schémas}\n}.\n { itemCount, select,\n 0 {}\n autre {Appuyez sur la flèche bas pour naviguer dans les résultats de recherche}\n}" }, "jan_28_2020_8beb36dc": { "message": "28 jan. 2020" diff --git a/Composer/packages/server/src/locales/it.json b/Composer/packages/server/src/locales/it.json index b640c6d111..ecf10df3ec 100644 --- a/Composer/packages/server/src/locales/it.json +++ b/Composer/packages/server/src/locales/it.json @@ -1446,7 +1446,7 @@ "message": "elemento aggiunto" }, "itemcount_plural_0_no_schemas_1_one_schema_other_s_e1aea7f": { - "message": "{ itemCount, plural,\n =0 {No schemas}\n =1 {One schema}\n altri {# schemas}\n} sono stati trovati.\n { itemCount, select,\n 0 {}\n altro {Press down arrow key to navigate the search results}\n}" + "message": "{ itemCount, plural,\n =0 {No schemas}\n =1 {One schema}\n other {# schemas}\n} sono stati trovati.\n { itemCount, select,\n 0 {}\n altro {Press down arrow key to navigate the search results}\n}" }, "jan_28_2020_8beb36dc": { "message": "28 gen 2020" diff --git a/Composer/packages/server/src/locales/tr.json b/Composer/packages/server/src/locales/tr.json index 5e75028341..d5d7d18dc1 100644 --- a/Composer/packages/server/src/locales/tr.json +++ b/Composer/packages/server/src/locales/tr.json @@ -1446,7 +1446,7 @@ "message": "öğe eklendi" }, "itemcount_plural_0_no_schemas_1_one_schema_other_s_e1aea7f": { - "message": "{ itemCount, plural,\n = 0 {Sıfır şema}\n =1 {Bir şema}\n other {# şema}\n} bulundu.\n { itemCount, select,\n 0 {}\n other {Arama sonuçlarında gezinmek için aşağı ok tuşuna basın}\n}" + "message": "{ itemCount, plural,\n =0 {Sıfır şema}\n =1 {Bir şema}\n other {# şema}\n} bulundu.\n { itemCount, select,\n 0 {}\n other {Arama sonuçlarında gezinmek için aşağı ok tuşuna basın}\n}" }, "jan_28_2020_8beb36dc": { "message": "28 Oca 2020" diff --git a/Composer/scripts/l10n-extractJson.js b/Composer/scripts/l10n-extractJson.js index 8bfc107e46..9b34285c31 100644 --- a/Composer/scripts/l10n-extractJson.js +++ b/Composer/scripts/l10n-extractJson.js @@ -5,8 +5,6 @@ const fs = require('fs'); const path = require('path'); -const merge = require('lodash/merge'); - const { keep, transFn } = require('./l10nUtils'); const L10N_FIELDS = ['label', 'description', 'title', 'subtitle']; diff --git a/Composer/scripts/l10nCheck.js b/Composer/scripts/l10nCheck.js new file mode 100644 index 0000000000..12d4b1ab74 --- /dev/null +++ b/Composer/scripts/l10nCheck.js @@ -0,0 +1,37 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +/* eslint-disable @typescript-eslint/no-var-requires */ +/* eslint-disable security/detect-non-literal-fs-filename */ + +const fs = require('fs'); +const path = require('path'); + +const localePath = 'packages/server/src/locales'; + +let errorCount = 0; + +const dir = fs.opendirSync(localePath); +for (;;) { + const dirent = dir.readSync(); + if (dirent == null) break; + const data = fs.readFileSync(path.join(localePath, dirent.name)); + const json = JSON.parse(data); + for (const [key, val] of Object.entries(json)) { + const msg = val.message; + const src = `${dirent.name} at ${key}:`; + if (/=\s[01]/.exec(msg)) { + console.log(src, `whitespace between 0/1 and =`); + errorCount += 1; + } + if (/=[01]/.exec(msg) && !/other/.exec(msg)) { + console.log(src, `missing 'other' clause`); + errorCount += 1; + } + if (/[^'{}]'[^'{}]/.exec(msg)) { + console.log(src, `single quote between letters`); + errorCount += 1; + } + } +} + +process.exit(errorCount); From 086cdf6b6009d52f9d586949d7c3003ceb92a75f Mon Sep 17 00:00:00 2001 From: Ben Yackley <61990921+beyackle@users.noreply.github.com> Date: Thu, 14 Jan 2021 10:13:21 -0800 Subject: [PATCH 2/3] Update l10nCheck.js --- Composer/scripts/l10nCheck.js | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/Composer/scripts/l10nCheck.js b/Composer/scripts/l10nCheck.js index 12d4b1ab74..44dbdef566 100644 --- a/Composer/scripts/l10nCheck.js +++ b/Composer/scripts/l10nCheck.js @@ -19,13 +19,16 @@ for (;;) { for (const [key, val] of Object.entries(json)) { const msg = val.message; const src = `${dirent.name} at ${key}:`; - if (/=\s[01]/.exec(msg)) { - console.log(src, `whitespace between 0/1 and =`); - errorCount += 1; - } - if (/=[01]/.exec(msg) && !/other/.exec(msg)) { - console.log(src, `missing 'other' clause`); - errorCount += 1; + if (/\{.*plural.*}/.exec(msg)) { + // if we're in a "plural" rules section... + if (/=\s+\d+/.exec(msg)) { + console.log(src, `whitespace between number and =`); + errorCount += 1; + } + if (/=\d+/.exec(msg) && !/other/.exec(msg)) { + console.log(src, `missing 'other' clause`); + errorCount += 1; + } } if (/[^'{}]'[^'{}]/.exec(msg)) { console.log(src, `single quote between letters`); From 749d104716651257f020d0a50496dc2f370fddf3 Mon Sep 17 00:00:00 2001 From: Ben Yackley <61990921+beyackle@users.noreply.github.com> Date: Thu, 14 Jan 2021 10:32:36 -0800 Subject: [PATCH 3/3] Update fr.json --- Composer/packages/server/src/locales/fr.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Composer/packages/server/src/locales/fr.json b/Composer/packages/server/src/locales/fr.json index f88b568d9d..6e2f106818 100644 --- a/Composer/packages/server/src/locales/fr.json +++ b/Composer/packages/server/src/locales/fr.json @@ -903,7 +903,7 @@ "message": "DialogFactory a un schéma manquant." }, "dialognum_plural_0_no_bots_1_one_bot_other_bots_ha_1cf10787": { - "message": "{ dialogNum, plural,\n =0 {Aucun bot}\n =1 {Un bot}\n other {nombre de bots}\n}.\n { dialogNum, select,\n 0 {}\n other {Appuyer sur la flèche bas pour naviguer dans les résultats de recherche}\n}" + "message": "{ dialogNum, plural,\n =0 {Aucun bot}\n =1 {Un bot}\n other {# bots}\n}.\n { dialogNum, select,\n 0 {}\n other {Appuyer sur la flèche bas pour naviguer dans les résultats de recherche}\n}" }, "disable_a5c05db3": { "message": "Désactiver" @@ -1446,7 +1446,7 @@ "message": "élément ajouté" }, "itemcount_plural_0_no_schemas_1_one_schema_other_s_e1aea7f": { - "message": "{ itemCount, plural,\n =0 {aucun schéma}\n =1 {un schéma}\n other {nombre de schémas}\n}.\n { itemCount, select,\n 0 {}\n autre {Appuyez sur la flèche bas pour naviguer dans les résultats de recherche}\n}" + "message": "{ itemCount, plural,\n =0 {aucun schéma}\n =1 {un schéma}\n other {# schémas}\n}.\n { itemCount, select,\n 0 {}\n autre {Appuyez sur la flèche bas pour naviguer dans les résultats de recherche}\n}" }, "jan_28_2020_8beb36dc": { "message": "28 jan. 2020"