feat(studio): Store + Cmd+K palette i18n (v0.27.0)

- Localize Store page: search hint, category and status filter
  chips (All / Published / Alpha / Planned / Installed),
  pluralized result count, hub-unreachable / no-matches empty
  states, featured strip header, store-card pills (installed /
  update / version), Install / Update / Details / Read docs /
  Uninstall / Not installable buttons, install-progress dialog,
  uninstall confirm dialog, install / uninstall toasts,
  open-browser failure toast.
- Localize detail-sheet sections: Tags, Required capabilities,
  Required host services, Screenshots, Documentation, Source.
- Localize docs panel: Load documentation button, fetching
  spinner copy, Open repository in browser button, friendly
  error mapping (not_found / no_docs / auth / network / parse).
- Localize Cmd+K palette: search hint, group labels (Pages /
  Modules / Store / Flows), keyboard hint footer, indexing /
  no-matches states, dynamic-hit copy ("installed module ·
  v{version}", "saved flow", "uncategorized"). Static page
  hits now flow through the localized "Pages" group; Settings
  entry uses the localized label and hint.

Status pill values ("published", "alpha", "planned") stay as
data-derived English strings since they map directly to the
store-index `status:` enum.

Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
This commit is contained in:
flemming-it 2026-05-08 02:49:18 +02:00
parent d25b4c87ae
commit e2b2639a86
9 changed files with 990 additions and 109 deletions

View file

@ -360,6 +360,134 @@ class AppLocalizationsEn extends AppLocalizations {
return '$n result$_temp0';
}
@override
String get storeReloadTooltip => 'Reload';
@override
String get storePillInstalled => 'installed';
@override
String get storePillUpdate => 'update';
@override
String storeUpdateButton(String version) {
return 'Update to $version';
}
@override
String storeUpdateTooltip(String installed, String best) {
return 'Installed $installed — store has v$best';
}
@override
String get storeNoTagline => '(no tagline)';
@override
String get storeUninstallTitle => 'Uninstall module?';
@override
String storeUninstallBody(String name) {
return 'Removes $name from this hub. Flows that reference it will fail at the next run.';
}
@override
String storeInstalledToast(String name, String version) {
return '$name v$version installed.';
}
@override
String storeInstallFailedToast(String error) {
return 'Install failed: $error';
}
@override
String storeUninstalledToast(String name, String version) {
return '$name v$version uninstalled.';
}
@override
String storeUninstallFailedToast(String error) {
return 'Uninstall failed: $error';
}
@override
String storeOpenBrowserFailed(String error) {
return 'Could not open browser: $error';
}
@override
String get storeSectionTags => 'Tags';
@override
String get storeSectionRequiredCapabilities => 'Required capabilities';
@override
String get storeSectionRequiredHostServices => 'Required host services';
@override
String get storeSectionScreenshots => 'Screenshots';
@override
String get storeSectionDocumentation => 'Documentation';
@override
String get storeSectionSource => 'Source';
@override
String get storeInstallingButton => 'Installing…';
@override
String get storeNotInstallable => 'Not installable';
@override
String storeNotInstallableTooltip(String status) {
return 'Status \"$status\" — install path not yet wired.';
}
@override
String storeInstallProgressTitle(String name) {
return 'Installing $name';
}
@override
String get storeInstallProgressBody => 'Fetching, verifying, unpacking…';
@override
String get storeLoadDocs => 'Load documentation';
@override
String get storeDocsHint =>
'README rendered inline; uses the hub\'s registry token when needed.';
@override
String get storeDocsFetching => 'Fetching README…';
@override
String get storeOpenRepoButton => 'Open repository in browser';
@override
String get storeDocsErrorNotFound =>
'This module is not in the hub\'s store index.';
@override
String get storeDocsErrorNoDocs =>
'No repository URL is recorded for this module.';
@override
String get storeDocsErrorAuth =>
'The registry requires authentication to fetch this README. Set FAI_REGISTRY_TOKEN in the daemon\'s environment and restart the hub.';
@override
String storeDocsErrorNetwork(String detail) {
return 'Network error while fetching the README. $detail';
}
@override
String get storeDocsErrorParse => 'README is not valid UTF-8.';
@override
String get storeDocsErrorGeneric => 'Could not load README.';
@override
String get storeFederationNudgeTitle => 'Want more capabilities?';
@ -827,4 +955,66 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get languageGerman => 'Deutsch';
@override
String get searchHint => 'Jump anywhere — modules, store, flows, pages…';
@override
String get searchIndexing => 'Indexing…';
@override
String get searchNoMatches => 'No matches.';
@override
String get searchHintNavigate => '↑↓ navigate';
@override
String get searchHintOpen => 'enter open';
@override
String get searchHintClose => 'esc close';
@override
String get searchGroupPages => 'Pages';
@override
String get searchGroupModules => 'Modules';
@override
String get searchGroupStore => 'Store';
@override
String get searchGroupFlows => 'Flows';
@override
String get searchSettingsLabel => 'Settings';
@override
String searchPageHint(int n) {
return 'page · ⌘$n';
}
@override
String get searchSettingsHint => 'hub endpoint, channels, system AI · ⌘;';
@override
String searchInstalledModuleHint(String version) {
return 'installed module · v$version';
}
@override
String get searchStoreUncategorized => 'uncategorized';
@override
String searchStoreHintWithTagline(String tagline) {
return 'store · $tagline';
}
@override
String searchStoreHintWithCategory(String category) {
return 'store · $category';
}
@override
String get searchSavedFlowHint => 'saved flow';
}