Repository navigation
日本語と英語の切り替えに対応する - #3
Merged
Merged
Conversation
既存のdancingmen-messages.jsに英語辞書を足し、DOM側の言語選択を
i18n.jsへ切り出した。HTMLの文言も同じ辞書へ移し、data-i18nで当てる。
- 辞書は68キー×2言語。キー・差し込み名の一致をテストで縛る
- ?lang → localStorage → ブラウザー設定の順で初期言語を決める
- 切り替え時は人形の代替テキスト・置換表・復号ボタン・サンプル一覧を作り直す
- テストは60件から72件へ
見つけた不具合を2件直した。
1. 状態メッセージが言語切り替えで消えていた。翻訳済みの文字列を要素へ
直接入れていたため、作り直しの過程で空になっていた。{key, values}で
覚えておき、描く直前に訳す形へ変更した
2. 320px幅の英語表示でタブが横にはみ出していた(scrollWidth 355)。
.tab-buttonのwhite-space: nowrapが原因。折り返しを許してmin-width: 0を
足し、320pxに収めた
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
何をしたか
日本語UIだった本ツールに英語UIを足し、右上のボタンで切り替えられるようにしました。
既存の
dancingmen-messages.jsに「英語も同じキーを共有できる」設計コメントがあったため、新しい辞書ファイルを作らず、この構造をそのまま広げています。
画面に触る層(言語の決定・
data-i18nの適用・localStorage)だけをi18n.jsへ切り出しました。dancingmen-messages.jsはdocument・localStorage等を持てない(test/static.test.jsが禁じている)ためです。?lang=ja/?lang=en→localStorage→ ブラウザーの言語設定の順で決まるlanguagechangeが起き、人形の代替テキスト・置換表26行・復号ボタン52個・サンプル一覧を作り直すscript.jsのt()が既定言語固定(DancingMenMessages.DEFAULT_LANG)だったのを、選択中の言語を見る形へ変更noscriptは両言語併記(JSが動かない環境では切り替えられないため)README.en.mdを新設し、README.mdと相互リンク見つけた不具合(2件、いずれも本PRで修正)
1. 状態メッセージが言語切り替えで消えていた
翻訳済みの文字列を
status.textContent = t(...)で要素へ直接書いていたため、切り替え時の作り直し(
encrypt()/updateDecryption())が走ると空になっていました。貼り付け復号の「読めなかった部分: 「1」「!」」のような、消えては困る情報も失われます。
{ key, values }をstatusMessagesに覚えておき、描く直前に訳す形へ変更しました。対象は5か所(
validation-feedback/decode-status/save-status/font-copy-status/copy-toast)。次の入力で消える従来の挙動は保っています。
実測(同じ状態で
ja→en→ja):2. 320px幅の英語表示でタブが横にはみ出していた
.tab-buttonのwhite-space: nowrapが原因です。日本語の「📓 置換表」は収まりますが、英語の "📓 Substitution table" が収まらず、
documentElement.scrollWidthが 355(ビューポート320)になり横スクロールが出ていました。折り返しを許し、flexアイテムが縮めるよう
min-width: 0を足して 320 に収めました。実測(Playwright、Chromium、
python -m http.server)?lang=jahtml lang=ja、title「DancingMen CipherLab - ドイルの踊る人形暗号ツール」?lang=enhtml lang=en、title "DancingMen CipherLab - Sherlock Holmes Dancing Men Cipher Tool"noscriptの併記と切り替えボタンのラベル「日本語」localStorageにenが入り、再読込後も enCharacters that can be encrypted: 15、代替テキストM (with a flag)aria-labelはA (with a flag)aria-labelはEnlarge A (no flag)。モーダルも英語(Close)、Escで閉じて元のボタンへフォーカスが戻るMessage 1: AM HERE ABE SLANEY。選択(m1)は切り替えを越えて維持Hi, 1→Removed the characters that cannot be used: “,”“1” / Full-width letters, full-width spaces and tabs became half-widthCharacters that can be encrypted: 76、PNG保存ボタンが有効化テスト
npm testは 60件 → 72件。全件パスします。test/i18n.test.js(12件)で次を縛りました。{letter}等)も一致するindex.htmlのdata-i18n*が指すキーがすべて両辞書にある(44キー以上)script.jsが呼ぶキーがすべて両辞書にある(t("...")と{ key: "..." }の両方を走査)app.langButtonだけ例外)t()が差し込みを埋め、リストを引用符で包み、知らないキー・欠けた値で throw するi18n.jsを他のスクリプトより先に読み込むstatus.textContent =を禁止)noscriptが両言語を併記しているREADME.en.mdがあり、両READMEが相互リンクし、見出しに和文が無い既存の
test/html.test.jsはスクリプトの読み込み順にi18n.jsを足し、langToggleをID一覧へ追加しました。既存テストは
M.format("ja", ...)と言語を明示していたため、英語追加で壊れたものはありません。ドキュメント
README.md: 相互リンク、機能に切り替えの1行、「言語の切り替え」節、localStorageに入るのは言語の選択だけである旨、ツリー更新README.en.md: 英語として読める形で新規作成(丸写しではない)CLAUDE.md: 「Japanese-First Design / 英語辞書と切り替えは後回し」を「Bilingual UI」へ書き換え、子要素を持つ要素に
data-i18nを付けない・表示文字列で分岐しない等の注意を明記🤖 Generated with Claude Code