From 17a46f9687ea25577646f69fbeeae512c657cc14 Mon Sep 17 00:00:00 2001 From: Xianming Zhong Date: Sun, 15 Oct 2017 12:41:49 +0800 Subject: [PATCH 1/7] fix(trans): Make all translations contain same fields --- src/locale/languages/de.js | 3 +++ src/locale/languages/eo.js | 23 +++++++++++++++-------- src/locale/languages/fr.js | 9 +++++++-- src/locale/languages/nl.js | 5 +++++ src/locale/languages/pl.js | 7 +++++++ src/locale/languages/pt-br.js | 3 +++ src/locale/languages/pt.js | 6 ++++++ src/locale/languages/ru.js | 15 ++++++++++----- src/locale/languages/tr.js | 3 +++ 9 files changed, 59 insertions(+), 15 deletions(-) diff --git a/src/locale/languages/de.js b/src/locale/languages/de.js index 5a7d91d3c..24f7ee7e0 100644 --- a/src/locale/languages/de.js +++ b/src/locale/languages/de.js @@ -243,6 +243,7 @@ export const de = { membersTitle: 'MITGLIEDER', descriptionTitle: 'BESCHREIBUNG', }, + organizationActions: 'Organization Actions', }, issue: { settings: { @@ -287,6 +288,7 @@ export const de = { openIssueSubTitle: '#{{number}} wude vor {{time}} von {{user}} geöffnet', closedIssueSubTitle: '#{{number}} von {{user}} wurde vor {{time}} geschlossen', + issueActions: 'Issue Actions', }, newIssue: { title: 'Neues Issue', @@ -343,5 +345,6 @@ export const de = { abbreviations: { thousand: 't', }, + openInBrowser: 'Open in Browser', }, }; diff --git a/src/locale/languages/eo.js b/src/locale/languages/eo.js index a104226e8..1626f18c0 100644 --- a/src/locale/languages/eo.js +++ b/src/locale/languages/eo.js @@ -22,7 +22,7 @@ export const eo = { }, events: { welcomeMessage: - "Bonvenon! Ĉi tio estas via novaĵ-manĝaĵo - ĝi helpos vin resti kun freŝa agado en repositorioj, kiujn vi rigardas kaj homoj, kiujn vi sekvas.", + 'Bonvenon! Ĉi tio estas via novaĵ-manĝaĵo - ĝi helpos vin resti kun freŝa agado en repositorioj, kiujn vi rigardas kaj homoj, kiujn vi sekvas.', commitCommentEvent: 'komentis fari', createEvent: 'kreita {{object}}', deleteEvent: 'forigita {{object}}', @@ -80,7 +80,7 @@ export const eo = { }, }, profile: { - orgsRequestApprovalTop: "Ĉu vi ne povas vidi ĉiujn viajn organizojn?", + orgsRequestApprovalTop: 'Ĉu vi ne povas vidi ĉiujn viajn organizojn?', orgsRequestApprovalBottom: 'Vi eble devas peti aprobon por ili.', codePushCheck: 'Kontrolu por ĝisdatigo', codePushChecking: 'Kontroli por ĝisdatigo...', @@ -99,17 +99,17 @@ export const eo = { title: 'Privateca Politiko', effectiveDate: 'Lasta ĝisdatigita: July 15, 2017', introduction: - "Ni ĝojas, ke vi decidis uzi GitPoint. Ĉi tiu Privateca Politiko estas ĉi tie por informi vin pri tio, kion ni faros - kaj ne fari - kun la datumoj de nia uzanto.", + 'Ni ĝojas, ke vi decidis uzi GitPoint. Ĉi tiu Privateca Politiko estas ĉi tie por informi vin pri tio, kion ni faros - kaj ne fari - kun la datumoj de nia uzanto.', userDataTitle: 'UZANTO-DATUMOJ', userData1: - "Ni nenion faras kun via GitHub-informo. Post aŭtentikigado, la uzanto OAuth token estas persistita rekte sur ilia aparato-stokado. Ne eblas rekuperi tiun informon. Ni neniam vidos aliron al la uzanto token nek stokas ĝin.", + 'Ni nenion faras kun via GitHub-informo. Post aŭtentikigado, la uzanto OAuth token estas persistita rekte sur ilia aparato-stokado. Ne eblas rekuperi tiun informon. Ni neniam vidos aliron al la uzanto token nek stokas ĝin.', userData2: - "Ĉi tio signifas, ke en neniu maniero, formo aŭ formo ni iam ajn vidos, uzas aŭ dividas datumojn de GitHub de uzanto. Se privataj datumoj iam ajn videblas en iu ajn punkto, ni ne registros aŭ vidos ĝin. Se ĝi hazarde registriĝas, ni forigos ĝin tuj uzante sekurajn viŝajn metodojn. Denove, ni starigis aŭtentike specife por ke ĉi tio neniam okazas.", + 'Ĉi tio signifas, ke en neniu maniero, formo aŭ formo ni iam ajn vidos, uzas aŭ dividas datumojn de GitHub de uzanto. Se privataj datumoj iam ajn videblas en iu ajn punkto, ni ne registros aŭ vidos ĝin. Se ĝi hazarde registriĝas, ni forigos ĝin tuj uzante sekurajn viŝajn metodojn. Denove, ni starigis aŭtentike specife por ke ĉi tio neniam okazas.', analyticsInfoTitle: 'ANALIKA INFORMO', analyticsInfo1: 'Ni nuntempe uzas Google Analytics kaj iTunes App Analytics por helpi nin mezuri trafikojn kaj uzadajn tendencojn por la GitPoint. Ĉi tiuj iloj kolektas informojn senditajn de via aparato, inkluzive de mekanismo kaj platforma versio, regiono kaj referinto. Ĉi tiu informo ne povas esti prudente uzata por identigi ajnan individuan uzanton kaj neniun personan informon ĉerpas.', analyticsInfo2: - "Se ni pasos por inkludi alian trian platformon por kolekti stakajn spurojn, erarojn-registrojn aŭ pli da analizaj informoj, ni certiĝos, ke uzantoj de datumoj restas senvaloraj kaj ĉifritaj.", + 'Se ni pasos por inkludi alian trian platformon por kolekti stakajn spurojn, erarojn-registrojn aŭ pli da analizaj informoj, ni certiĝos, ke uzantoj de datumoj restas senvaloraj kaj ĉifritaj.', openSourceTitle: 'MALFERMA FONTO', openSource1: 'GitPoint estas malferma fonto kaj la historio de kontribuoj al la platformo ĉiam estos videbla al la publiko.', @@ -132,7 +132,7 @@ export const eo = { participatingButton: 'Partoprenanta', allButton: 'Ĉio', retrievingMessage: 'Ricevanta sciigojn', - noneMessage: "Vi ne havas iujn sciigojn pri ĉi tiu tipo", + noneMessage: 'Vi ne havas iujn sciigojn pri ĉi tiu tipo', markAllAsRead: 'Marki ĉion kiel legita', }, }, @@ -226,12 +226,17 @@ export const eo = { deleted: 'DIVITA', fileRenamed: 'Dosiero renomita sen ia ajn ŝanĝo', }, + readMe: { + readMeActions: 'README Actions', + noReadMeFound: 'No README.md found', + }, }, organization: { main: { membersTitle: 'Membroj', descriptionTitle: 'PRISKRIBO', }, + organizationActions: 'Organization Actions', }, issue: { settings: { @@ -275,6 +280,7 @@ export const eo = { }, openIssueSubTitle: '# {{number}} malfermis {{time}} ago per {{user}}', closedIssueSubTitle: '# {{number}} per {{user}} estis fermita {{time}} ago', + issueActions: 'Issue Actions', }, newIssue: { title: 'New Issue', @@ -294,7 +300,7 @@ export const eo = { commitTitle: 'Komerca Titolo', writeATitle: 'Skribu titolon por via kompromiso ĉi tie', commitMessage: 'Komitato Mesaĝo', - writeAMessage: "Skribu mesaĝon por via kompromiso ĉi tie", + writeAMessage: 'Skribu mesaĝon por via kompromiso ĉi tie', mergeType: 'Kombini Tipo', changeMergeType: 'Ŝanĝi Kombini Tipo', }, @@ -331,5 +337,6 @@ export const eo = { abbreviations: { thousand: 'k', }, + openInBrowser: 'Open in Browser', }, }; diff --git a/src/locale/languages/fr.js b/src/locale/languages/fr.js index 1a6620378..3af74793f 100644 --- a/src/locale/languages/fr.js +++ b/src/locale/languages/fr.js @@ -149,6 +149,8 @@ export const fr = { searchMessage: 'Recherche de tout {{type}}', repository: 'dépôt', user: 'utilisateur', + noUsersFound: 'No users found :(', + noRepositoriesFound: 'No repositories found :(', }, }, user: { @@ -199,6 +201,9 @@ export const fr = { starsTitle: 'Favoris', forksTitle: 'Forks', forkedFromMessage: 'forké depuis', + starred: 'Starred', + watching: 'Watching', + watchers: 'Watchers', }, codeList: { title: 'Code', @@ -216,8 +221,8 @@ export const fr = { openButton: 'Ouvert', closedButton: 'Fermé', searchingMessage: 'Recherche de {{query}}', - noOpenIssues: 'Aucun pull request ouvert trouvé !', - noClosedIssues: 'Aucun pull request fermé trouvé !', + noOpenPulls: 'Aucun pull request ouvert trouvé !', + noClosedPulls: 'Aucun pull request fermé trouvé !', }, pullDiff: { title: 'Diff', diff --git a/src/locale/languages/nl.js b/src/locale/languages/nl.js index 84dce1385..124ccb79f 100644 --- a/src/locale/languages/nl.js +++ b/src/locale/languages/nl.js @@ -145,6 +145,8 @@ export const nl = { searchMessage: 'Zoeken naar {{type}}', repository: 'repository', user: 'gebruiker', + noUsersFound: 'No users found :(', + noRepositoriesFound: 'No repositories found :(', }, }, user: { @@ -195,6 +197,9 @@ export const nl = { starsTitle: 'Sterren', forksTitle: 'Forks', forkedFromMessage: 'forked from', + starred: 'Starred', + watching: 'Watching', + watchers: 'Watchers', }, codeList: { title: 'Code', diff --git a/src/locale/languages/pl.js b/src/locale/languages/pl.js index bed10a0c6..0196cc614 100644 --- a/src/locale/languages/pl.js +++ b/src/locale/languages/pl.js @@ -229,12 +229,17 @@ export const pl = { deleted: 'USUNIĘTY', fileRenamed: 'Nazwa pliku zmieniona bez innych zmian', }, + readMe: { + readMeActions: 'README Actions', + noReadMeFound: 'No README.md found', + }, }, organization: { main: { membersTitle: 'CZŁONKOWIE', descriptionTitle: 'OPIS', }, + organizationActions: 'Organization Actions', }, issue: { settings: { @@ -279,6 +284,7 @@ export const pl = { openIssueSubTitle: '#{{number}} otworzony {{time}} temu przez {{user}}', closedIssueSubTitle: '#{{number}} użytkownika {{user}} został zamknięty {{time}} temu', + issueActions: 'Issue Actions', }, newIssue: { title: 'Nowy Problem', @@ -335,5 +341,6 @@ export const pl = { abbreviations: { thousand: 'ts', }, + openInBrowser: 'Open in Browser', }, }; diff --git a/src/locale/languages/pt-br.js b/src/locale/languages/pt-br.js index caab686b9..529225f38 100644 --- a/src/locale/languages/pt-br.js +++ b/src/locale/languages/pt-br.js @@ -334,6 +334,9 @@ export const ptBr = { y: '%dy', yy: '%dy', }, + abbreviations: { + thousand: 'k', + }, openInBrowser: 'Abrir no Navegador.', }, }; diff --git a/src/locale/languages/pt.js b/src/locale/languages/pt.js index 203437220..1ec9f6551 100644 --- a/src/locale/languages/pt.js +++ b/src/locale/languages/pt.js @@ -238,6 +238,7 @@ export const pt = { membersTitle: 'MEMBROS', descriptionTitle: 'DESCRIÇÃO', }, + organizationActions: 'Organization Actions', }, issue: { settings: { @@ -281,6 +282,7 @@ export const pt = { }, openIssueSubTitle: '#{{number}} aberta em {{time}} por {{user}}', closedIssueSubTitle: '#{{number}} de {{user}} foi fechada em {{time}} ', + issueActions: 'Issue Actions', }, newIssue: { title: 'Nova Issue', @@ -334,5 +336,9 @@ export const pt = { y: '%dy', yy: '%dy', }, + abbreviations: { + thousand: 'k', + }, + openInBrowser: 'Open in Browser', }, }; diff --git a/src/locale/languages/ru.js b/src/locale/languages/ru.js index c7b7b0d83..c0a033844 100644 --- a/src/locale/languages/ru.js +++ b/src/locale/languages/ru.js @@ -147,6 +147,8 @@ export const ru = { searchMessage: 'Поиск {{type}}', repository: 'репозиториев', user: 'пользователей', + noUsersFound: 'No users found :(', + noRepositoriesFound: 'No repositories found :(', }, }, user: { @@ -217,8 +219,8 @@ export const ru = { openButton: 'Открыто', closedButton: 'Закрыто', searchingMessage: 'Поиск по {{query}}', - noOpenIssues: 'Не найдено открытых pull-запросов!', - noClosedIssues: 'Не найдено закрытых pull-запросов!', + noOpenPulls: 'Не найдено открытых pull-запросов!', + noClosedPulls: 'Не найдено закрытых pull-запросов!', }, pullDiff: { title: 'Сравнить изменения', @@ -257,6 +259,12 @@ export const ru = { areYouSurePrompt: 'Вы уверены?', applyLabelTitle: 'Добавить ярлык к этой задаче', }, + comment: { + commentActions: 'Comment Actions', + editCommentTitle: 'Edit Comment', + editAction: 'Edit', + deleteAction: 'Delete', + }, main: { assignees: 'Ответственные', mergeButton: 'Принять pull-запрос', @@ -264,7 +272,6 @@ export const ru = { lockedCommentInput: 'Заблокировано, но вы все ещё можете прокомментировать...', commentInput: 'Добавить комментарий...', - commentButton: 'Отправить', lockedIssue: 'Задача заблокирована', states: { open: 'Открыто', @@ -315,8 +322,6 @@ export const ru = { email: 'Электронная почта', website: 'Сайт', repositories: 'Репозиториев', - pullRequest: 'pull-запрос', - issue: 'задача', cancel: 'Отменить', yes: 'Да', ok: 'OK', diff --git a/src/locale/languages/tr.js b/src/locale/languages/tr.js index 1cca8fa88..10e2f72d9 100644 --- a/src/locale/languages/tr.js +++ b/src/locale/languages/tr.js @@ -145,6 +145,8 @@ export const tr = { searchMessage: 'Herhangi bir {{type}} ara', repository: 'repository', user: 'kullanıcı', + noUsersFound: 'No users found :(', + noRepositoriesFound: 'No repositories found :(', }, }, user: { @@ -198,6 +200,7 @@ export const tr = { forkedFromMessage: 'buradan fork edildi:', starred: 'Starred', watching: 'İzleniyor', + watchers: 'Watchers', }, codeList: { title: 'Code', From 66b32289515e3b543fbeb5dd5b319fea55f2bb5d Mon Sep 17 00:00:00 2001 From: Xianming Zhong Date: Sun, 15 Oct 2017 15:28:40 +0800 Subject: [PATCH 2/7] feat(test): Integrate locales check to travis ci --- .travis.yml | 1 + __tests__/locales.test.js | 75 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 __tests__/locales.test.js diff --git a/.travis.yml b/.travis.yml index c425b6d8f..d22e12f45 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,3 +9,4 @@ before_script: - 'yarn' script: - yarn run eslint + - node __tests__/locales.test.js diff --git a/__tests__/locales.test.js b/__tests__/locales.test.js new file mode 100644 index 000000000..5785ad1d6 --- /dev/null +++ b/__tests__/locales.test.js @@ -0,0 +1,75 @@ +const fs = require('fs'); +const path = require('path'); +const localeDir = './src/locale/languages'; + +/** + * Compare fields between two parameters + * + * @param {object|string} a - left parameter + * @param {object|string} b - right parameter + * @param {string} keypath - key path for tracking errors + * @return {array} error message array + */ +function compareFields(a, b, keypath = '') { + if (!a) return [`${keypath}: lacks in the left`]; + if (!b) return [`${keypath}: lacks in the right`]; + if (typeof a === 'string' && typeof b === 'string') return []; + + const ka = Object.keys(a); + const kb = Object.keys(b); + + if (ka.length !== kb.length) return [`${keypath}: different keys count, left=${ka.length}, right=${kb.length}`]; + + return ka.reduce((arr, key) => { + const ret = compareFields(a[key], b[key], keypath ? `${keypath}.${key}` : key); + + return arr.concat(ret); + }, []); +} + +function getLocaleConfig(file) { + // because Node.js doesn't support export/import + const content = fs.readFileSync(file, { + encoding: 'utf-8', + }).replace(/export const \w+ =/, 'return'); + const fn = new Function(content); + + return fn(); +} + +function getLocales() { + const files = fs.readdirSync(localeDir); + + return files.filter(name => name !== 'index.js') + .map(name => { + return { + name: name.replace(/\.js$/, ''), + locale: getLocaleConfig(path.resolve(localeDir, name)), + }; + }); +} + +const locales = getLocales(); +const base = locales.find(item => item.name === 'en'); +let isOK = true; + +locales.forEach(item => { + if (item.name === base.name) return; + + console.log(`comparing ${base.name} with ${item.name}...`); + const msgs = compareFields(base.locale, item.locale); + + if (msgs.length) { + isOK = false; + msgs.forEach(msg => console.log(` ${msg}`)); + } else { + console.log('...ok'); + } +}); + +if (!isOK) { + console.error('...locales are not good.'); + process.exit(1); +} else { + console.log('...locales are good!'); +} From f53654d7dc927b99375514ab65906701fb89e50b Mon Sep 17 00:00:00 2001 From: Xianming Zhong Date: Sun, 15 Oct 2017 19:25:20 +0800 Subject: [PATCH 3/7] fix(trans): Update as real words for fr and tr --- src/locale/languages/fr.js | 10 +++++----- src/locale/languages/tr.js | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/locale/languages/fr.js b/src/locale/languages/fr.js index 3af74793f..e9ca9f563 100644 --- a/src/locale/languages/fr.js +++ b/src/locale/languages/fr.js @@ -149,8 +149,8 @@ export const fr = { searchMessage: 'Recherche de tout {{type}}', repository: 'dépôt', user: 'utilisateur', - noUsersFound: 'No users found :(', - noRepositoriesFound: 'No repositories found :(', + noUsersFound: 'Aucun utilisateur trouvé :(', + noRepositoriesFound: 'Aucun dépôt trouvé :(', }, }, user: { @@ -201,9 +201,9 @@ export const fr = { starsTitle: 'Favoris', forksTitle: 'Forks', forkedFromMessage: 'forké depuis', - starred: 'Starred', - watching: 'Watching', - watchers: 'Watchers', + starred: 'Favoris', + watching: 'Abonné', + watchers: 'Abonnés', }, codeList: { title: 'Code', diff --git a/src/locale/languages/tr.js b/src/locale/languages/tr.js index 10e2f72d9..a6f7d6227 100644 --- a/src/locale/languages/tr.js +++ b/src/locale/languages/tr.js @@ -145,8 +145,8 @@ export const tr = { searchMessage: 'Herhangi bir {{type}} ara', repository: 'repository', user: 'kullanıcı', - noUsersFound: 'No users found :(', - noRepositoriesFound: 'No repositories found :(', + noUsersFound: 'Kullanıcı Bulunamadı :(', + noRepositoriesFound: 'Repository Bulunamadı :(', }, }, user: { @@ -200,7 +200,7 @@ export const tr = { forkedFromMessage: 'buradan fork edildi:', starred: 'Starred', watching: 'İzleniyor', - watchers: 'Watchers', + watchers: 'İzleyenler', }, codeList: { title: 'Code', From 5b9ade2f6d34026645beaa6c333859b2b72c0d88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Fonseca?= Date: Sun, 15 Oct 2017 13:07:04 +0100 Subject: [PATCH 4/7] fix(trans): Update pt.js with the new strings --- src/locale/languages/pt.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/locale/languages/pt.js b/src/locale/languages/pt.js index 1ec9f6551..9d8cbf9a7 100644 --- a/src/locale/languages/pt.js +++ b/src/locale/languages/pt.js @@ -238,7 +238,7 @@ export const pt = { membersTitle: 'MEMBROS', descriptionTitle: 'DESCRIÇÃO', }, - organizationActions: 'Organization Actions', + organizationActions: 'Opções de Entidade', }, issue: { settings: { @@ -282,7 +282,7 @@ export const pt = { }, openIssueSubTitle: '#{{number}} aberta em {{time}} por {{user}}', closedIssueSubTitle: '#{{number}} de {{user}} foi fechada em {{time}} ', - issueActions: 'Issue Actions', + issueActions: 'Acções sobre Issues', }, newIssue: { title: 'Nova Issue', @@ -339,6 +339,6 @@ export const pt = { abbreviations: { thousand: 'k', }, - openInBrowser: 'Open in Browser', + openInBrowser: 'Abrir no Browser', }, }; From 11fb92d37531736a1edde4e1010b500c6c1cfabb Mon Sep 17 00:00:00 2001 From: Xianming Zhong Date: Sun, 15 Oct 2017 21:36:06 +0800 Subject: [PATCH 5/7] fix(trans): Update for ru --- src/locale/languages/ru.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/locale/languages/ru.js b/src/locale/languages/ru.js index c0a033844..d7fcbad46 100644 --- a/src/locale/languages/ru.js +++ b/src/locale/languages/ru.js @@ -147,8 +147,8 @@ export const ru = { searchMessage: 'Поиск {{type}}', repository: 'репозиториев', user: 'пользователей', - noUsersFound: 'No users found :(', - noRepositoriesFound: 'No repositories found :(', + noUsersFound: 'Пользователи не найдены :(', + noRepositoriesFound: 'Репозитории не найдены :(', }, }, user: { @@ -260,10 +260,10 @@ export const ru = { applyLabelTitle: 'Добавить ярлык к этой задаче', }, comment: { - commentActions: 'Comment Actions', - editCommentTitle: 'Edit Comment', - editAction: 'Edit', - deleteAction: 'Delete', + commentActions: 'Действия с комментарием', + editCommentTitle: 'Редактирование комментария', + editAction: 'Редактировать', + deleteAction: 'Удалить', }, main: { assignees: 'Ответственные', From 77e06d1cc6a2c5414509374d5cb83f68c579ea70 Mon Sep 17 00:00:00 2001 From: Xianming Zhong Date: Mon, 16 Oct 2017 14:35:44 +0800 Subject: [PATCH 6/7] fix(trans): Update for de --- src/locale/languages/de.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/locale/languages/de.js b/src/locale/languages/de.js index 24f7ee7e0..c0cf6f70a 100644 --- a/src/locale/languages/de.js +++ b/src/locale/languages/de.js @@ -243,7 +243,7 @@ export const de = { membersTitle: 'MITGLIEDER', descriptionTitle: 'BESCHREIBUNG', }, - organizationActions: 'Organization Actions', + organizationActions: 'Organisation Aktionen', }, issue: { settings: { @@ -288,7 +288,7 @@ export const de = { openIssueSubTitle: '#{{number}} wude vor {{time}} von {{user}} geöffnet', closedIssueSubTitle: '#{{number}} von {{user}} wurde vor {{time}} geschlossen', - issueActions: 'Issue Actions', + issueActions: 'Issue Aktionen', }, newIssue: { title: 'Neues Issue', @@ -345,6 +345,6 @@ export const de = { abbreviations: { thousand: 't', }, - openInBrowser: 'Open in Browser', + openInBrowser: 'In Browser öffnen', }, }; From 50ef0bd7c03bb3511f6effb16a2735ab95e72b63 Mon Sep 17 00:00:00 2001 From: Xianming Zhong Date: Fri, 20 Oct 2017 10:42:09 +0800 Subject: [PATCH 7/7] Revert "feat(test): Integrate locales check to travis ci" This reverts commit 66b32289515e3b543fbeb5dd5b319fea55f2bb5d. --- .travis.yml | 1 - __tests__/locales.test.js | 75 --------------------------------------- 2 files changed, 76 deletions(-) delete mode 100644 __tests__/locales.test.js diff --git a/.travis.yml b/.travis.yml index d22e12f45..c425b6d8f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,4 +9,3 @@ before_script: - 'yarn' script: - yarn run eslint - - node __tests__/locales.test.js diff --git a/__tests__/locales.test.js b/__tests__/locales.test.js deleted file mode 100644 index 5785ad1d6..000000000 --- a/__tests__/locales.test.js +++ /dev/null @@ -1,75 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -const localeDir = './src/locale/languages'; - -/** - * Compare fields between two parameters - * - * @param {object|string} a - left parameter - * @param {object|string} b - right parameter - * @param {string} keypath - key path for tracking errors - * @return {array} error message array - */ -function compareFields(a, b, keypath = '') { - if (!a) return [`${keypath}: lacks in the left`]; - if (!b) return [`${keypath}: lacks in the right`]; - if (typeof a === 'string' && typeof b === 'string') return []; - - const ka = Object.keys(a); - const kb = Object.keys(b); - - if (ka.length !== kb.length) return [`${keypath}: different keys count, left=${ka.length}, right=${kb.length}`]; - - return ka.reduce((arr, key) => { - const ret = compareFields(a[key], b[key], keypath ? `${keypath}.${key}` : key); - - return arr.concat(ret); - }, []); -} - -function getLocaleConfig(file) { - // because Node.js doesn't support export/import - const content = fs.readFileSync(file, { - encoding: 'utf-8', - }).replace(/export const \w+ =/, 'return'); - const fn = new Function(content); - - return fn(); -} - -function getLocales() { - const files = fs.readdirSync(localeDir); - - return files.filter(name => name !== 'index.js') - .map(name => { - return { - name: name.replace(/\.js$/, ''), - locale: getLocaleConfig(path.resolve(localeDir, name)), - }; - }); -} - -const locales = getLocales(); -const base = locales.find(item => item.name === 'en'); -let isOK = true; - -locales.forEach(item => { - if (item.name === base.name) return; - - console.log(`comparing ${base.name} with ${item.name}...`); - const msgs = compareFields(base.locale, item.locale); - - if (msgs.length) { - isOK = false; - msgs.forEach(msg => console.log(` ${msg}`)); - } else { - console.log('...ok'); - } -}); - -if (!isOK) { - console.error('...locales are not good.'); - process.exit(1); -} else { - console.log('...locales are good!'); -}