Chromeの翻訳機能で発生するロケールエラーを上流ライブラリの更新で修正
@shoelace-style/localize を 3.2.1 から 3.2.2 へ更新し、無効な言語コードが渡された際にコンソールへ例外が出力される問題を解消しました。
背景
Chromeの組み込み翻訳機能を使用している環境で、特定の操作手順でコンポーネントが RangeError を繰り返しスローする問題が報告されていました(#2322)。
具体的な再現手順は以下のとおりです:
- 非英語環境(例:ノルウェー語)でページを開く
- Chrome Translate で英語に翻訳する
- 元の言語(検出言語)に戻す
- コンポーネントの更新時に以下のエラーが繰り返し発生する
Uncaught (in promise) RangeError: Incorrect locale information provided
at new Locale (<anonymous>)
at LocalizeController2.getTranslationData (chunk.HPOJN4W7.js:63:20)
at LocalizeController2.term (chunk.HPOJN4W7.js:80:41)
at WaSpinner.render (chunk.V5OSAXVV.js:30:36)
Chromeの翻訳機能が言語を切り替える際に Intl.Locale コンストラクタが受け付けない形式の言語コードを渡すことがあり、LocalizeController の getTranslationData 内で new Locale() が例外を投げていました。
技術的な変更
修正の実体は @shoelace-style/localize の上流リポジトリにコミット d888d8d として取り込まれており、本PRはそのバージョン更新を反映するものです。
packages/webawesome/package.json の依存バージョンを更新しています:
変更前:
"@shoelace-style/localize": "^3.2.1"
変更後:
"@shoelace-style/localize": "^3.2.2"
package-lock.json では解決済みバージョンが 3.2.1 から 3.2.2 に更新されるとともに、@konnorr/qr-creator パッケージのエントリが削除されています。これは依存関係ツリーの整理によるものであり、機能的な変更ではありません。
設計判断
修正は webawesome 側に手を加えず、上流ライブラリへの委譲で解決する方針が採られました。
Intl.Locale への無効な言語コードの渡し方に対するガード処理は @shoelace-style/localize ライブラリが担うべき責務であり、その修正を上流に取り込んでバージョンを上げるだけで問題が解消されています。webawesome 側でのワークアラウンドを追加することなく、責務の境界を維持した判断といえます。
まとめ
Chromeの翻訳機能に起因する RangeError は、上流ライブラリである @shoelace-style/localize 3.2.2 への更新により根本解決されました。ユーザー向けの動作変更はなく、特定の操作フローでコンソールに出力されていたエラーが解消されます。