国際化 (i18n)
GunjoUI は日本語ブランドのキットですが、shadcn 由来の一部の組み込み文字列(DataTable の「No results.」/ 検索プレースホルダ / ページャなど)は英語が既定です。LocaleProvider を一度かぶせるだけで、それらをまとめて切り替えられます。
ライブデモ
ロケールを切り替えると、下の実コンポーネントの組み込み文字列がその場で入れ替わります(アプリの再読み込みは不要)。
locale="ja"検索入力(searchPlaceholder)
データテーブルの空表示(noResults / filterPlaceholder / ページャ)
| 該当なし |
import { LocaleProvider } from "@gunjo/ui"
// Wrap the app once. locale="ja" switches every built-in string;
// with no provider mounted, components keep their English default.
<LocaleProvider locale="ja">
<App />
</LocaleProvider>優先順位(上書き)
解決順は「インスタンスの prop > プロバイダのバンドル > 組み込み既定」。個別インスタンスで文言を渡すと、プロバイダの言語より優先されます。下の2つ目の入力はロケールを切り替えても固定のままです。
プロバイダに従う
インスタンス prop が優先
// Precedence: per-instance prop > provider bundle > built-in default.
<LocaleProvider locale="ja">
{/* follows the provider → 検索… */}
<SearchInput />
{/* instance prop wins → stays fixed */}
<SearchInput placeholder="固定プレースホルダ" />
</LocaleProvider>カバー範囲
LocaleProvider は横断的な組み込み文字列(noResults・検索/絞り込みプレースホルダ・rowsPerPage・previous/next・close/open・コマンド空表示など)を en/ja で提供します。DataTable / Combobox / SearchInput / CommandPalette / SearchableAccordion / MediaPickerDialog / Dialog / Sheet / Modal / PageAside / Accordion などが読み取ります。
部品固有の文言(ActionQueue の重大度ラベル、EventCalendar の月見出し / 日ラベル書式、ScanGate の手順ラベル、TicketStub のコード alt など)は、グローバルバンドルではなく各コンポーネントのインスタンス上書き prop(severityLabels / formatMonthTitle / formatDayLabel / stepsLabel / formatCodeAlt)で上書きします。既定は日本語のままです。
API
| プロパティ | 型 | 初期値 | 説明 |
|---|---|---|---|
| locale | "en" | "ja" | "en" | 有効なロケール。組み込みバンドル(en/ja)を選びます。既定は en(=プロバイダ未マウント時と同じ後方互換の挙動)。 |
| strings | Partial<LocaleStrings> | - | 選択中バンドルの上に、個別の文字列だけを上書きします(例: 独自の「該当なし」文言)。per-instance の component prop はこれより優先されます。 |
| useLocale() | () => { locale, strings } | - | 有効なロケールと文字列バンドルを読むフック。プロバイダ未マウントでも en バンドルを返し、決して throw しません。 |
| useLocaleStrings() | () => LocaleStrings | - | 有効な文字列バンドルだけを読むショートカット。 |