[+] Japanese
This commit is contained in:
Vendored
+1
-1
@@ -4,7 +4,7 @@ declare global {
|
|||||||
namespace App {
|
namespace App {
|
||||||
// interface Error {}
|
// interface Error {}
|
||||||
interface Locals {
|
interface Locals {
|
||||||
lang: 'en' | 'zh'
|
lang: 'en' | 'zh' | 'ja'
|
||||||
}
|
}
|
||||||
// interface PageData {}
|
// interface PageData {}
|
||||||
// interface PageState {}
|
// interface PageState {}
|
||||||
|
|||||||
+3
-1
@@ -5,7 +5,7 @@ checkAudioSeparator().catch(e => console.error('Audio separator check failed:',
|
|||||||
|
|
||||||
export const handle: Handle = async ({ event, resolve }) => {
|
export const handle: Handle = async ({ event, resolve }) => {
|
||||||
const langCookie = event.cookies.get('lang');
|
const langCookie = event.cookies.get('lang');
|
||||||
if (langCookie === 'zh' || langCookie === 'en') {
|
if (langCookie === 'zh' || langCookie === 'en' || langCookie === 'ja') {
|
||||||
event.locals.lang = langCookie;
|
event.locals.lang = langCookie;
|
||||||
} else {
|
} else {
|
||||||
const acceptLanguage = event.request.headers.get('accept-language');
|
const acceptLanguage = event.request.headers.get('accept-language');
|
||||||
@@ -14,6 +14,8 @@ export const handle: Handle = async ({ event, resolve }) => {
|
|||||||
// For now, let's assume if 'zh' is in the header, the user likely understands Chinese.
|
// For now, let's assume if 'zh' is in the header, the user likely understands Chinese.
|
||||||
if (acceptLanguage && acceptLanguage.includes('zh')) {
|
if (acceptLanguage && acceptLanguage.includes('zh')) {
|
||||||
event.locals.lang = 'zh';
|
event.locals.lang = 'zh';
|
||||||
|
} else if (acceptLanguage && acceptLanguage.includes('ja')) {
|
||||||
|
event.locals.lang = 'ja';
|
||||||
} else {
|
} else {
|
||||||
event.locals.lang = 'en';
|
event.locals.lang = 'en';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +1,19 @@
|
|||||||
import { getContext, setContext } from 'svelte'
|
import { getContext, setContext } from 'svelte'
|
||||||
import EN from "./en"
|
import EN from "./en"
|
||||||
import ZH from "./zh"
|
import ZH from "./zh"
|
||||||
|
import JA from "./ja"
|
||||||
|
|
||||||
|
|
||||||
// i18n related files:
|
// i18n related files:
|
||||||
// src\hooks.server.ts
|
// src\hooks.server.ts
|
||||||
// src\routes\+layout.server.ts
|
// src\routes\+layout.server.ts
|
||||||
|
|
||||||
type Lang = 'en' | 'zh'
|
type Lang = 'en' | 'zh' | 'ja'
|
||||||
|
|
||||||
const msgs: Record<Lang, typeof ZH> = {
|
const msgs: Record<Lang, typeof ZH> = {
|
||||||
en: EN,
|
en: EN,
|
||||||
zh: ZH
|
zh: ZH,
|
||||||
|
ja: JA
|
||||||
}
|
}
|
||||||
|
|
||||||
const I18N_KEY = Symbol('i18n')
|
const I18N_KEY = Symbol('i18n')
|
||||||
|
|||||||
@@ -0,0 +1,130 @@
|
|||||||
|
export default {
|
||||||
|
home: {
|
||||||
|
titles: {
|
||||||
|
continue: '前回のセッションから続ける',
|
||||||
|
history: '履歴',
|
||||||
|
myPlaylists: 'マイプレイリスト',
|
||||||
|
recPlaylists: 'おすすめプレイリスト'
|
||||||
|
},
|
||||||
|
btn: {
|
||||||
|
importFromNetease: 'NetEaseからインポート'
|
||||||
|
},
|
||||||
|
text: {
|
||||||
|
playlistCreatedBy: '{u} 作成'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
admin: {
|
||||||
|
neteaseLogin: {
|
||||||
|
title: 'NetEaseログイン',
|
||||||
|
scanTitle: 'スキャンしてログイン',
|
||||||
|
scanTip: 'NetEase Musicアプリでスキャンしてください',
|
||||||
|
generating: 'QRコードを生成中...',
|
||||||
|
scanned: 'スキャン完了',
|
||||||
|
confirm: '携帯電話でログインを確認してください',
|
||||||
|
success: 'ログイン成功',
|
||||||
|
errorPrefix: 'エラー: '
|
||||||
|
}
|
||||||
|
},
|
||||||
|
import: {
|
||||||
|
netease: {
|
||||||
|
title: 'NetEaseからインポート',
|
||||||
|
status: {
|
||||||
|
importing: 'インポート中',
|
||||||
|
success: 'インポート完了',
|
||||||
|
error: 'インポート失敗'
|
||||||
|
},
|
||||||
|
songs: '曲',
|
||||||
|
tip: 'NetEase Musicアプリでお気に入りの日本語プレイリストを見つけ、共有をクリックし、リンクをコピーしてここに貼り付けると、インポートを開始できます!',
|
||||||
|
inputLabel: 'NetEaseプレイリストリンク / ID',
|
||||||
|
btnStart: 'インポート開始',
|
||||||
|
btnView: 'プレイリストを表示'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
playlist: {
|
||||||
|
detail: {
|
||||||
|
title: 'プレイリスト詳細',
|
||||||
|
creator: '作成者: ',
|
||||||
|
count: '曲数: ',
|
||||||
|
startPractice: '練習開始',
|
||||||
|
songList: '曲リスト',
|
||||||
|
songs: '曲'
|
||||||
|
},
|
||||||
|
list: {
|
||||||
|
mine: 'マイプレイリスト',
|
||||||
|
rec: 'おすすめプレイリスト',
|
||||||
|
import: 'NetEaseからインポート',
|
||||||
|
created: '{u} 作成',
|
||||||
|
count: '{n} 曲'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
results: {
|
||||||
|
title: '練習結果',
|
||||||
|
fields: {
|
||||||
|
speed: '速度',
|
||||||
|
accuracy: '正確率',
|
||||||
|
realtime: 'リアルタイム率',
|
||||||
|
count: '文字数',
|
||||||
|
time: '時間',
|
||||||
|
duration: '曲の長さ'
|
||||||
|
},
|
||||||
|
units: {
|
||||||
|
cpm: 'CPM',
|
||||||
|
percent: '%',
|
||||||
|
x: 'x',
|
||||||
|
char: '文字'
|
||||||
|
},
|
||||||
|
chart: {
|
||||||
|
speed: '速度 (CPM)',
|
||||||
|
accuracy: '正確率 (%)'
|
||||||
|
},
|
||||||
|
btn: {
|
||||||
|
next: '次の曲',
|
||||||
|
back: 'プレイリストに戻る',
|
||||||
|
retry: 'もう一度'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
song: {
|
||||||
|
mode: {
|
||||||
|
typing: 'タイピングモード',
|
||||||
|
music: '音楽モード'
|
||||||
|
},
|
||||||
|
karaoke: {
|
||||||
|
noVocals: 'ボーカル分離トラックが検出されないため、ボーカル音量を調整できません。まず曲の詳細ページで処理してください。'
|
||||||
|
},
|
||||||
|
play: {
|
||||||
|
speed: '速度: ',
|
||||||
|
accuracy: '正確率: ',
|
||||||
|
stats: {
|
||||||
|
right: '正解:',
|
||||||
|
fuzzy: '曖昧:',
|
||||||
|
wrong: '不正解:',
|
||||||
|
remaining: '残り:'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
user: {
|
||||||
|
title: 'アカウント管理',
|
||||||
|
loginSuccess: {
|
||||||
|
title: 'ログイン成功',
|
||||||
|
content: 'ログインに成功しました!',
|
||||||
|
jump: '移動'
|
||||||
|
},
|
||||||
|
generateCode: {
|
||||||
|
title: '引き継ぎコード生成',
|
||||||
|
copy: 'コピー',
|
||||||
|
success: '引き継ぎコードが生成されました!コードは:{code}',
|
||||||
|
expiry: 'このコードは使用後、または未使用の場合は7日後に無効になります。'
|
||||||
|
},
|
||||||
|
desc: {
|
||||||
|
intro: 'このアプリは日本のモバイルゲームのように引き継ぎコードシステムを使用しており、メールアドレスやパスワードの登録は不要です。',
|
||||||
|
instruction: '別のデバイスでログインするには、「引き継ぎコード生成」をクリックし、ログインしたいデバイスで「ログイン」をクリックしてください。',
|
||||||
|
loginMode: '現在は「引き継ぎログイン」ページです。別のデバイスで引き継ぎコードを取得し、下の入力欄に入力して「ログイン」をクリックしてください。'
|
||||||
|
},
|
||||||
|
input: '引き継ぎコードを入力',
|
||||||
|
btn: {
|
||||||
|
generate: '引き継ぎコード生成',
|
||||||
|
loginWithCode: '引き継ぎコードでログイン',
|
||||||
|
login: 'ログイン'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user