406 lines
12 KiB
JavaScript
406 lines
12 KiB
JavaScript
import { createI18n } from 'vue-i18n';
|
|
|
|
const messages = {
|
|
en: {
|
|
common: {
|
|
close: 'Close',
|
|
cancel: 'Cancel',
|
|
},
|
|
nav: {
|
|
dashboard: 'Dashboard',
|
|
review: 'Review',
|
|
collection: 'Collection',
|
|
settings: 'Settings',
|
|
sync: 'Sync',
|
|
logout: 'Logout',
|
|
menu: 'Menu',
|
|
},
|
|
login: {
|
|
instruction: 'Enter your WaniKani V2 API Key to login',
|
|
placeholder: 'Paste key here...',
|
|
button: 'Login',
|
|
failed: 'Login failed. Is server running?',
|
|
},
|
|
alerts: {
|
|
syncSuccess: 'Sync complete! Collection: {count}',
|
|
syncFailed: 'Sync failed.',
|
|
logoutConfirm: 'Are you sure you want to log out? This will end your session.',
|
|
},
|
|
lesson: {
|
|
phasePrimer: 'Study',
|
|
phaseDemo: 'Observation',
|
|
phaseGuided: 'Guided',
|
|
phasePractice: 'Recall',
|
|
understand: 'I Understand',
|
|
ready: 'Ready to Draw',
|
|
startPractice: 'Start Practice',
|
|
continue: 'Continue',
|
|
streak: 'Correct: {n} / {total}',
|
|
hint: 'Show Hint (Resets Streak)',
|
|
hintAction: 'Hint',
|
|
watchAgain: 'Watch Again',
|
|
completeTitle: 'Lesson Complete!',
|
|
completeBody: 'You have unlocked new Kanji for review.',
|
|
learned: "You've learned {n} new kanji.",
|
|
components: 'Components',
|
|
observe: 'Observe Stroke Order',
|
|
trace: 'Trace',
|
|
drawStep: 'Draw ({n}/{total})',
|
|
backToDashboard: 'Back to Dashboard',
|
|
},
|
|
hero: {
|
|
lessons: 'Lessons',
|
|
newContent: 'New content available',
|
|
welcome: 'Welcome Back',
|
|
subtitle: 'Your mind is ready.',
|
|
start: 'Start Review',
|
|
readyToReview: 'Ready to review',
|
|
noReviews: 'No Reviews',
|
|
allCaughtUp: 'All caught up',
|
|
nextIn: 'Next review in',
|
|
now: 'now',
|
|
prioritize: 'Prioritize Lower Levels ({count})',
|
|
},
|
|
stats: {
|
|
mastery: 'Mastery (Guru+)',
|
|
srsDistribution: 'SRS Levels',
|
|
accuracy: 'Global Accuracy',
|
|
correct: 'Correct',
|
|
total: 'Total',
|
|
next24: 'Next 24h',
|
|
availableNow: 'Available Now',
|
|
inHours: 'In {n} hour | In {n} hours',
|
|
noIncoming: 'No reviews incoming for 24 hours.',
|
|
items: 'items',
|
|
reviewsCount: '{count} reviews',
|
|
|
|
consistency: 'Study Consistency',
|
|
less: 'Less',
|
|
more: 'More',
|
|
|
|
streakTitle: 'Study Streak',
|
|
days: 'days',
|
|
shieldActive: 'Zen Shield Active: Protects streak if you miss 1 day.',
|
|
shieldCooldown: 'Regenerating: {n} days left',
|
|
|
|
ghostTitle: 'Ghost Items',
|
|
ghostSubtitle: 'Lowest Accuracy',
|
|
noGhosts: 'No ghosts found! Keep it up.',
|
|
},
|
|
settings: {
|
|
title: 'Settings',
|
|
batchSize: 'Review Batch Size',
|
|
items: 'Items',
|
|
language: 'Language',
|
|
drawingTolerance: 'Drawing Tolerance',
|
|
strict: 'Strict',
|
|
loose: 'Loose',
|
|
save: 'Save & Close',
|
|
},
|
|
review: {
|
|
meaning: 'Meaning',
|
|
level: 'Level',
|
|
draw: 'Draw correctly',
|
|
hint: 'Hint Shown',
|
|
showHint: 'Show Hint',
|
|
redoLesson: 'Redo Lesson',
|
|
tryAgain: 'Try again',
|
|
correct: 'Correct!',
|
|
next: 'NEXT',
|
|
sessionComplete: 'Session Complete!',
|
|
levelup: 'You leveled up your Kanji skills.',
|
|
back: 'Back to Collection',
|
|
caughtUp: 'All Caught Up!',
|
|
noReviews: 'No reviews available right now.',
|
|
viewCollection: 'View Collection',
|
|
queue: 'Session queue:',
|
|
loading: 'Loading Kanji...',
|
|
},
|
|
collection: {
|
|
searchLabel: 'Search Kanji, Meaning, or Reading...',
|
|
placeholder: "e.g. 'water', 'mizu', '水'",
|
|
loading: 'Loading Collection...',
|
|
noMatches: 'No matches found',
|
|
tryDifferent: 'Try searching for a different meaning or reading.',
|
|
levelHeader: 'LEVEL',
|
|
onyomi: "On'yomi",
|
|
kunyomi: "Kun'yomi",
|
|
nanori: 'Nanori',
|
|
close: 'Close',
|
|
startLesson: 'Start Lesson',
|
|
redoLesson: 'Redo Lesson',
|
|
},
|
|
},
|
|
de: {
|
|
common: {
|
|
close: 'Schließen',
|
|
cancel: 'Abbrechen',
|
|
},
|
|
nav: {
|
|
dashboard: 'Übersicht',
|
|
review: 'Lernen',
|
|
collection: 'Sammlung',
|
|
settings: 'Einstellungen',
|
|
sync: 'Sync',
|
|
logout: 'Abmelden',
|
|
menu: 'Menü',
|
|
},
|
|
login: {
|
|
instruction: 'Gib deinen WaniKani V2 API Key ein',
|
|
placeholder: 'Key hier einfügen...',
|
|
button: 'Anmelden',
|
|
failed: 'Login fehlgeschlagen. Läuft der Server?',
|
|
},
|
|
alerts: {
|
|
syncSuccess: 'Sync fertig! Sammlung: {count}',
|
|
syncFailed: 'Sync fehlgeschlagen.',
|
|
logoutConfirm: 'Möchtest du dich wirklich abmelden? Deine Sitzung wird beendet.',
|
|
},
|
|
lesson: {
|
|
phasePrimer: 'Lernen',
|
|
phaseDemo: 'Beobachtung',
|
|
phaseGuided: 'Geführt',
|
|
phasePractice: 'Abruf',
|
|
understand: 'Verstanden',
|
|
ready: 'Bereit zum Zeichnen',
|
|
startPractice: 'Üben Starten',
|
|
continue: 'Weiter',
|
|
streak: 'Richtig: {n} / {total}',
|
|
hint: 'Hinweis (Setzt Serie zurück)',
|
|
hintAction: 'Hinweis',
|
|
watchAgain: 'Nochmal ansehen',
|
|
completeTitle: 'Lektion Fertig!',
|
|
completeBody: 'Neue Kanji für Reviews freigeschaltet.',
|
|
learned: 'Du hast {n} neue Kanji gelernt.',
|
|
components: 'Komponenten',
|
|
observe: 'Strichfolge beobachten',
|
|
trace: 'Nachzeichnen',
|
|
drawStep: 'Zeichnen ({n}/{total})',
|
|
backToDashboard: 'Zurück zur Übersicht',
|
|
},
|
|
hero: {
|
|
lessons: 'Lektionen',
|
|
newContent: 'Neue Inhalte verfügbar',
|
|
welcome: 'Willkommen zurück',
|
|
subtitle: 'Dein Geist ist bereit.',
|
|
start: 'Starten',
|
|
readyToReview: 'Bereit zum Wiederholen',
|
|
noReviews: 'Alles erledigt',
|
|
allCaughtUp: 'Alles auf dem neuesten Stand',
|
|
nextIn: 'Nächste Review in',
|
|
now: 'jetzt',
|
|
prioritize: 'Niedrige Stufen zuerst ({count})',
|
|
},
|
|
stats: {
|
|
mastery: 'Meisterschaft (Guru+)',
|
|
srsDistribution: 'SRS Verteilung',
|
|
accuracy: 'Genauigkeit',
|
|
correct: 'Richtig',
|
|
total: 'Gesamt',
|
|
next24: 'Nächste 24h',
|
|
availableNow: 'Jetzt verfügbar',
|
|
inHours: 'In {n} Stunde | In {n} Stunden',
|
|
noIncoming: 'Keine Reviews in den nächsten 24h.',
|
|
items: 'Einträge',
|
|
reviewsCount: '{count} Reviews',
|
|
|
|
consistency: 'Lern-Konstanz',
|
|
less: 'Weniger',
|
|
more: 'Mehr',
|
|
|
|
streakTitle: 'Lern-Serie',
|
|
days: 'Tage',
|
|
shieldActive: 'Zen-Schild Aktiv: Schützt dich bei einem verpassten Tag.',
|
|
shieldCooldown: 'Regeneriert: noch {n} Tage',
|
|
|
|
ghostTitle: 'Geister-Items',
|
|
ghostSubtitle: 'Niedrigste Genauigkeit',
|
|
noGhosts: 'Keine Geister gefunden! Weiter so.',
|
|
},
|
|
settings: {
|
|
title: 'Einstellungen',
|
|
batchSize: 'Anzahl pro Sitzung',
|
|
items: 'Einträge',
|
|
language: 'Sprache',
|
|
drawingTolerance: 'Zeichentoleranz',
|
|
strict: 'Strikt',
|
|
loose: 'Locker',
|
|
save: 'Speichern & Schließen',
|
|
},
|
|
review: {
|
|
meaning: 'Bedeutung',
|
|
level: 'Stufe',
|
|
draw: 'Zeichne das Kanji',
|
|
hint: 'Hinweis angezeigt',
|
|
showHint: 'Hinweis zeigen',
|
|
redoLesson: 'Lektion wiederholen',
|
|
tryAgain: 'Nochmal versuchen',
|
|
correct: 'Richtig!',
|
|
next: 'WEITER',
|
|
sessionComplete: 'Sitzung beendet!',
|
|
levelup: 'Du hast deine Kanji-Skills verbessert.',
|
|
back: 'Zurück zur Sammlung',
|
|
caughtUp: 'Alles erledigt!',
|
|
noReviews: 'Gerade keine Reviews verfügbar.',
|
|
viewCollection: 'Zur Sammlung',
|
|
queue: 'Verbleibend:',
|
|
loading: 'Lade Kanji...',
|
|
},
|
|
collection: {
|
|
searchLabel: 'Suche Kanji, Bedeutung oder Lesung...',
|
|
placeholder: "z.B. 'Wasser', 'mizu'",
|
|
loading: 'Lade Sammlung...',
|
|
noMatches: 'Keine Treffer',
|
|
tryDifferent: 'Versuche einen anderen Suchbegriff.',
|
|
levelHeader: 'STUFE',
|
|
onyomi: "On'yomi",
|
|
kunyomi: "Kun'yomi",
|
|
nanori: 'Nanori',
|
|
close: 'Schließen',
|
|
startLesson: 'Lektion starten',
|
|
redoLesson: 'Lektion wiederholen',
|
|
},
|
|
},
|
|
ja: {
|
|
common: {
|
|
close: '閉じる',
|
|
cancel: 'キャンセル',
|
|
},
|
|
nav: {
|
|
dashboard: 'ダッシュボード',
|
|
review: '復習',
|
|
collection: 'コレクション',
|
|
settings: '設定',
|
|
sync: '同期',
|
|
logout: 'ログアウト',
|
|
menu: 'メニュー',
|
|
},
|
|
login: {
|
|
instruction: 'WaniKani V2 APIキーを入力してください',
|
|
placeholder: 'キーを貼り付け...',
|
|
button: 'ログイン',
|
|
failed: 'ログイン失敗。サーバーは起動していますか?',
|
|
},
|
|
alerts: {
|
|
syncSuccess: '同期完了! コレクション: {count}',
|
|
syncFailed: '同期に失敗しました。',
|
|
logoutConfirm: 'ログアウトしてもよろしいですか?セッションが終了します。',
|
|
},
|
|
lesson: {
|
|
phasePrimer: '学習',
|
|
phaseDemo: '観察',
|
|
phaseGuided: 'ガイド',
|
|
phasePractice: '想起',
|
|
understand: '理解した',
|
|
ready: '描いてみる',
|
|
startPractice: '練習開始',
|
|
continue: '次へ',
|
|
streak: '正解: {n} / {total}',
|
|
hint: 'ヒント (連勝リセット)',
|
|
hintAction: 'ヒント',
|
|
watchAgain: 'もう一度見る',
|
|
completeTitle: 'レッスン完了!',
|
|
completeBody: '新しい漢字がレビューに追加されました。',
|
|
learned: '{n}個の新しい漢字を覚えました。',
|
|
components: '構成要素',
|
|
observe: '書き順を見る',
|
|
trace: 'なぞる',
|
|
drawStep: '書く ({n}/{total})',
|
|
backToDashboard: 'ダッシュボードに戻る',
|
|
},
|
|
hero: {
|
|
lessons: 'レッスン',
|
|
newContent: '新しいコンテンツがあります',
|
|
welcome: 'お帰りなさい',
|
|
subtitle: '準備は完了です。',
|
|
start: '復習開始',
|
|
readyToReview: '復習の準備ができています',
|
|
noReviews: 'レビューなし',
|
|
allCaughtUp: 'すべて完了しています',
|
|
nextIn: '次の復習まで',
|
|
now: '今',
|
|
prioritize: '低レベルを優先 ({count})',
|
|
},
|
|
stats: {
|
|
mastery: '習得度 (Guru+)',
|
|
srsDistribution: 'SRS分布',
|
|
accuracy: '正解率',
|
|
correct: '正解',
|
|
total: '合計',
|
|
next24: '今後24時間',
|
|
availableNow: '今すぐ可能',
|
|
inHours: '{n}時間後',
|
|
noIncoming: '24時間以内のレビューはありません。',
|
|
items: '個',
|
|
reviewsCount: '{count} レビュー',
|
|
|
|
consistency: '学習の一貫性',
|
|
less: '少',
|
|
more: '多',
|
|
|
|
streakTitle: '連続学習日数',
|
|
days: '日',
|
|
shieldActive: 'Zenシールド有効: 1日休んでもストリークを守ります。',
|
|
shieldCooldown: '再チャージ中: 残り{n}日',
|
|
|
|
ghostTitle: '苦手なアイテム',
|
|
ghostSubtitle: '正解率が低い',
|
|
noGhosts: '苦手なアイテムはありません!',
|
|
},
|
|
settings: {
|
|
title: '設定',
|
|
batchSize: '1回の復習数',
|
|
items: '個',
|
|
language: '言語 (Language)',
|
|
drawingTolerance: '描画許容範囲',
|
|
strict: '厳しい',
|
|
loose: '甘い',
|
|
save: '保存して閉じる',
|
|
},
|
|
review: {
|
|
meaning: '意味',
|
|
level: 'レベル',
|
|
draw: '正しく描いてください',
|
|
hint: 'ヒント表示',
|
|
showHint: 'ヒントを表示',
|
|
redoLesson: 'レッスンをやり直す',
|
|
tryAgain: 'もう一度',
|
|
correct: '正解!',
|
|
next: '次へ',
|
|
sessionComplete: 'セッション完了!',
|
|
levelup: '漢字力がアップしました。',
|
|
back: 'コレクションに戻る',
|
|
caughtUp: '完了しました!',
|
|
noReviews: '現在レビューするものはありません。',
|
|
viewCollection: 'コレクションを見る',
|
|
queue: '残り:',
|
|
loading: '漢字を読み込み中...',
|
|
},
|
|
collection: {
|
|
searchLabel: '漢字、意味、読みで検索...',
|
|
placeholder: "例: '水', 'mizu'",
|
|
loading: '読み込み中...',
|
|
noMatches: '見つかりませんでした',
|
|
tryDifferent: '別のキーワードで検索してください。',
|
|
levelHeader: 'レベル',
|
|
onyomi: '音読み',
|
|
kunyomi: '訓読み',
|
|
nanori: '名乗り',
|
|
close: '閉じる',
|
|
startLesson: 'レッスン開始',
|
|
redoLesson: 'レッスンをやり直す',
|
|
},
|
|
},
|
|
};
|
|
|
|
const savedLocale = localStorage.getItem('zen_locale') || 'en';
|
|
|
|
const i18n = createI18n({
|
|
legacy: false,
|
|
locale: savedLocale,
|
|
fallbackLocale: 'en',
|
|
messages,
|
|
});
|
|
|
|
export default i18n;
|