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

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