Skip to content

デフォルト言語変更時、新デフォルト言語に旧値が初期値としてコピーされる #56

@kochizufan

Description

@kochizufan

概要

地図データの言語リソース(タイトル等)が単一言語(plain string)の状態で、デフォルト言語を別の言語に変更すると、新しいデフォルト言語の入力欄に旧デフォルト言語の値がそのままコピーされてしまう。

再現手順

  1. 新規地図を作成し、タイトルに「日本地図」と入力する(lang: 'ja'title: "日本地図"
  2. 言語追加エリアで「English」タブを選択(currentLang = 'en'
  3. 「このタブをデフォルト言語に設定」チェックボックスを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 版)にも同じバグが存在する(新版での退行ではなく既存バグ)
「旧デフォルト言語の値がフラグメントに変換される」動作自体は正しい
問題は「新デフォルト言語の初期値が空にならず旧値になる」点のみ

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions