refactor(i18n): route consumer reads through ClideSettings.i18n (T-474)
Migrate widget i18n reads from ClideKernel.of(context).i18n to the unified ClideSettings.i18n.of(context) facade (D-101), so settings/theme/fonts/i18n share one widget-facing entry point. The facade delegates to the same I18n service, so behaviour is unchanged. Infra plumbing (KernelServices / ExtensionManager fields, the slot-host Listenable.merge) keeps its direct kernel reference. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -18,7 +18,7 @@ class ExtensionsNotice extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final tokens = ClideTheme.of(context).surface;
|
||||
final i = ClideKernel.of(context).i18n;
|
||||
final i = ClideSettings.i18n.of(context);
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
|
||||
@@ -69,7 +69,7 @@ class SettingsSearchResults extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final tokens = ClideTheme.of(context).surface;
|
||||
final i = ClideKernel.of(context).i18n;
|
||||
final i = ClideSettings.i18n.of(context);
|
||||
final store = ClideKernel.of(context).settings;
|
||||
final registry = ClideKernel.of(context).settingsRegistry;
|
||||
return ListenableBuilder(
|
||||
@@ -501,7 +501,7 @@ class _ScopeTagState extends State<_ScopeTag> {
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
String _ns(String key, String fallback) => ClideKernel.of(context).i18n.string(key, namespace: _settingsNs, placeholder: fallback);
|
||||
String _ns(String key, String fallback) => ClideSettings.i18n.of(context).string(key, namespace: _settingsNs, placeholder: fallback);
|
||||
|
||||
({String glyph, Color color, String tip, String label}) _appearance(SettingsScope? layer) {
|
||||
final tokens = ClideTheme.of(context).surface;
|
||||
|
||||
@@ -49,7 +49,7 @@ class _SettingsModalState extends State<SettingsModal> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final i = ClideKernel.of(context).i18n;
|
||||
final i = ClideSettings.i18n.of(context);
|
||||
final tokens = ClideTheme.of(context).surface;
|
||||
final title = i.string('modal.title', namespace: SettingsModal.ns, placeholder: 'Settings');
|
||||
|
||||
@@ -140,7 +140,7 @@ class _CloseButton extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final tokens = ClideTheme.of(context).surface;
|
||||
final i = ClideKernel.of(context).i18n;
|
||||
final i = ClideSettings.i18n.of(context);
|
||||
final label = i.string('modal.close', namespace: SettingsModal.ns, placeholder: 'Close');
|
||||
final hint = i.string('modal.close.hint', namespace: SettingsModal.ns, placeholder: 'Close settings');
|
||||
return Semantics(
|
||||
@@ -178,7 +178,7 @@ class _CategoryRail extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final tokens = ClideTheme.of(context).surface;
|
||||
final i = ClideKernel.of(context).i18n;
|
||||
final i = ClideSettings.i18n.of(context);
|
||||
final registry = ClideKernel.of(context).settingsRegistry;
|
||||
final searching = query.trim().isNotEmpty;
|
||||
return ListenableBuilder(
|
||||
@@ -312,7 +312,7 @@ class _EmptyState extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final tokens = ClideTheme.of(context).surface;
|
||||
final i = ClideKernel.of(context).i18n;
|
||||
final i = ClideSettings.i18n.of(context);
|
||||
return Center(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(24),
|
||||
|
||||
@@ -19,7 +19,7 @@ class AppearanceThemeControl extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final controller = ClideKernel.of(context).theme;
|
||||
final i = ClideKernel.of(context).i18n;
|
||||
final i = ClideSettings.i18n.of(context);
|
||||
return ListenableBuilder(
|
||||
listenable: controller,
|
||||
builder: (context, _) {
|
||||
|
||||
@@ -45,9 +45,8 @@ class _SettingsViewState extends State<SettingsView> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final kernel = ClideKernel.of(context);
|
||||
final tokens = ClideTheme.of(context).surface;
|
||||
final i = kernel.i18n;
|
||||
final i = ClideSettings.i18n.of(context);
|
||||
final themes = baseThemes(widget.controller.available);
|
||||
final currentBase = baseThemeName(widget.controller.currentName);
|
||||
final title = i.string('modal.title', namespace: SettingsView.ns, placeholder: 'Settings');
|
||||
|
||||
@@ -368,5 +368,5 @@ String resolveTabTitle(BuildContext context, TabContribution t) {
|
||||
final key = t.titleKey;
|
||||
final ns = t.i18nNamespace;
|
||||
if (key == null || ns == null) return t.title;
|
||||
return ClideKernel.of(context).i18n.string(key, namespace: ns, placeholder: t.title);
|
||||
return ClideSettings.i18n.of(context).string(key, namespace: ns, placeholder: t.title);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user