diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 9450b5e..9f2b9a4 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -24,6 +24,7 @@ let showEditor = $state(true); let preview_iframe: HTMLIFrameElement | undefined = $state(); let isProgress = $state(false); + let isJapanese = $state(true); let resetModalOpen = $state(false); let bottomDrawerOpen = $state(false); @@ -78,14 +79,14 @@ const name = boardNameInput.trim() === "" ? "Unnamed Board" : boardNameInput.trim(); - await saveBoard({ board: saveState.boardData, name: name }); + await saveBoard({ board: saveState.boardData, name: name }, isJapanese); saveState = { saving: false }; boardNameInput = ""; } async function handleLoad() { - const board = await loadBoard(); + const board = await loadBoard(isJapanese); if (board) { sendEvent("apply_board", board); } @@ -116,9 +117,14 @@ -
+
+
{#each Object.keys(patterns) as (keyof typeof patterns)[] as patternName (patternName)}
-

{patterns[patternName].names.ja}

+

+ {isJapanese ? patterns[patternName].names.ja : patterns[patternName].names.en} +

+
@@ -200,10 +221,16 @@ -
- - -
- 第 {generationFigure} 世代 +
+ +
+ + +
+ {isJapanese ? "第" + generationFigure + "世代" : "Generation" + generationFigure} +
- - - - - + +
+ + + + + -
- 現在の速度: x{1000 / intervalMs} -
+
+ {isJapanese ? "現在の速度" : "Current speed"}: x{1000 / intervalMs} +
-
- Left Arrow -
+
+ - + -
- Right Arrow + + +
-
Board:
- - - - - - + +
+
{isJapanese ? "盤面" : "Board"}:
+ + + + + + + - +
+ - + +
diff --git a/src/routes/api.ts b/src/routes/api.ts index 167e0aa..711c995 100644 --- a/src/routes/api.ts +++ b/src/routes/api.ts @@ -1,4 +1,4 @@ -export async function saveBoard(data: { board: boolean[][]; name: string }) { +export async function saveBoard(data: { board: boolean[][]; name: string }, isJapanese: boolean) { try { const response = await fetch("/api/board", { method: "POST", @@ -9,25 +9,46 @@ export async function saveBoard(data: { board: boolean[][]; name: string }) { }); if (!response.ok) { - throw new Error("サーバーとの通信に失敗しました。"); + if (isJapanese) { + throw new Error("サーバーとの通信に失敗しました。"); + } else { + throw new Error("Failed to communicate with the server."); + } } - alert("盤面を保存しました!"); + if (isJapanese) { + alert("盤面を保存しました!"); + } else { + alert("Board saved!"); + } } catch (err) { - console.error("保存エラー:", err); - alert("保存に失敗しました。"); + if (isJapanese) { + console.error("保存エラー:", err); + alert("保存に失敗しました。"); + } else { + console.error("Save Error:", err); + alert("Failed to save."); + } } } -export async function loadBoard(): Promise { +export async function loadBoard(isJapanese: boolean): Promise { try { const response = await fetch("/api/board"); if (!response.ok) { if (response.status === 404) { - throw new Error("保存されているデータがありません。"); + if (isJapanese) { + throw new Error("保存されているデータがありません。"); + } else { + throw new Error("There is no saved data."); + } } else { - throw new Error("サーバーとの通信に失敗しました。"); + if (isJapanese) { + throw new Error("サーバーとの通信に失敗しました。"); + } else { + throw new Error("Failed to communicate with the server."); + } } } @@ -35,7 +56,12 @@ export async function loadBoard(): Promise { return loadedBoard as boolean[][]; // TODO: add proper types } catch (err) { - console.error("読込エラー:", err); - alert("読み込みに失敗しました。"); + if (isJapanese) { + console.error("読込エラー:", err); + alert("読み込みに失敗しました。"); + } else { + console.error("Load error", err); + alert("Failed to load."); + } } }