Repository navigation
日本語と英語の切り替えに対応する - #2
Merged
Merged
Conversation
js/i18n.js に日英217キーの辞書とDOM適用層を置き、画面・通知・解析レポートの
全文を切り替えられるようにした。?lang= → localStorage → navigator.language の順で
言語を決め、選択は whereshot-language に保存する。
純ロジック(js/whereshot-logic.js)からは文言を外し、{key, params} を返す形にした。
座標変換・距離計算・太陽位置・Exifの読み出し・整合度の式は無変更(34関数と
OFFSET_CHOICES・FILENAME_PATTERNS が旧版と同一であることを機械的に照合済み)。
i18n化の過程で見つけて直した不具合:
- 表示中のトーストが言語切り替えに追従しない。訳した文字列ではなくキーを
data-toast-key に覚え、languagechange で訳し直すようにした
- 地図マーカーのポップアップ・精度円のツールチップ・座標表示が、
作った言語のまま残る。{key, params} を保持して作り直すようにした
- プレビュー切り替えボタンの文言を直書きで書き戻していた。開いているか
どうかの状態から組み立てるようにした
- SHA-256欄が「未算出」と「この環境では不可」を文言だけで区別していた。
hashState を持たせた
- 起動直後は #upload-title・#direction-info・#map-coordinates・#weather-link が
HTMLの日本語のままだった(JSが上書きするのは操作後)。初期化で描くようにした
- 検証エラーを '、' で連結してから表示していたため、言語を切り替えると
直せなかった。1件ずつトーストを出すようにした
- ファイル形式が空のときの '不明' が pure logic 側にあり、英語でも和文が出た
訳さなかったもの: Exifのタグ名(DateTimeOriginal・GPSHPositioningError ほか)、
地図サービス名(OpenStreetMap・NASA Worldview・Street View)、座標の度分秒表記、
気象庁観測所の名前(データの識別子。READMEの表と既存テストが照合している)、
ファイル名の日本語日付パターン(ツールの入力そのもの)。
metaは description・keywords・og:title・og:description・twitter:title・
twitter:description の6つを data-i18n-content で訳す(OGPとカードを追加)。
テストは58件から73件へ。test/i18n.test.js でキー集合・差し込み名・HTMLと
スクリプトが使うキーの実在・英語辞書の和文・data-i18nの子要素・状態スロットに
data-i18nを付けないこと・純ロジックとHTMLに残る和文の行を固定した。
実測(Chromium、ポート8131): ?lang=ja/en で切り替わり、CSP違反0・JSエラー0。
英語表示に残る和文は noscript と切り替えボタンの「日本語」、および観測所名の
「高松」だけ。解析結果・入力値・開いたプレビュー・aria-pressed・出ている
トーストは切り替えても保たれる。320pxと390pxの英語表示で溢れなし
(documentElement.scrollWidth = ビューポート幅)。localStorageを塞いだ環境と
file:// でも動作する。
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.
概要
WhereShot を日本語と英語の両対応にしました。画面だけでなく、通知・警告・地図のポップアップ・解析レポートの全文が切り替わります。
js/i18n.jsに日英 217キー の辞書とDOM適用層を置いた(ja/enはキーの並びまで一致)?lang=→localStorage(whereshot-language)→navigator.languageの順で決める#langToggleで即座に切り替わり、再読み込み後も維持されるREADME.en.mdを追加(日本語READMEと構成をそろえた)解析・計算のロジックは無変更
js/whereshot-logic.jsの変更は文言をキーに置き換えただけです。機械的に照合しました。isValidWall/parseExifDateTime/parseOffset/wallToUtcMs/utcMsToWall/gpsDateTimeToUtcMs/inferOffsetFromGps/decideOffset/distanceM/bearing/destinationPoint/decimalToDms/nearestStation/sunPhaseKey/sunReport/normalizeTags/extractDatesFromFilenameほか 34関数が旧版と同一OFFSET_CHOICES・EARTH_RADIUS・DAY_MS・JMA_TOP・FILENAME_PATTERNSも同一estimateDateTimeは重み(0.95 / 0.9 / 0.85 / 0.4〜0.6 / 0.5 / 0.3)・許容差(1時間 / 24時間)・整合度の式(round(weight × (0.5 + 0.5 × agreement) × 100) ÷ 100)に手を入れていない。差分はlabelを{key, params}にした部分だけjs/exif-parser.js・js/sun-calculator.js・data/・vendor/・css/は無変更日本語の出力が変わっていないことは、既存の「レポートの15行」テストで固定しました(15行の文言を1文字も変えずに残し、
I18n.messages(buildReport(...), 'ja')が一致することを assert)。英語15行も同時に固定しています。i18n化の過程で見つけて直した不具合(7件)
#upload-title・#direction-info・#map-coordinates・#weather-linkがHTMLの日本語のまま'、'で連結してから表示していた'不明'が純ロジック側にあったいずれも「訳した文字列で状態を持っていた」ことが原因です。状態は
datasetかプロパティで持ち、languagechangeでrender*()が描き直す形にそろえました。訳さなかったものと理由
DateTimeOriginal・OffsetTimeOriginal・GPSHPositioningError・GPSDOP・ExposureTime)— 実物のタグ名そのもので、訳すと原典と照合できないOpenStreetMap・NASA Worldview・Street View・SunCalc.org・GSI Maps)— 固有名詞34°17'10.01"Nと小数6桁)— 数値と記号だけで言語に依存しない高松・那覇ほか54件)—data/stations.jsonの識別子で、READMEの表と既存テストが名前で照合している。英語表示でもPast weather (高松, about 23 km)と出るja-full・ja-dateの(\d{4})年(\d{1,2})月…)— ツールの入力そのものconsole.errorと内部例外(WhereShot: failed to initialize the mapほか)— 画面に出ないので辞書に入れず、固定の英文にしたmeta
data-i18n-contentを6つに付けました(grep -c data-i18n-content index.html→6)。description/keywords/og:title/og:description/twitter:title/twitter:descriptionkeywordsとOGP・Twitterカードはこのツールに無かったので追加しました。英語でリンクを共有しても説明文が日本語になりません。和文のcontentを持つmetaにdata-i18n-contentが付いているかはテストで縛っています。テスト
58件 → 73件(
npm test、すべてパス)。test/i18n.test.jsで次を固定しました。{name})が日英で一致するphase.*・cardinal.*・SOURCE_KEYSは別に数え上げるapp.langButtonだけ例外)t()が差し込みを埋め、知らないキーで throw する。入れ子の{key, params}を表示の直前に訳すdata-i18nを付けた78要素が子要素を抱えていないdata-i18nを付けていない(付けると切り替えで結果が消える)<title>と<noscript>の2行だけ(行の配列でdeepEqual)既存テストの修正は、スクリプトの読み込み順(
js/i18n.jsを追加)、外形の数、formatWallの引数、toCardinalJa→cardinalKey、formatCamera(null, null)がnull、構成図の件数(26 → 28)です。ブラウザー実測(Chromium、ポート8131)
?lang=ja/?lang=enでdocumentElement.lang・<title>・本文が切り替わる。CSP違反0、JSエラー0localStorageに保存され、再読み込み後も維持される2016-07-24T10:33:57)、UTCオフセット(540)、Exif 4カード、日時ソース6行、太陽5項目、レポート15行がすべて訳し直されるIMG_20240101_123456.jpg)で出る警告3件と注記1件も訳し直されるaria-pressed="true")、プレビュー表示中を保つClick the map to set the capture location→地図をクリックして撮影位置を指定してください).tiff)— Exif読み取り失敗のトースト、This format cannot be previewed、空欄表示のすべてが切り替わる-のプレースホルダーが残る)documentElement.scrollWidthがビューポート幅と一致、ビューポートより広い要素0件(CSSの変更は不要だった)localStorageのゲッターに throw を仕込んだ環境でもinitが落ちず、切り替えも動くfile://で直接開いても?lang=enが効く🤖 Generated with Claude Code