国際化
formulon-cell は en と ja の辞書を同梱しています。ロケールはランタイムで切替可能で、ラベルは remount なしに置き換わります。ホストは同梱辞書を上書きしたり、新規ロケールを登録できます。
用語: i18n コントローラ
SpreadsheetInstance.i18n で公開されるランタイムコントローラ。アクティブロケール、辞書レジストリ、変更時のストア通知を担当し、chrome の再描画を促します。
ロケール切替
const instance = await Spreadsheet.mount(host, { workbook, locale: 'en' })
instance.i18n.setLocale('ja')切替後に localeChange イベントが発火するため、ステータスバーや永続化レイヤを同期できます。
fork せず上書きする
i18n.extend(locale, partialDictionary) で既存辞書の上にマージします。
instance.i18n.extend('ja', {
contextMenu: {
copy: 'コピーする'
}
})上書きは実行中インスタンスのみに効きます。パッケージ同梱の辞書本体は変わりません。
新規ロケールを登録する
import fr from './locales/fr.js'
instance.i18n.register('fr', fr)
instance.i18n.setLocale('fr')ロケールは plain な JS 値です。同梱辞書と同じ形に揃えてください。例(抜粋):
export default {
meta: { locale: 'fr', label: 'Français' },
contextMenu: {
copy: 'Copier',
paste: 'Coller',
pasteSpecial: 'Collage spécial…',
cut: 'Couper'
},
toolbar: {
bold: 'Gras',
italic: 'Italique',
underline: 'Souligner'
},
// ...
}辞書は静的 JSON、非同期ロード、翻訳パイプラインからの生成、どの形でも構いません。
辞書を読む
ホスト chrome や extension は controller 経由で辞書を読めます。
const label = instance.i18n.t('contextMenu.copy')ビルトイン chrome も同じ t() を内部で呼んでいます。キー欠落時は同梱 English にフォールバックし、UI に raw key が出ることはありません。
UI ロケールと engine の互換性プロファイルは別
engine 側のロケール挙動(日付パース・通貨・リスト区切り)は Excel の compatibility profile で決まり、UI の i18n.setLocale とは独立です。UI をフランス語にしても数式評価結果は変わりません。engine 側は ロケールプロファイル を参照。
ユーザー選択の永続化
localeChange を購読してホスト側で永続化します。パッケージは自動で localStorage に書きません。
instance.on('localeChange', ({ locale }) => {
localStorage.setItem('cell.locale', locale)
})次回マウント時:
const saved = localStorage.getItem('cell.locale') ?? 'ja'
const instance = await Spreadsheet.mount(host, { workbook, locale: saved })