Fix Japanese translations for error messages and UI prompts
This commit is contained in:
parent
9674fc9cbe
commit
9ef61fe8a6
@ -83,8 +83,8 @@ export default function TimeSyncNotice({
|
|||||||
const msgJa = error
|
const msgJa = error
|
||||||
? `時刻同期に失敗しました: ${error}`
|
? `時刻同期に失敗しました: ${error}`
|
||||||
: ahead
|
: ahead
|
||||||
? `端末の時計が正確な時刻より ${formatDelay(skewVal)} 進んでいます(通信往復遅延 ${rttMs ?? "-"}ms)`
|
? `端末の時計が基準時刻より ${formatDelay(skewVal)} 進んでいます(往復遅延 ${rttMs ?? "-"}ms)`
|
||||||
: `端末の時計が正確な時刻より ${formatDelay(-skewVal)} 遅れています(通信往復遅延 ${rttMs ?? "-"}ms)`;
|
: `端末の時計が基準時刻より ${formatDelay(-skewVal)} 遅れています(往復遅延 ${rttMs ?? "-"}ms)`;
|
||||||
const msgEn = error
|
const msgEn = error
|
||||||
? `Time sync failed: ${error}`
|
? `Time sync failed: ${error}`
|
||||||
: ahead
|
: ahead
|
||||||
|
|||||||
@ -98,7 +98,7 @@ export default function Timer() {
|
|||||||
setLoaded(true);
|
setLoaded(true);
|
||||||
setErrorMsg("Failed to load schedule; using defaults.");
|
setErrorMsg("Failed to load schedule; using defaults.");
|
||||||
logApiError("loadSchedule", e);
|
logApiError("loadSchedule", e);
|
||||||
toastError("スケジュール取得に失敗しました", e instanceof Error ? e.message : String(e || ""));
|
toastError("スケジュールを取得できませんでした", e instanceof Error ? e.message : String(e || ""));
|
||||||
}
|
}
|
||||||
}, [applySchedule]);
|
}, [applySchedule]);
|
||||||
|
|
||||||
@ -203,7 +203,7 @@ export default function Timer() {
|
|||||||
<NowJst getNowMs={nowMs} />
|
<NowJst getNowMs={nowMs} />
|
||||||
</div>
|
</div>
|
||||||
{/* show time endpoint error */}
|
{/* show time endpoint error */}
|
||||||
{timeError && <div className="timer-status" style={{ color: "#f88" }}>時刻取得エラー: {timeError}</div>}
|
{timeError && <div className="timer-status" style={{ color: "#f88" }}>時刻の取得に失敗しました: {timeError}</div>}
|
||||||
|
|
||||||
{/* Hero digits */}
|
{/* Hero digits */}
|
||||||
<div className={`timer-hero ${hasHours ? "has-hours" : ""}`} role="timer" aria-live="off">
|
<div className={`timer-hero ${hasHours ? "has-hours" : ""}`} role="timer" aria-live="off">
|
||||||
@ -229,10 +229,10 @@ export default function Timer() {
|
|||||||
|
|
||||||
{/* Sub status line */}
|
{/* Sub status line */}
|
||||||
{loaded && phase === "waiting" && (
|
{loaded && phase === "waiting" && (
|
||||||
<div className="timer-status">再生開始まで {formatHMS(untilStart)}</div>
|
<div className="timer-status">再生開始まであと {formatHMS(untilStart)}</div>
|
||||||
)}
|
)}
|
||||||
{loaded && phase === "ended" && (
|
{loaded && phase === "ended" && (
|
||||||
<div className="timer-status">再生終了。 開始 {startLabel} JST.</div>
|
<div className="timer-status">再生は {startLabel} JST に開始しました。</div>
|
||||||
)}
|
)}
|
||||||
{errorMsg && (
|
{errorMsg && (
|
||||||
<div className="timer-status">
|
<div className="timer-status">
|
||||||
|
|||||||
@ -66,10 +66,10 @@ export default function ShowsPage() {
|
|||||||
data.sort((a, b) => a.id - b.id); // ASC
|
data.sort((a, b) => a.id - b.id); // ASC
|
||||||
setShows(data);
|
setShows(data);
|
||||||
} catch (e: unknown) {
|
} catch (e: unknown) {
|
||||||
const msg = e instanceof Error ? e.message : "番組一覧の取得に失敗しました。";
|
const msg = e instanceof Error ? e.message : "番組一覧を取得できませんでした。";
|
||||||
setError(msg);
|
setError(msg);
|
||||||
logApiError("fetch shows", e);
|
logApiError("fetch shows", e);
|
||||||
toastError("番組一覧の取得に失敗しました", msg);
|
toastError("番組一覧を取得できませんでした", msg);
|
||||||
} finally {
|
} finally {
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
}
|
}
|
||||||
@ -94,13 +94,13 @@ export default function ShowsPage() {
|
|||||||
if (!selectedId) { setError("エピソードを選択してください。"); return; }
|
if (!selectedId) { setError("エピソードを選択してください。"); return; }
|
||||||
|
|
||||||
const selected = shows.find(s => s.id === selectedId);
|
const selected = shows.find(s => s.id === selectedId);
|
||||||
if (!selected) { setError("選択中のエピソードが見つかりません。"); return; }
|
if (!selected) { setError("選択中のエピソードが見つかりませんでした。"); return; }
|
||||||
|
|
||||||
const payload: { id: number; start_time?: string } = { id: selectedId };
|
const payload: { id: number; start_time?: string } = { id: selectedId };
|
||||||
|
|
||||||
if (startTime.trim()) {
|
if (startTime.trim()) {
|
||||||
const normalized = toHHMMSS(startTime);
|
const normalized = toHHMMSS(startTime);
|
||||||
if (!normalized) { setError("開始時刻は HH:MM の形式で入力してください。"); return; }
|
if (!normalized) { setError("開始時刻は HH:MM 形式で入力してください。"); return; }
|
||||||
payload.start_time = normalized;
|
payload.start_time = normalized;
|
||||||
} else {
|
} else {
|
||||||
payload.start_time = selected.start_time;
|
payload.start_time = selected.start_time;
|
||||||
@ -118,10 +118,10 @@ export default function ShowsPage() {
|
|||||||
else setRedirectIn(left);
|
else setRedirectIn(left);
|
||||||
}, 250);
|
}, 250);
|
||||||
} catch (e: unknown) {
|
} catch (e: unknown) {
|
||||||
const msg = e instanceof Error ? e.message : "現在のエピソード設定に失敗しました。";
|
const msg = e instanceof Error ? e.message : "現在のエピソードを設定できませんでした。";
|
||||||
setError(msg);
|
setError(msg);
|
||||||
logApiError("set current episode", e);
|
logApiError("set current episode", e);
|
||||||
toastError("現在のエピソード設定に失敗しました", msg);
|
toastError("現在のエピソードを設定できませんでした", msg);
|
||||||
} finally {
|
} finally {
|
||||||
setPosting(false);
|
setPosting(false);
|
||||||
}
|
}
|
||||||
@ -131,7 +131,7 @@ export default function ShowsPage() {
|
|||||||
<div className="shows-page">
|
<div className="shows-page">
|
||||||
<h2 className="h1" style={{ marginBottom: 8 }}>エピソード一覧</h2>
|
<h2 className="h1" style={{ marginBottom: 8 }}>エピソード一覧</h2>
|
||||||
<p className="subtle" style={{ marginTop: 0 }}>
|
<p className="subtle" style={{ marginTop: 0 }}>
|
||||||
エピソードを選択し、必要であれば開始時刻(HH:MM)を入力して「現在のエピソードに設定」を押してください。
|
エピソードを選び、必要に応じて開始時刻(HH:MM)を入力し、「現在のエピソードに設定」を押してください。
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
{loading && <div className="subtle">読み込み中…</div>}
|
{loading && <div className="subtle">読み込み中…</div>}
|
||||||
@ -160,7 +160,7 @@ export default function ShowsPage() {
|
|||||||
<div className="title">第{s.ep_num}話:{s.ep_title}</div>
|
<div className="title">第{s.ep_num}話:{s.ep_title}</div>
|
||||||
<div className="season subtle">{s.season_name}</div>
|
<div className="season subtle">{s.season_name}</div>
|
||||||
<div className="meta subtle">
|
<div className="meta subtle">
|
||||||
開始 {s.start_time.slice(0, 5)}・長さ {formatPlaybackLen(s.playback_length)}
|
開始時刻 {s.start_time.slice(0, 5)}・再生時間 {formatPlaybackLen(s.playback_length)}
|
||||||
</div>
|
</div>
|
||||||
</button>
|
</button>
|
||||||
))}
|
))}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user