fix locales versioning in backend client

This commit is contained in:
Hazelnoot 2024-10-15 21:32:03 -04:00
parent 9b06347882
commit 7431866d86
4 changed files with 27 additions and 57 deletions

View file

@ -1,5 +1,6 @@
import tsParser from '@typescript-eslint/parser'; import tsParser from '@typescript-eslint/parser';
import sharedConfig from '../shared/eslint.config.js'; import sharedConfig from '../shared/eslint.config.js';
import globals from 'globals';
export default [ export default [
...sharedConfig, ...sharedConfig,
@ -43,4 +44,15 @@ export default [
}], }],
}, },
}, },
{
files: ['src/server/web/**/*.js', 'src/server/web/**/*.ts'],
languageOptions: {
globals: {
...globals.browser,
LANGS: true,
CLIENT_ENTRY: true,
LANGS_VERSION: true,
},
},
},
]; ];

View file

@ -6,36 +6,6 @@
'use strict'; 'use strict';
window.onload = async () => { window.onload = async () => {
const account = JSON.parse(localStorage.getItem('account'));
const i = account.token;
const api = (endpoint, data = {}) => {
const promise = new Promise((resolve, reject) => {
// Append a credential
if (i) data.i = i;
// Send request
window.fetch(endpoint.indexOf('://') > -1 ? endpoint : `/api/${endpoint}`, {
method: 'POST',
body: JSON.stringify(data),
credentials: 'omit',
cache: 'no-cache'
}).then(async (res) => {
const body = res.status === 204 ? null : await res.json();
if (res.status === 200) {
resolve(body);
} else if (res.status === 204) {
resolve();
} else {
reject(body.error);
}
}).catch(reject);
});
return promise;
};
const content = document.getElementById('content'); const content = document.getElementById('content');
document.getElementById('ls').addEventListener('click', () => { document.getElementById('ls').addEventListener('click', () => {

View file

@ -31,8 +31,17 @@
document.documentElement.classList.add('noborder'); document.documentElement.classList.add('noborder');
} }
// Force update when locales change
const langsVersion = LANGS_VERSION;
const localeVersion = localStorage.getItem('localeVersion');
if (localeVersion !== langsVersion) {
console.info(`Updating locales from version ${localeVersion ?? 'N/A'} to ${langsVersion}`);
localStorage.removeItem('localeVersion');
localStorage.removeItem('locale');
}
//#region Detect language & fetch translations //#region Detect language & fetch translations
if (!localStorage.hasOwnProperty('locale')) { if (!localStorage.getItem('locale')) {
const supportedLangs = LANGS; const supportedLangs = LANGS;
let lang = localStorage.getItem('lang'); let lang = localStorage.getItem('lang');
if (lang == null || !supportedLangs.includes(lang)) { if (lang == null || !supportedLangs.includes(lang)) {
@ -46,37 +55,17 @@
} }
} }
const metaRes = await window.fetch('/api/meta', {
method: 'POST',
body: JSON.stringify({}),
credentials: 'omit',
cache: 'no-cache',
headers: {
'Content-Type': 'application/json',
},
});
if (metaRes.status !== 200) {
renderError('META_FETCH');
return;
}
const meta = await metaRes.json();
const v = meta.version;
if (v == null) {
renderError('META_FETCH_V');
return;
}
// for https://github.com/misskey-dev/misskey/issues/10202 // for https://github.com/misskey-dev/misskey/issues/10202
if (lang == null || lang.toString == null || lang.toString() === 'null') { if (lang == null || lang.toString == null || lang.toString() === 'null') {
console.error('invalid lang value detected!!!', typeof lang, lang); console.error('invalid lang value detected!!!', typeof lang, lang);
lang = 'en-US'; lang = 'en-US';
} }
const localRes = await window.fetch(`/assets/locales/${lang}.${v}.json`); const localRes = await window.fetch(`/assets/locales/${lang}.${langsVersion}.json`);
if (localRes.status === 200) { if (localRes.status === 200) {
localStorage.setItem('lang', lang); localStorage.setItem('lang', lang);
localStorage.setItem('locale', await localRes.text()); localStorage.setItem('locale', await localRes.text());
localStorage.setItem('localeVersion', v); localStorage.setItem('localeVersion', langsVersion);
} else { } else {
renderError('LOCALE_FETCH'); renderError('LOCALE_FETCH');
return; return;

View file

@ -88,7 +88,7 @@
const themeFontFaceName = 'sharkey-theme-font-face'; const themeFontFaceName = 'sharkey-theme-font-face';
if (theme) { if (theme) {
let existingFontFace; let existingFontFace;
document.fonts.forEach((v,k,s)=>{if (v.family === themeFontFaceName) existingFontFace=v;}); document.fonts.forEach((v) => { if (v.family === themeFontFaceName) existingFontFace = v;});
if (existingFontFace) document.fonts.delete(existingFontFace); if (existingFontFace) document.fonts.delete(existingFontFace);
const themeProps = JSON.parse(theme); const themeProps = JSON.parse(theme);
@ -102,9 +102,8 @@
document.fonts.add(fontFace); document.fonts.add(fontFace);
fontFace.load().catch( fontFace.load().catch(
(failure) => { (failure) => {
console.log(failure) console.log(failure);
} }, );
);
} }
for (const [k, v] of Object.entries(themeProps)) { for (const [k, v] of Object.entries(themeProps)) {
if (k.startsWith('font')) continue; if (k.startsWith('font')) continue;