diff --git a/config/scripts.yaml b/config/scripts.yaml index f0913546316..c524befa4aa 100644 --- a/config/scripts.yaml +++ b/config/scripts.yaml @@ -46,6 +46,7 @@ i18n: modulebuild: '!' test: 'BABEL_ENV=production ../../node_modules/.bin/_mocha tests/*.test.js --require @babel/register' testci: 'BABEL_ENV=production ../../node_modules/.bin/_mocha tests/*.test.js --require @babel/register' + prebuild: 'node src/prebuild.mjs' pattern-info: cibuild_step1: '!' cibuild_step2: 'node src/prebuild.js && rollup -c' diff --git a/packages/i18n/package.json b/packages/i18n/package.json index fcdffc56b98..5b9e2e0a59a 100644 --- a/packages/i18n/package.json +++ b/packages/i18n/package.json @@ -31,7 +31,8 @@ "pubforce": "npm publish", "symlink": "mkdir -p ./node_modules/@freesewing && cd ./node_modules/@freesewing && ln -s -f ../../../* . && cd -", "start": "rollup -c -w", - "testci": "BABEL_ENV=production ../../node_modules/.bin/_mocha tests/*.test.js --require @babel/register" + "testci": "BABEL_ENV=production ../../node_modules/.bin/_mocha tests/*.test.js --require @babel/register", + "prebuild": "node src/prebuild.mjs" }, "peerDependencies": { "@freesewing/pattern-info": "^2.20.4" diff --git a/packages/i18n/src/next.mjs b/packages/i18n/src/next.mjs index 09b63c7a1ce..3d42d9ab1c9 100644 --- a/packages/i18n/src/next.mjs +++ b/packages/i18n/src/next.mjs @@ -13,3 +13,11 @@ export const en = enNamespaces export const es = esNamespaces export const fr = frNamespaces export const nl = nlNamespaces + +export const languages = { + de: "Deutsch", + en: "English", + es: "Español", + fr: "Français", + nl: "Nederlands" +} diff --git a/packages/i18n/src/prebuild.mjs b/packages/i18n/src/prebuild.mjs index 59f967a8810..5a0744f155f 100644 --- a/packages/i18n/src/prebuild.mjs +++ b/packages/i18n/src/prebuild.mjs @@ -2,6 +2,12 @@ import yaml from 'js-yaml' import path from 'path' import rdir from 'recursive-readdir' import { readdir, readFile, writeFile } from 'fs/promises' +import { fileURLToPath } from 'url' +import { dirname } from 'path' + +// No __dirname in Node 14 +const __filename = fileURLToPath(import.meta.url) +const __dirname = dirname(__filename) /* * Helper method to get a list of yaml/yml files. @@ -10,7 +16,7 @@ import { readdir, readFile, writeFile } from 'fs/promises' const getTranslationFileList = async () => { let allFiles try { - allFiles = await rdir(path.resolve('.', 'locales')) + allFiles = await rdir(path.resolve(__dirname, 'locales')) } catch (err) { console.log(err) @@ -137,7 +143,7 @@ const allNamespaces = { export default allNamespaces ` -const indexFile = (locales) => `${header} +const indexFile = (locales, data) => `${header} ${locales .map(l => 'import '+l+'Namespaces from "./next/'+l+'/index.mjs"') .join("\n") @@ -145,7 +151,15 @@ ${locales ${locales .map(l => 'export const '+l+' = '+l+'Namespaces') - .join("\n")} + .join("\n") +} + +export const languages = { +${locales + .map(l => ' '+l+': "'+ data[l].i18n[l]+'"') + .join(",\n") +} +} ` /* @@ -157,7 +171,7 @@ const writeFiles = async allNamespaces => { for (const [namespace, data] of Object.entries(namespaces)) { promises.push( writeFile( - path.resolve('.', 'next', locale, namespace+'.mjs', ), + path.resolve(__dirname, 'next', locale, namespace+'.mjs', ), namespaceFile(namespace, data) ) ) @@ -165,7 +179,7 @@ const writeFiles = async allNamespaces => { // Locale index files promises.push( writeFile( - path.resolve('.', 'next', locale, 'index.mjs', ), + path.resolve(__dirname, 'next', locale, 'index.mjs', ), localeFile(locale, Object.keys(namespaces)) ) ) @@ -173,8 +187,8 @@ const writeFiles = async allNamespaces => { // Locale index files promises.push( writeFile( - path.resolve('.', 'next.mjs', ), - indexFile(Object.keys(allNamespaces)) + path.resolve(__dirname, 'next.mjs', ), + indexFile(Object.keys(allNamespaces), allNamespaces) ) ) await Promise.all(promises)