2022-02-06 15:44:00 +01:00
|
|
|
import path from 'path'
|
|
|
|
import fs from 'fs'
|
|
|
|
import yaml from 'js-yaml'
|
2022-02-06 19:16:49 +01:00
|
|
|
import { en, de, es, fr, nl, languages } from '../../i18n/dist/index.js'
|
2022-02-06 15:44:00 +01:00
|
|
|
|
|
|
|
const locales = { en, de, es, fr, nl }
|
|
|
|
const l1 = ['patterns', 'settings']
|
|
|
|
const l2 = ['options']
|
|
|
|
|
|
|
|
const writeJson = (site, locale, namespace, content) => fs.writeFileSync(
|
|
|
|
path.resolve(
|
|
|
|
'..',
|
|
|
|
`freesewing.${site}`,
|
|
|
|
'public',
|
|
|
|
'locales',
|
|
|
|
locale,
|
|
|
|
`${namespace}.json`
|
|
|
|
),
|
2022-02-06 19:16:49 +01:00
|
|
|
JSON.stringify(content)
|
2022-02-06 15:44:00 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
const flattenL1 = content => {
|
|
|
|
const flat = {}
|
|
|
|
for (const l1 in content) {
|
|
|
|
flat[`${l1}.t`] = content[l1].title
|
|
|
|
flat[`${l1}.d`] = content[l1].description
|
|
|
|
}
|
|
|
|
|
|
|
|
return flat
|
|
|
|
}
|
|
|
|
|
|
|
|
const flattenL2 = content => {
|
|
|
|
const flat = {}
|
|
|
|
for (const l1 in content) {
|
|
|
|
flat[l1] = {}
|
|
|
|
for (const l2 in content[l1]) {
|
|
|
|
flat[l1][`${l2}.t`] = content[l1][l2].title
|
|
|
|
flat[l1][`${l2}.d`] = content[l1][l2].description
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return flat
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Main method that does what needs doing
|
|
|
|
*/
|
|
|
|
export const prebuildI18n = async (site) => {
|
|
|
|
// Iterate over locales
|
|
|
|
for (const locale in locales) {
|
2022-02-06 19:16:49 +01:00
|
|
|
console.log('Generating translation files for', locale)
|
2022-02-06 15:44:00 +01:00
|
|
|
const loc = locales[locale]
|
|
|
|
// Fan out into namespaces
|
|
|
|
for (const namespace in loc.topics) {
|
|
|
|
if (l1.indexOf(namespace) !== -1) {
|
|
|
|
writeJson(
|
|
|
|
site, locale, namespace,
|
|
|
|
flattenL1(loc.topics[namespace])
|
|
|
|
)
|
|
|
|
}
|
|
|
|
else if (l2.indexOf(namespace) !== -1) {
|
|
|
|
// Further fan out the (large) options namespace
|
|
|
|
const subNamespaces = flattenL2(loc.topics[namespace])
|
|
|
|
for (const subNamespace in subNamespaces) {
|
|
|
|
writeJson(
|
|
|
|
site, locale, 'o.'+subNamespace,
|
|
|
|
subNamespaces[subNamespace]
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else writeJson(site, locale, namespace, loc.topics[namespace])
|
|
|
|
}
|
2022-02-06 19:16:49 +01:00
|
|
|
writeJson(site, locale, 'locales', languages)
|
2022-02-06 15:44:00 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|