Start on localisation ref #396

merge-requests/341/head
Thomas Lynch 1 year ago
parent 52c9e1521d
commit 679d095d98
  1. 3
      controllers/pages.js
  2. 18
      lib/locale/locale.js
  3. 25
      lib/middleware/locale/locale.js
  4. 3
      locales/en.json
  5. 3
      locales/pt.json
  6. 2
      models/pages/manage/catalog.js
  7. 106
      package-lock.json
  8. 1
      package.json
  9. 6
      server.js
  10. 1
      views/pages/catalog.pug

@ -16,6 +16,7 @@ const express = require('express')
, sessionRefresh = require(__dirname+'/../lib/middleware/permission/sessionrefresh.js')
, csrf = require(__dirname+'/../lib/middleware/misc/csrfmiddleware.js')
, setMinimal = require(__dirname+'/../lib/middleware/misc/setminimal.js')
, localise = require(__dirname+'/../lib/middleware/locale/locale.js')
//page models
, { manageRecent, manageReports, manageAssets, manageSettings, manageBans, editCustomPage, manageMyPermissions,
manageBoard, manageThread, manageLogs, manageCatalog, manageCustomPages, manageStaff, editStaff, editPost } = require(__dirname+'/../models/pages/manage/')
@ -56,7 +57,7 @@ router.get('/settings.json', globalSettings); //public global settings
router.get('/randombanner', randombanner); //random banner
//board manage pages
router.get('/:board/manage/catalog.html', useSession, sessionRefresh, isLoggedIn, Boards.exists, calcPerms,
router.get('/:board/manage/catalog.html', useSession, sessionRefresh, isLoggedIn, Boards.exists, localise, calcPerms,
hasPerms.one(Permissions.MANAGE_BOARD_GENERAL), csrf, manageCatalog);
router.get('/:board/manage/:page(1[0-9]{1,}|[2-9][0-9]{0,}|index).html', useSession, sessionRefresh, isLoggedIn, Boards.exists, calcPerms,
hasPerms.one(Permissions.MANAGE_BOARD_GENERAL), csrf, manageBoard);

@ -0,0 +1,18 @@
'use strict';
const i18n = require('i18n')
, path = require('path')
, { debugLogs } = require(__dirname+'/../../configs/secrets.js');
i18n.configure({
directory: path.join(__dirname, '/../../locales'),
defaultLocale: 'en',
retryInDefaultLocale: false,
cookie: null,
header: null,
queryParameter: null,
});
debugLogs && console.log('Locales loaded:', i18n.getLocales());
module.exports = i18n;

@ -0,0 +1,25 @@
'use strict';
const i18n = require(__dirname+'/../../locale/locale.js')
, config = require(__dirname+'/../../misc/config.js');
module.exports = (req, res, next) => {
// global settings locale
let { locale } = config.get;
/* TODO
// board settings locale
if (board in res.locals/params) {
locale = board.settings.locale;
}
*/
//TESTING
const locale = Math.random() < 0.5 ? 'en' : 'pt';
console.log('setting locale', locale);
i18n.setLocale(res.locals, locale);
next();
};

@ -0,0 +1,3 @@
{
"test": "test"
}

@ -0,0 +1,3 @@
{
"test": "teste"
}

@ -12,7 +12,7 @@ module.exports = async (req, res, next) => {
}
res
.set('Cache-Control', 'private, max-age=5')
//.set('Cache-Control', 'private, max-age=5')
.render('catalog', {
modview: true,
threads,

106
package-lock.json generated

@ -37,6 +37,7 @@
"gulp-replace": "^1.1.4",
"gulp-uglify-es": "^3.0.0",
"highlight.js": "^11.7.0",
"i18n": "^0.15.1",
"i18n-iso-countries": "^6.8.0",
"iconv-lite": "^0.6.3",
"imghash": "^0.0.9",
@ -2305,6 +2306,45 @@
"node-pre-gyp": "bin/node-pre-gyp"
}
},
"node_modules/@messageformat/core": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@messageformat/core/-/core-3.0.1.tgz",
"integrity": "sha512-yxj2+0e46hcZqJfNf0ZYbC2q6WlcGoh4g11mCyRtTueR0AD8F9z4JMYAS1aOiFG8Vl1LZg/h5hZHKmWTAyZq8g==",
"dependencies": {
"@messageformat/date-skeleton": "^1.0.0",
"@messageformat/number-skeleton": "^1.0.0",
"@messageformat/parser": "^5.0.0",
"@messageformat/runtime": "^3.0.1",
"make-plural": "^7.0.0",
"safe-identifier": "^0.4.1"
}
},
"node_modules/@messageformat/date-skeleton": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@messageformat/date-skeleton/-/date-skeleton-1.0.1.tgz",
"integrity": "sha512-jPXy8fg+WMPIgmGjxSlnGJn68h/2InfT0TNSkVx0IGXgp4ynnvYkbZ51dGWmGySEK+pBiYUttbQdu5XEqX5CRg=="
},
"node_modules/@messageformat/number-skeleton": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@messageformat/number-skeleton/-/number-skeleton-1.1.0.tgz",
"integrity": "sha512-F0Io+GOSvFFxvp9Ze3L5kAoZ2NnOAT0Mr/jpGNd3fqo8A0t4NxNIAcCdggtl2B/gN2ErkIKSBVPrF7xcW1IGvA=="
},
"node_modules/@messageformat/parser": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/@messageformat/parser/-/parser-5.0.0.tgz",
"integrity": "sha512-WiDKhi8F0zQaFU8cXgqq69eYFarCnTVxKcvhAONufKf0oUxbqLMW6JX6rV4Hqh+BEQWGyKKKHY4g1XA6bCLylA==",
"dependencies": {
"moo": "^0.5.1"
}
},
"node_modules/@messageformat/runtime": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@messageformat/runtime/-/runtime-3.0.1.tgz",
"integrity": "sha512-6RU5ol2lDtO8bD9Yxe6CZkl0DArdv0qkuoZC+ZwowU+cdRlVE1157wjCmlA5Rsf1Xc/brACnsZa5PZpEDfTFFg==",
"dependencies": {
"make-plural": "^7.0.0"
}
},
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@ -3967,6 +4007,11 @@
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
"integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
},
"node_modules/boolean": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz",
"integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw=="
},
"node_modules/bowser": {
"version": "2.11.0",
"resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz",
@ -6368,6 +6413,17 @@
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="
},
"node_modules/fast-printf": {
"version": "1.6.9",
"resolved": "https://registry.npmjs.org/fast-printf/-/fast-printf-1.6.9.tgz",
"integrity": "sha512-FChq8hbz65WMj4rstcQsFB0O7Cy++nmbNfLYnD9cYv2cRn8EG6k/MGn9kO/tjO66t09DLDugj3yL+V2o6Qftrg==",
"dependencies": {
"boolean": "^3.1.4"
},
"engines": {
"node": ">=10.0"
}
},
"node_modules/fast-xml-parser": {
"version": "4.0.11",
"resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.11.tgz",
@ -7796,6 +7852,25 @@
"node": ">=10.17.0"
}
},
"node_modules/i18n": {
"version": "0.15.1",
"resolved": "https://registry.npmjs.org/i18n/-/i18n-0.15.1.tgz",
"integrity": "sha512-yue187t8MqUPMHdKjiZGrX+L+xcUsDClGO0Cz4loaKUOK9WrGw5pgan4bv130utOwX7fHE9w2iUeHFalVQWkXA==",
"dependencies": {
"@messageformat/core": "^3.0.0",
"debug": "^4.3.3",
"fast-printf": "^1.6.9",
"make-plural": "^7.0.0",
"math-interval-parser": "^2.0.1",
"mustache": "^4.2.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/mashpie"
}
},
"node_modules/i18n-iso-countries": {
"version": "6.8.0",
"resolved": "https://registry.npmjs.org/i18n-iso-countries/-/i18n-iso-countries-6.8.0.tgz",
@ -9870,6 +9945,11 @@
"node": ">=0.10.0"
}
},
"node_modules/make-plural": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/make-plural/-/make-plural-7.2.0.tgz",
"integrity": "sha512-WkdI+iaWaBCFM2wUXwos8Z7spg5Dt64Xe/VI6NpRaly21cDtD76N6S97K//UtzV0dHOiXX+E90TnszdXHG0aMg=="
},
"node_modules/makeerror": {
"version": "1.0.12",
"resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
@ -10079,6 +10159,14 @@
"node": ">=0.10.0"
}
},
"node_modules/math-interval-parser": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/math-interval-parser/-/math-interval-parser-2.0.1.tgz",
"integrity": "sha512-VmlAmb0UJwlvMyx8iPhXUDnVW1F9IrGEd9CIOmv+XL8AErCUUuozoDMrgImvnYt2A+53qVX/tPW6YJurMKYsvA==",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@ -10422,11 +10510,24 @@
"node": ">=12"
}
},
"node_modules/moo": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz",
"integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q=="
},
"node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"node_modules/mustache": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz",
"integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==",
"bin": {
"mustache": "bin/mustache"
}
},
"node_modules/mute-stdout": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz",
@ -13185,6 +13286,11 @@
}
]
},
"node_modules/safe-identifier": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/safe-identifier/-/safe-identifier-0.4.2.tgz",
"integrity": "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w=="
},
"node_modules/safe-regex": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",

