概要
地図データの言語リソース(タイトル等)が単一言語(plain string)の状態で、デフォルト言語を別の言語に変更すると、新しいデフォルト言語の入力欄に旧デフォルト言語の値がそのままコピーされてしまう。
再現手順
- 新規地図を作成し、タイトルに「日本地図」と入力する(
lang: 'ja'、title: "日本地図")
- 言語追加エリアで「English」タブを選択(
currentLang = 'en')
- 「このタブをデフォルト言語に設定」チェックボックスをONにする
期待される動作
title.ja = "日本地図"(旧デフォルト言語のフラグメントとして保持)✅ 正しい
title.en = ""(新デフォルト言語の初期値は空)
実際の動作
title.ja = "日本地図"(旧フラグメント: 正しい)✅
title.en = "日本地図"(新デフォルト言語にも旧値がコピーされる)❌ バグ
原因分析
defaultLangFlag setter(frontend/src/model/map.js)の処理フロー:
// step 1: 旧lang(ja)の値をbufferに保存 → buffer.title = "日本地図"
// step 2: this.lang = newLang('en')
// step 3: localedSetBylocale('ja', "日本地図")
// → val がplain stringのため { en: "日本地図", ja: "日本地図" } に変換される
// (localedSetBylocale内の val_[lang] = val で en にも旧値が入る)
// step 4: localedSetBylocale('en', this['title'])
// → this['title'] = "日本地図"(step3で入った値)→ 変化なし
localedSetBylocale(oldLang, ...) が plain string → object 変換時に val_[newLang] = val を自動セットするため、step 3 の時点で新言語にも旧値が入ってしまう。
影響範囲
langAttr 全フィールド:title, officialTitle, author, era, createdAt, contributor, mapper, attr, dataAttr, description
備考
旧版(Electron + Vue2 版)にも同じバグが存在する(新版での退行ではなく既存バグ)
「旧デフォルト言語の値がフラグメントに変換される」動作自体は正しい
問題は「新デフォルト言語の初期値が空にならず旧値になる」点のみ
概要
地図データの言語リソース(タイトル等)が単一言語(plain string)の状態で、デフォルト言語を別の言語に変更すると、新しいデフォルト言語の入力欄に旧デフォルト言語の値がそのままコピーされてしまう。
再現手順
lang: 'ja'、title: "日本地図")currentLang = 'en')期待される動作
title.ja = "日本地図"(旧デフォルト言語のフラグメントとして保持)✅ 正しいtitle.en = ""(新デフォルト言語の初期値は空)実際の動作
title.ja = "日本地図"(旧フラグメント: 正しい)✅title.en = "日本地図"(新デフォルト言語にも旧値がコピーされる)❌ バグ原因分析
defaultLangFlagsetter(frontend/src/model/map.js)の処理フロー:localedSetBylocale(oldLang, ...) が plain string → object 変換時に val_[newLang] = val を自動セットするため、step 3 の時点で新言語にも旧値が入ってしまう。
影響範囲
langAttr 全フィールド:title, officialTitle, author, era, createdAt, contributor, mapper, attr, dataAttr, description
備考
旧版(Electron + Vue2 版)にも同じバグが存在する(新版での退行ではなく既存バグ)
「旧デフォルト言語の値がフラグメントに変換される」動作自体は正しい
問題は「新デフォルト言語の初期値が空にならず旧値になる」点のみ