summaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2020-12-26 15:13:25 +0900
committersyuilo <syuilotan@yahoo.co.jp>2020-12-26 15:13:25 +0900
commit84b488a91260fa982124e3c234839302df353038 (patch)
tree70481cec7172b5fb0e451735f0b7b119da14a85c /src/server
parentFix service worker generation (diff)
downloadmisskey-84b488a91260fa982124e3c234839302df353038.tar.gz
misskey-84b488a91260fa982124e3c234839302df353038.tar.bz2
misskey-84b488a91260fa982124e3c234839302df353038.zip
翻訳ファイルをランタイムで読み込み
Diffstat (limited to 'src/server')
-rw-r--r--src/server/web/boot.js46
1 files changed, 27 insertions, 19 deletions
diff --git a/src/server/web/boot.js b/src/server/web/boot.js
index 5eff81a3ec..8b1fd9a619 100644
--- a/src/server/web/boot.js
+++ b/src/server/web/boot.js
@@ -1,7 +1,8 @@
/**
* BOOT LOADER
* サーバーからレスポンスされるHTMLに埋め込まれるスクリプトで、以下の役割を持ちます。
- * - バージョンやユーザーの言語に基づいて適切なメインスクリプトを読み込む。
+ * - 翻訳ファイルをフェッチする。
+ * - バージョンに基づいて適切なメインスクリプトを読み込む。
* - キャッシュされたコンパイル済みテーマを適用する。
* - クライアントの設定値に基づいて対応するHTMLクラス等を設定する。
* テーマをこの段階で設定するのは、メインスクリプトが読み込まれる間もテーマを適用したいためです。
@@ -10,27 +11,34 @@
'use strict';
-// ブロックの中に入れないと、定義した変数がブラウザのグローバルスコープに登録されてしまい邪魔
-{
- //#region Script
+// ブロックの中に入れないと、定義した変数がブラウザのグローバルスコープに登録されてしまい邪魔なので
+(async () => {
+ const v = localStorage.getItem('v') || VERSION;
- //#region Detect language
- const supportedLangs = LANGS;
- let lang = localStorage.getItem('lang');
- if (lang == null || !supportedLangs.includes(lang)) {
- if (supportedLangs.includes(navigator.language)) {
- lang = navigator.language;
- } else {
- lang = supportedLangs.find(x => x.split('-')[0] === navigator.language);
+ //#region Detect language & fetch translations
+ if (localStorage.hasOwnProperty('locale')) {
+ // TODO: 非同期でlocaleの更新処理をする
+ } else {
+ const supportedLangs = LANGS;
+ let lang = localStorage.getItem('lang');
+ if (lang == null || !supportedLangs.includes(lang)) {
+ if (supportedLangs.includes(navigator.language)) {
+ lang = navigator.language;
+ } else {
+ lang = supportedLangs.find(x => x.split('-')[0] === navigator.language);
- // Fallback
- if (lang == null) lang = 'en-US';
+ // Fallback
+ if (lang == null) lang = 'en-US';
+ }
}
+
+ const res = await fetch(`/assets/locales/${lang}.${v}.json`);
+ const json = await res.json();
+ localStorage.setItem('locale', JSON.stringify(json));
}
//#endregion
- const ver = localStorage.getItem('v') || VERSION;
-
+ //#region Script
const salt = localStorage.getItem('salt')
? `?salt=${localStorage.getItem('salt')}`
: '';
@@ -38,7 +46,7 @@
const head = document.getElementsByTagName('head')[0];
const script = document.createElement('script');
- script.setAttribute('src', `/assets/app.${ver}.${lang}.js${salt}`);
+ script.setAttribute('src', `/assets/app.${v}.js${salt}`);
script.setAttribute('async', 'true');
script.setAttribute('defer', 'true');
head.appendChild(script);
@@ -56,7 +64,7 @@
const meta = await res.json();
- if (meta.version != ver) {
+ if (meta.version != v) {
localStorage.setItem('v', meta.version);
alert(
'Misskeyの新しいバージョンがあります。ページを再度読み込みします。' +
@@ -113,4 +121,4 @@
location.reload();
}
-}
+})();