mirror of
https://github.com/LemmyNet/lemmy.git
synced 2024-11-27 20:01:06 +00:00
generate typescript during compilation
This commit is contained in:
parent
ae16a4b1a5
commit
2794b8b36a
20 changed files with 74 additions and 21 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -5,3 +5,4 @@ docker/lemmy_mine.hjson
|
||||||
docker/dev/env_deploy.sh
|
docker/dev/env_deploy.sh
|
||||||
build/
|
build/
|
||||||
.idea/
|
.idea/
|
||||||
|
ui/src/translations
|
||||||
|
|
25
ui/generate_translations.js
vendored
Normal file
25
ui/generate_translations.js
vendored
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
fs = require('fs');
|
||||||
|
|
||||||
|
fs.mkdirSync('src/translations/', { recursive: true });
|
||||||
|
fs.readdir('translations', (err, files) => {
|
||||||
|
files.forEach(filename => {
|
||||||
|
const lang = filename.split('.')[0];
|
||||||
|
try {
|
||||||
|
const json = JSON.parse(
|
||||||
|
fs.readFileSync('translations/' + filename, 'utf8')
|
||||||
|
);
|
||||||
|
var data = `export const ${lang} = {\n translation: {`;
|
||||||
|
for (var key in json) {
|
||||||
|
if (key in json) {
|
||||||
|
const value = json[key].replace(/"/g, '\\"');
|
||||||
|
data = `${data}\n ${key}: "${value}",`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
data += '\n },\n};';
|
||||||
|
const target = 'src/translations/' + lang + '.ts';
|
||||||
|
fs.writeFileSync(target, data);
|
||||||
|
} catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
4
ui/package.json
vendored
4
ui/package.json
vendored
|
@ -8,6 +8,7 @@
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "node fuse prod",
|
"build": "node fuse prod",
|
||||||
"lint": "tsc --noEmit && eslint --report-unused-disable-directives --ext .js,.ts,.tsx src",
|
"lint": "tsc --noEmit && eslint --report-unused-disable-directives --ext .js,.ts,.tsx src",
|
||||||
|
"prebuild": "node generate_translations.js",
|
||||||
"start": "node fuse dev"
|
"start": "node fuse dev"
|
||||||
},
|
},
|
||||||
"keywords": [],
|
"keywords": [],
|
||||||
|
@ -25,7 +26,6 @@
|
||||||
"emoji-short-name": "^1.0.0",
|
"emoji-short-name": "^1.0.0",
|
||||||
"husky": "^4.2.1",
|
"husky": "^4.2.1",
|
||||||
"i18next": "^19.0.3",
|
"i18next": "^19.0.3",
|
||||||
"i18next-xhr-backend": "^2.0.0",
|
|
||||||
"inferno": "^7.0.1",
|
"inferno": "^7.0.1",
|
||||||
"inferno-i18next": "nimbusec-oss/inferno-i18next",
|
"inferno-i18next": "nimbusec-oss/inferno-i18next",
|
||||||
"inferno-router": "^7.0.1",
|
"inferno-router": "^7.0.1",
|
||||||
|
@ -55,7 +55,7 @@
|
||||||
"ts-node": "^8.6.2",
|
"ts-node": "^8.6.2",
|
||||||
"ts-transform-classcat": "^0.0.2",
|
"ts-transform-classcat": "^0.0.2",
|
||||||
"ts-transform-inferno": "^4.0.2",
|
"ts-transform-inferno": "^4.0.2",
|
||||||
"typescript": "^3.7.5"
|
"typescript": "^3.8.3"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=8.9.0"
|
"node": ">=8.9.0"
|
||||||
|
|
53
ui/src/i18next.ts
vendored
53
ui/src/i18next.ts
vendored
|
@ -1,24 +1,51 @@
|
||||||
import i18next from 'i18next';
|
import i18next from 'i18next';
|
||||||
import { getLanguage } from './utils';
|
import { getLanguage } from './utils';
|
||||||
import XHR from 'i18next-xhr-backend';
|
import { en } from './translations/en';
|
||||||
|
import { eo } from './translations/eo';
|
||||||
|
import { es } from './translations/es';
|
||||||
|
import { de } from './translations/de';
|
||||||
|
import { fr } from './translations/fr';
|
||||||
|
import { sv } from './translations/sv';
|
||||||
|
import { ru } from './translations/ru';
|
||||||
|
import { zh } from './translations/zh';
|
||||||
|
import { nl } from './translations/nl';
|
||||||
|
import { it } from './translations/it';
|
||||||
|
import { fi } from './translations/fi';
|
||||||
|
import { ca } from './translations/ca';
|
||||||
|
import { fa } from './translations/fa';
|
||||||
|
import { pt_br } from './translations/pt_br';
|
||||||
|
|
||||||
|
// https://github.com/nimbusec-oss/inferno-i18next/blob/master/tests/T.test.js#L66
|
||||||
|
const resources = {
|
||||||
|
en,
|
||||||
|
eo,
|
||||||
|
es,
|
||||||
|
de,
|
||||||
|
zh,
|
||||||
|
fr,
|
||||||
|
sv,
|
||||||
|
ru,
|
||||||
|
nl,
|
||||||
|
it,
|
||||||
|
fi,
|
||||||
|
ca,
|
||||||
|
fa,
|
||||||
|
pt_br,
|
||||||
|
};
|
||||||
|
|
||||||
function format(value: any, format: any, lng: any): any {
|
function format(value: any, format: any, lng: any): any {
|
||||||
return format === 'uppercase' ? value.toUpperCase() : value;
|
return format === 'uppercase' ? value.toUpperCase() : value;
|
||||||
}
|
}
|
||||||
|
|
||||||
i18next
|
i18next.init({
|
||||||
.use(XHR)
|
debug: false,
|
||||||
.init({
|
// load: 'languageOnly',
|
||||||
debug: true,
|
|
||||||
//load: 'languageOnly',
|
|
||||||
|
|
||||||
// initImmediate: false,
|
// initImmediate: false,
|
||||||
lng: getLanguage(),
|
lng: getLanguage(),
|
||||||
fallbackLng: 'en',
|
fallbackLng: 'en',
|
||||||
interpolation: { format },
|
resources,
|
||||||
backend: {
|
interpolation: { format },
|
||||||
loadPath: '/static/assets/translations/{{lng}}.json',
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
export { i18next as i18n, resources };
|
export { i18next as i18n, resources };
|
||||||
|
|
4
ui/translation_report.ts
vendored
4
ui/translation_report.ts
vendored
|
@ -11,7 +11,7 @@ import { nl } from './src/translations/nl';
|
||||||
import { it } from './src/translations/it';
|
import { it } from './src/translations/it';
|
||||||
import { fi } from './src/translations/fi';
|
import { fi } from './src/translations/fi';
|
||||||
import { ca } from './src/translations/ca';
|
import { ca } from './src/translations/ca';
|
||||||
import { pt_BR } from './src/translations/pt_br';
|
import { pt_br } from './src/translations/pt_br';
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
|
|
||||||
const files = [
|
const files = [
|
||||||
|
@ -24,7 +24,7 @@ const files = [
|
||||||
{ t: fr, n: 'fr' },
|
{ t: fr, n: 'fr' },
|
||||||
{ t: it, n: 'it' },
|
{ t: it, n: 'it' },
|
||||||
{ t: nl, n: 'nl' },
|
{ t: nl, n: 'nl' },
|
||||||
{ t: pt_BR, n: 'pt-br' },
|
{ t: pt_br, n: 'pt-br' },
|
||||||
{ t: ru, n: 'ru' },
|
{ t: ru, n: 'ru' },
|
||||||
{ t: sv, n: 'sv' },
|
{ t: sv, n: 'sv' },
|
||||||
{ t: zh, n: 'zh' },
|
{ t: zh, n: 'zh' },
|
||||||
|
|
8
ui/yarn.lock
vendored
8
ui/yarn.lock
vendored
|
@ -4572,10 +4572,10 @@ typescript@^2.6.2:
|
||||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.9.2.tgz#1cbf61d05d6b96269244eb6a3bce4bd914e0f00c"
|
resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.9.2.tgz#1cbf61d05d6b96269244eb6a3bce4bd914e0f00c"
|
||||||
integrity sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==
|
integrity sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==
|
||||||
|
|
||||||
typescript@^3.7.5:
|
typescript@^3.8.3:
|
||||||
version "3.7.5"
|
version "3.8.3"
|
||||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.5.tgz#0692e21f65fd4108b9330238aac11dd2e177a1ae"
|
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061"
|
||||||
integrity sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw==
|
integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==
|
||||||
|
|
||||||
uc.micro@^1.0.1, uc.micro@^1.0.5:
|
uc.micro@^1.0.1, uc.micro@^1.0.5:
|
||||||
version "1.0.6"
|
version "1.0.6"
|
||||||
|
|
Loading…
Reference in a new issue