@ -33,6 +33,7 @@
"gulp-replace": "^1.1.4",
"gulp-uglify-es": "^3.0.0",
"highlight.js": "^11.7.0",
"i18n": "^0.15.1",
"i18n-iso-countries": "^6.8.0",
"iconv-lite": "^0.6.3",
"imghash": "^0.0.9",

@ -17,7 +17,8 @@ const config = require(__dirname+'/lib/misc/config.js')
, { version } = require(__dirname+'/package.json')
, formatSize = require(__dirname+'/lib/converter/formatsize.js')
, CachePugTemplates = require('cache-pug-templates')
, { Permissions } = require(__dirname+'/lib/permission/permissions.js');
, { Permissions } = require(__dirname+'/lib/permission/permissions.js')
, i18n = require(__dirname+'/lib/locale/locale.js');
(async () => {
@ -101,6 +102,9 @@ const config = require(__dirname+'/lib/misc/config.js')
app.use(express.static(__dirname+'/static/json', { redirect: false }));
}
//localisation
app.use(i18n.init);
app.use('/forms', require(__dirname+'/controllers/forms.js'));
app.use('/', require(__dirname+'/controllers/pages.js'));

@ -9,6 +9,7 @@ block head
title /#{board._id}/ - Catalog
block content
h1 locale test: #{__("test")}
+boardheader(modview ? 'Mod Catalog' : 'Catalog')
br
include ../includes/postform.pug

Loading…
Cancel
Save