First build
This commit is contained in:
parent
511556737e
commit
fd773f5832
954 changed files with 305115 additions and 2 deletions
54
src/i18n.js
Normal file
54
src/i18n.js
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
'use strict'
|
||||
|
||||
const fsp = require('fs').promises
|
||||
const path = require('path')
|
||||
const { DIRS } = require('./paths')
|
||||
|
||||
const FALLBACK = 'en-us'
|
||||
let cache = {}
|
||||
|
||||
async function loadLang(code) {
|
||||
const file = path.join(DIRS.TRANSLATIONS, `${code}.json`)
|
||||
try {
|
||||
const raw = await fsp.readFile(file, 'utf8')
|
||||
const parsed = JSON.parse(raw)
|
||||
cache[code] = parsed
|
||||
return parsed
|
||||
} catch {
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
async function init() {
|
||||
const files = await fsp.readdir(DIRS.TRANSLATIONS).catch(() => [])
|
||||
const langs = []
|
||||
for (const f of files) {
|
||||
if (!f.endsWith('.json')) continue
|
||||
const lang = await loadLang(f.replace(/\.json$/, ''))
|
||||
if (lang && lang.data && lang.texts) langs.push(lang)
|
||||
}
|
||||
return langs
|
||||
}
|
||||
|
||||
function listLangs() {
|
||||
return Object.entries(cache).map(([code, lang]) => ({
|
||||
code,
|
||||
nameEn: (lang.data && lang.data.nameEn) || code,
|
||||
nameSelf: (lang.data && lang.data.nameSelf) || code
|
||||
}))
|
||||
}
|
||||
|
||||
function getLang(code) {
|
||||
return cache[code] || cache[FALLBACK] || { texts: {}, data: {} }
|
||||
}
|
||||
|
||||
function translate(code, key, ...args) {
|
||||
const lang = getLang(code)
|
||||
let text = (lang.texts && lang.texts[key]) ?? (cache[FALLBACK] && cache[FALLBACK].texts && cache[FALLBACK].texts[key]) ?? key
|
||||
args.forEach((v, i) => {
|
||||
text = String(text).split(`{${i}}`).join(String(v))
|
||||
})
|
||||
return text
|
||||
}
|
||||
|
||||
module.exports = { init, listLangs, getLang, translate, loadLang, FALLBACK }
|
||||
Loading…
Add table
Add a link
Reference in a new issue