Only load Intl data for current language (#3130)
* Only load Intl data for current language * Extract common chunk only from application.js and public.js * Generate locale packs, avoid caching on window objectmaster
parent
73e4468ff3
commit
9d04de1c8d
@ -1,61 +1,9 @@ |
||||
import ar from './ar.json'; |
||||
import en from './en.json'; |
||||
import ca from './ca.json'; |
||||
import de from './de.json'; |
||||
import es from './es.json'; |
||||
import fa from './fa.json'; |
||||
import he from './he.json'; |
||||
import hr from './hr.json'; |
||||
import hu from './hu.json'; |
||||
import io from './io.json'; |
||||
import it from './it.json'; |
||||
import fr from './fr.json'; |
||||
import nl from './nl.json'; |
||||
import no from './no.json'; |
||||
import oc from './oc.json'; |
||||
import pt from './pt.json'; |
||||
import pt_br from './pt-BR.json'; |
||||
import uk from './uk.json'; |
||||
import fi from './fi.json'; |
||||
import eo from './eo.json'; |
||||
import ru from './ru.json'; |
||||
import ja from './ja.json'; |
||||
import zh_hk from './zh-HK.json'; |
||||
import zh_cn from './zh-CN.json'; |
||||
import bg from './bg.json'; |
||||
import id from './id.json'; |
||||
import tr from './tr.json'; |
||||
let theLocale; |
||||
|
||||
const locales = { |
||||
ar, |
||||
en, |
||||
ca, |
||||
de, |
||||
es, |
||||
fa, |
||||
he, |
||||
hr, |
||||
hu, |
||||
io, |
||||
it, |
||||
fr, |
||||
nl, |
||||
no, |
||||
oc, |
||||
pt, |
||||
'pt-BR': pt_br, |
||||
uk, |
||||
fi, |
||||
eo, |
||||
ru, |
||||
ja, |
||||
'zh-HK': zh_hk, |
||||
'zh-CN': zh_cn, |
||||
bg, |
||||
id, |
||||
tr, |
||||
}; |
||||
export function setLocale(locale) { |
||||
theLocale = locale; |
||||
} |
||||
|
||||
export default function getMessagesForLocale(locale) { |
||||
return locales[locale]; |
||||
}; |
||||
export function getLocale() { |
||||
return theLocale; |
||||
} |
||||
|
@ -0,0 +1,52 @@ |
||||
// To avoid adding a lot of boilerplate, locale packs are
|
||||
// automatically generated here. These are written into the tmp/
|
||||
// directory and then used to generate locale_en.js, locale_fr.js, etc.
|
||||
|
||||
const fs = require('fs'); |
||||
const path = require('path'); |
||||
const rimraf = require('rimraf'); |
||||
const mkdirp = require('mkdirp'); |
||||
|
||||
const localesJsonPath = path.join(__dirname, '../../app/javascript/mastodon/locales'); |
||||
const locales = fs.readdirSync(localesJsonPath).filter(filename => { |
||||
return /\.json$/.test(filename) && |
||||
!/defaultMessages/.test(filename) && |
||||
!/whitelist/.test(filename); |
||||
}).map(filename => filename.replace(/\.json$/, '')); |
||||
|
||||
const outPath = path.join(__dirname, '../../tmp/packs'); |
||||
|
||||
rimraf.sync(outPath); |
||||
mkdirp.sync(outPath); |
||||
|
||||
const outPaths = []; |
||||
|
||||
locales.forEach(locale => { |
||||
const localePath = path.join(outPath, `locale_${locale}.js`); |
||||
const baseLocale = locale.split('-')[0]; // e.g. 'zh-TW' -> 'zh'
|
||||
const localeDataPath = [ |
||||
// first try react-intl
|
||||
`../../node_modules/react-intl/locale-data/${baseLocale}.js`, |
||||
// then check locales/locale-data
|
||||
`../../app/javascript/mastodon/locales/locale-data/${baseLocale}.js`, |
||||
// fall back to English (this is what react-intl does anyway)
|
||||
`../../node_modules/react-intl/locale-data/en.js`, |
||||
].filter(filename => fs.existsSync(path.join(outPath, filename))) |
||||
.map(filename => filename.replace(/..\/..\/node_modules\//, ''))[0]; |
||||
|
||||
const localeContent = `//
|
||||
// locale_${locale}.js
|
||||
// automatically generated by generateLocalePacks.js
|
||||
//
|
||||
import messages from '../../app/javascript/mastodon/locales/${locale}.json'; |
||||
import localeData from ${JSON.stringify(localeDataPath)}; |
||||
import { setLocale } from '../../app/javascript/mastodon/locales'; |
||||
setLocale({messages, localeData}); |
||||
`;
|
||||
fs.writeFileSync(localePath, localeContent, 'utf8'); |
||||
outPaths.push(localePath); |
||||
}); |
||||
|
||||
module.exports = outPaths; |
||||
|
||||
|
Loading…
Reference in new issue