From bc546e6a49c2dafc8d20e746bd178bd5b7a0151a Mon Sep 17 00:00:00 2001 From: Maximilian Flechtner Date: Thu, 17 Jun 2021 12:36:02 +0200 Subject: [PATCH 1/2] Added Internationalization https://github.com/leoafarias/sidekick/issues/81#issue-896701712 Added Internationalization and first Language --- lib/generated/intl/messages_all.dart | 67 + lib/generated/intl/messages_de.dart | 193 +++ lib/generated/intl/messages_en.dart | 193 +++ lib/generated/l10n.dart | 1446 +++++++++++++++++ lib/l10n/intl_de.arb | 140 ++ lib/l10n/intl_en.arb | 140 ++ lib/main.dart | 10 + .../molecules/advanced_info_tile.dart | 11 +- .../components/molecules/cache_info_tile.dart | 7 +- .../components/molecules/delete_dialog.dart | 9 +- lib/src/components/molecules/info_banner.dart | 9 +- .../molecules/reference_info_tile.dart | 7 +- .../molecules/release_info_section.dart | 3 +- .../components/molecules/setup_button.dart | 3 +- .../molecules/version_install_button.dart | 5 +- .../organisms/cleanup_unused_dialog.dart | 15 +- .../organisms/global_info_dialog.dart | 19 +- lib/src/components/organisms/info_drawer.dart | 3 +- lib/src/modules/common/app_shell.dart | 14 +- lib/src/modules/common/atoms/copy_button.dart | 3 +- .../modules/common/atoms/refresh_button.dart | 3 +- .../common/atoms/sliver_header_delegate.dart | 3 +- lib/src/modules/common/constants.dart | 9 +- lib/src/modules/common/utils/open_link.dart | 7 +- .../fvm/components/fvm_cache_size.dart | 5 +- .../fvm/components/fvm_empty_releases.dart | 7 +- .../fvm/components/fvm_release_actions.dart | 9 +- .../fvm/components/fvm_release_list_item.dart | 3 +- lib/src/modules/fvm/fvm.screen.dart | 9 +- lib/src/modules/fvm/fvm_queue.provider.dart | 15 +- .../components/package_list_item.dart | 9 +- .../components/package_score_display.dart | 7 +- .../packages/components/packages_empty.dart | 7 +- lib/src/modules/packages/packages.screen.dart | 7 +- .../projects/components/project_actions.dart | 5 +- .../components/project_list_item.dart | 3 +- .../components/project_release_select.dart | 5 +- .../projects/components/projects_empty.dart | 7 +- .../modules/projects/projects.provider.dart | 3 +- lib/src/modules/projects/projects.screen.dart | 15 +- lib/src/modules/releases/releases.screen.dart | 13 +- lib/src/modules/sandbox/sandbox.screen.dart | 21 +- .../modules/search/components/search_bar.dart | 9 +- .../components/search_results_list.dart | 11 +- lib/src/modules/search/search.provider.dart | 3 +- .../scenes/flutter_settings.scene.dart | 21 +- .../settings/scenes/fvm_settings.scene.dart | 11 +- .../scenes/general_settings.scene.dart | 57 +- lib/src/modules/settings/settings.dto.dart | 4 + lib/src/modules/settings/settings.screen.dart | 7 +- .../updater/components/update_button.dart | 15 +- .../updater/components/update_info.dart | 7 +- lib/src/screens/error_db_screen.dart | 5 +- pubspec.lock | 12 + pubspec.yaml | 4 + 55 files changed, 2457 insertions(+), 178 deletions(-) create mode 100644 lib/generated/intl/messages_all.dart create mode 100644 lib/generated/intl/messages_de.dart create mode 100644 lib/generated/intl/messages_en.dart create mode 100644 lib/generated/l10n.dart create mode 100644 lib/l10n/intl_de.arb create mode 100644 lib/l10n/intl_en.arb diff --git a/lib/generated/intl/messages_all.dart b/lib/generated/intl/messages_all.dart new file mode 100644 index 00000000..5e9098d2 --- /dev/null +++ b/lib/generated/intl/messages_all.dart @@ -0,0 +1,67 @@ +// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart +// This is a library that looks up messages for specific locales by +// delegating to the appropriate library. + +// Ignore issues from commonly used lints in this file. +// ignore_for_file:implementation_imports, file_names, unnecessary_new +// ignore_for_file:unnecessary_brace_in_string_interps, directives_ordering +// ignore_for_file:argument_type_not_assignable, invalid_assignment +// ignore_for_file:prefer_single_quotes, prefer_generic_function_type_aliases +// ignore_for_file:comment_references + +import 'dart:async'; + +import 'package:intl/intl.dart'; +import 'package:intl/message_lookup_by_library.dart'; +import 'package:intl/src/intl_helpers.dart'; + +import 'messages_de.dart' as messages_de; +import 'messages_en.dart' as messages_en; + +typedef Future LibraryLoader(); +Map _deferredLibraries = { + 'de': () => new Future.value(null), + 'en': () => new Future.value(null), +}; + +MessageLookupByLibrary _findExact(String localeName) { + switch (localeName) { + case 'de': + return messages_de.messages; + case 'en': + return messages_en.messages; + default: + return null; + } +} + +/// User programs should call this before using [localeName] for messages. +Future initializeMessages(String localeName) async { + var availableLocale = Intl.verifiedLocale( + localeName, + (locale) => _deferredLibraries[locale] != null, + onFailure: (_) => null); + if (availableLocale == null) { + return new Future.value(false); + } + var lib = _deferredLibraries[availableLocale]; + await (lib == null ? new Future.value(false) : lib()); + initializeInternalMessageLookup(() => new CompositeMessageLookup()); + messageLookup.addLocale(availableLocale, _findGeneratedMessagesFor); + return new Future.value(true); +} + +bool _messagesExistFor(String locale) { + try { + return _findExact(locale) != null; + } catch (e) { + return false; + } +} + +MessageLookupByLibrary _findGeneratedMessagesFor(String locale) { + var actualLocale = Intl.verifiedLocale(locale, _messagesExistFor, + onFailure: (_) => null); + if (actualLocale == null) return null; + return _findExact(actualLocale); +} diff --git a/lib/generated/intl/messages_de.dart b/lib/generated/intl/messages_de.dart new file mode 100644 index 00000000..0f946483 --- /dev/null +++ b/lib/generated/intl/messages_de.dart @@ -0,0 +1,193 @@ +// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart +// This is a library that provides messages for a de locale. All the +// messages from the main program should be duplicated here with the same +// function name. + +// Ignore issues from commonly used lints in this file. +// ignore_for_file:unnecessary_brace_in_string_interps, unnecessary_new +// ignore_for_file:prefer_single_quotes,comment_references, directives_ordering +// ignore_for_file:annotate_overrides,prefer_generic_function_type_aliases +// ignore_for_file:unused_import, file_names + +import 'package:intl/intl.dart'; +import 'package:intl/message_lookup_by_library.dart'; + +final messages = new MessageLookup(); + +typedef String MessageIfAbsent(String messageStr, List args); + +class MessageLookup extends MessageLookupByLibrary { + String get localeName => 'de'; + + static m0(updateInfoLatest) => "Eine neue Version von Sidekick ist verfügbar (${updateInfoLatest})."; + + static m1(itemVersionName) => "Channel ${itemVersionName} wurde aktualisiert."; + + static m2(url) => "Konnte ${url} nicht öffnen"; + + static m3(count) => "${count} gefunden"; + + static m4(cachedVersions) => "${cachedVersions} Versionen"; + + static m5(packageProjectsCount) => "${packageProjectsCount} Projekte"; + + static m6(projects) => "${projects} Projekte"; + + static m7(releases) => "${releases} Versionen"; + + static m8(updateInfoLatest) => "Sidekick version ${updateInfoLatest} ist nun Verfügbar."; + + static m9(itemname) => "Dadurch wird ${itemname} aus dem Cache von Ihrem System entfernt."; + + static m10(itemVersionName) => "Die Version ${itemVersionName} wurde installiert."; + + static m11(itemVersionName) => "Die Version ${itemVersionName} wurde entfernt."; + + static m12(itemVersionName) => "Version ${itemVersionName} wurde als global festgelegt."; + + static m13(itemVersionName) => "Version ${itemVersionName} hat das Setup beendet."; + + static m14(version, projectName) => "Version ${version} angeheftet an ${projectName}"; + + final messages = _notInlinedMessages(_notInlinedMessages); + static _notInlinedMessages(_) => { + "aFlutterSdkVersionNeeedsToBeSetAsGlobal" : MessageLookupByLibrary.simpleMessage("Eine Flutter-Sdk-Version muss als global eingestellt werden "), + "aNewVersionOfSidekickIsAvailableUpdateinfolatest" : m0, + "addProject" : MessageLookupByLibrary.simpleMessage("Projekt hinzufügen"), + "addYourFlutterProject" : MessageLookupByLibrary.simpleMessage("Ihr Flutter-Projekt hinzufügen "), + "advanced" : MessageLookupByLibrary.simpleMessage("Erweitert"), + "analyticsCrashReporting" : MessageLookupByLibrary.simpleMessage("Analytik & Crash-Berichterstattung"), + "appSettingsHaveBeenReset" : MessageLookupByLibrary.simpleMessage("Die App-Einstellungen wurden zurückgesetzt"), + "areYouSureYouWantToRemove" : MessageLookupByLibrary.simpleMessage("Sind Sie sicher, dass Sie entfernen möchten?"), + "areYouSureYouWantToResetSettings" : MessageLookupByLibrary.simpleMessage("Sind Sie sicher, dass Sie die Einstellungen zurücksetzen wollen?"), + "betaReleases" : MessageLookupByLibrary.simpleMessage("Beta Releases"), + "branchCreatedFromMasterForANewBetaReleaseAt" : MessageLookupByLibrary.simpleMessage("Zweig, der für eine neue Betaversion am Monatsanfang, in der Regel am ersten Montag, von master erstellt wird. Dieser wird einen Zweig für Dart, die Engine und das Framework enthalten."), + "cacheLocation" : MessageLookupByLibrary.simpleMessage("Cache-Speicherort"), + "cancel" : MessageLookupByLibrary.simpleMessage("Abbrechen"), + "changeThePathTo" : MessageLookupByLibrary.simpleMessage("Ändere den Path zu\n"), + "changelog" : MessageLookupByLibrary.simpleMessage("Änderungsprotokoll"), + "channel" : MessageLookupByLibrary.simpleMessage("Channel"), + "channelItemversionnameHasBeenUpgraded" : m1, + "channels" : MessageLookupByLibrary.simpleMessage("Channels"), + "choose" : MessageLookupByLibrary.simpleMessage("Wählen Sie"), + "cleanUp" : MessageLookupByLibrary.simpleMessage("Säubern"), + "cleanUpTooltip" : MessageLookupByLibrary.simpleMessage("Nicht verwendete Versionen bereinigen."), + "cleanUpUnusedVersions" : MessageLookupByLibrary.simpleMessage("Nicht verwendete Versionen bereinigen"), + "clickHereToDownload" : MessageLookupByLibrary.simpleMessage("Klicken Sie hier zum Download."), + "close" : MessageLookupByLibrary.simpleMessage("Schließen"), + "confirm" : MessageLookupByLibrary.simpleMessage("Bestätigen"), + "copiedToClipboard" : MessageLookupByLibrary.simpleMessage("In die Zwischenablage kopiert"), + "couldNotLaunchUrl" : m2, + "couldNotSaveSettings" : MessageLookupByLibrary.simpleMessage("Einstellungen konnten nicht gespeichert werden"), + "countFound" : m3, + "createdDate" : MessageLookupByLibrary.simpleMessage("Erstelldatum"), + "dark" : MessageLookupByLibrary.simpleMessage("Dunkel"), + "dependenciesAfterANewVersionIsInstalled" : MessageLookupByLibrary.simpleMessage("Abhängigkeiten, nachdem eine neue Version installiert wurde."), + "details" : MessageLookupByLibrary.simpleMessage("Details"), + "devReleases" : MessageLookupByLibrary.simpleMessage("Dev Releases"), + "doYouWantToRemoveThemToFreeUpSpace" : MessageLookupByLibrary.simpleMessage("Möchten Sie es entfernen, um Speicherplatz freizugeben?"), + "downloadZip" : MessageLookupByLibrary.simpleMessage("Zip herunterladen"), + "exploreFlutterReleases" : MessageLookupByLibrary.simpleMessage("Erkunde Flutter Releases"), + "flutterPathIsPointingTon" : MessageLookupByLibrary.simpleMessage("Flutter PATH verweist auf\n "), + "flutterSdkNotInstalled" : MessageLookupByLibrary.simpleMessage("Flutter SDK nicht installiert."), + "forFasterAndSmallerInstalls" : MessageLookupByLibrary.simpleMessage(" für schnellere und kleinere Installationen"), + "fvmOnly" : MessageLookupByLibrary.simpleMessage("Nur FVM"), + "general" : MessageLookupByLibrary.simpleMessage("Allgemein"), + "global" : MessageLookupByLibrary.simpleMessage("Global"), + "globalConfiguration" : MessageLookupByLibrary.simpleMessage("Globale Konfiguration"), + "googleContributeImprovementsToFlutterOverTime" : MessageLookupByLibrary.simpleMessage(" Google steuert im Laufe der Zeit Verbesserungen zu Flutter bei"), + "hash" : MessageLookupByLibrary.simpleMessage("Hash"), + "howToUpdateYourPath" : MessageLookupByLibrary.simpleMessage("Wie soll man den Pfad aktualisieren?"), + "ifYouWantToFlutterSdkThroughFvm" : MessageLookupByLibrary.simpleMessage("wenn Sie Flutter SDK durch FVM"), + "inOrderToAccessFlutterSettings" : MessageLookupByLibrary.simpleMessage("um auf die Flutter-Einstellungen zuzugreifen"), + "inUse" : MessageLookupByLibrary.simpleMessage("Verwendet"), + "installedVersions" : MessageLookupByLibrary.simpleMessage("Installierte Versionen"), + "invalidChanel" : MessageLookupByLibrary.simpleMessage("Invalid chanel"), + "language" : MessageLookupByLibrary.simpleMessage("Sprache"), + "later" : MessageLookupByLibrary.simpleMessage("Später"), + "light" : MessageLookupByLibrary.simpleMessage("Hell"), + "likes" : MessageLookupByLibrary.simpleMessage("Likes"), + "localCacheInformation" : MessageLookupByLibrary.simpleMessage("Lokale Cache-Informationen"), + "master" : MessageLookupByLibrary.simpleMessage("Master"), + "mostUsedPackages" : MessageLookupByLibrary.simpleMessage("Meistgenutzte Pakete"), + "navButtonDashboard" : MessageLookupByLibrary.simpleMessage("Dashboard"), + "navButtonExplore" : MessageLookupByLibrary.simpleMessage("Erkunden"), + "navButtonPackages" : MessageLookupByLibrary.simpleMessage("Pakete"), + "navButtonProjects" : MessageLookupByLibrary.simpleMessage("Projekte"), + "noFlutterProjectsHaveBeenAddedYet" : MessageLookupByLibrary.simpleMessage("Es wurden noch keine Flutter-Projekte hinzugefügt."), + "noFlutterVersionInstalledMessage" : MessageLookupByLibrary.simpleMessage("Sie haben derzeit keine Flutter SDK Versionen installiert. Versionen oder Kanäle, die installiert wurden, werden hier angezeigt."), + "noPackagesFound" : MessageLookupByLibrary.simpleMessage("Keine Pakete gefunden"), + "noResults" : MessageLookupByLibrary.simpleMessage("No Results"), + "noUnusedFlutterSdkVersionsInstalled" : MessageLookupByLibrary.simpleMessage("Keine unbenutzten Flutter SDK Versionen installiert"), + "notAFlutterProject" : MessageLookupByLibrary.simpleMessage("Kein Flutter-Projekt"), + "notRunning" : MessageLookupByLibrary.simpleMessage("Läuft nicht"), + "nothingSelected" : MessageLookupByLibrary.simpleMessage("Nichts ausgewähl"), + "numberOfCachedVersions" : m4, + "ok" : MessageLookupByLibrary.simpleMessage("OK"), + "onlyDisplayProjectsThatHaveVersionsPinned" : MessageLookupByLibrary.simpleMessage("Nur Projekte anzeigen, die Versionen angeheftet haben"), + "open" : MessageLookupByLibrary.simpleMessage("öffnen"), + "openTerminalPlayground" : MessageLookupByLibrary.simpleMessage("Terminal Playground öffnen"), + "packageInformationWillBeDisplayedHere" : MessageLookupByLibrary.simpleMessage("Hier werden die Paketinformationen angezeigt."), + "packageprojectscountProjects" : m5, + "platforms" : MessageLookupByLibrary.simpleMessage("Platformen"), + "playground" : MessageLookupByLibrary.simpleMessage("Playground"), + "popularity" : MessageLookupByLibrary.simpleMessage("Popularität"), + "projects" : MessageLookupByLibrary.simpleMessage("Projekte"), + "projectsInformationWillBeDisplayedHere" : MessageLookupByLibrary.simpleMessage("Hier werden die Projektinformationen angezeigt."), + "projectsProjects" : m6, + "projectsRefreshed" : MessageLookupByLibrary.simpleMessage("Projekte aktualisiert"), + "pubPoints" : MessageLookupByLibrary.simpleMessage("Pub Punkte"), + "refresh" : MessageLookupByLibrary.simpleMessage("Aktualisieren"), + "releaseDate" : MessageLookupByLibrary.simpleMessage("Freigabedatum"), + "releaseNotes" : MessageLookupByLibrary.simpleMessage("Freigabemitteilungen"), + "releases" : MessageLookupByLibrary.simpleMessage("Releases"), + "releasesVersions" : m7, + "remove" : MessageLookupByLibrary.simpleMessage("Löschen"), + "reset" : MessageLookupByLibrary.simpleMessage("Zurücksetzen"), + "resetToDefaultSettings" : MessageLookupByLibrary.simpleMessage("Zurücksetzen auf Standardeinstellungen"), + "sdkHasNotFinishedSetup" : MessageLookupByLibrary.simpleMessage("SDK hat das Setup nicht abgeschlossen"), + "search" : MessageLookupByLibrary.simpleMessage("Suche... "), + "selectAFlutterSdkVersion" : MessageLookupByLibrary.simpleMessage("Wählen Sie eine Flutter SDK Version"), + "selectAThemeOrSwitchAccordingToSystemSettings" : MessageLookupByLibrary.simpleMessage("Wählen Sie ein Thema oder schalten Sie entsprechend den Systemeinstellungen um."), + "setAsGlobal" : MessageLookupByLibrary.simpleMessage("Als global festlegen"), + "settingsHaveBeenSaved" : MessageLookupByLibrary.simpleMessage("Die Einstellungen wurden gespeichert"), + "sha256" : MessageLookupByLibrary.simpleMessage("Sha256"), + "sidekickVersionUpdateinfolatestIsNowAvailable" : m8, + "skipSetupFlutterOnInstall" : MessageLookupByLibrary.simpleMessage("Einrichtung von Flutter bei der Installation überspringen"), + "stableReleases" : MessageLookupByLibrary.simpleMessage("Stable Releases"), + "start" : MessageLookupByLibrary.simpleMessage("start"), + "system" : MessageLookupByLibrary.simpleMessage("System"), + "theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuild" : MessageLookupByLibrary.simpleMessage("Die aktuelle Spitze des Baumes, der absolut letzte Stand der Technik. "), + "theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuildUsuallyFunctional" : MessageLookupByLibrary.simpleMessage("Der aktuelle Tip-of-Tree, der absolut neueste Cutting Edge Build. Normalerweise funktional, obwohl wir manchmal versehentlich Dinge kaputt machen."), + "theLatestFullytestedBuildUsuallyFunctionalButSeeBadBuilds" : MessageLookupByLibrary.simpleMessage("Der letzte vollständig getestete Build. Normalerweise funktionstüchtig, aber unter \"Schlechte Builds\" finden Sie eine Liste bekannter \"schlechter\" Dev-Builds."), + "theme" : MessageLookupByLibrary.simpleMessage("Theme"), + "thereWasAnIsssueOpeningSidekick" : MessageLookupByLibrary.simpleMessage("Es gab ein Problem beim Öffnen von Sidekick"), + "thereWasAnIssueLoadingYourPackages" : MessageLookupByLibrary.simpleMessage("Es gab ein Problem beim Laden Ihrer Pakete."), + "theseVersionAreNotPinnedToAProject" : MessageLookupByLibrary.simpleMessage("Diese Versionen sind nicht an ein Projekt angeheftet "), + "thisWillCacheTheMainFlutterRepository" : MessageLookupByLibrary.simpleMessage("Dadurch wird das Haupt-Repository von Flutter zwischengespeichert"), + "thisWillOnlyCloneFlutterAndNotInstall" : MessageLookupByLibrary.simpleMessage("Dadurch wird Flutter nur geklont und nicht installiert "), + "thisWillOnlyResetSidekickSpecificPreferences" : MessageLookupByLibrary.simpleMessage("Dadurch werden nur Sidekick-spezifische Einstellungen zurückgesetzt"), + "thisWillRemoveItemnameCacheFromYourSystem" : m9, + "toSendACrashReportToGoogleInOrderTo" : MessageLookupByLibrary.simpleMessage("einen Absturzbericht an Google zu senden, um zu helfen,"), + "unused" : MessageLookupByLibrary.simpleMessage("Nicht verwendet"), + "updateAvailable" : MessageLookupByLibrary.simpleMessage("Update verfügbar."), + "updateNow" : MessageLookupByLibrary.simpleMessage("Jetzt aktualisieren"), + "upgrade" : MessageLookupByLibrary.simpleMessage("Upgrade"), + "usuallyFunctionalThoughSometimesWeAccidentallyBreakThings" : MessageLookupByLibrary.simpleMessage("Normalerweise funktional, obwohl wir manchmal versehentlich Dinge kaputt machen."), + "version" : MessageLookupByLibrary.simpleMessage("Version"), + "versionIsInstalled" : MessageLookupByLibrary.simpleMessage("Version ist installiert"), + "versionItemversionnameHasBeenInstalled" : m10, + "versionItemversionnameHasBeenRemoved" : m11, + "versionItemversionnameHasBeenSetAsGlobal" : m12, + "versionItemversionnameHasFinishedSetup" : m13, + "versionNotInstalledClickToInstall" : MessageLookupByLibrary.simpleMessage("Version nicht installiert. Klicken Sie zum Installieren."), + "versionVersionPinnedToProjectname" : m14, + "versions" : MessageLookupByLibrary.simpleMessage("Versionen"), + "weRecommendThatYouUseThisChannelForAllProduction" : MessageLookupByLibrary.simpleMessage("Wir empfehlen, dass Sie diesen Kanal für alle Produktions-App-Veröffentlichungen verwenden. Ungefähr einmal im Quartal wird ein Zweig, der auf Beta stabilisiert wurde, unser nächster stabiler Zweig und wir erstellen eine stabile Version von diesem Zweig."), + "web" : MessageLookupByLibrary.simpleMessage("Web"), + "website" : MessageLookupByLibrary.simpleMessage("Website"), + "whenAFlutterCommandCrashesItAttempts" : MessageLookupByLibrary.simpleMessage("Wenn ein Flutter-Befehl abstürzt, wird versucht "), + "youNeedToAddAFlutterProjectFirst" : MessageLookupByLibrary.simpleMessage("Sie müssen zuerst ein Flutter-Projekt hinzufügen. "), + "zipFileWithAllReleaseDependencies" : MessageLookupByLibrary.simpleMessage("Zip-Datei mit allen Release-Abhängigkeiten.") + }; +} diff --git a/lib/generated/intl/messages_en.dart b/lib/generated/intl/messages_en.dart new file mode 100644 index 00000000..d8aa1d9f --- /dev/null +++ b/lib/generated/intl/messages_en.dart @@ -0,0 +1,193 @@ +// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart +// This is a library that provides messages for a en locale. All the +// messages from the main program should be duplicated here with the same +// function name. + +// Ignore issues from commonly used lints in this file. +// ignore_for_file:unnecessary_brace_in_string_interps, unnecessary_new +// ignore_for_file:prefer_single_quotes,comment_references, directives_ordering +// ignore_for_file:annotate_overrides,prefer_generic_function_type_aliases +// ignore_for_file:unused_import, file_names + +import 'package:intl/intl.dart'; +import 'package:intl/message_lookup_by_library.dart'; + +final messages = new MessageLookup(); + +typedef String MessageIfAbsent(String messageStr, List args); + +class MessageLookup extends MessageLookupByLibrary { + String get localeName => 'en'; + + static m0(updateInfoLatest) => "A new version of Sidekick is available (${updateInfoLatest})."; + + static m1(itemVersionName) => "Channel ${itemVersionName} has been upgraded."; + + static m2(url) => "Could not launch ${url}"; + + static m3(count) => "${count} Found"; + + static m4(cachedVersions) => "${cachedVersions} versions"; + + static m5(packageProjectsCount) => "${packageProjectsCount} projects"; + + static m6(projects) => "${projects} Projects"; + + static m7(releases) => "${releases} versions"; + + static m8(updateInfoLatest) => "Sidekick version ${updateInfoLatest} is now available."; + + static m9(itemname) => "This will remove ${itemname} cache from your system."; + + static m10(itemVersionName) => "Version ${itemVersionName} has been installed."; + + static m11(itemVersionName) => "Version ${itemVersionName} has been removed."; + + static m12(itemVersionName) => "Version ${itemVersionName} has been set as global."; + + static m13(itemVersionName) => "Version ${itemVersionName} has finished setup."; + + static m14(version, projectName) => "Version ${version} pinned to ${projectName}"; + + final messages = _notInlinedMessages(_notInlinedMessages); + static _notInlinedMessages(_) => { + "aFlutterSdkVersionNeeedsToBeSetAsGlobal" : MessageLookupByLibrary.simpleMessage("A Flutter sdk version neeeds to be set as global "), + "aNewVersionOfSidekickIsAvailableUpdateinfolatest" : m0, + "addProject" : MessageLookupByLibrary.simpleMessage("Add Project"), + "addYourFlutterProject" : MessageLookupByLibrary.simpleMessage("Add your Flutter project "), + "advanced" : MessageLookupByLibrary.simpleMessage("Advanced"), + "analyticsCrashReporting" : MessageLookupByLibrary.simpleMessage("Analytics & Crash Reporting"), + "appSettingsHaveBeenReset" : MessageLookupByLibrary.simpleMessage("App settings have been reset"), + "areYouSureYouWantToRemove" : MessageLookupByLibrary.simpleMessage("Are you sure you want to remove?"), + "areYouSureYouWantToResetSettings" : MessageLookupByLibrary.simpleMessage("Are you sure you want to reset settings?"), + "betaReleases" : MessageLookupByLibrary.simpleMessage("Beta Releases"), + "branchCreatedFromMasterForANewBetaReleaseAt" : MessageLookupByLibrary.simpleMessage("Branch created from master for a new beta release at the beginning of the month, usually the first Monday. This will include a branch for Dart, the Engine and the Framework."), + "cacheLocation" : MessageLookupByLibrary.simpleMessage("Cache Location"), + "cancel" : MessageLookupByLibrary.simpleMessage("Cancel"), + "changeThePathTo" : MessageLookupByLibrary.simpleMessage("Change the path to\n"), + "changelog" : MessageLookupByLibrary.simpleMessage("Changelog"), + "channel" : MessageLookupByLibrary.simpleMessage("Channel"), + "channelItemversionnameHasBeenUpgraded" : m1, + "channels" : MessageLookupByLibrary.simpleMessage("Channels"), + "choose" : MessageLookupByLibrary.simpleMessage("Choose"), + "cleanUp" : MessageLookupByLibrary.simpleMessage("Clean up"), + "cleanUpTooltip" : MessageLookupByLibrary.simpleMessage("Clean up unused versions."), + "cleanUpUnusedVersions" : MessageLookupByLibrary.simpleMessage("Clean up unused versions"), + "clickHereToDownload" : MessageLookupByLibrary.simpleMessage("Click here to download."), + "close" : MessageLookupByLibrary.simpleMessage("Close"), + "confirm" : MessageLookupByLibrary.simpleMessage("Confirm"), + "copiedToClipboard" : MessageLookupByLibrary.simpleMessage("Copied to clipboard"), + "couldNotLaunchUrl" : m2, + "couldNotSaveSettings" : MessageLookupByLibrary.simpleMessage("Could not save settings"), + "countFound" : m3, + "createdDate" : MessageLookupByLibrary.simpleMessage("Created Date"), + "dark" : MessageLookupByLibrary.simpleMessage("Dark"), + "dependenciesAfterANewVersionIsInstalled" : MessageLookupByLibrary.simpleMessage("dependencies after a new version is installed."), + "details" : MessageLookupByLibrary.simpleMessage("Details"), + "devReleases" : MessageLookupByLibrary.simpleMessage("Dev Releases"), + "doYouWantToRemoveThemToFreeUpSpace" : MessageLookupByLibrary.simpleMessage("Do you want to remove them to free up space?"), + "downloadZip" : MessageLookupByLibrary.simpleMessage("Download Zip"), + "exploreFlutterReleases" : MessageLookupByLibrary.simpleMessage("Explore Flutter Releases"), + "flutterPathIsPointingTon" : MessageLookupByLibrary.simpleMessage("Flutter PATH is pointing to\n "), + "flutterSdkNotInstalled" : MessageLookupByLibrary.simpleMessage("Flutter SDK not installed."), + "forFasterAndSmallerInstalls" : MessageLookupByLibrary.simpleMessage(" for faster and smaller installs"), + "fvmOnly" : MessageLookupByLibrary.simpleMessage("FVM Only"), + "general" : MessageLookupByLibrary.simpleMessage("General"), + "global" : MessageLookupByLibrary.simpleMessage("Global"), + "globalConfiguration" : MessageLookupByLibrary.simpleMessage("Global configuration"), + "googleContributeImprovementsToFlutterOverTime" : MessageLookupByLibrary.simpleMessage(" Google contribute improvements to Flutter over time"), + "hash" : MessageLookupByLibrary.simpleMessage("Hash"), + "howToUpdateYourPath" : MessageLookupByLibrary.simpleMessage("How to update your path?"), + "ifYouWantToFlutterSdkThroughFvm" : MessageLookupByLibrary.simpleMessage("if you want to Flutter SDK through FVM"), + "inOrderToAccessFlutterSettings" : MessageLookupByLibrary.simpleMessage("in order to access Flutter settings"), + "inUse" : MessageLookupByLibrary.simpleMessage("In use"), + "installedVersions" : MessageLookupByLibrary.simpleMessage("Installed Versions"), + "invalidChanel" : MessageLookupByLibrary.simpleMessage("Invalid chanel"), + "language" : MessageLookupByLibrary.simpleMessage("Language"), + "later" : MessageLookupByLibrary.simpleMessage("Later"), + "light" : MessageLookupByLibrary.simpleMessage("Light"), + "likes" : MessageLookupByLibrary.simpleMessage("Likes"), + "localCacheInformation" : MessageLookupByLibrary.simpleMessage("Local Cache Information"), + "master" : MessageLookupByLibrary.simpleMessage("Master"), + "mostUsedPackages" : MessageLookupByLibrary.simpleMessage("Most Used Packages"), + "navButtonDashboard" : MessageLookupByLibrary.simpleMessage("Dashboard"), + "navButtonExplore" : MessageLookupByLibrary.simpleMessage("Explore"), + "navButtonPackages" : MessageLookupByLibrary.simpleMessage("Packages"), + "navButtonProjects" : MessageLookupByLibrary.simpleMessage("Projects"), + "noFlutterProjectsHaveBeenAddedYet" : MessageLookupByLibrary.simpleMessage("No Flutter Projects have been added yet."), + "noFlutterVersionInstalledMessage" : MessageLookupByLibrary.simpleMessage("You do not currently have any Flutter SDK versions installed. Versions or channels that have been installed will be displayed here."), + "noPackagesFound" : MessageLookupByLibrary.simpleMessage("No Packages Found"), + "noResults" : MessageLookupByLibrary.simpleMessage("No Results"), + "noUnusedFlutterSdkVersionsInstalled" : MessageLookupByLibrary.simpleMessage("No unused Flutter SDK versions installed"), + "notAFlutterProject" : MessageLookupByLibrary.simpleMessage("Not a Flutter project"), + "notRunning" : MessageLookupByLibrary.simpleMessage("Not running"), + "nothingSelected" : MessageLookupByLibrary.simpleMessage("Nothing selected"), + "numberOfCachedVersions" : m4, + "ok" : MessageLookupByLibrary.simpleMessage("OK"), + "onlyDisplayProjectsThatHaveVersionsPinned" : MessageLookupByLibrary.simpleMessage("Only display projects that have versions pinned"), + "open" : MessageLookupByLibrary.simpleMessage("open"), + "openTerminalPlayground" : MessageLookupByLibrary.simpleMessage("Open terminal playground"), + "packageInformationWillBeDisplayedHere" : MessageLookupByLibrary.simpleMessage("Package information will be displayed here."), + "packageprojectscountProjects" : m5, + "platforms" : MessageLookupByLibrary.simpleMessage("Platforms"), + "playground" : MessageLookupByLibrary.simpleMessage("Playground"), + "popularity" : MessageLookupByLibrary.simpleMessage("Popularity"), + "projects" : MessageLookupByLibrary.simpleMessage("Projects"), + "projectsInformationWillBeDisplayedHere" : MessageLookupByLibrary.simpleMessage("Projects information will be displayed here."), + "projectsProjects" : m6, + "projectsRefreshed" : MessageLookupByLibrary.simpleMessage("Projects Refreshed"), + "pubPoints" : MessageLookupByLibrary.simpleMessage("Pub Points"), + "refresh" : MessageLookupByLibrary.simpleMessage("Refresh"), + "releaseDate" : MessageLookupByLibrary.simpleMessage("Release Date"), + "releaseNotes" : MessageLookupByLibrary.simpleMessage("Release Notes"), + "releases" : MessageLookupByLibrary.simpleMessage("Releases"), + "releasesVersions" : m7, + "remove" : MessageLookupByLibrary.simpleMessage("Remove"), + "reset" : MessageLookupByLibrary.simpleMessage("Reset"), + "resetToDefaultSettings" : MessageLookupByLibrary.simpleMessage("Reset to default settings"), + "sdkHasNotFinishedSetup" : MessageLookupByLibrary.simpleMessage("SDK has not finished setup"), + "search" : MessageLookupByLibrary.simpleMessage("Search... "), + "selectAFlutterSdkVersion" : MessageLookupByLibrary.simpleMessage("Select a Flutter SDK Version"), + "selectAThemeOrSwitchAccordingToSystemSettings" : MessageLookupByLibrary.simpleMessage("Select a theme or switch according to system settings.."), + "setAsGlobal" : MessageLookupByLibrary.simpleMessage("Set as global"), + "settingsHaveBeenSaved" : MessageLookupByLibrary.simpleMessage("Settings have been saved"), + "sha256" : MessageLookupByLibrary.simpleMessage("Sha256"), + "sidekickVersionUpdateinfolatestIsNowAvailable" : m8, + "skipSetupFlutterOnInstall" : MessageLookupByLibrary.simpleMessage("Skip setup Flutter on install"), + "stableReleases" : MessageLookupByLibrary.simpleMessage("Stable Releases"), + "start" : MessageLookupByLibrary.simpleMessage("start"), + "system" : MessageLookupByLibrary.simpleMessage("System"), + "theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuild" : MessageLookupByLibrary.simpleMessage("The current tip-of-tree, absolute latest cutting edge build. "), + "theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuildUsuallyFunctional" : MessageLookupByLibrary.simpleMessage("The current tip-of-tree, absolute latest cutting edge build. Usually functional, though sometimes we accidentally break things."), + "theLatestFullytestedBuildUsuallyFunctionalButSeeBadBuilds" : MessageLookupByLibrary.simpleMessage("The latest fully-tested build. Usually functional, but see Bad Builds for a list of known \"bad\" dev builds."), + "theme" : MessageLookupByLibrary.simpleMessage("Theme"), + "thereWasAnIsssueOpeningSidekick" : MessageLookupByLibrary.simpleMessage("There was an isssue opening Sidekick"), + "thereWasAnIssueLoadingYourPackages" : MessageLookupByLibrary.simpleMessage("There was an issue loading your packages."), + "theseVersionAreNotPinnedToAProject" : MessageLookupByLibrary.simpleMessage("These version are not pinned to a project "), + "thisWillCacheTheMainFlutterRepository" : MessageLookupByLibrary.simpleMessage("This will cache the main Flutter repository"), + "thisWillOnlyCloneFlutterAndNotInstall" : MessageLookupByLibrary.simpleMessage("This will only clone Flutter and not install"), + "thisWillOnlyResetSidekickSpecificPreferences" : MessageLookupByLibrary.simpleMessage("This will only reset Sidekick specific preferences"), + "thisWillRemoveItemnameCacheFromYourSystem" : m9, + "toSendACrashReportToGoogleInOrderTo" : MessageLookupByLibrary.simpleMessage(" to send a crash report to Google in order to help"), + "unused" : MessageLookupByLibrary.simpleMessage("Unused"), + "updateAvailable" : MessageLookupByLibrary.simpleMessage("Update available."), + "updateNow" : MessageLookupByLibrary.simpleMessage("Update Now"), + "upgrade" : MessageLookupByLibrary.simpleMessage("Upgrade"), + "usuallyFunctionalThoughSometimesWeAccidentallyBreakThings" : MessageLookupByLibrary.simpleMessage("Usually functional, though sometimes we accidentally break things."), + "version" : MessageLookupByLibrary.simpleMessage("Version"), + "versionIsInstalled" : MessageLookupByLibrary.simpleMessage("Version is installed"), + "versionItemversionnameHasBeenInstalled" : m10, + "versionItemversionnameHasBeenRemoved" : m11, + "versionItemversionnameHasBeenSetAsGlobal" : m12, + "versionItemversionnameHasFinishedSetup" : m13, + "versionNotInstalledClickToInstall" : MessageLookupByLibrary.simpleMessage("Version not installed. Click to install."), + "versionVersionPinnedToProjectname" : m14, + "versions" : MessageLookupByLibrary.simpleMessage("Versions"), + "weRecommendThatYouUseThisChannelForAllProduction" : MessageLookupByLibrary.simpleMessage("We recommend that you use this channel for all production app releases. Roughly once a quarter, a branch that has been stabilized on beta will become our next stable branch and we will create a stable release from that branch."), + "web" : MessageLookupByLibrary.simpleMessage("Web"), + "website" : MessageLookupByLibrary.simpleMessage("Website"), + "whenAFlutterCommandCrashesItAttempts" : MessageLookupByLibrary.simpleMessage("When a flutter command crashes it attempts"), + "youNeedToAddAFlutterProjectFirst" : MessageLookupByLibrary.simpleMessage("You need to add a Flutter project first. "), + "zipFileWithAllReleaseDependencies" : MessageLookupByLibrary.simpleMessage("Zip file with all release dependencies.") + }; +} diff --git a/lib/generated/l10n.dart b/lib/generated/l10n.dart new file mode 100644 index 00000000..724333d3 --- /dev/null +++ b/lib/generated/l10n.dart @@ -0,0 +1,1446 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND +import 'package:flutter/material.dart'; +import 'package:intl/intl.dart'; +import 'intl/messages_all.dart'; + +// ************************************************************************** +// Generator: Flutter Intl IDE plugin +// Made by Localizely +// ************************************************************************** + +// ignore_for_file: non_constant_identifier_names, lines_longer_than_80_chars +// ignore_for_file: join_return_with_assignment, prefer_final_in_for_each +// ignore_for_file: avoid_redundant_argument_values + +class S { + S(); + + static S current; + + static const AppLocalizationDelegate delegate = + AppLocalizationDelegate(); + + static Future load(Locale locale) { + final name = (locale.countryCode?.isEmpty ?? false) ? locale.languageCode : locale.toString(); + final localeName = Intl.canonicalizedLocale(name); + return initializeMessages(localeName).then((_) { + Intl.defaultLocale = localeName; + S.current = S(); + + return S.current; + }); + } + + static S of(BuildContext context) { + return Localizations.of(context, S); + } + + /// `Dashboard` + String get navButtonDashboard { + return Intl.message( + 'Dashboard', + name: 'navButtonDashboard', + desc: '', + args: [], + ); + } + + /// `Projects` + String get navButtonProjects { + return Intl.message( + 'Projects', + name: 'navButtonProjects', + desc: '', + args: [], + ); + } + + /// `Explore` + String get navButtonExplore { + return Intl.message( + 'Explore', + name: 'navButtonExplore', + desc: '', + args: [], + ); + } + + /// `Packages` + String get navButtonPackages { + return Intl.message( + 'Packages', + name: 'navButtonPackages', + desc: '', + args: [], + ); + } + + /// `Installed Versions` + String get installedVersions { + return Intl.message( + 'Installed Versions', + name: 'installedVersions', + desc: '', + args: [], + ); + } + + /// `Clean up` + String get cleanUp { + return Intl.message( + 'Clean up', + name: 'cleanUp', + desc: '', + args: [], + ); + } + + /// `Clean up unused versions.` + String get cleanUpTooltip { + return Intl.message( + 'Clean up unused versions.', + name: 'cleanUpTooltip', + desc: '', + args: [], + ); + } + + /// `{cachedVersions} versions` + String numberOfCachedVersions(Object cachedVersions) { + return Intl.message( + '$cachedVersions versions', + name: 'numberOfCachedVersions', + desc: '', + args: [cachedVersions], + ); + } + + /// `Flutter SDK not installed.` + String get flutterSdkNotInstalled { + return Intl.message( + 'Flutter SDK not installed.', + name: 'flutterSdkNotInstalled', + desc: '', + args: [], + ); + } + + /// `You do not currently have any Flutter SDK versions installed. Versions or channels that have been installed will be displayed here.` + String get noFlutterVersionInstalledMessage { + return Intl.message( + 'You do not currently have any Flutter SDK versions installed. Versions or channels that have been installed will be displayed here.', + name: 'noFlutterVersionInstalledMessage', + desc: '', + args: [], + ); + } + + /// `Explore Flutter Releases` + String get exploreFlutterReleases { + return Intl.message( + 'Explore Flutter Releases', + name: 'exploreFlutterReleases', + desc: '', + args: [], + ); + } + + /// `Advanced` + String get advanced { + return Intl.message( + 'Advanced', + name: 'advanced', + desc: '', + args: [], + ); + } + + /// `Download Zip` + String get downloadZip { + return Intl.message( + 'Download Zip', + name: 'downloadZip', + desc: '', + args: [], + ); + } + + /// `Zip file with all release dependencies.` + String get zipFileWithAllReleaseDependencies { + return Intl.message( + 'Zip file with all release dependencies.', + name: 'zipFileWithAllReleaseDependencies', + desc: '', + args: [], + ); + } + + /// `Hash` + String get hash { + return Intl.message( + 'Hash', + name: 'hash', + desc: '', + args: [], + ); + } + + /// `Sha256` + String get sha256 { + return Intl.message( + 'Sha256', + name: 'sha256', + desc: '', + args: [], + ); + } + + /// `Local Cache Information` + String get localCacheInformation { + return Intl.message( + 'Local Cache Information', + name: 'localCacheInformation', + desc: '', + args: [], + ); + } + + /// `Created Date` + String get createdDate { + return Intl.message( + 'Created Date', + name: 'createdDate', + desc: '', + args: [], + ); + } + + /// `Cache Location` + String get cacheLocation { + return Intl.message( + 'Cache Location', + name: 'cacheLocation', + desc: '', + args: [], + ); + } + + /// `Are you sure you want to remove?` + String get areYouSureYouWantToRemove { + return Intl.message( + 'Are you sure you want to remove?', + name: 'areYouSureYouWantToRemove', + desc: '', + args: [], + ); + } + + /// `This will remove {itemname} cache from your system.` + String thisWillRemoveItemnameCacheFromYourSystem(Object itemname) { + return Intl.message( + 'This will remove $itemname cache from your system.', + name: 'thisWillRemoveItemnameCacheFromYourSystem', + desc: '', + args: [itemname], + ); + } + + /// `Cancel` + String get cancel { + return Intl.message( + 'Cancel', + name: 'cancel', + desc: '', + args: [], + ); + } + + /// `Confirm` + String get confirm { + return Intl.message( + 'Confirm', + name: 'confirm', + desc: '', + args: [], + ); + } + + /// `Master` + String get master { + return Intl.message( + 'Master', + name: 'master', + desc: '', + args: [], + ); + } + + /// `The current tip-of-tree, absolute latest cutting edge build. ` + String get theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuild { + return Intl.message( + 'The current tip-of-tree, absolute latest cutting edge build. ', + name: 'theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuild', + desc: '', + args: [], + ); + } + + /// `Usually functional, though sometimes we accidentally break things.` + String get usuallyFunctionalThoughSometimesWeAccidentallyBreakThings { + return Intl.message( + 'Usually functional, though sometimes we accidentally break things.', + name: 'usuallyFunctionalThoughSometimesWeAccidentallyBreakThings', + desc: '', + args: [], + ); + } + + /// `Channel` + String get channel { + return Intl.message( + 'Channel', + name: 'channel', + desc: '', + args: [], + ); + } + + /// `Release Notes` + String get releaseNotes { + return Intl.message( + 'Release Notes', + name: 'releaseNotes', + desc: '', + args: [], + ); + } + + /// `Version` + String get version { + return Intl.message( + 'Version', + name: 'version', + desc: '', + args: [], + ); + } + + /// `Release Date` + String get releaseDate { + return Intl.message( + 'Release Date', + name: 'releaseDate', + desc: '', + args: [], + ); + } + + /// `SDK has not finished setup` + String get sdkHasNotFinishedSetup { + return Intl.message( + 'SDK has not finished setup', + name: 'sdkHasNotFinishedSetup', + desc: '', + args: [], + ); + } + + /// `Version is installed` + String get versionIsInstalled { + return Intl.message( + 'Version is installed', + name: 'versionIsInstalled', + desc: '', + args: [], + ); + } + + /// `Version not installed. Click to install.` + String get versionNotInstalledClickToInstall { + return Intl.message( + 'Version not installed. Click to install.', + name: 'versionNotInstalledClickToInstall', + desc: '', + args: [], + ); + } + + /// `No unused Flutter SDK versions installed` + String get noUnusedFlutterSdkVersionsInstalled { + return Intl.message( + 'No unused Flutter SDK versions installed', + name: 'noUnusedFlutterSdkVersionsInstalled', + desc: '', + args: [], + ); + } + + /// `Clean up unused versions` + String get cleanUpUnusedVersions { + return Intl.message( + 'Clean up unused versions', + name: 'cleanUpUnusedVersions', + desc: '', + args: [], + ); + } + + /// `These version are not pinned to a project ` + String get theseVersionAreNotPinnedToAProject { + return Intl.message( + 'These version are not pinned to a project ', + name: 'theseVersionAreNotPinnedToAProject', + desc: '', + args: [], + ); + } + + /// `Do you want to remove them to free up space?` + String get doYouWantToRemoveThemToFreeUpSpace { + return Intl.message( + 'Do you want to remove them to free up space?', + name: 'doYouWantToRemoveThemToFreeUpSpace', + desc: '', + args: [], + ); + } + + /// `Global configuration` + String get globalConfiguration { + return Intl.message( + 'Global configuration', + name: 'globalConfiguration', + desc: '', + args: [], + ); + } + + /// `OK` + String get ok { + return Intl.message( + 'OK', + name: 'ok', + desc: '', + args: [], + ); + } + + /// `Flutter PATH is pointing to\n ` + String get flutterPathIsPointingTon { + return Intl.message( + 'Flutter PATH is pointing to\n ', + name: 'flutterPathIsPointingTon', + desc: '', + args: [], + ); + } + + /// `Change the path to\n` + String get changeThePathTo { + return Intl.message( + 'Change the path to\n', + name: 'changeThePathTo', + desc: '', + args: [], + ); + } + + /// `if you want to Flutter SDK through FVM` + String get ifYouWantToFlutterSdkThroughFvm { + return Intl.message( + 'if you want to Flutter SDK through FVM', + name: 'ifYouWantToFlutterSdkThroughFvm', + desc: '', + args: [], + ); + } + + /// `How to update your path?` + String get howToUpdateYourPath { + return Intl.message( + 'How to update your path?', + name: 'howToUpdateYourPath', + desc: '', + args: [], + ); + } + + /// `Nothing selected` + String get nothingSelected { + return Intl.message( + 'Nothing selected', + name: 'nothingSelected', + desc: '', + args: [], + ); + } + + /// `Copied to clipboard` + String get copiedToClipboard { + return Intl.message( + 'Copied to clipboard', + name: 'copiedToClipboard', + desc: '', + args: [], + ); + } + + /// `Refresh` + String get refresh { + return Intl.message( + 'Refresh', + name: 'refresh', + desc: '', + args: [], + ); + } + + /// `{count} Found` + String countFound(Object count) { + return Intl.message( + '$count Found', + name: 'countFound', + desc: '', + args: [count], + ); + } + + /// `Could not launch {url}` + String couldNotLaunchUrl(Object url) { + return Intl.message( + 'Could not launch $url', + name: 'couldNotLaunchUrl', + desc: '', + args: [url], + ); + } + + /// `start` + String get start { + return Intl.message( + 'start', + name: 'start', + desc: '', + args: [], + ); + } + + /// `open` + String get open { + return Intl.message( + 'open', + name: 'open', + desc: '', + args: [], + ); + } + + /// `We recommend that you use this channel for all production app releases. Roughly once a quarter, a branch that has been stabilized on beta will become our next stable branch and we will create a stable release from that branch.` + String get weRecommendThatYouUseThisChannelForAllProduction { + return Intl.message( + 'We recommend that you use this channel for all production app releases. Roughly once a quarter, a branch that has been stabilized on beta will become our next stable branch and we will create a stable release from that branch.', + name: 'weRecommendThatYouUseThisChannelForAllProduction', + desc: '', + args: [], + ); + } + + /// `Branch created from master for a new beta release at the beginning of the month, usually the first Monday. This will include a branch for Dart, the Engine and the Framework.` + String get branchCreatedFromMasterForANewBetaReleaseAt { + return Intl.message( + 'Branch created from master for a new beta release at the beginning of the month, usually the first Monday. This will include a branch for Dart, the Engine and the Framework.', + name: 'branchCreatedFromMasterForANewBetaReleaseAt', + desc: '', + args: [], + ); + } + + /// `The latest fully-tested build. Usually functional, but see Bad Builds for a list of known "bad" dev builds.` + String get theLatestFullytestedBuildUsuallyFunctionalButSeeBadBuilds { + return Intl.message( + 'The latest fully-tested build. Usually functional, but see Bad Builds for a list of known "bad" dev builds.', + name: 'theLatestFullytestedBuildUsuallyFunctionalButSeeBadBuilds', + desc: '', + args: [], + ); + } + + /// `The current tip-of-tree, absolute latest cutting edge build. Usually functional, though sometimes we accidentally break things.` + String get theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuildUsuallyFunctional { + return Intl.message( + 'The current tip-of-tree, absolute latest cutting edge build. Usually functional, though sometimes we accidentally break things.', + name: 'theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuildUsuallyFunctional', + desc: '', + args: [], + ); + } + + /// `In use` + String get inUse { + return Intl.message( + 'In use', + name: 'inUse', + desc: '', + args: [], + ); + } + + /// `Unused` + String get unused { + return Intl.message( + 'Unused', + name: 'unused', + desc: '', + args: [], + ); + } + + /// `Set as global` + String get setAsGlobal { + return Intl.message( + 'Set as global', + name: 'setAsGlobal', + desc: '', + args: [], + ); + } + + /// `Details` + String get details { + return Intl.message( + 'Details', + name: 'details', + desc: '', + args: [], + ); + } + + /// `Remove` + String get remove { + return Intl.message( + 'Remove', + name: 'remove', + desc: '', + args: [], + ); + } + + /// `Upgrade` + String get upgrade { + return Intl.message( + 'Upgrade', + name: 'upgrade', + desc: '', + args: [], + ); + } + + /// `Global` + String get global { + return Intl.message( + 'Global', + name: 'global', + desc: '', + args: [], + ); + } + + /// `Version {itemVersionName} has been installed.` + String versionItemversionnameHasBeenInstalled(Object itemVersionName) { + return Intl.message( + 'Version $itemVersionName has been installed.', + name: 'versionItemversionnameHasBeenInstalled', + desc: '', + args: [itemVersionName], + ); + } + + /// `Version {itemVersionName} has finished setup.` + String versionItemversionnameHasFinishedSetup(Object itemVersionName) { + return Intl.message( + 'Version $itemVersionName has finished setup.', + name: 'versionItemversionnameHasFinishedSetup', + desc: '', + args: [itemVersionName], + ); + } + + /// `Channel {itemVersionName} has been upgraded.` + String channelItemversionnameHasBeenUpgraded(Object itemVersionName) { + return Intl.message( + 'Channel $itemVersionName has been upgraded.', + name: 'channelItemversionnameHasBeenUpgraded', + desc: '', + args: [itemVersionName], + ); + } + + /// `Version {itemVersionName} has been removed.` + String versionItemversionnameHasBeenRemoved(Object itemVersionName) { + return Intl.message( + 'Version $itemVersionName has been removed.', + name: 'versionItemversionnameHasBeenRemoved', + desc: '', + args: [itemVersionName], + ); + } + + /// `Version {itemVersionName} has been set as global.` + String versionItemversionnameHasBeenSetAsGlobal(Object itemVersionName) { + return Intl.message( + 'Version $itemVersionName has been set as global.', + name: 'versionItemversionnameHasBeenSetAsGlobal', + desc: '', + args: [itemVersionName], + ); + } + + /// `Version {version} pinned to {projectName}` + String versionVersionPinnedToProjectname(Object version, Object projectName) { + return Intl.message( + 'Version $version pinned to $projectName', + name: 'versionVersionPinnedToProjectname', + desc: '', + args: [version, projectName], + ); + } + + /// `{packageProjectsCount} projects` + String packageprojectscountProjects(Object packageProjectsCount) { + return Intl.message( + '$packageProjectsCount projects', + name: 'packageprojectscountProjects', + desc: '', + args: [packageProjectsCount], + ); + } + + /// `Changelog` + String get changelog { + return Intl.message( + 'Changelog', + name: 'changelog', + desc: '', + args: [], + ); + } + + /// `Website` + String get website { + return Intl.message( + 'Website', + name: 'website', + desc: '', + args: [], + ); + } + + /// `Likes` + String get likes { + return Intl.message( + 'Likes', + name: 'likes', + desc: '', + args: [], + ); + } + + /// `Pub Points` + String get pubPoints { + return Intl.message( + 'Pub Points', + name: 'pubPoints', + desc: '', + args: [], + ); + } + + /// `Popularity` + String get popularity { + return Intl.message( + 'Popularity', + name: 'popularity', + desc: '', + args: [], + ); + } + + /// `No Packages Found` + String get noPackagesFound { + return Intl.message( + 'No Packages Found', + name: 'noPackagesFound', + desc: '', + args: [], + ); + } + + /// `You need to add a Flutter project first. ` + String get youNeedToAddAFlutterProjectFirst { + return Intl.message( + 'You need to add a Flutter project first. ', + name: 'youNeedToAddAFlutterProjectFirst', + desc: '', + args: [], + ); + } + + /// `Package information will be displayed here.` + String get packageInformationWillBeDisplayedHere { + return Intl.message( + 'Package information will be displayed here.', + name: 'packageInformationWillBeDisplayedHere', + desc: '', + args: [], + ); + } + + /// `Most Used Packages` + String get mostUsedPackages { + return Intl.message( + 'Most Used Packages', + name: 'mostUsedPackages', + desc: '', + args: [], + ); + } + + /// `There was an issue loading your packages.` + String get thereWasAnIssueLoadingYourPackages { + return Intl.message( + 'There was an issue loading your packages.', + name: 'thereWasAnIssueLoadingYourPackages', + desc: '', + args: [], + ); + } + + /// `Open terminal playground` + String get openTerminalPlayground { + return Intl.message( + 'Open terminal playground', + name: 'openTerminalPlayground', + desc: '', + args: [], + ); + } + + /// `Select a Flutter SDK Version` + String get selectAFlutterSdkVersion { + return Intl.message( + 'Select a Flutter SDK Version', + name: 'selectAFlutterSdkVersion', + desc: '', + args: [], + ); + } + + /// `Choose` + String get choose { + return Intl.message( + 'Choose', + name: 'choose', + desc: '', + args: [], + ); + } + + /// `No Flutter Projects have been added yet.` + String get noFlutterProjectsHaveBeenAddedYet { + return Intl.message( + 'No Flutter Projects have been added yet.', + name: 'noFlutterProjectsHaveBeenAddedYet', + desc: '', + args: [], + ); + } + + /// `Add your Flutter project ` + String get addYourFlutterProject { + return Intl.message( + 'Add your Flutter project ', + name: 'addYourFlutterProject', + desc: '', + args: [], + ); + } + + /// `Projects information will be displayed here.` + String get projectsInformationWillBeDisplayedHere { + return Intl.message( + 'Projects information will be displayed here.', + name: 'projectsInformationWillBeDisplayedHere', + desc: '', + args: [], + ); + } + + /// `Not a Flutter project` + String get notAFlutterProject { + return Intl.message( + 'Not a Flutter project', + name: 'notAFlutterProject', + desc: '', + args: [], + ); + } + + /// `Projects Refreshed` + String get projectsRefreshed { + return Intl.message( + 'Projects Refreshed', + name: 'projectsRefreshed', + desc: '', + args: [], + ); + } + + /// `Projects` + String get projects { + return Intl.message( + 'Projects', + name: 'projects', + desc: '', + args: [], + ); + } + + /// `{projects} Projects` + String projectsProjects(Object projects) { + return Intl.message( + '$projects Projects', + name: 'projectsProjects', + desc: '', + args: [projects], + ); + } + + /// `Only display projects that have versions pinned` + String get onlyDisplayProjectsThatHaveVersionsPinned { + return Intl.message( + 'Only display projects that have versions pinned', + name: 'onlyDisplayProjectsThatHaveVersionsPinned', + desc: '', + args: [], + ); + } + + /// `FVM Only` + String get fvmOnly { + return Intl.message( + 'FVM Only', + name: 'fvmOnly', + desc: '', + args: [], + ); + } + + /// `Add Project` + String get addProject { + return Intl.message( + 'Add Project', + name: 'addProject', + desc: '', + args: [], + ); + } + + /// `Releases` + String get releases { + return Intl.message( + 'Releases', + name: 'releases', + desc: '', + args: [], + ); + } + + /// `Versions` + String get versions { + return Intl.message( + 'Versions', + name: 'versions', + desc: '', + args: [], + ); + } + + /// `Playground` + String get playground { + return Intl.message( + 'Playground', + name: 'playground', + desc: '', + args: [], + ); + } + + /// `{releases} versions` + String releasesVersions(Object releases) { + return Intl.message( + '$releases versions', + name: 'releasesVersions', + desc: '', + args: [releases], + ); + } + + /// `Not running` + String get notRunning { + return Intl.message( + 'Not running', + name: 'notRunning', + desc: '', + args: [], + ); + } + + /// `Search... ` + String get search { + return Intl.message( + 'Search... ', + name: 'search', + desc: '', + args: [], + ); + } + + /// `No Results` + String get noResults { + return Intl.message( + 'No Results', + name: 'noResults', + desc: '', + args: [], + ); + } + + /// `Channels` + String get channels { + return Intl.message( + 'Channels', + name: 'channels', + desc: '', + args: [], + ); + } + + /// `Stable Releases` + String get stableReleases { + return Intl.message( + 'Stable Releases', + name: 'stableReleases', + desc: '', + args: [], + ); + } + + /// `Beta Releases` + String get betaReleases { + return Intl.message( + 'Beta Releases', + name: 'betaReleases', + desc: '', + args: [], + ); + } + + /// `Dev Releases` + String get devReleases { + return Intl.message( + 'Dev Releases', + name: 'devReleases', + desc: '', + args: [], + ); + } + + /// `Invalid chanel` + String get invalidChanel { + return Intl.message( + 'Invalid chanel', + name: 'invalidChanel', + desc: '', + args: [], + ); + } + + /// `A Flutter sdk version neeeds to be set as global ` + String get aFlutterSdkVersionNeeedsToBeSetAsGlobal { + return Intl.message( + 'A Flutter sdk version neeeds to be set as global ', + name: 'aFlutterSdkVersionNeeedsToBeSetAsGlobal', + desc: '', + args: [], + ); + } + + /// `in order to access Flutter settings` + String get inOrderToAccessFlutterSettings { + return Intl.message( + 'in order to access Flutter settings', + name: 'inOrderToAccessFlutterSettings', + desc: '', + args: [], + ); + } + + /// `Analytics & Crash Reporting` + String get analyticsCrashReporting { + return Intl.message( + 'Analytics & Crash Reporting', + name: 'analyticsCrashReporting', + desc: '', + args: [], + ); + } + + /// `When a flutter command crashes it attempts` + String get whenAFlutterCommandCrashesItAttempts { + return Intl.message( + 'When a flutter command crashes it attempts', + name: 'whenAFlutterCommandCrashesItAttempts', + desc: '', + args: [], + ); + } + + /// ` to send a crash report to Google in order to help` + String get toSendACrashReportToGoogleInOrderTo { + return Intl.message( + ' to send a crash report to Google in order to help', + name: 'toSendACrashReportToGoogleInOrderTo', + desc: '', + args: [], + ); + } + + /// ` Google contribute improvements to Flutter over time` + String get googleContributeImprovementsToFlutterOverTime { + return Intl.message( + ' Google contribute improvements to Flutter over time', + name: 'googleContributeImprovementsToFlutterOverTime', + desc: '', + args: [], + ); + } + + /// `Platforms` + String get platforms { + return Intl.message( + 'Platforms', + name: 'platforms', + desc: '', + args: [], + ); + } + + /// `Web` + String get web { + return Intl.message( + 'Web', + name: 'web', + desc: '', + args: [], + ); + } + + /// `This will cache the main Flutter repository` + String get thisWillCacheTheMainFlutterRepository { + return Intl.message( + 'This will cache the main Flutter repository', + name: 'thisWillCacheTheMainFlutterRepository', + desc: '', + args: [], + ); + } + + /// ` for faster and smaller installs` + String get forFasterAndSmallerInstalls { + return Intl.message( + ' for faster and smaller installs', + name: 'forFasterAndSmallerInstalls', + desc: '', + args: [], + ); + } + + /// `Skip setup Flutter on install` + String get skipSetupFlutterOnInstall { + return Intl.message( + 'Skip setup Flutter on install', + name: 'skipSetupFlutterOnInstall', + desc: '', + args: [], + ); + } + + /// `This will only clone Flutter and not install` + String get thisWillOnlyCloneFlutterAndNotInstall { + return Intl.message( + 'This will only clone Flutter and not install', + name: 'thisWillOnlyCloneFlutterAndNotInstall', + desc: '', + args: [], + ); + } + + /// `dependencies after a new version is installed.` + String get dependenciesAfterANewVersionIsInstalled { + return Intl.message( + 'dependencies after a new version is installed.', + name: 'dependenciesAfterANewVersionIsInstalled', + desc: '', + args: [], + ); + } + + /// `Are you sure you want to reset settings?` + String get areYouSureYouWantToResetSettings { + return Intl.message( + 'Are you sure you want to reset settings?', + name: 'areYouSureYouWantToResetSettings', + desc: '', + args: [], + ); + } + + /// `This will only reset Sidekick specific preferences` + String get thisWillOnlyResetSidekickSpecificPreferences { + return Intl.message( + 'This will only reset Sidekick specific preferences', + name: 'thisWillOnlyResetSidekickSpecificPreferences', + desc: '', + args: [], + ); + } + + /// `App settings have been reset` + String get appSettingsHaveBeenReset { + return Intl.message( + 'App settings have been reset', + name: 'appSettingsHaveBeenReset', + desc: '', + args: [], + ); + } + + /// `General` + String get general { + return Intl.message( + 'General', + name: 'general', + desc: '', + args: [], + ); + } + + /// `Select a theme or switch according to system settings..` + String get selectAThemeOrSwitchAccordingToSystemSettings { + return Intl.message( + 'Select a theme or switch according to system settings..', + name: 'selectAThemeOrSwitchAccordingToSystemSettings', + desc: '', + args: [], + ); + } + + /// `Theme` + String get theme { + return Intl.message( + 'Theme', + name: 'theme', + desc: '', + args: [], + ); + } + + /// `System` + String get system { + return Intl.message( + 'System', + name: 'system', + desc: '', + args: [], + ); + } + + /// `Light` + String get light { + return Intl.message( + 'Light', + name: 'light', + desc: '', + args: [], + ); + } + + /// `Dark` + String get dark { + return Intl.message( + 'Dark', + name: 'dark', + desc: '', + args: [], + ); + } + + /// `Reset to default settings` + String get resetToDefaultSettings { + return Intl.message( + 'Reset to default settings', + name: 'resetToDefaultSettings', + desc: '', + args: [], + ); + } + + /// `Reset` + String get reset { + return Intl.message( + 'Reset', + name: 'reset', + desc: '', + args: [], + ); + } + + /// `Settings have been saved` + String get settingsHaveBeenSaved { + return Intl.message( + 'Settings have been saved', + name: 'settingsHaveBeenSaved', + desc: '', + args: [], + ); + } + + /// `Could not save settings` + String get couldNotSaveSettings { + return Intl.message( + 'Could not save settings', + name: 'couldNotSaveSettings', + desc: '', + args: [], + ); + } + + /// `Update available.` + String get updateAvailable { + return Intl.message( + 'Update available.', + name: 'updateAvailable', + desc: '', + args: [], + ); + } + + /// `Sidekick version {updateInfoLatest} is now available.` + String sidekickVersionUpdateinfolatestIsNowAvailable(Object updateInfoLatest) { + return Intl.message( + 'Sidekick version $updateInfoLatest is now available.', + name: 'sidekickVersionUpdateinfolatestIsNowAvailable', + desc: '', + args: [updateInfoLatest], + ); + } + + /// `Later` + String get later { + return Intl.message( + 'Later', + name: 'later', + desc: '', + args: [], + ); + } + + /// `Update Now` + String get updateNow { + return Intl.message( + 'Update Now', + name: 'updateNow', + desc: '', + args: [], + ); + } + + /// `Click here to download.` + String get clickHereToDownload { + return Intl.message( + 'Click here to download.', + name: 'clickHereToDownload', + desc: '', + args: [], + ); + } + + /// `A new version of Sidekick is available ({updateInfoLatest}).` + String aNewVersionOfSidekickIsAvailableUpdateinfolatest(Object updateInfoLatest) { + return Intl.message( + 'A new version of Sidekick is available ($updateInfoLatest).', + name: 'aNewVersionOfSidekickIsAvailableUpdateinfolatest', + desc: '', + args: [updateInfoLatest], + ); + } + + /// `There was an isssue opening Sidekick` + String get thereWasAnIsssueOpeningSidekick { + return Intl.message( + 'There was an isssue opening Sidekick', + name: 'thereWasAnIsssueOpeningSidekick', + desc: '', + args: [], + ); + } + + /// `Close` + String get close { + return Intl.message( + 'Close', + name: 'close', + desc: '', + args: [], + ); + } + + /// `Language` + String get language { + return Intl.message( + 'Language', + name: 'language', + desc: '', + args: [], + ); + } +} + +class AppLocalizationDelegate extends LocalizationsDelegate { + const AppLocalizationDelegate(); + + List get supportedLocales { + return const [ + Locale.fromSubtags(languageCode: 'en'), + Locale.fromSubtags(languageCode: 'de'), + ]; + } + + @override + bool isSupported(Locale locale) => _isSupported(locale); + @override + Future load(Locale locale) => S.load(locale); + @override + bool shouldReload(AppLocalizationDelegate old) => false; + + bool _isSupported(Locale locale) { + if (locale != null) { + for (var supportedLocale in supportedLocales) { + if (supportedLocale.languageCode == locale.languageCode) { + return true; + } + } + } + return false; + } +} \ No newline at end of file diff --git a/lib/l10n/intl_de.arb b/lib/l10n/intl_de.arb new file mode 100644 index 00000000..7675823f --- /dev/null +++ b/lib/l10n/intl_de.arb @@ -0,0 +1,140 @@ +{ + "navButtonDashboard": "Dashboard", + "navButtonProjects": "Projekte", + "navButtonExplore": "Erkunden", + "navButtonPackages": "Pakete", + "installedVersions": "Installierte Versionen", + "cleanUp": "Säubern", + "cleanUpTooltip": "Nicht verwendete Versionen bereinigen.", + "numberOfCachedVersions": "{cachedVersions} Versionen", + "flutterSdkNotInstalled": "Flutter SDK nicht installiert.", + "noFlutterVersionInstalledMessage": "Sie haben derzeit keine Flutter SDK Versionen installiert. Versionen oder Kanäle, die installiert wurden, werden hier angezeigt.", + "exploreFlutterReleases": "Erkunde Flutter Releases", + "advanced": "Erweitert", + "downloadZip": "Zip herunterladen", + "zipFileWithAllReleaseDependencies": "Zip-Datei mit allen Release-Abhängigkeiten.", + "hash": "Hash", + "sha256": "Sha256", + "localCacheInformation": "Lokale Cache-Informationen", + "createdDate": "Erstelldatum", + "cacheLocation": "Cache-Speicherort", + "areYouSureYouWantToRemove": "Sind Sie sicher, dass Sie entfernen möchten?", + "thisWillRemoveItemnameCacheFromYourSystem": "Dadurch wird {itemname} aus dem Cache von Ihrem System entfernt.", + "cancel": "Abbrechen", + "confirm": "Bestätigen", + "master": "Master", + "theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuild": "Die aktuelle Spitze des Baumes, der absolut letzte Stand der Technik. ", + "usuallyFunctionalThoughSometimesWeAccidentallyBreakThings": "Normalerweise funktional, obwohl wir manchmal versehentlich Dinge kaputt machen.", + "channel": "Channel", + "releaseNotes": "Freigabemitteilungen", + "version": "Version", + "releaseDate": "Freigabedatum", + "sdkHasNotFinishedSetup": "SDK hat das Setup nicht abgeschlossen", + "versionIsInstalled": "Version ist installiert", + "versionNotInstalledClickToInstall": "Version nicht installiert. Klicken Sie zum Installieren.", + "noUnusedFlutterSdkVersionsInstalled": "Keine unbenutzten Flutter SDK Versionen installiert", + "cleanUpUnusedVersions": "Nicht verwendete Versionen bereinigen", + "theseVersionAreNotPinnedToAProject": "Diese Versionen sind nicht an ein Projekt angeheftet ", + "doYouWantToRemoveThemToFreeUpSpace": "Möchten Sie es entfernen, um Speicherplatz freizugeben?", + "globalConfiguration": "Globale Konfiguration", + "ok": "OK", + "flutterPathIsPointingTon": "Flutter PATH verweist auf\n ", + "changeThePathTo": "Ändere den Path zu\n", + "ifYouWantToFlutterSdkThroughFvm": "wenn Sie Flutter SDK durch FVM", + "howToUpdateYourPath": "Wie soll man den Pfad aktualisieren?", + "nothingSelected": "Nichts ausgewähl", + "copiedToClipboard": "In die Zwischenablage kopiert", + "refresh": "Aktualisieren", + "countFound": "{count} gefunden", + "couldNotLaunchUrl": "Konnte {url} nicht öffnen", + "start": "start", + "open": "öffnen", + "weRecommendThatYouUseThisChannelForAllProduction": "Wir empfehlen, dass Sie diesen Kanal für alle Produktions-App-Veröffentlichungen verwenden. Ungefähr einmal im Quartal wird ein Zweig, der auf Beta stabilisiert wurde, unser nächster stabiler Zweig und wir erstellen eine stabile Version von diesem Zweig.", + "branchCreatedFromMasterForANewBetaReleaseAt": "Zweig, der für eine neue Betaversion am Monatsanfang, in der Regel am ersten Montag, von master erstellt wird. Dieser wird einen Zweig für Dart, die Engine und das Framework enthalten.", + "theLatestFullytestedBuildUsuallyFunctionalButSeeBadBuilds": "Der letzte vollständig getestete Build. Normalerweise funktionstüchtig, aber unter \"Schlechte Builds\" finden Sie eine Liste bekannter \"schlechter\" Dev-Builds.", + "theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuildUsuallyFunctional": "Der aktuelle Tip-of-Tree, der absolut neueste Cutting Edge Build. Normalerweise funktional, obwohl wir manchmal versehentlich Dinge kaputt machen.", + "inUse": "Verwendet", + "unused": "Nicht verwendet", + "setAsGlobal": "Als global festlegen", + "details": "Details", + "remove": "Löschen", + "upgrade": "Upgrade", + "global": "Global", + "versionItemversionnameHasBeenInstalled": "Die Version {itemVersionName} wurde installiert.", + "versionItemversionnameHasFinishedSetup": "Version {itemVersionName} hat das Setup beendet.", + "channelItemversionnameHasBeenUpgraded": "Channel {itemVersionName} wurde aktualisiert.", + "versionItemversionnameHasBeenRemoved": "Die Version {itemVersionName} wurde entfernt.", + "versionItemversionnameHasBeenSetAsGlobal": "Version {itemVersionName} wurde als global festgelegt.", + "versionVersionPinnedToProjectname": "Version {version} angeheftet an {projectName}", + "packageprojectscountProjects": "{packageProjectsCount} Projekte", + "changelog": "Änderungsprotokoll", + "website": "Website", + "likes": "Likes", + "pubPoints": "Pub Punkte", + "popularity": "Popularität", + "noPackagesFound": "Keine Pakete gefunden", + "youNeedToAddAFlutterProjectFirst": "Sie müssen zuerst ein Flutter-Projekt hinzufügen. ", + "packageInformationWillBeDisplayedHere": "Hier werden die Paketinformationen angezeigt.", + "mostUsedPackages": "Meistgenutzte Pakete", + "thereWasAnIssueLoadingYourPackages": "Es gab ein Problem beim Laden Ihrer Pakete.", + "openTerminalPlayground": "Terminal Playground öffnen", + "selectAFlutterSdkVersion": "Wählen Sie eine Flutter SDK Version", + "choose": "Wählen Sie", + "noFlutterProjectsHaveBeenAddedYet": "Es wurden noch keine Flutter-Projekte hinzugefügt.", + "addYourFlutterProject": "Ihr Flutter-Projekt hinzufügen ", + "projectsInformationWillBeDisplayedHere": "Hier werden die Projektinformationen angezeigt.", + "notAFlutterProject": "Kein Flutter-Projekt", + "projectsRefreshed": "Projekte aktualisiert", + "projects": "Projekte", + "projectsProjects": "{projects} Projekte", + "onlyDisplayProjectsThatHaveVersionsPinned": "Nur Projekte anzeigen, die Versionen angeheftet haben", + "fvmOnly": "Nur FVM", + "addProject": "Projekt hinzufügen", + "releases": "Releases", + "versions": "Versionen", + "playground": "Playground", + "releasesVersions": "{releases} Versionen", + "notRunning": "Läuft nicht", + "search": "Suche... ", + "noResults": "No Results", + "channels": "Channels", + "stableReleases": "Stable Releases", + "betaReleases": "Beta Releases", + "devReleases": "Dev Releases", + "invalidChanel": "Invalid chanel", + "aFlutterSdkVersionNeeedsToBeSetAsGlobal": "Eine Flutter-Sdk-Version muss als global eingestellt werden ", + "inOrderToAccessFlutterSettings": "um auf die Flutter-Einstellungen zuzugreifen", + "analyticsCrashReporting": "Analytik & Crash-Berichterstattung", + "whenAFlutterCommandCrashesItAttempts": "Wenn ein Flutter-Befehl abstürzt, wird versucht ", + "toSendACrashReportToGoogleInOrderTo": "einen Absturzbericht an Google zu senden, um zu helfen,", + "googleContributeImprovementsToFlutterOverTime": " Google steuert im Laufe der Zeit Verbesserungen zu Flutter bei", + "platforms": "Platformen", + "web": "Web", + "thisWillCacheTheMainFlutterRepository": "Dadurch wird das Haupt-Repository von Flutter zwischengespeichert", + "forFasterAndSmallerInstalls": " für schnellere und kleinere Installationen", + "skipSetupFlutterOnInstall": "Einrichtung von Flutter bei der Installation überspringen", + "thisWillOnlyCloneFlutterAndNotInstall": "Dadurch wird Flutter nur geklont und nicht installiert ", + "dependenciesAfterANewVersionIsInstalled": "Abhängigkeiten, nachdem eine neue Version installiert wurde.", + "areYouSureYouWantToResetSettings": "Sind Sie sicher, dass Sie die Einstellungen zurücksetzen wollen?", + "thisWillOnlyResetSidekickSpecificPreferences": "Dadurch werden nur Sidekick-spezifische Einstellungen zurückgesetzt", + "appSettingsHaveBeenReset": "Die App-Einstellungen wurden zurückgesetzt", + "general": "Allgemein", + "selectAThemeOrSwitchAccordingToSystemSettings": "Wählen Sie ein Thema oder schalten Sie entsprechend den Systemeinstellungen um.", + "theme": "Theme", + "system": "System", + "light": "Hell", + "dark": "Dunkel", + "resetToDefaultSettings": "Zurücksetzen auf Standardeinstellungen", + "reset": "Zurücksetzen", + "settingsHaveBeenSaved": "Die Einstellungen wurden gespeichert", + "couldNotSaveSettings": "Einstellungen konnten nicht gespeichert werden", + "updateAvailable": "Update verfügbar.", + "sidekickVersionUpdateinfolatestIsNowAvailable": "Sidekick version {updateInfoLatest} ist nun Verfügbar.", + "later": "Später", + "updateNow": "Jetzt aktualisieren", + "clickHereToDownload": "Klicken Sie hier zum Download.", + "aNewVersionOfSidekickIsAvailableUpdateinfolatest": "Eine neue Version von Sidekick ist verfügbar ({updateInfoLatest}).", + "thereWasAnIsssueOpeningSidekick": "Es gab ein Problem beim Öffnen von Sidekick", + "close": "Schließen", + "language": "Sprache" +} \ No newline at end of file diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb new file mode 100644 index 00000000..259bf045 --- /dev/null +++ b/lib/l10n/intl_en.arb @@ -0,0 +1,140 @@ +{ + "navButtonDashboard": "Dashboard", + "navButtonProjects": "Projects", + "navButtonExplore": "Explore", + "navButtonPackages": "Packages", + "installedVersions": "Installed Versions", + "cleanUp": "Clean up", + "cleanUpTooltip": "Clean up unused versions.", + "numberOfCachedVersions": "{cachedVersions} versions", + "flutterSdkNotInstalled": "Flutter SDK not installed.", + "noFlutterVersionInstalledMessage": "You do not currently have any Flutter SDK versions installed. Versions or channels that have been installed will be displayed here.", + "exploreFlutterReleases": "Explore Flutter Releases", + "advanced": "Advanced", + "downloadZip": "Download Zip", + "zipFileWithAllReleaseDependencies": "Zip file with all release dependencies.", + "hash": "Hash", + "sha256": "Sha256", + "localCacheInformation": "Local Cache Information", + "createdDate": "Created Date", + "cacheLocation": "Cache Location", + "areYouSureYouWantToRemove": "Are you sure you want to remove?", + "thisWillRemoveItemnameCacheFromYourSystem": "This will remove {itemname} cache from your system.", + "cancel": "Cancel", + "confirm": "Confirm", + "master": "Master", + "theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuild": "The current tip-of-tree, absolute latest cutting edge build. ", + "usuallyFunctionalThoughSometimesWeAccidentallyBreakThings": "Usually functional, though sometimes we accidentally break things.", + "channel": "Channel", + "releaseNotes": "Release Notes", + "version": "Version", + "releaseDate": "Release Date", + "sdkHasNotFinishedSetup": "SDK has not finished setup", + "versionIsInstalled": "Version is installed", + "versionNotInstalledClickToInstall": "Version not installed. Click to install.", + "noUnusedFlutterSdkVersionsInstalled": "No unused Flutter SDK versions installed", + "cleanUpUnusedVersions": "Clean up unused versions", + "theseVersionAreNotPinnedToAProject": "These version are not pinned to a project ", + "doYouWantToRemoveThemToFreeUpSpace": "Do you want to remove them to free up space?", + "globalConfiguration": "Global configuration", + "ok": "OK", + "flutterPathIsPointingTon": "Flutter PATH is pointing to\n ", + "changeThePathTo": "Change the path to\n", + "ifYouWantToFlutterSdkThroughFvm": "if you want to Flutter SDK through FVM", + "howToUpdateYourPath": "How to update your path?", + "nothingSelected": "Nothing selected", + "copiedToClipboard": "Copied to clipboard", + "refresh": "Refresh", + "countFound": "{count} Found", + "couldNotLaunchUrl": "Could not launch {url}", + "start": "start", + "open": "open", + "weRecommendThatYouUseThisChannelForAllProduction": "We recommend that you use this channel for all production app releases. Roughly once a quarter, a branch that has been stabilized on beta will become our next stable branch and we will create a stable release from that branch.", + "branchCreatedFromMasterForANewBetaReleaseAt": "Branch created from master for a new beta release at the beginning of the month, usually the first Monday. This will include a branch for Dart, the Engine and the Framework.", + "theLatestFullytestedBuildUsuallyFunctionalButSeeBadBuilds": "The latest fully-tested build. Usually functional, but see Bad Builds for a list of known \"bad\" dev builds.", + "theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuildUsuallyFunctional": "The current tip-of-tree, absolute latest cutting edge build. Usually functional, though sometimes we accidentally break things.", + "inUse": "In use", + "unused": "Unused", + "setAsGlobal": "Set as global", + "details": "Details", + "remove": "Remove", + "upgrade": "Upgrade", + "global": "Global", + "versionItemversionnameHasBeenInstalled": "Version {itemVersionName} has been installed.", + "versionItemversionnameHasFinishedSetup": "Version {itemVersionName} has finished setup.", + "channelItemversionnameHasBeenUpgraded": "Channel {itemVersionName} has been upgraded.", + "versionItemversionnameHasBeenRemoved": "Version {itemVersionName} has been removed.", + "versionItemversionnameHasBeenSetAsGlobal": "Version {itemVersionName} has been set as global.", + "versionVersionPinnedToProjectname": "Version {version} pinned to {projectName}", + "packageprojectscountProjects": "{packageProjectsCount} projects", + "changelog": "Changelog", + "website": "Website", + "likes": "Likes", + "pubPoints": "Pub Points", + "popularity": "Popularity", + "noPackagesFound": "No Packages Found", + "youNeedToAddAFlutterProjectFirst": "You need to add a Flutter project first. ", + "packageInformationWillBeDisplayedHere": "Package information will be displayed here.", + "mostUsedPackages": "Most Used Packages", + "thereWasAnIssueLoadingYourPackages": "There was an issue loading your packages.", + "openTerminalPlayground": "Open terminal playground", + "selectAFlutterSdkVersion": "Select a Flutter SDK Version", + "choose": "Choose", + "noFlutterProjectsHaveBeenAddedYet": "No Flutter Projects have been added yet.", + "addYourFlutterProject": "Add your Flutter project ", + "projectsInformationWillBeDisplayedHere": "Projects information will be displayed here.", + "notAFlutterProject": "Not a Flutter project", + "projectsRefreshed": "Projects Refreshed", + "projects": "Projects", + "projectsProjects": "{projects} Projects", + "onlyDisplayProjectsThatHaveVersionsPinned": "Only display projects that have versions pinned", + "fvmOnly": "FVM Only", + "addProject": "Add Project", + "releases": "Releases", + "versions": "Versions", + "playground": "Playground", + "releasesVersions": "{releases} versions", + "notRunning": "Not running", + "search": "Search... ", + "noResults": "No Results", + "channels": "Channels", + "stableReleases": "Stable Releases", + "betaReleases": "Beta Releases", + "devReleases": "Dev Releases", + "invalidChanel": "Invalid chanel", + "aFlutterSdkVersionNeeedsToBeSetAsGlobal": "A Flutter sdk version neeeds to be set as global ", + "inOrderToAccessFlutterSettings": "in order to access Flutter settings", + "analyticsCrashReporting": "Analytics & Crash Reporting", + "whenAFlutterCommandCrashesItAttempts": "When a flutter command crashes it attempts", + "toSendACrashReportToGoogleInOrderTo": " to send a crash report to Google in order to help", + "googleContributeImprovementsToFlutterOverTime": " Google contribute improvements to Flutter over time", + "platforms": "Platforms", + "web": "Web", + "thisWillCacheTheMainFlutterRepository": "This will cache the main Flutter repository", + "forFasterAndSmallerInstalls": " for faster and smaller installs", + "skipSetupFlutterOnInstall": "Skip setup Flutter on install", + "thisWillOnlyCloneFlutterAndNotInstall": "This will only clone Flutter and not install", + "dependenciesAfterANewVersionIsInstalled": "dependencies after a new version is installed.", + "areYouSureYouWantToResetSettings": "Are you sure you want to reset settings?", + "thisWillOnlyResetSidekickSpecificPreferences": "This will only reset Sidekick specific preferences", + "appSettingsHaveBeenReset": "App settings have been reset", + "general": "General", + "selectAThemeOrSwitchAccordingToSystemSettings": "Select a theme or switch according to system settings..", + "theme": "Theme", + "system": "System", + "light": "Light", + "dark": "Dark", + "resetToDefaultSettings": "Reset to default settings", + "reset": "Reset", + "settingsHaveBeenSaved": "Settings have been saved", + "couldNotSaveSettings": "Could not save settings", + "updateAvailable": "Update available.", + "sidekickVersionUpdateinfolatestIsNowAvailable": "Sidekick version {updateInfoLatest} is now available.", + "later": "Later", + "updateNow": "Update Now", + "clickHereToDownload": "Click here to download.", + "aNewVersionOfSidekickIsAvailableUpdateinfolatest": "A new version of Sidekick is available ({updateInfoLatest}).", + "thereWasAnIsssueOpeningSidekick": "There was an isssue opening Sidekick", + "close": "Close", + "language": "Language" +} \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index 75a1c189..726c7611 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -17,6 +17,9 @@ import 'src/modules/settings/settings.utils.dart'; import 'src/screens/error_db_screen.dart'; import 'src/theme.dart'; +import 'package:flutter_localizations/flutter_localizations.dart'; +import 'generated/l10n.dart'; + void main() async { WidgetsFlutterBinding.ensureInitialized(); Hive.registerAdapter(SidekickSettingsAdapter()); @@ -54,6 +57,13 @@ class FvmApp extends StatelessWidget { return OKToast( child: MaterialApp( + localizationsDelegates: [ + S.delegate, + GlobalMaterialLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + GlobalCupertinoLocalizations.delegate, + ], + supportedLocales: S.delegate.supportedLocales, title: kAppTitle, debugShowCheckedModeBanner: false, theme: lightTheme, diff --git a/lib/src/components/molecules/advanced_info_tile.dart b/lib/src/components/molecules/advanced_info_tile.dart index 260b3dc1..7b4e1551 100644 --- a/lib/src/components/molecules/advanced_info_tile.dart +++ b/lib/src/components/molecules/advanced_info_tile.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../../dto/release.dto.dart'; import '../../modules/common/atoms/copy_button.dart'; @@ -25,11 +26,11 @@ class AdvancedInfoTile extends StatelessWidget { } return SkGroupTile( - title: const Text('Advanced'), + title: Text(S.of(context).advanced), children: [ SkListTile( - title: const Text('Download Zip'), - subtitle: const Caption('Zip file with all release dependencies.'), + title: Text(S.of(context).downloadZip), + subtitle: Caption(S.of(context).zipFileWithAllReleaseDependencies), trailing: IconButton( icon: const Icon(Icons.cloud_download), onPressed: () async { @@ -39,13 +40,13 @@ class AdvancedInfoTile extends StatelessWidget { ), const Divider(), SkListTile( - title: const Text('Hash'), + title: Text(S.of(context).hash), subtitle: Caption(release.release.hash), trailing: CopyButton(release.release.hash), ), const Divider(), SkListTile( - title: const Text('Sha256'), + title: Text(S.of(context).sha256), subtitle: Caption(release.release.sha256), trailing: CopyButton(release.release.sha256), ), diff --git a/lib/src/components/molecules/cache_info_tile.dart b/lib/src/components/molecules/cache_info_tile.dart index 68a61446..7a54f9e5 100644 --- a/lib/src/components/molecules/cache_info_tile.dart +++ b/lib/src/components/molecules/cache_info_tile.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:open_file/open_file.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../../dto/release.dto.dart'; import '../../modules/common/atoms/group_tile.dart'; @@ -24,15 +25,15 @@ class FvmInfoTile extends StatelessWidget { return const SizedBox(height: 0); } return SkGroupTile( - title: const Text('Local Cache Information'), + title: Text(S.of(context).localCacheInformation), children: [ SkListTile( - title: const Text('Created Date'), + title: Text(S.of(context).createdDate), trailing: CacheDateDisplay(release), ), const Divider(height: 0), SkListTile( - title: const Text('Cache Location'), + title: Text(S.of(context).cacheLocation), subtitle: Caption(release.cache.dir.path), trailing: IconButton( icon: const Icon( diff --git a/lib/src/components/molecules/delete_dialog.dart b/lib/src/components/molecules/delete_dialog.dart index 85758a83..e29cb89d 100644 --- a/lib/src/components/molecules/delete_dialog.dart +++ b/lib/src/components/molecules/delete_dialog.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../../dto/release.dto.dart'; @@ -13,8 +14,8 @@ void showDeleteDialog( builder: (context) { // return object of type Dialog return AlertDialog( - title: const Text('Are you sure you want to remove?'), - content: Text('This will remove ${item.name} cache from your system.'), + title: Text(S.of(context).areYouSureYouWantToRemove), + content: Text(S.of(context).thisWillRemoveItemnameCacheFromYourSystem(item.name)), buttonPadding: const EdgeInsets.all(15), actions: [ // usually buttons at the bottom of the dialog @@ -22,14 +23,14 @@ void showDeleteDialog( onPressed: () { Navigator.of(context).pop(); }, - child: const Text('Cancel'), + child: Text(S.of(context).cancel), ), TextButton( onPressed: () async { Navigator.of(context).pop(); onDelete(); }, - child: const Text('Confirm'), + child: Text(S.of(context).confirm), ), ], ); diff --git a/lib/src/components/molecules/info_banner.dart b/lib/src/components/molecules/info_banner.dart index ab1c6121..22169d59 100644 --- a/lib/src/components/molecules/info_banner.dart +++ b/lib/src/components/molecules/info_banner.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../atoms/typography.dart'; @@ -24,14 +25,14 @@ class InfoBanner extends StatelessWidget { ), ), child: Row( - children: const [ + children: [ SizedBox(width: 10), - Subheading('Master'), + Subheading(S.of(context).master), SizedBox(width: 20), Expanded( child: Caption( - '''The current tip-of-tree, absolute latest cutting edge build. ''' - '''Usually functional, though sometimes we accidentally break things.''', + S.of(context).theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuild + + S.of(context).usuallyFunctionalThoughSometimesWeAccidentallyBreakThings, ), ), SizedBox(width: 20), diff --git a/lib/src/components/molecules/reference_info_tile.dart b/lib/src/components/molecules/reference_info_tile.dart index 9fa6a86e..34e267c2 100644 --- a/lib/src/components/molecules/reference_info_tile.dart +++ b/lib/src/components/molecules/reference_info_tile.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../../dto/channel.dto.dart'; import '../../dto/release.dto.dart'; @@ -19,12 +20,12 @@ class ReferenceInfoTile extends StatelessWidget { return Column( children: [ SkListTile( - title: const Text('Channel'), + title: Text(S.of(context).channel), trailing: Chip(label: Text(version.release.channelName)), ), const Divider(), SkListTile( - title: const Text('Release Notes'), + title: Text(S.of(context).releaseNotes), trailing: IconButton( icon: const Icon( Icons.open_in_new, @@ -48,7 +49,7 @@ class ReferenceInfoTile extends StatelessWidget { ), const Divider(height: 0), SkListTile( - title: const Text('Version'), + title: Text(S.of(context).version), trailing: channel.sdkVersion != null ? Chip(label: Text(channel.sdkVersion ?? '')) : SetupButton(release: channel), diff --git a/lib/src/components/molecules/release_info_section.dart b/lib/src/components/molecules/release_info_section.dart index 989e206c..23bdf534 100644 --- a/lib/src/components/molecules/release_info_section.dart +++ b/lib/src/components/molecules/release_info_section.dart @@ -1,5 +1,6 @@ import 'package:date_time_format/date_time_format.dart'; import 'package:flutter/material.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../../dto/release.dto.dart'; import '../../modules/common/molecules/list_tile.dart'; @@ -18,7 +19,7 @@ class ReleaseInfoSection extends StatelessWidget { return Column( children: [ SkListTile( - title: const Text('Release Date'), + title: Text(S.of(context).releaseDate), trailing: Text(DateTimeFormat.format( version.release.releaseDate, format: AmericanDateFormats.abbr, diff --git a/lib/src/components/molecules/setup_button.dart b/lib/src/components/molecules/setup_button.dart index 53d5ba14..d3efeaee 100644 --- a/lib/src/components/molecules/setup_button.dart +++ b/lib/src/components/molecules/setup_button.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../../dto/release.dto.dart'; import '../../modules/fvm/fvm_queue.provider.dart'; @@ -19,7 +20,7 @@ class SetupButton extends StatelessWidget { @override Widget build(BuildContext context) { return Tooltip( - message: 'SDK has not finished setup', + message: S.of(context).sdkHasNotFinishedSetup, child: IconButton( icon: const Icon(MdiIcons.alert), iconSize: 20, diff --git a/lib/src/components/molecules/version_install_button.dart b/lib/src/components/molecules/version_install_button.dart index 71a7ab58..f330d418 100644 --- a/lib/src/components/molecules/version_install_button.dart +++ b/lib/src/components/molecules/version_install_button.dart @@ -3,12 +3,13 @@ import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:flutter_spinkit/flutter_spinkit.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../../dto/release.dto.dart'; import '../../modules/fvm/fvm_queue.provider.dart'; -const installedMsg = 'Version is installed'; -const notInstalledMsg = 'Version not installed. Click to install.'; +String installedMsg = S.current.versionIsInstalled; +String notInstalledMsg = S.current.versionNotInstalledClickToInstall; class VersionInstallButton extends HookWidget { final ReleaseDto version; diff --git a/lib/src/components/organisms/cleanup_unused_dialog.dart b/lib/src/components/organisms/cleanup_unused_dialog.dart index b1ef0066..1cf5f574 100644 --- a/lib/src/components/organisms/cleanup_unused_dialog.dart +++ b/lib/src/components/organisms/cleanup_unused_dialog.dart @@ -1,6 +1,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../../modules/common/utils/notify.dart'; import '../../modules/fvm/fvm.provider.dart'; @@ -10,7 +11,7 @@ Future cleanupUnusedDialog(BuildContext context) async { final unusedVersions = context.read(unusedVersionProvider); if (unusedVersions.isEmpty) { - notify('No unused Flutter SDK versions installed'); + notify(S.of(context).noUnusedFlutterSdkVersionsInstalled); return; } @@ -21,14 +22,14 @@ Future cleanupUnusedDialog(BuildContext context) async { return StatefulBuilder( builder: (context, setState) { return AlertDialog( - title: const Text('Clean up unused versions'), + title: Text(S.of(context).cleanUpUnusedVersions), actions: [ // usually buttons at the bottom of the dialog TextButton( onPressed: () { Navigator.of(context).pop(); }, - child: const Text('Cancel'), + child: Text(S.of(context).cancel), ), TextButton( onPressed: () async { @@ -41,7 +42,7 @@ Future cleanupUnusedDialog(BuildContext context) async { Navigator.of(context).pop(); }, - child: const Text('Confirm'), + child: Text(S.of(context).confirm), ), ], content: Container( @@ -50,9 +51,9 @@ Future cleanupUnusedDialog(BuildContext context) async { child: SingleChildScrollView( child: Column( children: [ - const Text( - 'These version are not pinned to a project ' - 'Do you want to remove them to free up space?', + Text( + S.of(context).theseVersionAreNotPinnedToAProject + + S.of(context).doYouWantToRemoveThemToFreeUpSpace, ), const SizedBox(height: 10), ...ListTile.divideTiles( diff --git a/lib/src/components/organisms/global_info_dialog.dart b/lib/src/components/organisms/global_info_dialog.dart index 7c0978e1..c011c570 100644 --- a/lib/src/components/organisms/global_info_dialog.dart +++ b/lib/src/components/organisms/global_info_dialog.dart @@ -3,6 +3,7 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:fvm/fvm.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../../modules/common/atoms/copy_button.dart'; import '../../modules/common/utils/open_link.dart'; @@ -15,7 +16,7 @@ Future showGlobalInfoDialog(BuildContext context) async { context: context, builder: (context) { return AlertDialog( - title: const Heading('Global configuration'), + title: Heading(S.of(context).globalConfiguration), actions: [ TextButton( style: ButtonStyle( @@ -25,7 +26,7 @@ Future showGlobalInfoDialog(BuildContext context) async { onPressed: () { Navigator.of(context).pop(); }, - child: const Text('OK'), + child: Text(S.of(context).ok), ), ], content: Container( @@ -33,16 +34,16 @@ Future showGlobalInfoDialog(BuildContext context) async { crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ - const Subheading( - 'Flutter PATH is pointing to\n ', + Subheading( + S.of(context).flutterPathIsPointingTon, ), Caption('${configured.currentPath}.\n\n'), !configured.isSetup ? Column( children: [ - const Subheading( - 'Change the path to\n' - 'if you want to Flutter SDK through FVM', + Subheading( + S.of(context).changeThePathTo + + S.of(context).ifYouWantToFlutterSdkThroughFvm, ), Row( children: [ @@ -62,8 +63,8 @@ Future showGlobalInfoDialog(BuildContext context) async { ); }, icon: const Icon(MdiIcons.informationOutline), - label: const Text( - 'How to update your path?', + label: Text( + S.of(context).howToUpdateYourPath, ), ) ], diff --git a/lib/src/components/organisms/info_drawer.dart b/lib/src/components/organisms/info_drawer.dart index 54ae43c0..47456069 100644 --- a/lib/src/components/organisms/info_drawer.dart +++ b/lib/src/components/organisms/info_drawer.dart @@ -2,6 +2,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../../modules/common/utils/layout_size.dart'; import '../../providers/selected_detail_provider.dart'; @@ -41,7 +42,7 @@ class SelectedDetailDrawer extends HookWidget { elevation: 0, child: Container( color: Theme.of(context).cardColor, - child: const Center(child: Caption('Nothing selected')), + child: Center(child: Caption(S.of(context).nothingSelected)), ), ), ); diff --git a/lib/src/modules/common/app_shell.dart b/lib/src/modules/common/app_shell.dart index 0b2457a6..c741c7f0 100644 --- a/lib/src/modules/common/app_shell.dart +++ b/lib/src/modules/common/app_shell.dart @@ -4,6 +4,8 @@ import 'package:flutter/scheduler.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; +import 'package:sidekick/generated/l10n.dart'; +import 'package:sidekick/src/modules/settings/settings.provider.dart'; import '../../components/organisms/app_bottom_bar.dart'; import '../../components/organisms/info_drawer.dart'; @@ -33,6 +35,10 @@ class AppShell extends HookWidget { final navigation = useProvider(navigationProvider.notifier); final currentRoute = useProvider(navigationProvider); final selectedInfo = useProvider(selectedDetailProvider).state; + final settings = useProvider(settingsProvider); + + S.load(Locale.fromSubtags(languageCode: settings.sidekick.intl),); + // Index of item selected final selectedIndex = useState(0); @@ -102,19 +108,19 @@ class AppShell extends HookWidget { }, destinations: [ renderNavButton( - 'Dashboard', + S.of(context).navButtonDashboard, Icons.category, ), renderNavButton( - 'Projects', + S.of(context).navButtonProjects, MdiIcons.folderMultiple, ), renderNavButton( - 'Explore', + S.of(context).navButtonExplore, Icons.explore, ), renderNavButton( - 'Packages', + S.of(context).navButtonPackages, MdiIcons.package, ), ], diff --git a/lib/src/modules/common/atoms/copy_button.dart b/lib/src/modules/common/atoms/copy_button.dart index 0c68e33e..b4428a3c 100644 --- a/lib/src/modules/common/atoms/copy_button.dart +++ b/lib/src/modules/common/atoms/copy_button.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../../../modules/common/utils/notify.dart'; @@ -21,7 +22,7 @@ class CopyButton extends StatelessWidget { icon: const Icon(Icons.content_copy), onPressed: () async { await Clipboard.setData(ClipboardData(text: content)); - notify('Copied to clipboard'); + notify(S.of(context).copiedToClipboard); }, ); } diff --git a/lib/src/modules/common/atoms/refresh_button.dart b/lib/src/modules/common/atoms/refresh_button.dart index 65337e60..759f6ee7 100644 --- a/lib/src/modules/common/atoms/refresh_button.dart +++ b/lib/src/modules/common/atoms/refresh_button.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; +import 'package:sidekick/generated/l10n.dart'; /// Refresh button class RefreshButton extends HookWidget { @@ -37,7 +38,7 @@ class RefreshButton extends HookWidget { } return OutlinedButton.icon( - label: const Text('Refresh'), + label: Text(S.of(context).refresh), icon: refreshing.value ? renderIndicator() : const Icon(MdiIcons.refresh, size: 20), diff --git a/lib/src/modules/common/atoms/sliver_header_delegate.dart b/lib/src/modules/common/atoms/sliver_header_delegate.dart index cbab72bb..4bce917e 100644 --- a/lib/src/modules/common/atoms/sliver_header_delegate.dart +++ b/lib/src/modules/common/atoms/sliver_header_delegate.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:sidekick/generated/l10n.dart'; /// Sliver header delegate class SliverHeaderDelegate extends SliverPersistentHeaderDelegate { @@ -39,7 +40,7 @@ class SliverHeaderDelegate extends SliverPersistentHeaderDelegate { title, ), trailing: Text( - '${count.toString()} Found', + S.of(context).countFound(count.toString()), ), onTap: onPress, ), diff --git a/lib/src/modules/common/constants.dart b/lib/src/modules/common/constants.dart index bdd39848..d3bcc6a5 100644 --- a/lib/src/modules/common/constants.dart +++ b/lib/src/modules/common/constants.dart @@ -1,4 +1,5 @@ import 'package:github/github.dart'; +import 'package:sidekick/generated/l10n.dart'; /// Sidekick title const kAppTitle = 'Sidekick'; @@ -30,13 +31,13 @@ const kFlutterTagsUrl = 'https://github.com/flutter/flutter/releases/tag/'; /// Description for the channels Map channelDescriptions = { 'stable': - '''We recommend that you use this channel for all production app releases. Roughly once a quarter, a branch that has been stabilized on beta will become our next stable branch and we will create a stable release from that branch.''', + S.current.weRecommendThatYouUseThisChannelForAllProduction, 'beta': - '''Branch created from master for a new beta release at the beginning of the month, usually the first Monday. This will include a branch for Dart, the Engine and the Framework.''', + S.current.branchCreatedFromMasterForANewBetaReleaseAt, 'dev': - '''The latest fully-tested build. Usually functional, but see Bad Builds for a list of known "bad" dev builds.''', + S.current.theLatestFullytestedBuildUsuallyFunctionalButSeeBadBuilds, 'master': - '''The current tip-of-tree, absolute latest cutting edge build. Usually functional, though sometimes we accidentally break things.''', + S.current.theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuildUsuallyFunctional, }; /// Sidekick repository slug diff --git a/lib/src/modules/common/utils/open_link.dart b/lib/src/modules/common/utils/open_link.dart index 1dff5e3e..7bd3702b 100644 --- a/lib/src/modules/common/utils/open_link.dart +++ b/lib/src/modules/common/utils/open_link.dart @@ -1,22 +1,23 @@ import 'dart:io'; +import 'package:sidekick/generated/l10n.dart'; import 'package:url_launcher/url_launcher.dart'; Future openLink(String url) async { if (await canLaunch(url)) { await launch(url); } else { - throw '''Could not launch $url'''; + throw S.current.couldNotLaunchUrl(url); } } Future openPath(String url) async { if (Platform.isWindows) { - await Process.start('start', [url]); + await Process.start(S.current.start, [url]); } if (Platform.isMacOS) { - await Process.start('open', [url]); + await Process.start(S.current.open, [url]); } } diff --git a/lib/src/modules/fvm/components/fvm_cache_size.dart b/lib/src/modules/fvm/components/fvm_cache_size.dart index 7a7bd147..f2d337b7 100644 --- a/lib/src/modules/fvm/components/fvm_cache_size.dart +++ b/lib/src/modules/fvm/components/fvm_cache_size.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../../../components/atoms/typography.dart'; import '../../../modules/common/utils/dir_stat.dart'; @@ -50,9 +51,9 @@ class FvmCacheSize extends HookWidget { Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - const Caption('In use'), + Caption(S.of(context).inUse), Caption(cacheSize.friendlySize), - const Caption('Unused'), + Caption(S.of(context).unused), ], ) ], diff --git a/lib/src/modules/fvm/components/fvm_empty_releases.dart b/lib/src/modules/fvm/components/fvm_empty_releases.dart index 43ef2532..8fb26883 100644 --- a/lib/src/modules/fvm/components/fvm_empty_releases.dart +++ b/lib/src/modules/fvm/components/fvm_empty_releases.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../../../providers/navigation_provider.dart'; import '../../common/atoms/empty_dataset.dart'; @@ -17,13 +18,13 @@ class EmptyVersions extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ Text( - 'Flutter SDK not installed.', + S.of(context).flutterSdkNotInstalled, style: Theme.of(context).textTheme.headline5, textAlign: TextAlign.center, ), const SizedBox(height: 20), Text( - '''You do not currently have any Flutter SDK versions installed. Versions or channels that have been installed will be displayed here.''', + S.of(context).noFlutterVersionInstalledMessage, textAlign: TextAlign.center, style: Theme.of(context).textTheme.caption, ), @@ -39,7 +40,7 @@ class EmptyVersions extends StatelessWidget { .goTo(NavigationRoutes.exploreScreen); }, icon: const Icon(Icons.explore), - label: const Text('Explore Flutter Releases'), + label: Text(S.of(context).exploreFlutterReleases), ) ], ), diff --git a/lib/src/modules/fvm/components/fvm_release_actions.dart b/lib/src/modules/fvm/components/fvm_release_actions.dart index 610b17c1..47eb48f7 100644 --- a/lib/src/modules/fvm/components/fvm_release_actions.dart +++ b/lib/src/modules/fvm/components/fvm_release_actions.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../../../components/atoms/typography.dart'; import '../../../components/molecules/delete_dialog.dart'; @@ -54,21 +55,21 @@ class FvmReleaseActions extends StatelessWidget { PopupMenuItem( value: FvmReleaseActionOptions.global, child: renderMenuButton( - label: 'Set as global', + label: S.current.setAsGlobal, icon: MdiIcons.earth, ), ), PopupMenuItem( value: FvmReleaseActionOptions.detail, child: renderMenuButton( - label: 'Details', + label: S.current.details, icon: MdiIcons.information, ), ), PopupMenuItem( value: FvmReleaseActionOptions.remove, child: renderMenuButton( - label: 'Remove', + label: S.current.remove, icon: MdiIcons.delete, ), ), @@ -81,7 +82,7 @@ class FvmReleaseActions extends StatelessWidget { PopupMenuItem( value: FvmReleaseActionOptions.upgrade, child: renderMenuButton( - label: 'Upgrade', + label: S.current.upgrade, icon: MdiIcons.update, ), ), diff --git a/lib/src/modules/fvm/components/fvm_release_list_item.dart b/lib/src/modules/fvm/components/fvm_release_list_item.dart index 75440ab8..7dcacb14 100644 --- a/lib/src/modules/fvm/components/fvm_release_list_item.dart +++ b/lib/src/modules/fvm/components/fvm_release_list_item.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../../../components/atoms/typography.dart'; import '../../../components/organisms/global_info_dialog.dart'; @@ -33,7 +34,7 @@ class FvmReleaseListItem extends StatelessWidget { const SizedBox(width: 20), release.isGlobal ? ActionChip( - label: const Caption('Global'), + label: Caption(S.of(context).global), avatar: const Icon(MdiIcons.information, size: 20), onPressed: () { showGlobalInfoDialog(context); diff --git a/lib/src/modules/fvm/fvm.screen.dart b/lib/src/modules/fvm/fvm.screen.dart index 4ac4fcde..aa3c0543 100644 --- a/lib/src/modules/fvm/fvm.screen.dart +++ b/lib/src/modules/fvm/fvm.screen.dart @@ -2,6 +2,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../../components/organisms/cleanup_unused_dialog.dart'; import '../common/organisms/screen.dart'; @@ -26,19 +27,19 @@ class FVMScreen extends HookWidget { } return SkScreen( - title: 'Installed Versions', + title: S.of(context).installedVersions, actions: [ - Text('${cachedVersions.length} versions'), + Text(S.of(context).numberOfCachedVersions(cachedVersions.length)), const SizedBox(width: 20), const FvmCacheSize(), const SizedBox(width: 20), Tooltip( - message: 'Clean up unused versions.', + message: S.of(context).cleanUpTooltip, child: OutlinedButton( onPressed: () async { await cleanupUnusedDialog(context); }, - child: const Text('Clean up'), + child: Text(S.of(context).cleanUp), ), ) ], diff --git a/lib/src/modules/fvm/fvm_queue.provider.dart b/lib/src/modules/fvm/fvm_queue.provider.dart index edc8bad6..41e2cd4f 100644 --- a/lib/src/modules/fvm/fvm_queue.provider.dart +++ b/lib/src/modules/fvm/fvm_queue.provider.dart @@ -3,6 +3,7 @@ import 'dart:collection'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:fvm/fvm.dart'; +import 'package:sidekick/generated/l10n.dart'; import 'package:state_notifier/state_notifier.dart'; import '../../dto/release.dto.dart'; @@ -113,28 +114,28 @@ class FvmQueueState extends StateNotifier { switch (item.action) { case QueueAction.install: await FVMClient.install(item.version.name); - notify('Version ${item.version.name} has been installed.'); + notify(S.current.versionItemversionnameHasBeenInstalled(item.version.name)); break; case QueueAction.setupOnly: await FVMClient.setup(item.version.name); - notify('Version ${item.version.name} has finished setup.'); + notify(S.current.versionItemversionnameHasFinishedSetup(item.version.name)); break; case QueueAction.installAndSetup: await FVMClient.install(item.version.name); await FVMClient.setup(item.version.name); - notify('Version ${item.version.name} has been installed.'); + notify(S.current.versionItemversionnameHasBeenInstalled(item.version.name)); break; case QueueAction.channelUpgrade: await FVMClient.upgradeChannel(item.version.cache); - notify('Channel ${item.version.name} has been upgraded.'); + notify(S.current.channelItemversionnameHasBeenUpgraded(item.version.name)); break; case QueueAction.remove: await FVMClient.remove(item.version.name); - notify('Version ${item.version.name} has been removed.'); + notify(S.current.versionItemversionnameHasBeenRemoved(item.version.name)); break; case QueueAction.setGlobal: await FVMClient.setGlobalVersion(item.version.cache); - notify('Version ${item.version.name} has been set as global.'); + notify(S.current.versionItemversionnameHasBeenSetAsGlobal(item.version.name)); break; default: break; @@ -158,7 +159,7 @@ class FvmQueueState extends StateNotifier { Future pinVersion(FlutterProject project, String version) async { await FVMClient.pinVersion(project, version); await ref.read(projectsProvider.notifier).reload(project); - notify('Version $version pinned to ${project.name}'); + notify(S.current.versionVersionPinnedToProjectname(version, project.name)); } Future _addToQueue(ReleaseDto version, {QueueAction action}) async { diff --git a/lib/src/modules/packages/components/package_list_item.dart b/lib/src/modules/packages/components/package_list_item.dart index 7f11b762..c6d1469f 100644 --- a/lib/src/modules/packages/components/package_list_item.dart +++ b/lib/src/modules/packages/components/package_list_item.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../../../components/atoms/typography.dart'; import '../../../modules/common/utils/open_link.dart'; @@ -59,7 +60,7 @@ class PackageListItem extends StatelessWidget { Row( mainAxisAlignment: MainAxisAlignment.end, children: [ - Caption('${package.projectsCount.toString()} projects'), + Caption(S.of(context).packageprojectscountProjects(package.projectsCount.toString())), const SizedBox(width: 10), const Text('·'), const SizedBox(width: 10), @@ -68,7 +69,7 @@ class PackageListItem extends StatelessWidget { const Text('·'), const SizedBox(width: 10), Tooltip( - message: 'Details', + message: S.of(context).details, child: IconButton( iconSize: 20, splashRadius: 20, @@ -82,7 +83,7 @@ class PackageListItem extends StatelessWidget { const Text('·'), const SizedBox(width: 10), Tooltip( - message: 'Changelog', + message: S.of(context).changelog, child: IconButton( iconSize: 20, splashRadius: 20, @@ -96,7 +97,7 @@ class PackageListItem extends StatelessWidget { const Text('·'), const SizedBox(width: 10), Tooltip( - message: 'Website', + message: S.of(context).website, child: IconButton( iconSize: 20, splashRadius: 20, diff --git a/lib/src/modules/packages/components/package_score_display.dart b/lib/src/modules/packages/components/package_score_display.dart index 38b20578..f64b7ab5 100644 --- a/lib/src/modules/packages/components/package_score_display.dart +++ b/lib/src/modules/packages/components/package_score_display.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:pub_api_client/pub_api_client.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../../../components/atoms/typography.dart'; @@ -35,7 +36,7 @@ class PackageScoreDisplay extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Heading(score.likeCount.toString()), - const Caption('Likes'), + Caption(S.of(context).likes), ], ), const VerticalDivider(width: 25), @@ -44,7 +45,7 @@ class PackageScoreDisplay extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Heading(score.grantedPoints.toString()), - const Caption('Pub Points'), + Caption(S.of(context).pubPoints), ], ), const VerticalDivider(width: 25), @@ -53,7 +54,7 @@ class PackageScoreDisplay extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Heading('${(score.popularityScore * 100).toStringAsFixed(0)}%'), - const Caption('Popularity'), + Caption(S.of(context).popularity), ], ), ], diff --git a/lib/src/modules/packages/components/packages_empty.dart b/lib/src/modules/packages/components/packages_empty.dart index 61dcbda0..21ada9de 100644 --- a/lib/src/modules/packages/components/packages_empty.dart +++ b/lib/src/modules/packages/components/packages_empty.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../../common/atoms/empty_dataset.dart'; @@ -18,14 +19,14 @@ class EmptyPackages extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ Text( - 'No Packages Found', + S.of(context).noPackagesFound, style: Theme.of(context).textTheme.headline5, textAlign: TextAlign.center, ), const SizedBox(height: 10), Text( - 'You need to add a Flutter project first. ' - 'Package information will be displayed here.', + S.of(context).youNeedToAddAFlutterProjectFirst + + S.of(context).packageInformationWillBeDisplayedHere, style: Theme.of(context).textTheme.caption, textAlign: TextAlign.center, ), diff --git a/lib/src/modules/packages/packages.screen.dart b/lib/src/modules/packages/packages.screen.dart index 51adda29..38fcb1a0 100644 --- a/lib/src/modules/packages/packages.screen.dart +++ b/lib/src/modules/packages/packages.screen.dart @@ -2,6 +2,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../common/atoms/loading_indicator.dart'; import '../common/organisms/screen.dart'; @@ -27,7 +28,7 @@ class PackagesScreen extends HookWidget { return const EmptyPackages(); } return SkScreen( - title: 'Most Used Packages', + title: S.of(context).mostUsedPackages, child: CupertinoScrollbar( child: ListView.builder( // separatorBuilder: (_, __) => const Divider(), @@ -49,8 +50,8 @@ class PackagesScreen extends HookWidget { }, loading: () => const SkLoadingIndicator(), error: (_, __) => Container( - child: const Text( - 'There was an issue loading your packages.', + child: Text( + S.of(context).thereWasAnIssueLoadingYourPackages, ), ), ); diff --git a/lib/src/modules/projects/components/project_actions.dart b/lib/src/modules/projects/components/project_actions.dart index b0ef3cc9..705aeb1a 100644 --- a/lib/src/modules/projects/components/project_actions.dart +++ b/lib/src/modules/projects/components/project_actions.dart @@ -3,6 +3,7 @@ import 'package:fvm/fvm.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; import 'package:open_file/open_file.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../../../components/atoms/typography.dart'; import '../projects.provider.dart'; @@ -47,14 +48,14 @@ class ProjectActions extends StatelessWidget { PopupMenuItem( value: ProjectActionOptions.openDirectory, child: renderMenuButton( - label: 'Open', + label: S.current.open, icon: MdiIcons.openInNew, ), ), PopupMenuItem( value: ProjectActionOptions.remove, child: renderMenuButton( - label: 'Remove', + label: S.current.remove, icon: MdiIcons.delete, ), ), diff --git a/lib/src/modules/projects/components/project_list_item.dart b/lib/src/modules/projects/components/project_list_item.dart index d5dcd6a0..be329b2b 100644 --- a/lib/src/modules/projects/components/project_list_item.dart +++ b/lib/src/modules/projects/components/project_list_item.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../../../components/atoms/typography.dart'; import '../../../components/molecules/version_install_button.dart'; @@ -82,7 +83,7 @@ class ProjectListItem extends HookWidget { children: [ const SizedBox(width: 10), Tooltip( - message: 'Open terminal playground', + message: S.of(context).openTerminalPlayground, child: IconButton( iconSize: 20, splashRadius: 20, diff --git a/lib/src/modules/projects/components/project_release_select.dart b/lib/src/modules/projects/components/project_release_select.dart index 87b6e4c1..e0603779 100644 --- a/lib/src/modules/projects/components/project_release_select.dart +++ b/lib/src/modules/projects/components/project_release_select.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../../../components/atoms/typography.dart'; import '../../../dto/release.dto.dart'; @@ -25,7 +26,7 @@ class ProjectReleaseSelect extends StatelessWidget { @override Widget build(BuildContext context) { return PopupMenuButton( - tooltip: 'Select a Flutter SDK Version', + tooltip: S.of(context).selectAFlutterSdkVersion, // elevation: 1, padding: EdgeInsets.zero, @@ -56,7 +57,7 @@ class ProjectReleaseSelect extends StatelessWidget { children: [ project.pinnedVersion != null ? Caption(project.pinnedVersion) - : const Caption('Choose'), + : Caption(S.of(context).choose), // const SizedBox(width: 20), const Icon(MdiIcons.menuDown), ], diff --git a/lib/src/modules/projects/components/projects_empty.dart b/lib/src/modules/projects/components/projects_empty.dart index c45b9610..7e68ac66 100644 --- a/lib/src/modules/projects/components/projects_empty.dart +++ b/lib/src/modules/projects/components/projects_empty.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../../common/atoms/empty_dataset.dart'; @@ -18,14 +19,14 @@ class EmptyProjects extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ Text( - 'No Flutter Projects have been added yet.', + S.of(context).noFlutterProjectsHaveBeenAddedYet, style: Theme.of(context).textTheme.headline6, textAlign: TextAlign.center, ), const SizedBox(height: 10), Text( - 'Add your Flutter project ' - 'Projects information will be displayed here.', + S.of(context).addYourFlutterProject + + S.of(context).projectsInformationWillBeDisplayedHere, style: Theme.of(context).textTheme.caption, textAlign: TextAlign.center, ), diff --git a/lib/src/modules/projects/projects.provider.dart b/lib/src/modules/projects/projects.provider.dart index 73e19ef2..c0d2db96 100644 --- a/lib/src/modules/projects/projects.provider.dart +++ b/lib/src/modules/projects/projects.provider.dart @@ -11,6 +11,7 @@ import 'dart:io'; import 'package:fvm/fvm.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:sidekick/generated/l10n.dart'; import 'package:state_notifier/state_notifier.dart'; import '../../modules/common/utils/notify.dart'; @@ -87,7 +88,7 @@ class ProjectsStateNotifier extends StateNotifier> { await ProjectsService.box.put(path, ref); await load(); } else { - notify('Not a Flutter project'); + notify(S.current.notAFlutterProject); } } diff --git a/lib/src/modules/projects/projects.screen.dart b/lib/src/modules/projects/projects.screen.dart index bde7bb0b..24bacbd1 100644 --- a/lib/src/modules/projects/projects.screen.dart +++ b/lib/src/modules/projects/projects.screen.dart @@ -5,6 +5,7 @@ import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; import 'package:responsive_grid/responsive_grid.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../../components/atoms/typography.dart'; import '../../modules/common/utils/notify.dart'; @@ -31,12 +32,12 @@ class ProjectsScreen extends HookWidget { Future onRefresh() async { await context.read(projectsProvider.notifier).load(); - notify('Projects Refreshed'); + notify(S.of(context).projectsRefreshed); } Future handleChooseDirectory() async { final directoryPath = await selector.getDirectoryPath( - confirmButtonText: 'Choose', + confirmButtonText: S.of(context).choose, ); if (directoryPath == null) { // Operation was canceled by the user. @@ -56,14 +57,14 @@ class ProjectsScreen extends HookWidget { }, [projects, settings.sidekick]); return SkScreen( - title: 'Projects', + title: S.of(context).projects, actions: [ - Caption('${projects.length} Projects'), + Caption(S.of(context).projectsProjects(projects.length)), const SizedBox(width: 10), Tooltip( - message: 'Only display projects that have versions pinned', + message: S.of(context).onlyDisplayProjectsThatHaveVersionsPinned, child: SkCheckBox( - label: 'FVM Only', + label: S.of(context).fvmOnly, value: settings.sidekick.onlyProjectsWithFvm, onChanged: (value) { settings.sidekick.onlyProjectsWithFvm = value; @@ -79,7 +80,7 @@ class ProjectsScreen extends HookWidget { OutlinedButton.icon( onPressed: handleChooseDirectory, icon: Icon(MdiIcons.plus), - label: Text('Add Project'), + label: Text(S.of(context).addProject), ), ], child: projects.isEmpty diff --git a/lib/src/modules/releases/releases.screen.dart b/lib/src/modules/releases/releases.screen.dart index 140d2a28..bfcf161f 100644 --- a/lib/src/modules/releases/releases.screen.dart +++ b/lib/src/modules/releases/releases.screen.dart @@ -2,6 +2,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../../components/atoms/typography.dart'; import '../../components/molecules/version_install_button.dart'; @@ -23,7 +24,7 @@ class ReleasesScreen extends HookWidget { return SkScreen( extendBody: false, - title: 'Releases', + title: S.of(context).releases, child: CupertinoScrollbar( child: CustomScrollView( slivers: [ @@ -46,12 +47,12 @@ class ReleasesScreen extends HookWidget { child: Row( children: [ const SizedBox(width: 10), - const Subheading('Master'), + Subheading(S.of(context).master), const SizedBox(width: 20), - const Expanded( + Expanded( child: Caption( - '''The current tip-of-tree, absolute latest cutting edge build. ''' - '''Usually functional, though sometimes we accidentally break things.''', + S.of(context).theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuild + + S.of(context).usuallyFunctionalThoughSometimesWeAccidentallyBreakThings, ), ), const SizedBox(width: 20), @@ -112,7 +113,7 @@ class ReleasesScreen extends HookWidget { children: [ Row( children: [ - const Heading('Versions'), + Heading(S.of(context).versions), const SizedBox(width: 10), Chip(label: Text(versions.length.toString())), ], diff --git a/lib/src/modules/sandbox/sandbox.screen.dart b/lib/src/modules/sandbox/sandbox.screen.dart index 069def3c..0071ab11 100644 --- a/lib/src/modules/sandbox/sandbox.screen.dart +++ b/lib/src/modules/sandbox/sandbox.screen.dart @@ -4,6 +4,7 @@ import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:fvm/fvm.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../../components/atoms/typography.dart'; import '../../dto/release.dto.dart'; @@ -42,10 +43,10 @@ class SandboxScreen extends HookWidget { appBar: AppBar( title: Row( mainAxisAlignment: MainAxisAlignment.center, - children: const [ - Icon(MdiIcons.playBox), - SizedBox(width: 10), - Subheading('Playground'), + children: [ + const Icon(MdiIcons.playBox), + const SizedBox(width: 10), + Subheading(S.of(context).playground), ], ), centerTitle: true, @@ -79,8 +80,8 @@ class SandboxScreen extends HookWidget { children: [ ListTile( dense: true, - title: const Text('Releases'), - subtitle: Text('${releases.all.length} versions'), + title: Text(S.of(context).releases), + subtitle: Text(S.of(context).releasesVersions(releases.all.length)), ), const Divider(height: 1), Expanded( @@ -156,13 +157,13 @@ class SandboxScreen extends HookWidget { onPressed: () { terminal.endProcess(); }, - child: const Text( - 'Cancel', + child: Text( + S.of(context).cancel, ), ) - : const OutlinedButton( + : OutlinedButton( onPressed: null, - child: Text('Not running'), + child: Text(S.of(context).notRunning), ), ), const Divider(height: 1), diff --git a/lib/src/modules/search/components/search_bar.dart b/lib/src/modules/search/components/search_bar.dart index 971aa47f..bfbbadca 100644 --- a/lib/src/modules/search/components/search_bar.dart +++ b/lib/src/modules/search/components/search_bar.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:material_floating_search_bar/material_floating_search_bar.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../../../hooks/floating_search_bar_controller.dart'; import '../../../providers/navigation_provider.dart'; @@ -66,7 +67,7 @@ class SearchBar extends HookWidget { ), ), FloatingSearchBar( - hint: 'Search... ', + hint: S.of(context).search, controller: controller, progress: isLoading.value, shadowColor: Colors.transparent, @@ -99,9 +100,9 @@ class SearchBar extends HookWidget { return const SizedBox(height: 0); } if (results.isEmpty) { - return const Padding( - padding: EdgeInsets.all(20), - child: Text('No Results'), + return Padding( + padding: const EdgeInsets.all(20), + child: Text(S.of(context).noResults), ); } diff --git a/lib/src/modules/search/components/search_results_list.dart b/lib/src/modules/search/components/search_results_list.dart index 795d95e8..84a543c6 100644 --- a/lib/src/modules/search/components/search_results_list.dart +++ b/lib/src/modules/search/components/search_results_list.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../../common/atoms/sliver_header_delegate.dart'; import '../../common/atoms/sliver_section.dart'; @@ -31,7 +32,7 @@ class SearchResultsList extends StatelessWidget { slivers: [ SliverPersistentHeader( delegate: SliverHeaderDelegate( - title: 'Channels', + title: S.of(context).channels, count: results.channels.length, ), ), @@ -50,7 +51,7 @@ class SearchResultsList extends StatelessWidget { slivers: [ SliverPersistentHeader( delegate: SliverHeaderDelegate( - title: 'Projects', + title: S.of(context).projects, count: results.projects.length, ), ), @@ -66,7 +67,7 @@ class SearchResultsList extends StatelessWidget { slivers: [ SliverPersistentHeader( delegate: SliverHeaderDelegate( - title: 'Stable Releases', + title: S.of(context).stableReleases, count: results.stableReleases.length, ), ), @@ -82,7 +83,7 @@ class SearchResultsList extends StatelessWidget { slivers: [ SliverPersistentHeader( delegate: SliverHeaderDelegate( - title: 'Beta Releases', + title: S.of(context).betaReleases, count: results.betaReleases.length, ), ), @@ -98,7 +99,7 @@ class SearchResultsList extends StatelessWidget { slivers: [ SliverPersistentHeader( delegate: SliverHeaderDelegate( - title: 'Dev Releases', + title: S.of(context).devReleases, count: results.devReleases.length, ), ), diff --git a/lib/src/modules/search/search.provider.dart b/lib/src/modules/search/search.provider.dart index 078234f8..3629816a 100644 --- a/lib/src/modules/search/search.provider.dart +++ b/lib/src/modules/search/search.provider.dart @@ -1,6 +1,7 @@ // ignore_for_file: top_level_function_literal_block import 'package:fvm/fvm.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../../dto/channel.dto.dart'; import '../../dto/version.dto.dart'; @@ -143,7 +144,7 @@ final searchResultsProvider = Provider((ref) { devReleaseResults.add(release); break; default: - throw Exception('Invalid chanel'); + throw Exception(S.current.invalidChanel); } } } diff --git a/lib/src/modules/settings/scenes/flutter_settings.scene.dart b/lib/src/modules/settings/scenes/flutter_settings.scene.dart index 034142ff..6f4a3819 100644 --- a/lib/src/modules/settings/scenes/flutter_settings.scene.dart +++ b/lib/src/modules/settings/scenes/flutter_settings.scene.dart @@ -2,6 +2,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../../../components/atoms/typography.dart'; import '../../releases/releases.provider.dart'; @@ -49,20 +50,20 @@ class SettingsSectionFlutter extends HookWidget { width: 0.5, ), ), - child: const Text( - 'A Flutter sdk version neeeds to be set as global ' - 'in order to access Flutter settings', + child: Text( + S.of(context).aFlutterSdkVersionNeeedsToBeSetAsGlobal + + S.of(context).inOrderToAccessFlutterSettings, ), ), const SizedBox(height: 20) ], ), SwitchListTile( - title: const Text('Analytics & Crash Reporting'), - subtitle: const Text( - 'When a flutter command crashes it attempts' - ' to send a crash report to Google in order to help' - ' Google contribute improvements to Flutter over time', + title: Text(S.of(context).analyticsCrashReporting), + subtitle: Text( + S.of(context).whenAFlutterCommandCrashesItAttempts + + S.of(context).toSendACrashReportToGoogleInOrderTo + + S.of(context).googleContributeImprovementsToFlutterOverTime, ), value: !settings.flutter.analytics, onChanged: deactivate @@ -73,10 +74,10 @@ class SettingsSectionFlutter extends HookWidget { }, ), const SizedBox(height: 20), - const Subheading('Platforms'), + Subheading(S.of(context).platforms), const SizedBox(height: 20), SwitchListTile( - title: const Text('Web'), + title: Text(S.of(context).web), value: settings.flutter.web, onChanged: deactivate ? null diff --git a/lib/src/modules/settings/scenes/fvm_settings.scene.dart b/lib/src/modules/settings/scenes/fvm_settings.scene.dart index c26297f6..03788ddc 100644 --- a/lib/src/modules/settings/scenes/fvm_settings.scene.dart +++ b/lib/src/modules/settings/scenes/fvm_settings.scene.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../settings.dto.dart'; @@ -27,8 +28,8 @@ class FvmSettingsScene extends StatelessWidget { const SizedBox(height: 20), SwitchListTile( title: const Text('Git Cache'), - subtitle: const Text('This will cache the main Flutter repository' - ' for faster and smaller installs'), + subtitle: Text(S.of(context).thisWillCacheTheMainFlutterRepository + + S.of(context).forFasterAndSmallerInstalls), value: settings.fvm.gitCache ?? false, onChanged: (value) { settings.fvm.gitCache = value; @@ -37,9 +38,9 @@ class FvmSettingsScene extends StatelessWidget { ), const Divider(), SwitchListTile( - title: const Text('Skip setup Flutter on install'), - subtitle: const Text('This will only clone Flutter and not install' - 'dependencies after a new version is installed.'), + title: Text(S.of(context).skipSetupFlutterOnInstall), + subtitle: Text(S.of(context).thisWillOnlyCloneFlutterAndNotInstall + + S.of(context).dependenciesAfterANewVersionIsInstalled), value: settings.fvm.skipSetup ?? false, onChanged: (value) { settings.fvm.skipSetup = value; diff --git a/lib/src/modules/settings/scenes/general_settings.scene.dart b/lib/src/modules/settings/scenes/general_settings.scene.dart index f40de9af..0f72a1e4 100644 --- a/lib/src/modules/settings/scenes/general_settings.scene.dart +++ b/lib/src/modules/settings/scenes/general_settings.scene.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../../../modules/common/utils/notify.dart'; import '../../../version.dart'; @@ -29,9 +30,9 @@ class SettingsSectionGeneral extends StatelessWidget { builder: (context) { // return object of type Dialog return AlertDialog( - title: const Text('Are you sure you want to reset settings?'), - content: const Text( - 'This will only reset Sidekick specific preferences', + title: Text(S.of(context).areYouSureYouWantToResetSettings), + content: Text( + S.of(context).thisWillOnlyResetSidekickSpecificPreferences, ), buttonPadding: const EdgeInsets.all(15), actions: [ @@ -40,16 +41,16 @@ class SettingsSectionGeneral extends StatelessWidget { onPressed: () { Navigator.of(context).pop(); }, - child: const Text('Cancel'), + child: Text(S.of(context).cancel), ), TextButton( onPressed: () async { Navigator.of(context).pop(); settings.sidekick = SidekickSettings(); onSave(); - notify('App settings have been reset'); + notify(S.of(context).appSettingsHaveBeenReset); }, - child: const Text('Confirm'), + child: Text(S.of(context).confirm), ), ], ); @@ -61,29 +62,29 @@ class SettingsSectionGeneral extends StatelessWidget { padding: const EdgeInsets.only(top: 20), child: ListView( children: [ - Text('General', style: Theme.of(context).textTheme.headline6), + Text(S.of(context).general, style: Theme.of(context).textTheme.headline6), const SizedBox(height: 20), ListTile( - title: const Text('Theme'), - subtitle: const Text( - 'Select a theme or switch according to system settings..', + title: Text(S.of(context).theme), + subtitle: Text( + S.of(context).selectAThemeOrSwitchAccordingToSystemSettings, ), trailing: DropdownButton( underline: Container(), isDense: true, value: settings.sidekick.themeMode.toString(), - items: const [ + items: [ DropdownMenuItem( value: SettingsThemeMode.system, - child: Text('System'), + child: Text(S.of(context).system), ), DropdownMenuItem( value: SettingsThemeMode.light, - child: Text('Light'), + child: Text(S.of(context).light), ), DropdownMenuItem( value: SettingsThemeMode.dark, - child: Text('Dark'), + child: Text(S.of(context).dark), ), ], onChanged: (themeMode) async { @@ -93,16 +94,36 @@ class SettingsSectionGeneral extends StatelessWidget { ), ), const Divider(), - const ListTile( - title: Text('Version'), + ListTile( + title: Text(S.of(context).language), + trailing: DropdownButton( + underline: Container(), + isDense: true, + value: settings.sidekick.intl ?? 'en', + items: S.delegate.supportedLocales.map((e) { + return DropdownMenuItem( + value: e.languageCode, + child: Text(e.languageCode), + ); + }).toList(), + onChanged: (languageCode) async { + settings.sidekick.intl = languageCode; + await S.load(Locale.fromSubtags(languageCode: languageCode),); + onSave(); + }, + ), + ), + const Divider(), + ListTile( + title: Text(S.of(context).version), trailing: Text(packageVersion), ), const Divider(), ListTile( - title: const Text('Reset to default settings'), + title: Text(S.of(context).resetToDefaultSettings), trailing: OutlinedButton( onPressed: handleReset, - child: const Text('Reset'), + child: Text(S.of(context).reset), ), ), ], diff --git a/lib/src/modules/settings/settings.dto.dart b/lib/src/modules/settings/settings.dto.dart index 5a3f6cd5..ca5bbafd 100644 --- a/lib/src/modules/settings/settings.dto.dart +++ b/lib/src/modules/settings/settings.dto.dart @@ -36,6 +36,7 @@ class SidekickSettings { this.onlyProjectsWithFvm = false, this.projectPaths = const [], this.themeMode = SettingsThemeMode.system, + this.intl = 'en', }); /// Storage key @@ -44,6 +45,7 @@ class SidekickSettings { bool onlyProjectsWithFvm; List projectPaths; String themeMode; + String intl; factory SidekickSettings.fromJson(String str) => SidekickSettings.fromMap(json.decode(str)); @@ -53,6 +55,7 @@ class SidekickSettings { projectPaths: (json['projectPaths'] as List).cast(), onlyProjectsWithFvm: json['onlyProjectsWithFvm'] as bool ?? false, themeMode: json['themeMode'] as String ?? SettingsThemeMode.system, + intl: json['intl'] as String ?? 'en' ); } @@ -64,6 +67,7 @@ class SidekickSettings { 'projectPaths': projectPaths, 'onlyProjectsWithFvm': onlyProjectsWithFvm, 'themeMode': themeMode, + 'intl': intl, }; } } diff --git a/lib/src/modules/settings/settings.screen.dart b/lib/src/modules/settings/settings.screen.dart index 48841780..d9165446 100644 --- a/lib/src/modules/settings/settings.screen.dart +++ b/lib/src/modules/settings/settings.screen.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../../modules/common/utils/helpers.dart'; import '../../modules/common/utils/notify.dart'; @@ -23,7 +24,7 @@ enum NavSection { flutter, } -const _sections = ['General', 'FVM', 'Flutter']; +var _sections = [S.current.general, 'FVM', 'Flutter']; const _sectionIcons = [ MdiIcons.tune, @@ -62,9 +63,9 @@ class SettingsScreen extends HookWidget { Future handleSave() async { try { await provider.save(settings); - notify('Settings have been saved'); + notify(S.of(context).settingsHaveBeenSaved); } on Exception catch (e) { - notifyError('Could not save settings'); + notifyError(S.of(context).couldNotSaveSettings); notifyError(e.toString()); } } diff --git a/lib/src/modules/updater/components/update_button.dart b/lib/src/modules/updater/components/update_button.dart index 58c0d248..79ae0f0e 100644 --- a/lib/src/modules/updater/components/update_button.dart +++ b/lib/src/modules/updater/components/update_button.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../../../components/atoms/typography.dart'; import '../updater.provider.dart'; @@ -31,15 +32,15 @@ class SkUpdateButton extends HookWidget { contentPadding: const EdgeInsets.fromLTRB(20, 20, 20, 0), buttonPadding: const EdgeInsets.fromLTRB(20, 0, 20, 20), title: Row( - children: const [ + children: [ Icon(MdiIcons.alertDecagram), SizedBox(width: 10), - Heading('Update available.'), + Heading(S.of(context).updateAvailable), ], ), content: Container( child: Paragraph( - 'Sidekick version ${updateInfo.latest} is now available.', + S.of(context).sidekickVersionUpdateinfolatestIsNowAvailable(updateInfo.latest), ), ), actions: [ @@ -48,14 +49,14 @@ class SkUpdateButton extends HookWidget { onPressed: () { Navigator.of(context).pop(); }, - child: const Text('Later'), + child: Text(S.of(context).later), ), ElevatedButton( onPressed: () async { await updater.openInstaller(); Navigator.of(context).pop(); }, - child: const Text('Update Now'), + child: Text(S.of(context).updateNow), ), ], ); @@ -69,8 +70,8 @@ class SkUpdateButton extends HookWidget { children: [ ActionChip( onPressed: showUpdateDialog, - label: const Text( - 'Update Available', + label: Text( + S.of(context).updateAvailable, style: TextStyle(fontSize: 12), ), ), diff --git a/lib/src/modules/updater/components/update_info.dart b/lib/src/modules/updater/components/update_info.dart index 5fcb9b72..42b835a7 100644 --- a/lib/src/modules/updater/components/update_info.dart +++ b/lib/src/modules/updater/components/update_info.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:sidekick/generated/l10n.dart'; import '../../../version.dart'; import '../updater.provider.dart'; @@ -22,12 +23,12 @@ class SkUpdateInfo extends HookWidget { mainAxisSize: MainAxisSize.min, children: [ Text( - 'A new version of Sidekick is available (${updateInfo.latest}).', + S.of(context).aNewVersionOfSidekickIsAvailableUpdateinfolatest(updateInfo.latest), ), const SizedBox(width: 5), TextButton( onPressed: () {}, - child: const Text('Click here to download.'), + child: Text(S.of(context).clickHereToDownload), ), ], ); @@ -45,7 +46,7 @@ class SkUpdateInfo extends HookWidget { icon: Icon( updateInfo.needUpdate ? Icons.file_download : Icons.refresh, ), - label: Text('Refresh'), + label: Text(S.of(context).refresh), onPressed: updater.checkLatest, ), ], diff --git a/lib/src/screens/error_db_screen.dart b/lib/src/screens/error_db_screen.dart index 8abeb074..c39ce906 100644 --- a/lib/src/screens/error_db_screen.dart +++ b/lib/src/screens/error_db_screen.dart @@ -1,6 +1,7 @@ import 'dart:io'; import 'package:flutter/material.dart'; +import 'package:sidekick/generated/l10n.dart'; class ErrorDBScreen extends StatelessWidget { const ErrorDBScreen({Key key}) : super(key: key); @@ -27,7 +28,7 @@ class ErrorDBScreen extends StatelessWidget { mainAxisSize: MainAxisSize.max, children: [ Text( - 'There was an isssue opening Sidekick', + S.of(context).thereWasAnIsssueOpeningSidekick, style: Theme.of(context).textTheme.headline4, textAlign: TextAlign.center, ), @@ -42,7 +43,7 @@ class ErrorDBScreen extends StatelessWidget { height: 20, ), ElevatedButton.icon( - label: const Text('Close'), + label: Text(S.of(context).close), icon: const Icon(Icons.close), onPressed: () { exit(0); diff --git a/pubspec.lock b/pubspec.lock index d4713fdb..6fd03a89 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -314,6 +314,11 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.17.0" + flutter_localizations: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" flutter_riverpod: dependency: transitive description: @@ -443,6 +448,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.0.0" + intl: + dependency: transitive + description: + name: intl + url: "https://pub.dartlang.org" + source: hosted + version: "0.17.0" io: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 633708f5..7bb9dcbd 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -12,6 +12,8 @@ dependencies: flutter: sdk: flutter fvm: ^2.1.0 + flutter_localizations: + sdk: flutter window_size: git: @@ -60,3 +62,5 @@ flutter: uses-material-design: true assets: - assets/logo.png +flutter_intl: + enabled: true From 4d04cdf082e05e3a3a1533f00e87a3fe1c7bbe41 Mon Sep 17 00:00:00 2001 From: Maximilian Flechtner Date: Fri, 18 Jun 2021 06:58:48 +0200 Subject: [PATCH 2/2] *intl fix Some small things improved and removed generated code from the analysis. --- analysis_options.yaml | 1 + lib/generated/intl/messages_de.dart | 26 +-- lib/generated/intl/messages_en.dart | 26 +-- lib/generated/l10n.dart | 216 +++++++----------- lib/l10n/intl_de.arb | 30 +-- lib/l10n/intl_en.arb | 30 +-- lib/src/components/molecules/info_banner.dart | 3 +- lib/src/modules/common/constants.dart | 8 +- .../packages/components/packages_empty.dart | 3 +- .../projects/components/projects_empty.dart | 3 +- lib/src/modules/releases/releases.screen.dart | 3 +- .../scenes/flutter_settings.scene.dart | 7 +- .../settings/scenes/fvm_settings.scene.dart | 5 +- 13 files changed, 135 insertions(+), 226 deletions(-) diff --git a/analysis_options.yaml b/analysis_options.yaml index 4f726f9e..cadc846d 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -4,6 +4,7 @@ analyzer: # Ignore generated files - "**/*.g.dart" - "lib/src/generated/*.dart" + - "lib/generated/intl/*.dart" # linter: # rules: diff --git a/lib/generated/intl/messages_de.dart b/lib/generated/intl/messages_de.dart index 0f946483..bb9c3a28 100644 --- a/lib/generated/intl/messages_de.dart +++ b/lib/generated/intl/messages_de.dart @@ -51,17 +51,17 @@ class MessageLookup extends MessageLookupByLibrary { final messages = _notInlinedMessages(_notInlinedMessages); static _notInlinedMessages(_) => { - "aFlutterSdkVersionNeeedsToBeSetAsGlobal" : MessageLookupByLibrary.simpleMessage("Eine Flutter-Sdk-Version muss als global eingestellt werden "), "aNewVersionOfSidekickIsAvailableUpdateinfolatest" : m0, "addProject" : MessageLookupByLibrary.simpleMessage("Projekt hinzufügen"), - "addYourFlutterProject" : MessageLookupByLibrary.simpleMessage("Ihr Flutter-Projekt hinzufügen "), + "addYourFlutterProjectProjectsInformationWillBeDisplayedHere" : MessageLookupByLibrary.simpleMessage("Fügen Sie Ihr Flutter-Projekt hinzu Die Projektinformationen werden hier angezeigt."), "advanced" : MessageLookupByLibrary.simpleMessage("Erweitert"), + "analyticsCrashReportSubtitle" : MessageLookupByLibrary.simpleMessage("Wenn ein Flutter-Befehl abstürzt, wird versucht, einen Absturzbericht an Google zu senden, damit Google im Laufe der Zeit Verbesserungen an Flutter beisteuern kann"), "analyticsCrashReporting" : MessageLookupByLibrary.simpleMessage("Analytik & Crash-Berichterstattung"), "appSettingsHaveBeenReset" : MessageLookupByLibrary.simpleMessage("Die App-Einstellungen wurden zurückgesetzt"), "areYouSureYouWantToRemove" : MessageLookupByLibrary.simpleMessage("Sind Sie sicher, dass Sie entfernen möchten?"), "areYouSureYouWantToResetSettings" : MessageLookupByLibrary.simpleMessage("Sind Sie sicher, dass Sie die Einstellungen zurücksetzen wollen?"), + "betaChannelDescription" : MessageLookupByLibrary.simpleMessage("Zweig, der für eine neue Betaversion am Monatsanfang, in der Regel am ersten Montag, von master erstellt wird. Dieser wird einen Zweig für Dart, die Engine und das Framework enthalten."), "betaReleases" : MessageLookupByLibrary.simpleMessage("Beta Releases"), - "branchCreatedFromMasterForANewBetaReleaseAt" : MessageLookupByLibrary.simpleMessage("Zweig, der für eine neue Betaversion am Monatsanfang, in der Regel am ersten Montag, von master erstellt wird. Dieser wird einen Zweig für Dart, die Engine und das Framework enthalten."), "cacheLocation" : MessageLookupByLibrary.simpleMessage("Cache-Speicherort"), "cancel" : MessageLookupByLibrary.simpleMessage("Abbrechen"), "changeThePathTo" : MessageLookupByLibrary.simpleMessage("Ändere den Path zu\n"), @@ -84,22 +84,23 @@ class MessageLookup extends MessageLookupByLibrary { "dark" : MessageLookupByLibrary.simpleMessage("Dunkel"), "dependenciesAfterANewVersionIsInstalled" : MessageLookupByLibrary.simpleMessage("Abhängigkeiten, nachdem eine neue Version installiert wurde."), "details" : MessageLookupByLibrary.simpleMessage("Details"), + "devChannelDescription" : MessageLookupByLibrary.simpleMessage("Der letzte vollständig getestete Build. Normalerweise funktionstüchtig, aber unter \"Schlechte Builds\" finden Sie eine Liste bekannter \"schlechter\" Dev-Builds."), "devReleases" : MessageLookupByLibrary.simpleMessage("Dev Releases"), "doYouWantToRemoveThemToFreeUpSpace" : MessageLookupByLibrary.simpleMessage("Möchten Sie es entfernen, um Speicherplatz freizugeben?"), "downloadZip" : MessageLookupByLibrary.simpleMessage("Zip herunterladen"), "exploreFlutterReleases" : MessageLookupByLibrary.simpleMessage("Erkunde Flutter Releases"), "flutterPathIsPointingTon" : MessageLookupByLibrary.simpleMessage("Flutter PATH verweist auf\n "), + "flutterSDKGlobalDescription" : MessageLookupByLibrary.simpleMessage("Eine Flutter-Sdk-Version muss als global eingestellt werden, um auf die Flutter-Einstellungen zugreifen zu können"), "flutterSdkNotInstalled" : MessageLookupByLibrary.simpleMessage("Flutter SDK nicht installiert."), - "forFasterAndSmallerInstalls" : MessageLookupByLibrary.simpleMessage(" für schnellere und kleinere Installationen"), "fvmOnly" : MessageLookupByLibrary.simpleMessage("Nur FVM"), "general" : MessageLookupByLibrary.simpleMessage("Allgemein"), + "gitCache" : MessageLookupByLibrary.simpleMessage("Git Cache"), + "gitCacheSubtitle" : MessageLookupByLibrary.simpleMessage("Dadurch wird das Haupt-Repository von Flutter für schnellere und kleinere Installationen zwischengespeichert"), "global" : MessageLookupByLibrary.simpleMessage("Global"), "globalConfiguration" : MessageLookupByLibrary.simpleMessage("Globale Konfiguration"), - "googleContributeImprovementsToFlutterOverTime" : MessageLookupByLibrary.simpleMessage(" Google steuert im Laufe der Zeit Verbesserungen zu Flutter bei"), "hash" : MessageLookupByLibrary.simpleMessage("Hash"), "howToUpdateYourPath" : MessageLookupByLibrary.simpleMessage("Wie soll man den Pfad aktualisieren?"), "ifYouWantToFlutterSdkThroughFvm" : MessageLookupByLibrary.simpleMessage("wenn Sie Flutter SDK durch FVM"), - "inOrderToAccessFlutterSettings" : MessageLookupByLibrary.simpleMessage("um auf die Flutter-Einstellungen zuzugreifen"), "inUse" : MessageLookupByLibrary.simpleMessage("Verwendet"), "installedVersions" : MessageLookupByLibrary.simpleMessage("Installierte Versionen"), "invalidChanel" : MessageLookupByLibrary.simpleMessage("Invalid chanel"), @@ -109,6 +110,7 @@ class MessageLookup extends MessageLookupByLibrary { "likes" : MessageLookupByLibrary.simpleMessage("Likes"), "localCacheInformation" : MessageLookupByLibrary.simpleMessage("Lokale Cache-Informationen"), "master" : MessageLookupByLibrary.simpleMessage("Master"), + "masterChannelDescription" : MessageLookupByLibrary.simpleMessage("Der aktuelle Tip-of-Tree, der absolut neueste Cutting Edge Build. Normalerweise funktional, obwohl wir manchmal versehentlich Dinge kaputt machen."), "mostUsedPackages" : MessageLookupByLibrary.simpleMessage("Meistgenutzte Pakete"), "navButtonDashboard" : MessageLookupByLibrary.simpleMessage("Dashboard"), "navButtonExplore" : MessageLookupByLibrary.simpleMessage("Erkunden"), @@ -127,13 +129,11 @@ class MessageLookup extends MessageLookupByLibrary { "onlyDisplayProjectsThatHaveVersionsPinned" : MessageLookupByLibrary.simpleMessage("Nur Projekte anzeigen, die Versionen angeheftet haben"), "open" : MessageLookupByLibrary.simpleMessage("öffnen"), "openTerminalPlayground" : MessageLookupByLibrary.simpleMessage("Terminal Playground öffnen"), - "packageInformationWillBeDisplayedHere" : MessageLookupByLibrary.simpleMessage("Hier werden die Paketinformationen angezeigt."), "packageprojectscountProjects" : m5, "platforms" : MessageLookupByLibrary.simpleMessage("Platformen"), "playground" : MessageLookupByLibrary.simpleMessage("Playground"), "popularity" : MessageLookupByLibrary.simpleMessage("Popularität"), "projects" : MessageLookupByLibrary.simpleMessage("Projekte"), - "projectsInformationWillBeDisplayedHere" : MessageLookupByLibrary.simpleMessage("Hier werden die Projektinformationen angezeigt."), "projectsProjects" : m6, "projectsRefreshed" : MessageLookupByLibrary.simpleMessage("Projekte aktualisiert"), "pubPoints" : MessageLookupByLibrary.simpleMessage("Pub Punkte"), @@ -154,26 +154,22 @@ class MessageLookup extends MessageLookupByLibrary { "sha256" : MessageLookupByLibrary.simpleMessage("Sha256"), "sidekickVersionUpdateinfolatestIsNowAvailable" : m8, "skipSetupFlutterOnInstall" : MessageLookupByLibrary.simpleMessage("Einrichtung von Flutter bei der Installation überspringen"), + "stableChannelDescription" : MessageLookupByLibrary.simpleMessage("Wir empfehlen, dass Sie diesen Kanal für alle Produktions-App-Veröffentlichungen verwenden. Ungefähr einmal im Quartal wird ein Zweig, der auf Beta stabilisiert wurde, unser nächster stabiler Zweig und wir erstellen eine stabile Version von diesem Zweig."), "stableReleases" : MessageLookupByLibrary.simpleMessage("Stable Releases"), "start" : MessageLookupByLibrary.simpleMessage("start"), "system" : MessageLookupByLibrary.simpleMessage("System"), - "theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuild" : MessageLookupByLibrary.simpleMessage("Die aktuelle Spitze des Baumes, der absolut letzte Stand der Technik. "), "theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuildUsuallyFunctional" : MessageLookupByLibrary.simpleMessage("Der aktuelle Tip-of-Tree, der absolut neueste Cutting Edge Build. Normalerweise funktional, obwohl wir manchmal versehentlich Dinge kaputt machen."), - "theLatestFullytestedBuildUsuallyFunctionalButSeeBadBuilds" : MessageLookupByLibrary.simpleMessage("Der letzte vollständig getestete Build. Normalerweise funktionstüchtig, aber unter \"Schlechte Builds\" finden Sie eine Liste bekannter \"schlechter\" Dev-Builds."), "theme" : MessageLookupByLibrary.simpleMessage("Theme"), "thereWasAnIsssueOpeningSidekick" : MessageLookupByLibrary.simpleMessage("Es gab ein Problem beim Öffnen von Sidekick"), "thereWasAnIssueLoadingYourPackages" : MessageLookupByLibrary.simpleMessage("Es gab ein Problem beim Laden Ihrer Pakete."), "theseVersionAreNotPinnedToAProject" : MessageLookupByLibrary.simpleMessage("Diese Versionen sind nicht an ein Projekt angeheftet "), - "thisWillCacheTheMainFlutterRepository" : MessageLookupByLibrary.simpleMessage("Dadurch wird das Haupt-Repository von Flutter zwischengespeichert"), "thisWillOnlyCloneFlutterAndNotInstall" : MessageLookupByLibrary.simpleMessage("Dadurch wird Flutter nur geklont und nicht installiert "), "thisWillOnlyResetSidekickSpecificPreferences" : MessageLookupByLibrary.simpleMessage("Dadurch werden nur Sidekick-spezifische Einstellungen zurückgesetzt"), "thisWillRemoveItemnameCacheFromYourSystem" : m9, - "toSendACrashReportToGoogleInOrderTo" : MessageLookupByLibrary.simpleMessage("einen Absturzbericht an Google zu senden, um zu helfen,"), "unused" : MessageLookupByLibrary.simpleMessage("Nicht verwendet"), "updateAvailable" : MessageLookupByLibrary.simpleMessage("Update verfügbar."), "updateNow" : MessageLookupByLibrary.simpleMessage("Jetzt aktualisieren"), "upgrade" : MessageLookupByLibrary.simpleMessage("Upgrade"), - "usuallyFunctionalThoughSometimesWeAccidentallyBreakThings" : MessageLookupByLibrary.simpleMessage("Normalerweise funktional, obwohl wir manchmal versehentlich Dinge kaputt machen."), "version" : MessageLookupByLibrary.simpleMessage("Version"), "versionIsInstalled" : MessageLookupByLibrary.simpleMessage("Version ist installiert"), "versionItemversionnameHasBeenInstalled" : m10, @@ -183,11 +179,9 @@ class MessageLookup extends MessageLookupByLibrary { "versionNotInstalledClickToInstall" : MessageLookupByLibrary.simpleMessage("Version nicht installiert. Klicken Sie zum Installieren."), "versionVersionPinnedToProjectname" : m14, "versions" : MessageLookupByLibrary.simpleMessage("Versionen"), - "weRecommendThatYouUseThisChannelForAllProduction" : MessageLookupByLibrary.simpleMessage("Wir empfehlen, dass Sie diesen Kanal für alle Produktions-App-Veröffentlichungen verwenden. Ungefähr einmal im Quartal wird ein Zweig, der auf Beta stabilisiert wurde, unser nächster stabiler Zweig und wir erstellen eine stabile Version von diesem Zweig."), "web" : MessageLookupByLibrary.simpleMessage("Web"), "website" : MessageLookupByLibrary.simpleMessage("Website"), - "whenAFlutterCommandCrashesItAttempts" : MessageLookupByLibrary.simpleMessage("Wenn ein Flutter-Befehl abstürzt, wird versucht "), - "youNeedToAddAFlutterProjectFirst" : MessageLookupByLibrary.simpleMessage("Sie müssen zuerst ein Flutter-Projekt hinzufügen. "), + "youNeedToAddAFlutterProjectFirstPackageInformation" : MessageLookupByLibrary.simpleMessage("Sie müssen zuerst ein Flutter-Projekt hinzufügen. Die Paketinformationen werden hier angezeigt."), "zipFileWithAllReleaseDependencies" : MessageLookupByLibrary.simpleMessage("Zip-Datei mit allen Release-Abhängigkeiten.") }; } diff --git a/lib/generated/intl/messages_en.dart b/lib/generated/intl/messages_en.dart index d8aa1d9f..e70802f2 100644 --- a/lib/generated/intl/messages_en.dart +++ b/lib/generated/intl/messages_en.dart @@ -51,17 +51,17 @@ class MessageLookup extends MessageLookupByLibrary { final messages = _notInlinedMessages(_notInlinedMessages); static _notInlinedMessages(_) => { - "aFlutterSdkVersionNeeedsToBeSetAsGlobal" : MessageLookupByLibrary.simpleMessage("A Flutter sdk version neeeds to be set as global "), "aNewVersionOfSidekickIsAvailableUpdateinfolatest" : m0, "addProject" : MessageLookupByLibrary.simpleMessage("Add Project"), - "addYourFlutterProject" : MessageLookupByLibrary.simpleMessage("Add your Flutter project "), + "addYourFlutterProjectProjectsInformationWillBeDisplayedHere" : MessageLookupByLibrary.simpleMessage("Add your Flutter project Projects information will be displayed here."), "advanced" : MessageLookupByLibrary.simpleMessage("Advanced"), + "analyticsCrashReportSubtitle" : MessageLookupByLibrary.simpleMessage("When a flutter command crashes it attempts to send a crash report to Google in order to help Google contribute improvements to Flutter over time"), "analyticsCrashReporting" : MessageLookupByLibrary.simpleMessage("Analytics & Crash Reporting"), "appSettingsHaveBeenReset" : MessageLookupByLibrary.simpleMessage("App settings have been reset"), "areYouSureYouWantToRemove" : MessageLookupByLibrary.simpleMessage("Are you sure you want to remove?"), "areYouSureYouWantToResetSettings" : MessageLookupByLibrary.simpleMessage("Are you sure you want to reset settings?"), + "betaChannelDescription" : MessageLookupByLibrary.simpleMessage("Branch created from master for a new beta release at the beginning of the month, usually the first Monday. This will include a branch for Dart, the Engine and the Framework."), "betaReleases" : MessageLookupByLibrary.simpleMessage("Beta Releases"), - "branchCreatedFromMasterForANewBetaReleaseAt" : MessageLookupByLibrary.simpleMessage("Branch created from master for a new beta release at the beginning of the month, usually the first Monday. This will include a branch for Dart, the Engine and the Framework."), "cacheLocation" : MessageLookupByLibrary.simpleMessage("Cache Location"), "cancel" : MessageLookupByLibrary.simpleMessage("Cancel"), "changeThePathTo" : MessageLookupByLibrary.simpleMessage("Change the path to\n"), @@ -84,22 +84,23 @@ class MessageLookup extends MessageLookupByLibrary { "dark" : MessageLookupByLibrary.simpleMessage("Dark"), "dependenciesAfterANewVersionIsInstalled" : MessageLookupByLibrary.simpleMessage("dependencies after a new version is installed."), "details" : MessageLookupByLibrary.simpleMessage("Details"), + "devChannelDescription" : MessageLookupByLibrary.simpleMessage("The latest fully-tested build. Usually functional, but see Bad Builds for a list of known \"bad\" dev builds."), "devReleases" : MessageLookupByLibrary.simpleMessage("Dev Releases"), "doYouWantToRemoveThemToFreeUpSpace" : MessageLookupByLibrary.simpleMessage("Do you want to remove them to free up space?"), "downloadZip" : MessageLookupByLibrary.simpleMessage("Download Zip"), "exploreFlutterReleases" : MessageLookupByLibrary.simpleMessage("Explore Flutter Releases"), "flutterPathIsPointingTon" : MessageLookupByLibrary.simpleMessage("Flutter PATH is pointing to\n "), + "flutterSDKGlobalDescription" : MessageLookupByLibrary.simpleMessage("A Flutter sdk version neeeds to be set as global in order to access Flutter settings"), "flutterSdkNotInstalled" : MessageLookupByLibrary.simpleMessage("Flutter SDK not installed."), - "forFasterAndSmallerInstalls" : MessageLookupByLibrary.simpleMessage(" for faster and smaller installs"), "fvmOnly" : MessageLookupByLibrary.simpleMessage("FVM Only"), "general" : MessageLookupByLibrary.simpleMessage("General"), + "gitCache" : MessageLookupByLibrary.simpleMessage("Git Cache"), + "gitCacheSubtitle" : MessageLookupByLibrary.simpleMessage("This will cache the main Flutter repository for faster and smaller installs"), "global" : MessageLookupByLibrary.simpleMessage("Global"), "globalConfiguration" : MessageLookupByLibrary.simpleMessage("Global configuration"), - "googleContributeImprovementsToFlutterOverTime" : MessageLookupByLibrary.simpleMessage(" Google contribute improvements to Flutter over time"), "hash" : MessageLookupByLibrary.simpleMessage("Hash"), "howToUpdateYourPath" : MessageLookupByLibrary.simpleMessage("How to update your path?"), "ifYouWantToFlutterSdkThroughFvm" : MessageLookupByLibrary.simpleMessage("if you want to Flutter SDK through FVM"), - "inOrderToAccessFlutterSettings" : MessageLookupByLibrary.simpleMessage("in order to access Flutter settings"), "inUse" : MessageLookupByLibrary.simpleMessage("In use"), "installedVersions" : MessageLookupByLibrary.simpleMessage("Installed Versions"), "invalidChanel" : MessageLookupByLibrary.simpleMessage("Invalid chanel"), @@ -109,6 +110,7 @@ class MessageLookup extends MessageLookupByLibrary { "likes" : MessageLookupByLibrary.simpleMessage("Likes"), "localCacheInformation" : MessageLookupByLibrary.simpleMessage("Local Cache Information"), "master" : MessageLookupByLibrary.simpleMessage("Master"), + "masterChannelDescription" : MessageLookupByLibrary.simpleMessage("The current tip-of-tree, absolute latest cutting edge build. Usually functional, though sometimes we accidentally break things."), "mostUsedPackages" : MessageLookupByLibrary.simpleMessage("Most Used Packages"), "navButtonDashboard" : MessageLookupByLibrary.simpleMessage("Dashboard"), "navButtonExplore" : MessageLookupByLibrary.simpleMessage("Explore"), @@ -127,13 +129,11 @@ class MessageLookup extends MessageLookupByLibrary { "onlyDisplayProjectsThatHaveVersionsPinned" : MessageLookupByLibrary.simpleMessage("Only display projects that have versions pinned"), "open" : MessageLookupByLibrary.simpleMessage("open"), "openTerminalPlayground" : MessageLookupByLibrary.simpleMessage("Open terminal playground"), - "packageInformationWillBeDisplayedHere" : MessageLookupByLibrary.simpleMessage("Package information will be displayed here."), "packageprojectscountProjects" : m5, "platforms" : MessageLookupByLibrary.simpleMessage("Platforms"), "playground" : MessageLookupByLibrary.simpleMessage("Playground"), "popularity" : MessageLookupByLibrary.simpleMessage("Popularity"), "projects" : MessageLookupByLibrary.simpleMessage("Projects"), - "projectsInformationWillBeDisplayedHere" : MessageLookupByLibrary.simpleMessage("Projects information will be displayed here."), "projectsProjects" : m6, "projectsRefreshed" : MessageLookupByLibrary.simpleMessage("Projects Refreshed"), "pubPoints" : MessageLookupByLibrary.simpleMessage("Pub Points"), @@ -154,26 +154,22 @@ class MessageLookup extends MessageLookupByLibrary { "sha256" : MessageLookupByLibrary.simpleMessage("Sha256"), "sidekickVersionUpdateinfolatestIsNowAvailable" : m8, "skipSetupFlutterOnInstall" : MessageLookupByLibrary.simpleMessage("Skip setup Flutter on install"), + "stableChannelDescription" : MessageLookupByLibrary.simpleMessage("We recommend that you use this channel for all production app releases. Roughly once a quarter, a branch that has been stabilized on beta will become our next stable branch and we will create a stable release from that branch."), "stableReleases" : MessageLookupByLibrary.simpleMessage("Stable Releases"), "start" : MessageLookupByLibrary.simpleMessage("start"), "system" : MessageLookupByLibrary.simpleMessage("System"), - "theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuild" : MessageLookupByLibrary.simpleMessage("The current tip-of-tree, absolute latest cutting edge build. "), "theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuildUsuallyFunctional" : MessageLookupByLibrary.simpleMessage("The current tip-of-tree, absolute latest cutting edge build. Usually functional, though sometimes we accidentally break things."), - "theLatestFullytestedBuildUsuallyFunctionalButSeeBadBuilds" : MessageLookupByLibrary.simpleMessage("The latest fully-tested build. Usually functional, but see Bad Builds for a list of known \"bad\" dev builds."), "theme" : MessageLookupByLibrary.simpleMessage("Theme"), "thereWasAnIsssueOpeningSidekick" : MessageLookupByLibrary.simpleMessage("There was an isssue opening Sidekick"), "thereWasAnIssueLoadingYourPackages" : MessageLookupByLibrary.simpleMessage("There was an issue loading your packages."), "theseVersionAreNotPinnedToAProject" : MessageLookupByLibrary.simpleMessage("These version are not pinned to a project "), - "thisWillCacheTheMainFlutterRepository" : MessageLookupByLibrary.simpleMessage("This will cache the main Flutter repository"), "thisWillOnlyCloneFlutterAndNotInstall" : MessageLookupByLibrary.simpleMessage("This will only clone Flutter and not install"), "thisWillOnlyResetSidekickSpecificPreferences" : MessageLookupByLibrary.simpleMessage("This will only reset Sidekick specific preferences"), "thisWillRemoveItemnameCacheFromYourSystem" : m9, - "toSendACrashReportToGoogleInOrderTo" : MessageLookupByLibrary.simpleMessage(" to send a crash report to Google in order to help"), "unused" : MessageLookupByLibrary.simpleMessage("Unused"), "updateAvailable" : MessageLookupByLibrary.simpleMessage("Update available."), "updateNow" : MessageLookupByLibrary.simpleMessage("Update Now"), "upgrade" : MessageLookupByLibrary.simpleMessage("Upgrade"), - "usuallyFunctionalThoughSometimesWeAccidentallyBreakThings" : MessageLookupByLibrary.simpleMessage("Usually functional, though sometimes we accidentally break things."), "version" : MessageLookupByLibrary.simpleMessage("Version"), "versionIsInstalled" : MessageLookupByLibrary.simpleMessage("Version is installed"), "versionItemversionnameHasBeenInstalled" : m10, @@ -183,11 +179,9 @@ class MessageLookup extends MessageLookupByLibrary { "versionNotInstalledClickToInstall" : MessageLookupByLibrary.simpleMessage("Version not installed. Click to install."), "versionVersionPinnedToProjectname" : m14, "versions" : MessageLookupByLibrary.simpleMessage("Versions"), - "weRecommendThatYouUseThisChannelForAllProduction" : MessageLookupByLibrary.simpleMessage("We recommend that you use this channel for all production app releases. Roughly once a quarter, a branch that has been stabilized on beta will become our next stable branch and we will create a stable release from that branch."), "web" : MessageLookupByLibrary.simpleMessage("Web"), "website" : MessageLookupByLibrary.simpleMessage("Website"), - "whenAFlutterCommandCrashesItAttempts" : MessageLookupByLibrary.simpleMessage("When a flutter command crashes it attempts"), - "youNeedToAddAFlutterProjectFirst" : MessageLookupByLibrary.simpleMessage("You need to add a Flutter project first. "), + "youNeedToAddAFlutterProjectFirstPackageInformation" : MessageLookupByLibrary.simpleMessage("You need to add a Flutter project first. Package information will be displayed here."), "zipFileWithAllReleaseDependencies" : MessageLookupByLibrary.simpleMessage("Zip file with all release dependencies.") }; } diff --git a/lib/generated/l10n.dart b/lib/generated/l10n.dart index 724333d3..58f7f85a 100644 --- a/lib/generated/l10n.dart +++ b/lib/generated/l10n.dart @@ -275,26 +275,6 @@ class S { ); } - /// `The current tip-of-tree, absolute latest cutting edge build. ` - String get theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuild { - return Intl.message( - 'The current tip-of-tree, absolute latest cutting edge build. ', - name: 'theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuild', - desc: '', - args: [], - ); - } - - /// `Usually functional, though sometimes we accidentally break things.` - String get usuallyFunctionalThoughSometimesWeAccidentallyBreakThings { - return Intl.message( - 'Usually functional, though sometimes we accidentally break things.', - name: 'usuallyFunctionalThoughSometimesWeAccidentallyBreakThings', - desc: '', - args: [], - ); - } - /// `Channel` String get channel { return Intl.message( @@ -536,40 +516,40 @@ class S { } /// `We recommend that you use this channel for all production app releases. Roughly once a quarter, a branch that has been stabilized on beta will become our next stable branch and we will create a stable release from that branch.` - String get weRecommendThatYouUseThisChannelForAllProduction { + String get stableChannelDescription { return Intl.message( 'We recommend that you use this channel for all production app releases. Roughly once a quarter, a branch that has been stabilized on beta will become our next stable branch and we will create a stable release from that branch.', - name: 'weRecommendThatYouUseThisChannelForAllProduction', + name: 'stableChannelDescription', desc: '', args: [], ); } /// `Branch created from master for a new beta release at the beginning of the month, usually the first Monday. This will include a branch for Dart, the Engine and the Framework.` - String get branchCreatedFromMasterForANewBetaReleaseAt { + String get betaChannelDescription { return Intl.message( 'Branch created from master for a new beta release at the beginning of the month, usually the first Monday. This will include a branch for Dart, the Engine and the Framework.', - name: 'branchCreatedFromMasterForANewBetaReleaseAt', + name: 'betaChannelDescription', desc: '', args: [], ); } /// `The latest fully-tested build. Usually functional, but see Bad Builds for a list of known "bad" dev builds.` - String get theLatestFullytestedBuildUsuallyFunctionalButSeeBadBuilds { + String get devChannelDescription { return Intl.message( 'The latest fully-tested build. Usually functional, but see Bad Builds for a list of known "bad" dev builds.', - name: 'theLatestFullytestedBuildUsuallyFunctionalButSeeBadBuilds', + name: 'devChannelDescription', desc: '', args: [], ); } /// `The current tip-of-tree, absolute latest cutting edge build. Usually functional, though sometimes we accidentally break things.` - String get theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuildUsuallyFunctional { + String get masterChannelDescription { return Intl.message( 'The current tip-of-tree, absolute latest cutting edge build. Usually functional, though sometimes we accidentally break things.', - name: 'theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuildUsuallyFunctional', + name: 'masterChannelDescription', desc: '', args: [], ); @@ -775,26 +755,6 @@ class S { ); } - /// `You need to add a Flutter project first. ` - String get youNeedToAddAFlutterProjectFirst { - return Intl.message( - 'You need to add a Flutter project first. ', - name: 'youNeedToAddAFlutterProjectFirst', - desc: '', - args: [], - ); - } - - /// `Package information will be displayed here.` - String get packageInformationWillBeDisplayedHere { - return Intl.message( - 'Package information will be displayed here.', - name: 'packageInformationWillBeDisplayedHere', - desc: '', - args: [], - ); - } - /// `Most Used Packages` String get mostUsedPackages { return Intl.message( @@ -855,26 +815,6 @@ class S { ); } - /// `Add your Flutter project ` - String get addYourFlutterProject { - return Intl.message( - 'Add your Flutter project ', - name: 'addYourFlutterProject', - desc: '', - args: [], - ); - } - - /// `Projects information will be displayed here.` - String get projectsInformationWillBeDisplayedHere { - return Intl.message( - 'Projects information will be displayed here.', - name: 'projectsInformationWillBeDisplayedHere', - desc: '', - args: [], - ); - } - /// `Not a Flutter project` String get notAFlutterProject { return Intl.message( @@ -1065,26 +1005,6 @@ class S { ); } - /// `A Flutter sdk version neeeds to be set as global ` - String get aFlutterSdkVersionNeeedsToBeSetAsGlobal { - return Intl.message( - 'A Flutter sdk version neeeds to be set as global ', - name: 'aFlutterSdkVersionNeeedsToBeSetAsGlobal', - desc: '', - args: [], - ); - } - - /// `in order to access Flutter settings` - String get inOrderToAccessFlutterSettings { - return Intl.message( - 'in order to access Flutter settings', - name: 'inOrderToAccessFlutterSettings', - desc: '', - args: [], - ); - } - /// `Analytics & Crash Reporting` String get analyticsCrashReporting { return Intl.message( @@ -1095,36 +1015,6 @@ class S { ); } - /// `When a flutter command crashes it attempts` - String get whenAFlutterCommandCrashesItAttempts { - return Intl.message( - 'When a flutter command crashes it attempts', - name: 'whenAFlutterCommandCrashesItAttempts', - desc: '', - args: [], - ); - } - - /// ` to send a crash report to Google in order to help` - String get toSendACrashReportToGoogleInOrderTo { - return Intl.message( - ' to send a crash report to Google in order to help', - name: 'toSendACrashReportToGoogleInOrderTo', - desc: '', - args: [], - ); - } - - /// ` Google contribute improvements to Flutter over time` - String get googleContributeImprovementsToFlutterOverTime { - return Intl.message( - ' Google contribute improvements to Flutter over time', - name: 'googleContributeImprovementsToFlutterOverTime', - desc: '', - args: [], - ); - } - /// `Platforms` String get platforms { return Intl.message( @@ -1145,26 +1035,6 @@ class S { ); } - /// `This will cache the main Flutter repository` - String get thisWillCacheTheMainFlutterRepository { - return Intl.message( - 'This will cache the main Flutter repository', - name: 'thisWillCacheTheMainFlutterRepository', - desc: '', - args: [], - ); - } - - /// ` for faster and smaller installs` - String get forFasterAndSmallerInstalls { - return Intl.message( - ' for faster and smaller installs', - name: 'forFasterAndSmallerInstalls', - desc: '', - args: [], - ); - } - /// `Skip setup Flutter on install` String get skipSetupFlutterOnInstall { return Intl.message( @@ -1414,6 +1284,76 @@ class S { args: [], ); } + + /// `This will cache the main Flutter repository for faster and smaller installs` + String get gitCacheSubtitle { + return Intl.message( + 'This will cache the main Flutter repository for faster and smaller installs', + name: 'gitCacheSubtitle', + desc: '', + args: [], + ); + } + + /// `Git Cache` + String get gitCache { + return Intl.message( + 'Git Cache', + name: 'gitCache', + desc: '', + args: [], + ); + } + + /// `When a flutter command crashes it attempts to send a crash report to Google in order to help Google contribute improvements to Flutter over time` + String get analyticsCrashReportSubtitle { + return Intl.message( + 'When a flutter command crashes it attempts to send a crash report to Google in order to help Google contribute improvements to Flutter over time', + name: 'analyticsCrashReportSubtitle', + desc: '', + args: [], + ); + } + + /// `A Flutter sdk version neeeds to be set as global in order to access Flutter settings` + String get flutterSDKGlobalDescription { + return Intl.message( + 'A Flutter sdk version neeeds to be set as global in order to access Flutter settings', + name: 'flutterSDKGlobalDescription', + desc: '', + args: [], + ); + } + + /// `The current tip-of-tree, absolute latest cutting edge build. Usually functional, though sometimes we accidentally break things.` + String get theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuildUsuallyFunctional { + return Intl.message( + 'The current tip-of-tree, absolute latest cutting edge build. Usually functional, though sometimes we accidentally break things.', + name: 'theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuildUsuallyFunctional', + desc: '', + args: [], + ); + } + + /// `Add your Flutter project Projects information will be displayed here.` + String get addYourFlutterProjectProjectsInformationWillBeDisplayedHere { + return Intl.message( + 'Add your Flutter project Projects information will be displayed here.', + name: 'addYourFlutterProjectProjectsInformationWillBeDisplayedHere', + desc: '', + args: [], + ); + } + + /// `You need to add a Flutter project first. Package information will be displayed here.` + String get youNeedToAddAFlutterProjectFirstPackageInformation { + return Intl.message( + 'You need to add a Flutter project first. Package information will be displayed here.', + name: 'youNeedToAddAFlutterProjectFirstPackageInformation', + desc: '', + args: [], + ); + } } class AppLocalizationDelegate extends LocalizationsDelegate { diff --git a/lib/l10n/intl_de.arb b/lib/l10n/intl_de.arb index 7675823f..e3c342c0 100644 --- a/lib/l10n/intl_de.arb +++ b/lib/l10n/intl_de.arb @@ -23,8 +23,6 @@ "cancel": "Abbrechen", "confirm": "Bestätigen", "master": "Master", - "theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuild": "Die aktuelle Spitze des Baumes, der absolut letzte Stand der Technik. ", - "usuallyFunctionalThoughSometimesWeAccidentallyBreakThings": "Normalerweise funktional, obwohl wir manchmal versehentlich Dinge kaputt machen.", "channel": "Channel", "releaseNotes": "Freigabemitteilungen", "version": "Version", @@ -49,10 +47,10 @@ "couldNotLaunchUrl": "Konnte {url} nicht öffnen", "start": "start", "open": "öffnen", - "weRecommendThatYouUseThisChannelForAllProduction": "Wir empfehlen, dass Sie diesen Kanal für alle Produktions-App-Veröffentlichungen verwenden. Ungefähr einmal im Quartal wird ein Zweig, der auf Beta stabilisiert wurde, unser nächster stabiler Zweig und wir erstellen eine stabile Version von diesem Zweig.", - "branchCreatedFromMasterForANewBetaReleaseAt": "Zweig, der für eine neue Betaversion am Monatsanfang, in der Regel am ersten Montag, von master erstellt wird. Dieser wird einen Zweig für Dart, die Engine und das Framework enthalten.", - "theLatestFullytestedBuildUsuallyFunctionalButSeeBadBuilds": "Der letzte vollständig getestete Build. Normalerweise funktionstüchtig, aber unter \"Schlechte Builds\" finden Sie eine Liste bekannter \"schlechter\" Dev-Builds.", - "theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuildUsuallyFunctional": "Der aktuelle Tip-of-Tree, der absolut neueste Cutting Edge Build. Normalerweise funktional, obwohl wir manchmal versehentlich Dinge kaputt machen.", + "stableChannelDescription": "Wir empfehlen, dass Sie diesen Kanal für alle Produktions-App-Veröffentlichungen verwenden. Ungefähr einmal im Quartal wird ein Zweig, der auf Beta stabilisiert wurde, unser nächster stabiler Zweig und wir erstellen eine stabile Version von diesem Zweig.", + "betaChannelDescription": "Zweig, der für eine neue Betaversion am Monatsanfang, in der Regel am ersten Montag, von master erstellt wird. Dieser wird einen Zweig für Dart, die Engine und das Framework enthalten.", + "devChannelDescription": "Der letzte vollständig getestete Build. Normalerweise funktionstüchtig, aber unter \"Schlechte Builds\" finden Sie eine Liste bekannter \"schlechter\" Dev-Builds.", + "masterChannelDescription": "Der aktuelle Tip-of-Tree, der absolut neueste Cutting Edge Build. Normalerweise funktional, obwohl wir manchmal versehentlich Dinge kaputt machen.", "inUse": "Verwendet", "unused": "Nicht verwendet", "setAsGlobal": "Als global festlegen", @@ -73,16 +71,12 @@ "pubPoints": "Pub Punkte", "popularity": "Popularität", "noPackagesFound": "Keine Pakete gefunden", - "youNeedToAddAFlutterProjectFirst": "Sie müssen zuerst ein Flutter-Projekt hinzufügen. ", - "packageInformationWillBeDisplayedHere": "Hier werden die Paketinformationen angezeigt.", "mostUsedPackages": "Meistgenutzte Pakete", "thereWasAnIssueLoadingYourPackages": "Es gab ein Problem beim Laden Ihrer Pakete.", "openTerminalPlayground": "Terminal Playground öffnen", "selectAFlutterSdkVersion": "Wählen Sie eine Flutter SDK Version", "choose": "Wählen Sie", "noFlutterProjectsHaveBeenAddedYet": "Es wurden noch keine Flutter-Projekte hinzugefügt.", - "addYourFlutterProject": "Ihr Flutter-Projekt hinzufügen ", - "projectsInformationWillBeDisplayedHere": "Hier werden die Projektinformationen angezeigt.", "notAFlutterProject": "Kein Flutter-Projekt", "projectsRefreshed": "Projekte aktualisiert", "projects": "Projekte", @@ -102,16 +96,9 @@ "betaReleases": "Beta Releases", "devReleases": "Dev Releases", "invalidChanel": "Invalid chanel", - "aFlutterSdkVersionNeeedsToBeSetAsGlobal": "Eine Flutter-Sdk-Version muss als global eingestellt werden ", - "inOrderToAccessFlutterSettings": "um auf die Flutter-Einstellungen zuzugreifen", "analyticsCrashReporting": "Analytik & Crash-Berichterstattung", - "whenAFlutterCommandCrashesItAttempts": "Wenn ein Flutter-Befehl abstürzt, wird versucht ", - "toSendACrashReportToGoogleInOrderTo": "einen Absturzbericht an Google zu senden, um zu helfen,", - "googleContributeImprovementsToFlutterOverTime": " Google steuert im Laufe der Zeit Verbesserungen zu Flutter bei", "platforms": "Platformen", "web": "Web", - "thisWillCacheTheMainFlutterRepository": "Dadurch wird das Haupt-Repository von Flutter zwischengespeichert", - "forFasterAndSmallerInstalls": " für schnellere und kleinere Installationen", "skipSetupFlutterOnInstall": "Einrichtung von Flutter bei der Installation überspringen", "thisWillOnlyCloneFlutterAndNotInstall": "Dadurch wird Flutter nur geklont und nicht installiert ", "dependenciesAfterANewVersionIsInstalled": "Abhängigkeiten, nachdem eine neue Version installiert wurde.", @@ -136,5 +123,12 @@ "aNewVersionOfSidekickIsAvailableUpdateinfolatest": "Eine neue Version von Sidekick ist verfügbar ({updateInfoLatest}).", "thereWasAnIsssueOpeningSidekick": "Es gab ein Problem beim Öffnen von Sidekick", "close": "Schließen", - "language": "Sprache" + "language": "Sprache", + "gitCacheSubtitle": "Dadurch wird das Haupt-Repository von Flutter für schnellere und kleinere Installationen zwischengespeichert", + "gitCache": "Git Cache", + "analyticsCrashReportSubtitle": "Wenn ein Flutter-Befehl abstürzt, wird versucht, einen Absturzbericht an Google zu senden, damit Google im Laufe der Zeit Verbesserungen an Flutter beisteuern kann", + "flutterSDKGlobalDescription": "Eine Flutter-Sdk-Version muss als global eingestellt werden, um auf die Flutter-Einstellungen zugreifen zu können", + "theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuildUsuallyFunctional": "Der aktuelle Tip-of-Tree, der absolut neueste Cutting Edge Build. Normalerweise funktional, obwohl wir manchmal versehentlich Dinge kaputt machen.", + "addYourFlutterProjectProjectsInformationWillBeDisplayedHere": "Fügen Sie Ihr Flutter-Projekt hinzu Die Projektinformationen werden hier angezeigt.", + "youNeedToAddAFlutterProjectFirstPackageInformation": "Sie müssen zuerst ein Flutter-Projekt hinzufügen. Die Paketinformationen werden hier angezeigt." } \ No newline at end of file diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index 259bf045..5d98da42 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -23,8 +23,6 @@ "cancel": "Cancel", "confirm": "Confirm", "master": "Master", - "theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuild": "The current tip-of-tree, absolute latest cutting edge build. ", - "usuallyFunctionalThoughSometimesWeAccidentallyBreakThings": "Usually functional, though sometimes we accidentally break things.", "channel": "Channel", "releaseNotes": "Release Notes", "version": "Version", @@ -49,10 +47,10 @@ "couldNotLaunchUrl": "Could not launch {url}", "start": "start", "open": "open", - "weRecommendThatYouUseThisChannelForAllProduction": "We recommend that you use this channel for all production app releases. Roughly once a quarter, a branch that has been stabilized on beta will become our next stable branch and we will create a stable release from that branch.", - "branchCreatedFromMasterForANewBetaReleaseAt": "Branch created from master for a new beta release at the beginning of the month, usually the first Monday. This will include a branch for Dart, the Engine and the Framework.", - "theLatestFullytestedBuildUsuallyFunctionalButSeeBadBuilds": "The latest fully-tested build. Usually functional, but see Bad Builds for a list of known \"bad\" dev builds.", - "theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuildUsuallyFunctional": "The current tip-of-tree, absolute latest cutting edge build. Usually functional, though sometimes we accidentally break things.", + "stableChannelDescription": "We recommend that you use this channel for all production app releases. Roughly once a quarter, a branch that has been stabilized on beta will become our next stable branch and we will create a stable release from that branch.", + "betaChannelDescription": "Branch created from master for a new beta release at the beginning of the month, usually the first Monday. This will include a branch for Dart, the Engine and the Framework.", + "devChannelDescription": "The latest fully-tested build. Usually functional, but see Bad Builds for a list of known \"bad\" dev builds.", + "masterChannelDescription": "The current tip-of-tree, absolute latest cutting edge build. Usually functional, though sometimes we accidentally break things.", "inUse": "In use", "unused": "Unused", "setAsGlobal": "Set as global", @@ -73,16 +71,12 @@ "pubPoints": "Pub Points", "popularity": "Popularity", "noPackagesFound": "No Packages Found", - "youNeedToAddAFlutterProjectFirst": "You need to add a Flutter project first. ", - "packageInformationWillBeDisplayedHere": "Package information will be displayed here.", "mostUsedPackages": "Most Used Packages", "thereWasAnIssueLoadingYourPackages": "There was an issue loading your packages.", "openTerminalPlayground": "Open terminal playground", "selectAFlutterSdkVersion": "Select a Flutter SDK Version", "choose": "Choose", "noFlutterProjectsHaveBeenAddedYet": "No Flutter Projects have been added yet.", - "addYourFlutterProject": "Add your Flutter project ", - "projectsInformationWillBeDisplayedHere": "Projects information will be displayed here.", "notAFlutterProject": "Not a Flutter project", "projectsRefreshed": "Projects Refreshed", "projects": "Projects", @@ -102,16 +96,9 @@ "betaReleases": "Beta Releases", "devReleases": "Dev Releases", "invalidChanel": "Invalid chanel", - "aFlutterSdkVersionNeeedsToBeSetAsGlobal": "A Flutter sdk version neeeds to be set as global ", - "inOrderToAccessFlutterSettings": "in order to access Flutter settings", "analyticsCrashReporting": "Analytics & Crash Reporting", - "whenAFlutterCommandCrashesItAttempts": "When a flutter command crashes it attempts", - "toSendACrashReportToGoogleInOrderTo": " to send a crash report to Google in order to help", - "googleContributeImprovementsToFlutterOverTime": " Google contribute improvements to Flutter over time", "platforms": "Platforms", "web": "Web", - "thisWillCacheTheMainFlutterRepository": "This will cache the main Flutter repository", - "forFasterAndSmallerInstalls": " for faster and smaller installs", "skipSetupFlutterOnInstall": "Skip setup Flutter on install", "thisWillOnlyCloneFlutterAndNotInstall": "This will only clone Flutter and not install", "dependenciesAfterANewVersionIsInstalled": "dependencies after a new version is installed.", @@ -136,5 +123,12 @@ "aNewVersionOfSidekickIsAvailableUpdateinfolatest": "A new version of Sidekick is available ({updateInfoLatest}).", "thereWasAnIsssueOpeningSidekick": "There was an isssue opening Sidekick", "close": "Close", - "language": "Language" + "language": "Language", + "gitCacheSubtitle": "This will cache the main Flutter repository for faster and smaller installs", + "gitCache": "Git Cache", + "analyticsCrashReportSubtitle": "When a flutter command crashes it attempts to send a crash report to Google in order to help Google contribute improvements to Flutter over time", + "flutterSDKGlobalDescription": "A Flutter sdk version neeeds to be set as global in order to access Flutter settings", + "theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuildUsuallyFunctional": "The current tip-of-tree, absolute latest cutting edge build. Usually functional, though sometimes we accidentally break things.", + "addYourFlutterProjectProjectsInformationWillBeDisplayedHere": "Add your Flutter project Projects information will be displayed here.", + "youNeedToAddAFlutterProjectFirstPackageInformation": "You need to add a Flutter project first. Package information will be displayed here." } \ No newline at end of file diff --git a/lib/src/components/molecules/info_banner.dart b/lib/src/components/molecules/info_banner.dart index 22169d59..49021086 100644 --- a/lib/src/components/molecules/info_banner.dart +++ b/lib/src/components/molecules/info_banner.dart @@ -31,8 +31,7 @@ class InfoBanner extends StatelessWidget { SizedBox(width: 20), Expanded( child: Caption( - S.of(context).theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuild + - S.of(context).usuallyFunctionalThoughSometimesWeAccidentallyBreakThings, + S.of(context).theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuildUsuallyFunctional ), ), SizedBox(width: 20), diff --git a/lib/src/modules/common/constants.dart b/lib/src/modules/common/constants.dart index d3bcc6a5..bcd5b6cc 100644 --- a/lib/src/modules/common/constants.dart +++ b/lib/src/modules/common/constants.dart @@ -31,13 +31,13 @@ const kFlutterTagsUrl = 'https://github.com/flutter/flutter/releases/tag/'; /// Description for the channels Map channelDescriptions = { 'stable': - S.current.weRecommendThatYouUseThisChannelForAllProduction, + S.current.stableChannelDescription, 'beta': - S.current.branchCreatedFromMasterForANewBetaReleaseAt, + S.current.betaChannelDescription, 'dev': - S.current.theLatestFullytestedBuildUsuallyFunctionalButSeeBadBuilds, + S.current.devChannelDescription, 'master': - S.current.theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuildUsuallyFunctional, + S.current.masterChannelDescription, }; /// Sidekick repository slug diff --git a/lib/src/modules/packages/components/packages_empty.dart b/lib/src/modules/packages/components/packages_empty.dart index 21ada9de..b5f431fe 100644 --- a/lib/src/modules/packages/components/packages_empty.dart +++ b/lib/src/modules/packages/components/packages_empty.dart @@ -25,8 +25,7 @@ class EmptyPackages extends StatelessWidget { ), const SizedBox(height: 10), Text( - S.of(context).youNeedToAddAFlutterProjectFirst + - S.of(context).packageInformationWillBeDisplayedHere, + S.of(context).youNeedToAddAFlutterProjectFirstPackageInformation, style: Theme.of(context).textTheme.caption, textAlign: TextAlign.center, ), diff --git a/lib/src/modules/projects/components/projects_empty.dart b/lib/src/modules/projects/components/projects_empty.dart index 7e68ac66..a7d0a9ef 100644 --- a/lib/src/modules/projects/components/projects_empty.dart +++ b/lib/src/modules/projects/components/projects_empty.dart @@ -25,8 +25,7 @@ class EmptyProjects extends StatelessWidget { ), const SizedBox(height: 10), Text( - S.of(context).addYourFlutterProject + - S.of(context).projectsInformationWillBeDisplayedHere, + S.of(context).addYourFlutterProjectProjectsInformationWillBeDisplayedHere, style: Theme.of(context).textTheme.caption, textAlign: TextAlign.center, ), diff --git a/lib/src/modules/releases/releases.screen.dart b/lib/src/modules/releases/releases.screen.dart index bfcf161f..75ad25a8 100644 --- a/lib/src/modules/releases/releases.screen.dart +++ b/lib/src/modules/releases/releases.screen.dart @@ -51,8 +51,7 @@ class ReleasesScreen extends HookWidget { const SizedBox(width: 20), Expanded( child: Caption( - S.of(context).theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuild + - S.of(context).usuallyFunctionalThoughSometimesWeAccidentallyBreakThings, + S.of(context).theCurrentTipoftreeAbsoluteLatestCuttingEdgeBuildUsuallyFunctional ), ), const SizedBox(width: 20), diff --git a/lib/src/modules/settings/scenes/flutter_settings.scene.dart b/lib/src/modules/settings/scenes/flutter_settings.scene.dart index 6f4a3819..e05aa8c6 100644 --- a/lib/src/modules/settings/scenes/flutter_settings.scene.dart +++ b/lib/src/modules/settings/scenes/flutter_settings.scene.dart @@ -51,8 +51,7 @@ class SettingsSectionFlutter extends HookWidget { ), ), child: Text( - S.of(context).aFlutterSdkVersionNeeedsToBeSetAsGlobal + - S.of(context).inOrderToAccessFlutterSettings, + S.of(context).flutterSDKGlobalDescription, ), ), const SizedBox(height: 20) @@ -61,9 +60,7 @@ class SettingsSectionFlutter extends HookWidget { SwitchListTile( title: Text(S.of(context).analyticsCrashReporting), subtitle: Text( - S.of(context).whenAFlutterCommandCrashesItAttempts + - S.of(context).toSendACrashReportToGoogleInOrderTo + - S.of(context).googleContributeImprovementsToFlutterOverTime, + S.of(context).analyticsCrashReportSubtitle, ), value: !settings.flutter.analytics, onChanged: deactivate diff --git a/lib/src/modules/settings/scenes/fvm_settings.scene.dart b/lib/src/modules/settings/scenes/fvm_settings.scene.dart index 03788ddc..21cf8119 100644 --- a/lib/src/modules/settings/scenes/fvm_settings.scene.dart +++ b/lib/src/modules/settings/scenes/fvm_settings.scene.dart @@ -27,9 +27,8 @@ class FvmSettingsScene extends StatelessWidget { Text('FVM', style: Theme.of(context).textTheme.headline6), const SizedBox(height: 20), SwitchListTile( - title: const Text('Git Cache'), - subtitle: Text(S.of(context).thisWillCacheTheMainFlutterRepository + - S.of(context).forFasterAndSmallerInstalls), + title: Text(S.of(context).gitCache), + subtitle: Text(S.of(context).gitCacheSubtitle), value: settings.fvm.gitCache ?? false, onChanged: (value) { settings.fvm.gitCache = value;