diff --git a/web/app/dev-only/i18n-checker/page.tsx b/web/app/dev-only/i18n-checker/page.tsx deleted file mode 100644 index 7341c153c..000000000 --- a/web/app/dev-only/i18n-checker/page.tsx +++ /dev/null @@ -1,175 +0,0 @@ -'use client' -import { loadLangResources } from '@/i18n-config/i18next-config' -import { useCallback, useEffect, useState } from 'react' -import cn from '@/utils/classnames' -import { LanguagesSupported } from '@/i18n-config/language' - -export default function I18nTest() { - const [langs, setLangs] = useState([]) - - const getLangs = useCallback(async () => { - const langs = await genLangs() - setLangs(langs) - }, []) - - useEffect(() => { - getLangs() - }, []) - - return ( -
- -
-

Summary

- - - - - - - - - - - - - {langs.map(({ locale, count, missing, extra }, idx) => - - - - - - )} - -
- # - - lang - - count - - missing - - extra -
{idx}{locale}{count}{missing.length}{extra.length}
-
- -

Details

- - - - - - - - - - - - - {langs.map(({ locale, missing, extra }, idx) => { - return ( - - - - - - ) - })} - -
- # - - lang - - missing - - extra -
{idx}{locale} -
    - {missing.map(key => ( -
  • {key}
  • - ))} -
-
-
    - {extra.map(key => ( -
  • {key}
  • - ))} -
-
- -
- ) -} - -async function genLangs() { - const langs_: Lang[] = [] - let en!: Lang - - const resources: Record = {} - // Initialize empty resource object - for (const lang of LanguagesSupported) - resources[lang] = await loadLangResources(lang) - - for (const [key, value] of Object.entries(resources)) { - const keys = getNestedKeys(value.translation) - const lang: Lang = { - locale: key, - keys: new Set(keys), - count: keys.length, - missing: [], - extra: [], - } - - langs_.push(lang) - if (key === 'en-US') en = lang - } - - for (const lang of langs_) { - const missing: string[] = [] - const extra: string[] = [] - - for (const key of lang.keys) - if (!en.keys.has(key)) extra.push(key) - - for (const key of en.keys) - if (!lang.keys.has(key)) missing.push(key) - - lang.missing = missing - lang.extra = extra - } - return langs_ -} - -function getNestedKeys(translation: Record): string[] { - const nestedKeys: string[] = [] - const iterateKeys = (obj: Record, prefix = '') => { - for (const key in obj) { - const nestedKey = prefix ? `${prefix}.${key}` : key - // nestedKeys.push(nestedKey); - if (typeof obj[key] === 'object') iterateKeys(obj[key], nestedKey) - else if (typeof obj[key] === 'string') nestedKeys.push(nestedKey) - } - } - iterateKeys(translation) - return nestedKeys -} - -type Lang = { - locale: string; - keys: Set; - count: number; - missing: string[]; - extra: string[]; -} diff --git a/web/app/dev-only/layout.tsx b/web/app/dev-only/layout.tsx deleted file mode 100644 index d8bcc5e67..000000000 --- a/web/app/dev-only/layout.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import type React from 'react' -import { notFound } from 'next/navigation' - -export default async function Layout({ children }: React.PropsWithChildren) { - if (process.env.NODE_ENV !== 'development') - notFound() - - return children -} diff --git a/web/app/dev-preview/page.tsx b/web/app/dev-preview/page.tsx deleted file mode 100644 index 69464d612..000000000 --- a/web/app/dev-preview/page.tsx +++ /dev/null @@ -1,11 +0,0 @@ -'use client' - -import DemoForm from '../components/base/form/form-scenarios/demo' - -export default function Page() { - return ( -
- -
- ) -} diff --git a/web/i18n-config/auto-gen-i18n.js b/web/i18n-config/auto-gen-i18n.js index fa7500e87..cfdd7fb96 100644 --- a/web/i18n-config/auto-gen-i18n.js +++ b/web/i18n-config/auto-gen-i18n.js @@ -8,6 +8,7 @@ const { translate } = bingTranslate const data = require('./languages.json') const targetLanguage = 'en-US' +const i18nFolder = '../i18n' // Path to i18n folder relative to this script // https://github.com/plainheart/bing-translate-api/blob/master/src/met/lang.json const languageKeyMap = data.languages.reduce((map, language) => { if (language.supported) { @@ -52,10 +53,9 @@ async function translateMissingKeyDeeply(sourceObj, targetObject, toLanguage) { } })) } - async function autoGenTrans(fileName, toGenLanguage) { - const fullKeyFilePath = path.join(__dirname, targetLanguage, `${fileName}.ts`) - const toGenLanguageFilePath = path.join(__dirname, toGenLanguage, `${fileName}.ts`) + const fullKeyFilePath = path.join(__dirname, i18nFolder, targetLanguage, `${fileName}.ts`) + const toGenLanguageFilePath = path.join(__dirname, i18nFolder, toGenLanguage, `${fileName}.ts`) // eslint-disable-next-line sonarjs/code-eval const fullKeyContent = eval(transpile(fs.readFileSync(fullKeyFilePath, 'utf8'))) // if toGenLanguageFilePath is not exist, create it @@ -87,9 +87,8 @@ async function main() { // Promise.all(Object.keys(languageKeyMap).map(async (toLanguage) => { // await autoGenTrans(fileName, toLanguage) // })) - const files = fs - .readdirSync(path.join(__dirname, targetLanguage)) + .readdirSync(path.join(__dirname, i18nFolder, targetLanguage)) .map(file => file.replace(/\.ts/, '')) .filter(f => f !== 'app-debug') // ast parse error in app-debug diff --git a/web/i18n-config/check-i18n.js b/web/i18n-config/check-i18n.js index 5f4414c7a..c169e5500 100644 --- a/web/i18n-config/check-i18n.js +++ b/web/i18n-config/check-i18n.js @@ -8,7 +8,7 @@ const languages = data.languages.filter(language => language.supported).map(lang async function getKeysFromLanuage(language) { return new Promise((resolve, reject) => { - const folderPath = path.join(__dirname, language) + const folderPath = path.join(__dirname, '../i18n', language) let allKeys = [] fs.readdir(folderPath, (err, files) => { if (err) { diff --git a/web/package.json b/web/package.json index 57cb3d626..d93788a36 100644 --- a/web/package.json +++ b/web/package.json @@ -30,8 +30,8 @@ "prepare": "cd ../ && node -e \"if (process.env.NODE_ENV !== 'production'){process.exit(1)} \" || husky ./web/.husky", "gen-icons": "node ./app/components/base/icons/script.mjs", "uglify-embed": "node ./bin/uglify-embed", - "check-i18n": "node ./i18n/check-i18n.js", - "auto-gen-i18n": "node ./i18n/auto-gen-i18n.js", + "check-i18n": "node ./i18n-config/check-i18n.js", + "auto-gen-i18n": "node ./i18n-config/auto-gen-i18n.js", "test": "jest", "test:watch": "jest --watch", "storybook": "storybook dev -p 6006", @@ -270,4 +270,4 @@ "which-typed-array": "npm:@nolyfill/which-typed-array@^1" } } -} \ No newline at end of file +}