diff --git a/package.json b/package.json index fc2c7aae..08a5b471 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "dev": "cross-env PLATFORM=windows vite serve src", "dev-linux": "cross-env PLATFORM=linux vite serve src", "dev:test": "concurrently \"npm run dev\" \"jest --watchAll\"", - "localization": "node ./src/localization/localizationHelperCLI.js", + "localization": "node ./src/shared/utils/localizationHelperCLI.js", "test": "jest", "test:coverage": "jest --coverage", "prod": "cross-env PLATFORM=windows vite build src", diff --git a/src/localization/cs/en.json b/src/localization/cs.json similarity index 100% rename from src/localization/cs/en.json rename to src/localization/cs.json diff --git a/src/localization/en/en.json b/src/localization/en.json similarity index 100% rename from src/localization/en/en.json rename to src/localization/en.json diff --git a/src/localization/es/en.json b/src/localization/es.json similarity index 100% rename from src/localization/es/en.json rename to src/localization/es.json diff --git a/src/localization/fr/en.json b/src/localization/fr.json similarity index 100% rename from src/localization/fr/en.json rename to src/localization/fr.json diff --git a/src/localization/hu/en.json b/src/localization/hu.json similarity index 100% rename from src/localization/hu/en.json rename to src/localization/hu.json diff --git a/src/localization/index.js b/src/localization/index.js new file mode 100644 index 00000000..e604259c --- /dev/null +++ b/src/localization/index.js @@ -0,0 +1,37 @@ +const langCodes = [ + 'cs', + 'en', + 'es', + 'fr', + 'hu', + 'ja', + 'ko', + 'pl', + 'pt', + 'ru', + 'th', + 'vi', + 'zh-CN', + 'zh-TW' +]; + +async function getLocalizationStrings() { + const urlPromises = Promise.all( + langCodes.map((code) => + import(`./${code}.json?url`).then((m) => m.default) + ) + ); + + const urls = await urlPromises; + const fetchPromises = Promise.all( + urls.map((url) => fetch(url).then((res) => res.json())) + ); + const results = await fetchPromises; + const entries = langCodes.map((code, index) => { + return [code, results[index]]; + }); + + return Object.fromEntries(entries); +} + +export { getLocalizationStrings }; diff --git a/src/localization/ja/en.json b/src/localization/ja.json similarity index 100% rename from src/localization/ja/en.json rename to src/localization/ja.json diff --git a/src/localization/ko/en.json b/src/localization/ko.json similarity index 100% rename from src/localization/ko/en.json rename to src/localization/ko.json diff --git a/src/localization/localizedStrings.js b/src/localization/localizedStrings.js deleted file mode 100644 index 5c9a1a50..00000000 --- a/src/localization/localizedStrings.js +++ /dev/null @@ -1,44 +0,0 @@ -import en from './en/en.json' assert { type: 'JSON' }; - -import es from './es/en.json' assert { type: 'JSON' }; - -import fr from './fr/en.json' assert { type: 'JSON' }; - -import hu from './hu/en.json' assert { type: 'JSON' }; - -import ja from './ja/en.json' assert { type: 'JSON' }; - -import ko from './ko/en.json' assert { type: 'JSON' }; - -import pl from './pl/en.json' assert { type: 'JSON' }; - -import pt from './pt/en.json' assert { type: 'JSON' }; - -import cs from './cs/en.json' assert { type: 'JSON' }; - -import ru from './ru/en.json' assert { type: 'JSON' }; - -import vi from './vi/en.json' assert { type: 'JSON' }; - -import zh_CN from './zh-CN/en.json' assert { type: 'JSON' }; - -import zh_TW from './zh-TW/en.json' assert { type: 'JSON' }; - -import th from './th/en.json' assert { type: 'JSON' }; - -export { - en, - es, - fr, - hu, - ja, - ko, - pl, - pt, - cs, - ru, - vi, - zh_CN, - zh_TW, - th -}; diff --git a/src/localization/pl/en.json b/src/localization/pl.json similarity index 100% rename from src/localization/pl/en.json rename to src/localization/pl.json diff --git a/src/localization/pt/en.json b/src/localization/pt.json similarity index 100% rename from src/localization/pt/en.json rename to src/localization/pt.json diff --git a/src/localization/ru/en.json b/src/localization/ru.json similarity index 100% rename from src/localization/ru/en.json rename to src/localization/ru.json diff --git a/src/localization/th/en.json b/src/localization/th.json similarity index 100% rename from src/localization/th/en.json rename to src/localization/th.json diff --git a/src/localization/vi/en.json b/src/localization/vi.json similarity index 100% rename from src/localization/vi/en.json rename to src/localization/vi.json diff --git a/src/localization/zh-CN/en.json b/src/localization/zh-CN.json similarity index 100% rename from src/localization/zh-CN/en.json rename to src/localization/zh-CN.json diff --git a/src/localization/zh-TW/en.json b/src/localization/zh-TW.json similarity index 100% rename from src/localization/zh-TW/en.json rename to src/localization/zh-TW.json diff --git a/src/plugin/i18n.js b/src/plugin/i18n.js index 7e5dcb29..9ac1a4cd 100644 --- a/src/plugin/i18n.js +++ b/src/plugin/i18n.js @@ -1,6 +1,8 @@ import { createI18n } from 'vue-i18n'; -import * as localizedStrings from '../localization/localizedStrings'; +import { getLocalizationStrings } from '../localization/index.js'; + +const localizedStrings = await getLocalizationStrings(); const i18n = createI18n({ locale: 'en', diff --git a/src/localization/localizationHelperCLI.js b/src/shared/utils/localizationHelperCLI.js similarity index 95% rename from src/localization/localizationHelperCLI.js rename to src/shared/utils/localizationHelperCLI.js index d64f89e9..5fe908a2 100644 --- a/src/localization/localizationHelperCLI.js +++ b/src/shared/utils/localizationHelperCLI.js @@ -9,11 +9,15 @@ const { hideBin } = require('yargs/helpers'); const getLocalizationObjects = function* () { const localeFolder = './src/localization'; - const folders = fs + const files = fs .readdirSync(localeFolder, { withFileTypes: true }) - .filter((file) => file.isDirectory()); - for (const folder of folders) { - const filePath = path.join(localeFolder, folder.name, 'en.json'); + .filter( + (file) => + file.isFile() && + path.extname(file.name).toLowerCase() === '.json' + ); + for (const file of files) { + const filePath = path.join(localeFolder, file.name); const jsonStr = fs.readFileSync(filePath); yield [filePath, JSON.parse(jsonStr)]; } @@ -119,8 +123,8 @@ const removeLocalizationKey = (key) => { // Yes this code is extremely slow, but it doesn't run very often so. const Validate = function () { const files = [...getLocalizationObjects()]; - const enIndex = files.findIndex((file) => - path.dirname(file[0]).endsWith('en') + const enIndex = files.findIndex( + (file) => path.basename(file[0]) === 'en.json' ); const [_, enObj] = files.splice(enIndex, 1)[0];