Skip to content

国際化

formulon-cellenja の辞書を同梱しています。ロケールはランタイムで切替可能で、ラベルは remount なしに置き換わります。ホストは同梱辞書を上書きしたり、新規ロケールを登録できます。

用語: i18n コントローラ

SpreadsheetInstance.i18n で公開されるランタイムコントローラ。アクティブロケール、辞書レジストリ、変更時のストア通知を担当し、chrome の再描画を促します。

ロケール切替

ts
const instance = await Spreadsheet.mount(host, { workbook, locale: 'en' })

instance.i18n.setLocale('ja')

切替後に localeChange イベントが発火するため、ステータスバーや永続化レイヤを同期できます。

fork せず上書きする

i18n.extend(locale, partialDictionary) で既存辞書の上にマージします。

ts
instance.i18n.extend('ja', {
  contextMenu: {
    copy: 'コピーする'
  }
})

上書きは実行中インスタンスのみに効きます。パッケージ同梱の辞書本体は変わりません。

新規ロケールを登録する

ts
import fr from './locales/fr.js'

instance.i18n.register('fr', fr)
instance.i18n.setLocale('fr')

ロケールは plain な JS 値です。同梱辞書と同じ形に揃えてください。例(抜粋):

ts
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 経由で辞書を読めます。

ts
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 に書きません。

ts
instance.on('localeChange', ({ locale }) => {
  localStorage.setItem('cell.locale', locale)
})

次回マウント時:

ts
const saved = localStorage.getItem('cell.locale') ?? 'ja'
const instance = await Spreadsheet.mount(host, { workbook, locale: saved })

次に読むもの