From 3be0a4a89c17cc8a0e349f54f2a4adcc361d1ed2 Mon Sep 17 00:00:00 2001 From: bogotesr Date: Sat, 24 Dec 2022 21:06:28 -0700 Subject: [PATCH] Add es-419 and finish adding support for the translations Added Latin American Spanish (probably not the best translation) Made everything reference the swiftgen stuff rather than having strings --- AltStore.xcodeproj/project.pbxproj | 9 +- AltStore/Generated/Localizations.swift | 191 ++++++++++++++++++ .../Resources/en.lproj/Localizable.strings | 103 ++++++++++ .../es-419.lproj/Localizable.strings | 123 +++++++++++ AltStore/Views/App Detail/AppDetailView.swift | 14 +- .../Views/App Detail/AppPermissionsGrid.swift | 2 +- AltStore/Views/Browse/AddSourceView.swift | 10 +- AltStore/Views/Browse/BrowseView.swift | 2 +- .../Views/Browse/ConfirmAddSourceView.swift | 14 +- AltStore/Views/Browse/SourcesView.swift | 12 +- AltStore/Views/My Apps/AppAction.swift | 24 +-- AltStore/Views/My Apps/MyAppsView.swift | 14 +- AltStore/Views/RootView.swift | 8 +- .../Views/Settings/ConnectAppleIDView.swift | 18 +- AltStore/Views/Settings/SettingsView.swift | 36 ++-- 15 files changed, 499 insertions(+), 81 deletions(-) create mode 100644 AltStore/Resources/es-419.lproj/Localizable.strings diff --git a/AltStore.xcodeproj/project.pbxproj b/AltStore.xcodeproj/project.pbxproj index 9935c254..28ea2419 100644 --- a/AltStore.xcodeproj/project.pbxproj +++ b/AltStore.xcodeproj/project.pbxproj @@ -34,7 +34,6 @@ 1F6284D5295209DA0060AAD8 /* AppAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F6284D4295209DA0060AAD8 /* AppAction.swift */; }; 1F6284D7295218980060AAD8 /* DocumentPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F6284D6295218980060AAD8 /* DocumentPicker.swift */; }; 1F6284D929523D340060AAD8 /* SideloadingManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F6284D829523D340060AAD8 /* SideloadingManager.swift */; }; - 1F6284DB295254C80060AAD8 /* AppScreenshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F6284DA295254C80060AAD8 /* AppScreenshot.swift */; }; 1F66F5BA2938CA5700A910CA /* VisualEffectView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F66F5B92938CA5700A910CA /* VisualEffectView.swift */; }; 1F66F5BC2938F03700A910CA /* Modifiers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F66F5BB2938F03700A910CA /* Modifiers.swift */; }; 1F66F5BE2938F06100A910CA /* StoreApp+Filterable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F66F5BD2938F06100A910CA /* StoreApp+Filterable.swift */; }; @@ -574,7 +573,6 @@ 1F6284D4295209DA0060AAD8 /* AppAction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppAction.swift; sourceTree = ""; }; 1F6284D6295218980060AAD8 /* DocumentPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DocumentPicker.swift; sourceTree = ""; }; 1F6284D829523D340060AAD8 /* SideloadingManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SideloadingManager.swift; sourceTree = ""; }; - 1F6284DA295254C80060AAD8 /* AppScreenshot.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppScreenshot.swift; sourceTree = ""; }; 1F66F5B92938CA5700A910CA /* VisualEffectView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VisualEffectView.swift; sourceTree = ""; }; 1F66F5BB2938F03700A910CA /* Modifiers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Modifiers.swift; sourceTree = ""; }; 1F66F5BD2938F06100A910CA /* StoreApp+Filterable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "StoreApp+Filterable.swift"; sourceTree = ""; }; @@ -944,6 +942,7 @@ D5F2F6A82720B7C20081CCF5 /* PatchViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PatchViewController.swift; sourceTree = ""; }; D5F99A1728D11DB500476A16 /* AltStore10ToAltStore11.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; path = AltStore10ToAltStore11.xcmappingmodel; sourceTree = ""; }; D5F99A1928D12B1400476A16 /* StoreApp10ToStoreApp11Policy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreApp10ToStoreApp11Policy.swift; sourceTree = ""; }; + DFEE02F82957998D00518C34 /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/Localizable.strings"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -1203,7 +1202,6 @@ 1FB96FBD292A20E5007E68D1 /* ObservableScrollView.swift */, 1FB96FBF292A63F2007E68D1 /* AppPillButton.swift */, 1F0DD8422936B0F9007608A4 /* RoundedTextField.swift */, - 1F6284DA295254C80060AAD8 /* AppScreenshot.swift */, ); path = "View Components"; sourceTree = ""; @@ -2332,6 +2330,7 @@ knownRegions = ( en, Base, + "es-419", ); mainGroup = BFD247612284B9A500981D42; packageReferences = ( @@ -2773,7 +2772,6 @@ 1F943C712927F90400ABE095 /* MyAppsView.swift in Sources */, 1FA1C8CA294906890083119D /* MyAppsViewModel.swift in Sources */, BF3BEFC124086A1E00DE7D55 /* RefreshAppOperation.swift in Sources */, - 1F6284DB295254C80060AAD8 /* AppScreenshot.swift in Sources */, BFE60740231AFD2A002B0E8E /* InsetGroupTableViewCell.swift in Sources */, BF0DCA662433BDF500E3A595 /* AnalyticsManager.swift in Sources */, BFCCB51A245E3401001853EA /* VerifyAppOperation.swift in Sources */, @@ -2936,6 +2934,7 @@ isa = PBXVariantGroup; children = ( 1F07F551295455A300F7BE95 /* en */, + DFEE02F82957998D00518C34 /* es-419 */, ); name = Localizable.strings; sourceTree = ""; @@ -3411,6 +3410,7 @@ baseConfigurationReference = B3C39607284F4C8400DA9E2F /* Build.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; @@ -3479,6 +3479,7 @@ baseConfigurationReference = B3C39607284F4C8400DA9E2F /* Build.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; diff --git a/AltStore/Generated/Localizations.swift b/AltStore/Generated/Localizations.swift index 5400b4d9..e1dc9067 100644 --- a/AltStore/Generated/Localizations.swift +++ b/AltStore/Generated/Localizations.swift @@ -10,6 +10,68 @@ import Foundation // swiftlint:disable explicit_type_interface function_parameter_count identifier_name line_length // swiftlint:disable nesting type_body_length type_name vertical_whitespace_opening_braces internal enum L10n { + internal enum AddSourceView { + /// Continue + internal static let `continue` = L10n.tr("Localizable", "AddSourceView.continue", fallback: "Continue") + /// AddSourceView + internal static let sourceURL = L10n.tr("Localizable", "AddSourceView.sourceURL", fallback: "Source URL") + /// Please enter the source url here. Then, tap continue to validate and add the source in the next step. + internal static let sourceWarning = L10n.tr("Localizable", "AddSourceView.sourceWarning", fallback: "Please enter the source url here. Then, tap continue to validate and add the source in the next step.") + /// Be careful with unvalidated third-party sources! Make sure to only add sources that you trust. + internal static let sourceWarningContinued = L10n.tr("Localizable", "AddSourceView.sourceWarningContinued", fallback: "Be careful with unvalidated third-party sources! Make sure to only add sources that you trust.") + /// Add Source + internal static let title = L10n.tr("Localizable", "AddSourceView.title", fallback: "Add Source") + } + internal enum AppAction { + /// Activate + internal static let activate = L10n.tr("Localizable", "AppAction.activate", fallback: "Activate") + /// Backup + internal static let backup = L10n.tr("Localizable", "AppAction.backup", fallback: "Backup") + /// Customize icon + internal static let chooseCustomIcon = L10n.tr("Localizable", "AppAction.chooseCustomIcon", fallback: "Customize icon") + /// Deactivate + internal static let deactivate = L10n.tr("Localizable", "AppAction.deactivate", fallback: "Deactivate") + /// Activate JIT + internal static let enableJIT = L10n.tr("Localizable", "AppAction.enableJIT", fallback: "Activate JIT") + /// Export backup + internal static let exportBackup = L10n.tr("Localizable", "AppAction.exportBackup", fallback: "Export backup") + /// AppAction + internal static let install = L10n.tr("Localizable", "AppAction.install", fallback: "Install") + /// Open + internal static let `open` = L10n.tr("Localizable", "AppAction.open", fallback: "Open") + /// Refresh + internal static let refresh = L10n.tr("Localizable", "AppAction.refresh", fallback: "Refresh") + /// Remove + internal static let remove = L10n.tr("Localizable", "AppAction.remove", fallback: "Remove") + /// Reset icon + internal static let resetIcon = L10n.tr("Localizable", "AppAction.resetIcon", fallback: "Reset icon") + /// Restore backup + internal static let restoreBackup = L10n.tr("Localizable", "AppAction.restoreBackup", fallback: "Restore backup") + } + internal enum AppDetailView { + /// AppDetailView + internal static let more = L10n.tr("Localizable", "AppDetailView.more", fallback: "More...") + /// The app requires no permissions. + internal static let noPermissions = L10n.tr("Localizable", "AppDetailView.noPermissions", fallback: "The app requires no permissions.") + /// No version information + internal static let noVersionInformation = L10n.tr("Localizable", "AppDetailView.noVersionInformation", fallback: "No version information") + /// Permissions + internal static let permissions = L10n.tr("Localizable", "AppDetailView.permissions", fallback: "Permissions") + /// Version + internal static let version = L10n.tr("Localizable", "AppDetailView.version", fallback: "Version") + /// What's New + internal static let whatsNew = L10n.tr("Localizable", "AppDetailView.whatsNew", fallback: "What's New") + } + internal enum AppPermissionGrid { + /// AppPermissionGrid + internal static let usageDescription = L10n.tr("Localizable", "AppPermissionGrid.usageDescription", fallback: "Usage Description") + } + internal enum AppPillButton { + /// AppPillButton + internal static let free = L10n.tr("Localizable", "AppPillButton.free", fallback: "Free") + /// Open + internal static let `open` = L10n.tr("Localizable", "AppPillButton.open", fallback: "Open") + } internal enum BrowseView { /// Search internal static let search = L10n.tr("Localizable", "BrowseView.search", fallback: "Search") @@ -19,6 +81,11 @@ internal enum L10n { /// Sources internal static let sources = L10n.tr("Localizable", "BrowseView.Actions.sources", fallback: "Sources") } + internal enum Categories { + /// Games and + /// Emulators + internal static let gamesAndEmulators = L10n.tr("Localizable", "BrowseView.Categories.gamesAndEmulators", fallback: "Games and\nEmulators") + } internal enum Section { internal enum AllApps { /// All Apps @@ -32,6 +99,64 @@ internal enum L10n { } } } + internal enum ConfirmAddSourceView { + /// Add Source + internal static let addSource = L10n.tr("Localizable", "ConfirmAddSourceView.addSource", fallback: "Add Source") + /// ConfirmAddSourceView + internal static let apps = L10n.tr("Localizable", "ConfirmAddSourceView.apps", fallback: "Apps") + /// News Items + internal static let newsItems = L10n.tr("Localizable", "ConfirmAddSourceView.newsItems", fallback: "News Items") + /// Source Contents + internal static let sourceContents = L10n.tr("Localizable", "ConfirmAddSourceView.sourceContents", fallback: "Source Contents") + /// Source Identifier + internal static let sourceIdentifier = L10n.tr("Localizable", "ConfirmAddSourceView.sourceIdentifier", fallback: "Source Identifier") + /// Source Information + internal static let sourceInfo = L10n.tr("Localizable", "ConfirmAddSourceView.sourceInfo", fallback: "Source Information") + /// Source URL + internal static let sourceURL = L10n.tr("Localizable", "ConfirmAddSourceView.sourceURL", fallback: "Source URL") + } + internal enum ConnectAppleIDView { + /// Apple ID + internal static let appleID = L10n.tr("Localizable", "ConnectAppleIDView.appleID", fallback: "Apple ID") + /// Cancel + internal static let cancel = L10n.tr("Localizable", "ConnectAppleIDView.cancel", fallback: "Cancel") + /// Connect Your Apple ID + internal static let connectYourAppleID = L10n.tr("Localizable", "ConnectAppleIDView.connectYourAppleID", fallback: "Connect Your Apple ID") + /// Failed to Sign In + internal static let failedToSignIn = L10n.tr("Localizable", "ConnectAppleIDView.failedToSignIn", fallback: "Failed to Sign In") + /// Your Apple ID is used to configure apps so they can be installed on this device. Your credentials will be stored securely in this device's Keychain and sent only to Apple for authentication. + internal static let footer = L10n.tr("Localizable", "ConnectAppleIDView.footer", fallback: "Your Apple ID is used to configure apps so they can be installed on this device. Your credentials will be stored securely in this device's Keychain and sent only to Apple for authentication.") + /// Password + internal static let password = L10n.tr("Localizable", "ConnectAppleIDView.password", fallback: "Password") + /// Sign In + internal static let signIn = L10n.tr("Localizable", "ConnectAppleIDView.signIn", fallback: "Sign In") + /// ConnectAppleIDView + internal static let startWithSignIn = L10n.tr("Localizable", "ConnectAppleIDView.startWithSignIn", fallback: "Sign in with your Apple ID to get started.") + /// Why do we need this? + internal static let whyDoWeNeedThis = L10n.tr("Localizable", "ConnectAppleIDView.whyDoWeNeedThis", fallback: "Why do we need this?") + } + internal enum MyAppsView { + /// MyAppsView + internal static let active = L10n.tr("Localizable", "MyAppsView.active", fallback: "Active") + /// App IDs Remaining + internal static let appIDsRemaining = L10n.tr("Localizable", "MyAppsView.appIDsRemaining", fallback: "App IDs Remaining") + /// apps + internal static let apps = L10n.tr("Localizable", "MyAppsView.apps", fallback: "apps") + /// Failed to refresh + internal static let failedToRefresh = L10n.tr("Localizable", "MyAppsView.failedToRefresh", fallback: "Failed to refresh") + /// My Apps + internal static let myApps = L10n.tr("Localizable", "MyAppsView.myApps", fallback: "My Apps") + /// No Updates Available + internal static let noUpdatesAvailable = L10n.tr("Localizable", "MyAppsView.noUpdatesAvailable", fallback: "No Updates Available") + /// Refresh All + internal static let refreshAll = L10n.tr("Localizable", "MyAppsView.refreshAll", fallback: "Refresh All") + /// Active + internal static let remainingAppID = L10n.tr("Localizable", "MyAppsView.remainingAppID", fallback: "Active") + /// Sideloading in progress... + internal static let sideloading = L10n.tr("Localizable", "MyAppsView.sideloading", fallback: "Sideloading in progress...") + /// Keep this lowercase + internal static let viewAppIDs = L10n.tr("Localizable", "MyAppsView.viewAppIDs", fallback: "View App IDs") + } internal enum NewsView { /// NewsView internal static let title = L10n.tr("Localizable", "NewsView.title", fallback: "News") @@ -42,6 +167,72 @@ internal enum L10n { } } } + internal enum RootView { + /// Browse + internal static let browse = L10n.tr("Localizable", "RootView.browse", fallback: "Browse") + /// My Apps + internal static let myApps = L10n.tr("Localizable", "RootView.myApps", fallback: "My Apps") + /// RootView + internal static let news = L10n.tr("Localizable", "RootView.news", fallback: "News") + /// Settings + internal static let settings = L10n.tr("Localizable", "RootView.settings", fallback: "Settings") + } + internal enum SettingsView { + /// Add to Siri... + internal static let addToSiri = L10n.tr("Localizable", "SettingsView.addToSiri", fallback: "Add to Siri...") + /// Background Refresh + internal static let backgroundRefresh = L10n.tr("Localizable", "SettingsView.backgroundRefresh", fallback: "Background Refresh") + /// Connect your Apple ID + internal static let connectAppleID = L10n.tr("Localizable", "SettingsView.connectAppleID", fallback: "Connect your Apple ID") + /// Credits + internal static let credits = L10n.tr("Localizable", "SettingsView.credits", fallback: "Credits") + /// Debug + internal static let debug = L10n.tr("Localizable", "SettingsView.debug", fallback: "Debug") + /// Refreshing Apps + internal static let refreshingApps = L10n.tr("Localizable", "SettingsView.refreshingApps", fallback: "Refreshing Apps") + /// Enable Background Refresh to automatically refresh apps in the background when connected to WiFi and with Wireguard active. + internal static let refreshingAppsFooter = L10n.tr("Localizable", "SettingsView.refreshingAppsFooter", fallback: "Enable Background Refresh to automatically refresh apps in the background when connected to WiFi and with Wireguard active.") + /// Reset Image Cache + internal static let resetImageCache = L10n.tr("Localizable", "SettingsView.resetImageCache", fallback: "Reset Image Cache") + /// SwiftUI Redesign + internal static let swiftUIRedesign = L10n.tr("Localizable", "SettingsView.swiftUIRedesign", fallback: "SwiftUI Redesign") + /// Switch to UIKit + internal static let switchToUIKit = L10n.tr("Localizable", "SettingsView.switchToUIKit", fallback: "Switch to UIKit") + /// Settings + internal static let title = L10n.tr("Localizable", "SettingsView.title", fallback: "Settings") + internal enum ConnectedAppleID { + /// E-Mail + internal static let eMail = L10n.tr("Localizable", "SettingsView.ConnectedAppleID.eMail", fallback: "E-Mail") + /// SettingsView + internal static let name = L10n.tr("Localizable", "SettingsView.ConnectedAppleID.name", fallback: "Name") + /// Sign Out + internal static let signOut = L10n.tr("Localizable", "SettingsView.ConnectedAppleID.signOut", fallback: "Sign Out") + /// Connected Apple ID + internal static let text = L10n.tr("Localizable", "SettingsView.ConnectedAppleID.text", fallback: "Connected Apple ID") + /// Type + internal static let type = L10n.tr("Localizable", "SettingsView.ConnectedAppleID.type", fallback: "Type") + internal enum Footer { + /// Your Apple ID is required to sign the apps you install with SideStore. + internal static let p1 = L10n.tr("Localizable", "SettingsView.ConnectedAppleID.Footer.p1", fallback: "Your Apple ID is required to sign the apps you install with SideStore.") + /// Your credentials are only sent to Apple's servers and are not accessible by the SideStore Team. Once successfully logged in, the login details are stored securely on your device. + internal static let p2 = L10n.tr("Localizable", "SettingsView.ConnectedAppleID.Footer.p2", fallback: "Your credentials are only sent to Apple's servers and are not accessible by the SideStore Team. Once successfully logged in, the login details are stored securely on your device.") + } + } + } + internal enum SourcesView { + /// Done + internal static let done = L10n.tr("Localizable", "SourcesView.done", fallback: "Done") + /// Remove + internal static let remove = L10n.tr("Localizable", "SourcesView.remove", fallback: "Remove") + /// SideStore has reviewed these sources to make sure they meet our safety standards. + internal static let reviewedText = L10n.tr("Localizable", "SourcesView.reviewedText", fallback: "SideStore has reviewed these sources to make sure they meet our safety standards.") + /// Sources + internal static let sources = L10n.tr("Localizable", "SourcesView.sources", fallback: "Sources") + /// SourcesView + internal static let sourcesDescription = L10n.tr("Localizable", "SourcesView.sourcesDescription", fallback: "Sources control what apps are available to download through SideStore.") + /// Trusted Sources + internal static let trustedSources = L10n.tr("Localizable", "SourcesView.trustedSources", fallback: "Trusted Sources") + } } // swiftlint:enable explicit_type_interface function_parameter_count identifier_name line_length // swiftlint:enable nesting type_body_length type_name vertical_whitespace_opening_braces diff --git a/AltStore/Resources/en.lproj/Localizable.strings b/AltStore/Resources/en.lproj/Localizable.strings index a031f550..d56139b0 100644 --- a/AltStore/Resources/en.lproj/Localizable.strings +++ b/AltStore/Resources/en.lproj/Localizable.strings @@ -19,3 +19,106 @@ "BrowseView.Section.PromotedCategories.showAll" = "Show all"; "BrowseView.Section.AllApps.title" = "All Apps"; "BrowseView.Actions.sources" = "Sources"; +"BrowseView.Categories.gamesAndEmulators" = "Games and\nEmulators"; + +/* RootView */ +"RootView.news" = "News"; +"RootView.browse" = "Browse"; +"RootView.myApps" = "My Apps"; +"RootView.settings" = "Settings"; + +/* SettingsView */ +"SettingsView.ConnectedAppleID.name" = "Name"; +"SettingsView.ConnectedAppleID.eMail" = "E-Mail"; +"SettingsView.ConnectedAppleID.type" = "Type"; +"SettingsView.ConnectedAppleID.text" = "Connected Apple ID"; +"SettingsView.ConnectedAppleID.signOut" = "Sign Out"; +"SettingsView.ConnectedAppleID.Footer.p1" = "Your Apple ID is required to sign the apps you install with SideStore."; +"SettingsView.ConnectedAppleID.Footer.p2" = "Your credentials are only sent to Apple's servers and are not accessible by the SideStore Team. Once successfully logged in, the login details are stored securely on your device."; + +"SettingsView.connectAppleID" = "Connect your Apple ID"; +"SettingsView.backgroundRefresh" = "Background Refresh"; +"SettingsView.addToSiri" = "Add to Siri..."; +"SettingsView.refreshingApps" = "Refreshing Apps"; +"SettingsView.switchToUIKit" = "Switch to UIKit"; +"SettingsView.resetImageCache" = "Reset Image Cache"; +"SettingsView.debug" = "Debug"; +"SettingsView.swiftUIRedesign" = "SwiftUI Redesign"; +"SettingsView.credits" = "Credits"; +"SettingsView.title" = "Settings"; +"SettingsView.refreshingAppsFooter" = "Enable Background Refresh to automatically refresh apps in the background when connected to WiFi and with Wireguard active."; + +/* ConnectAppleIDView */ +"ConnectAppleIDView.startWithSignIn" = "Sign in with your Apple ID to get started."; +"ConnectAppleIDView.signIn" = "Sign In"; +"ConnectAppleIDView.appleID" = "Apple ID"; +"ConnectAppleIDView.password" = "Password"; +"ConnectAppleIDView.whyDoWeNeedThis" = "Why do we need this?"; +"ConnectAppleIDView.footer" = "Your Apple ID is used to configure apps so they can be installed on this device. Your credentials will be stored securely in this device's Keychain and sent only to Apple for authentication."; +"ConnectAppleIDView.connectYourAppleID" = "Connect Your Apple ID"; +"ConnectAppleIDView.cancel" = "Cancel"; +"ConnectAppleIDView.failedToSignIn" = "Failed to Sign In"; + +/* SourcesView */ +"SourcesView.sourcesDescription" = "Sources control what apps are available to download through SideStore."; +"SourcesView.remove" = "Remove"; +"SourcesView.trustedSources" = "Trusted Sources"; +"SourcesView.reviewedText" = "SideStore has reviewed these sources to make sure they meet our safety standards."; +"SourcesView.sources" = "Sources"; +"SourcesView.done" = "Done"; + +/* AddSourceView */ +"AddSourceView.sourceURL" = "Source URL"; +"AddSourceView.sourceWarning" = "Please enter the source url here. Then, tap continue to validate and add the source in the next step."; +"AddSourceView.sourceWarningContinued" = "Be careful with unvalidated third-party sources! Make sure to only add sources that you trust."; +"AddSourceView.continue" = "Continue"; +"AddSourceView.title" = "Add Source"; + +/* ConfirmAddSourceView */ +"ConfirmAddSourceView.apps" = "Apps"; +"ConfirmAddSourceView.newsItems" = "News Items"; +"ConfirmAddSourceView.sourceContents" = "Source Contents"; +"ConfirmAddSourceView.sourceIdentifier" = "Source Identifier"; +"ConfirmAddSourceView.sourceURL" = "Source URL"; +"ConfirmAddSourceView.sourceInfo" = "Source Information"; +"ConfirmAddSourceView.addSource" = "Add Source"; + +/* AppPillButton */ +"AppPillButton.free" = "Free"; +"AppPillButton.open" = "Open"; + +/* AppAction */ +"AppAction.install" = "Install"; +"AppAction.open" = "Open"; +"AppAction.refresh" = "Refresh"; +"AppAction.activate" = "Activate"; +"AppAction.deactivate" = "Deactivate"; +"AppAction.remove" = "Remove"; +"AppAction.enableJIT" = "Activate JIT"; +"AppAction.backup" = "Backup"; +"AppAction.exportBackup" = "Export backup"; +"AppAction.restoreBackup" = "Restore backup"; +"AppAction.chooseCustomIcon" = "Customize icon"; +"AppAction.resetIcon" = "Reset icon"; + +/* AppDetailView*/ +"AppDetailView.more" = "More..."; +"AppDetailView.whatsNew" = "What's New"; +"AppDetailView.version" = "Version"; +"AppDetailView.noVersionInformation" = "No version information"; +"AppDetailView.noPermissions" = "The app requires no permissions."; +"AppDetailView.permissions" = "Permissions"; + +/* AppPermissionGrid */ +"AppPermissionGrid.usageDescription" = "Usage Description"; + +/* MyAppsView */ +"MyAppsView.active" = "Active"; +"MyAppsView.sideloading" = "Sideloading in progress..."; +"MyAppsView.refreshAll" = "Refresh All"; +"MyAppsView.appIDsRemaining" = "App IDs Remaining"; +"MyAppsView.noUpdatesAvailable" = "No Updates Available"; +"MyAppsView.failedToRefresh" = "Failed to refresh"; +"MyAppsView.apps" = "apps"; /* Keep this lowercase */ +"MyAppsView.viewAppIDs" = "View App IDs"; +"MyAppsView.myApps" = "My Apps"; diff --git a/AltStore/Resources/es-419.lproj/Localizable.strings b/AltStore/Resources/es-419.lproj/Localizable.strings new file mode 100644 index 00000000..fe44f155 --- /dev/null +++ b/AltStore/Resources/es-419.lproj/Localizable.strings @@ -0,0 +1,123 @@ +/* + Localizable.strings + AltStore + + Created by Joshua Laymon on 23.12.22. + Copyright © 2022 SideStore. All rights reserved. +*/ + + +/* NewsView */ +"NewsView.title" = "Noticias"; +"NewsView.Section.FromSources.title" = "De Tus Fuentes"; + + +/* BrowseView */ +"BrowseView.title" = "Navegar"; +"BrowseView.search" = "Buscar"; +"BrowseView.Section.PromotedCategories.title" = "Categorías Promocionadas"; +"BrowseView.Section.PromotedCategories.showAll" = "Ver todos"; +"BrowseView.Section.AllApps.title" = "Todos de las Aplicaciones"; +"BrowseView.Actions.sources" = "Fuentes"; +"BrowseView.Categories.gamesAndEmulators" = "Juegos y\nEmuladores"; + +/* RootView */ +"RootView.news" = "Noticias"; +"RootView.browse" = "Navegar"; +"RootView.myApps" = "Mis Apps"; +"RootView.settings" = "Configuración"; + +/* SettingsView */ +"SettingsView.ConnectedAppleID.name" = "Nombre"; +"SettingsView.ConnectedAppleID.eMail" = "Correo electrónico"; +"SettingsView.ConnectedAppleID.type" = "Tipo"; +"SettingsView.ConnectedAppleID.text" = "Apple ID conectado"; +"SettingsView.ConnectedAppleID.signOut" = "Cerrar sesión"; +"SettingsView.ConnectedAppleID.Footer.p1" = "Se requiere de su Apple ID para firmar las aplicaciones que se instalan con SideStore."; +"SettingsView.ConnectedAppleID.Footer.p2" = "Sus datos son enviados solamente a Apple, SideStore Team no tiene acceso alguno a sus credenciales. Los detalles del inicio de sesión serán guardadas de forma segura en su dispositivo después de haber iniciado sesión exitosamente."; + +"SettingsView.connectAppleID" = "Inicia sesión con un Apple ID"; +"SettingsView.backgroundRefresh" = "Refrescar en segundo plano"; +"SettingsView.addToSiri" = "Agregar a Siri..."; +"SettingsView.refreshingApps" = "Refrescando las aplicaciones"; +"SettingsView.switchToUIKit" = "Cambiar a UIKit"; +"SettingsView.resetImageCache" = "Borrar el caché de imagenes"; +"SettingsView.debug" = "Depurar"; +"SettingsView.swiftUIRedesign" = "Rediseño de SwiftUI"; +"SettingsView.credits" = "Créditos"; +"SettingsView.title" = "Configuración"; +"SettingsView.refreshingAppsFooter" = "Active el refresco en segundo plano para que las aplicaciones sean refrescadas automáticamente cuando estés conectado a una red Wi-Fi y tengas a WireGuard activado."; + +/* ConnectAppleIDView */ +"ConnectAppleIDView.startWithSignIn" = "Inicia sesión con su Apple ID para comenzar."; +"ConnectAppleIDView.signIn" = "Inicia sesión"; +"ConnectAppleIDView.password" = "Contraseña"; +"ConnectAppleIDView.whyDoWeNeedThis" = "¿Por qué necesitamos esto?"; +"ConnectAppleIDView.footer" = "Su Apple ID es usa para configurar las aplicaciones para instalar en su dispositivo. Los detalles del inicio de sesión serán guardadas de forma segura en su dispositivo y son enviados solomente a Apple para autenticación."; +"ConnectAppleIDView.connectYourAppleID" = "Conectar su Apple ID"; +"ConnectAppleIDView.cancel" = "Cancelar"; +"ConnectAppleIDView.failedToSignIn" = "No Pude iniciar sesión"; + +/* SourcesView */ +"SourcesView.sourcesDescription" = "Los fuentes controlan las aplicaciones que están disponibles a travès de SideStore."; +"SourcesView.remove" = "Eliminar"; +"SourcesView.trustedSources" = "Fuentes Confianza"; +"SourcesView.reviewedText" = "SideStore Team ha reseñado estas fuentes para asegurarse que seguras."; +"SourcesView.sources" = "Fuentes"; +"SourcesView.done" = "Listo"; + +/* AddSourceView */ +"AddSourceView.sourceURL" = "URL de fuente"; +"AddSourceView.sourceWarning" = "Introduce el URL de fuente aquí. Luego, toca \"Continuar\" para validar y agregar la fuente en el siguiente paso."; +"AddSourceView.sourceWarningContinued" = "Ten cuidado con las fuentes de un tercero. Solo debe agregar fuentes en las que confíe."; +"AddSourceView.continue" = "Continuar"; +"AddSourceView.title" = "Agregar Fuente"; + +/* ConfirmAddSourceView */ +"ConfirmAddSourceView.apps" = "Aplicaciones"; +"ConfirmAddSourceView.newsItems" = "Noticias"; +"ConfirmAddSourceView.sourceContents" = "Contenidos de fuente"; +"ConfirmAddSourceView.sourceIdentifier" = "Identificador de fuente"; +"ConfirmAddSourceView.sourceURL" = "URL de fuente"; +"ConfirmAddSourceView.sourceInfo" = "Información de fuente"; +"ConfirmAddSourceView.addSource" = "Agregar Fuente"; + +/* AppPillButton */ +"AppPillButton.free" = "Gratis"; +"AppPillButton.open" = "Abrir"; + +/* AppAction */ +"AppAction.install" = "Instalar"; +"AppAction.open" = "Abrir"; +"AppAction.refresh" = "Refrescar"; +"AppAction.activate" = "Activar"; +"AppAction.deactivate" = "Desactivar"; +"AppAction.remove" = "Eliminar"; +"AppAction.enableJIT" = "Activar JIT"; +"AppAction.backup" = "Respaldar"; +"AppAction.exportBackup" = "Exportar respaldo"; +"AppAction.restoreBackup" = "Restablecer respaldo"; +"AppAction.chooseCustomIcon" = "Personalizar icono"; +"AppAction.resetIcon" = "Reiniciar icono"; + +/* AppDetailView*/ +"AppDetailView.more" = "Más..."; +"AppDetailView.whatsNew" = "Novedades"; +"AppDetailView.version" = "Versión"; +"AppDetailView.noVersionInformation" = "Sin información de versión"; +"AppDetailView.noPermissions" = "Esta aplicación no requiere de permisos."; +"AppDetailView.permissions" = "Los permisos"; + +/* AppPermissionGrid */ +"AppPermissionGrid.usageDescription" = "Descripciones de uso"; + +/* MyAppsView */ +"MyAppsView.active" = "Activo"; +"MyAppsView.sideloading" = "Instalando en progeso..."; +"MyAppsView.refreshAll" = "Refrescar todos"; +"MyAppsView.appIDsRemaining" = "App IDs restante"; +"MyAppsView.noUpdatesAvailable" = "No hay actualizaciones disponibles"; +"MyAppsView.failedToRefresh" = "No se pudo refrescar"; +"MyAppsView.apps" = "aplicaciones"; /* Keep this lowercase */ +"MyAppsView.viewAppIDs" = "Ver App IDs"; +"MyAppsView.myApps" = "Mis Aplicaciones"; diff --git a/AltStore/Views/App Detail/AppDetailView.swift b/AltStore/Views/App Detail/AppDetailView.swift index 6536811b..e8020087 100644 --- a/AltStore/Views/App Detail/AppDetailView.swift +++ b/AltStore/Views/App Detail/AppDetailView.swift @@ -114,7 +114,7 @@ struct AppDetailView: View { ExpandableText(text: storeApp.localizedDescription) .lineLimit(6) - .expandButton(TextSet(text: "More...", font: .callout, color: .accentColor)) + .expandButton(TextSet(text: L10n.AppDetailView.more, font: .callout, color: .accentColor)) .padding(.horizontal) currentVersionView @@ -158,11 +158,11 @@ struct AppDetailView: View { VStack(alignment: .leading, spacing: 8) { HStack(alignment: .bottom) { VStack(alignment: .leading) { - Text("What's New") + Text(L10n.AppDetailView.whatsNew) .bold() .font(.title3) - Text("Version \(storeApp.version)") + Text("\(L10n.AppDetailView.version) \(storeApp.version)") .font(.callout) .foregroundColor(.secondary) } @@ -180,9 +180,9 @@ struct AppDetailView: View { if let versionDescription = storeApp.versionDescription { ExpandableText(text: versionDescription) .lineLimit(5) - .expandButton(TextSet(text: "More...", font: .callout, color: .accentColor)) + .expandButton(TextSet(text: L10n.AppDetailView.more, font: .callout, color: .accentColor)) } else { - Text("No version information") + Text(L10n.AppDetailView.noVersionInformation) .foregroundColor(.secondary) } } @@ -190,12 +190,12 @@ struct AppDetailView: View { var permissionsView: some View { VStack(alignment: .leading, spacing: 8) { - Text("Permissions") + Text(L10n.AppDetailView.permissions) .bold() .font(.title3) if storeApp.permissions.isEmpty { - Text("The app requires no permissions.") + Text(L10n.AppDetailView.noPermissions) .font(.callout) .foregroundColor(.secondary) } else { diff --git a/AltStore/Views/App Detail/AppPermissionsGrid.swift b/AltStore/Views/App Detail/AppPermissionsGrid.swift index 31bd53c7..1cec6deb 100644 --- a/AltStore/Views/App Detail/AppPermissionsGrid.swift +++ b/AltStore/Views/App Detail/AppPermissionsGrid.swift @@ -44,7 +44,7 @@ struct AppPermissionGridItemView: View { .foregroundColor(.primary) } .alert(isPresented: self.$isPopoverPresented) { - Alert(title: Text("Usage Description"), message: Text(permission.usageDescription)) + Alert(title: Text(L10n.AppPermissionGrid.usageDescription), message: Text(permission.usageDescription)) } } } diff --git a/AltStore/Views/Browse/AddSourceView.swift b/AltStore/Views/Browse/AddSourceView.swift index 7706510f..0f7c9325 100644 --- a/AltStore/Views/Browse/AddSourceView.swift +++ b/AltStore/Views/Browse/AddSourceView.swift @@ -23,15 +23,15 @@ struct AddSourceView: View { .autocapitalization(.none) .autocorrectionDisabled() } header: { - Text("Source URL") + Text(L10n.AddSourceView.sourceURL) } footer: { VStack(alignment: .leading, spacing: 4) { - Text("Please enter the source url here. Then, tap continue to validate and add the source in the next step.") + Text(L10n.AddSourceView.sourceWarning) HStack(alignment: .top) { Image(systemSymbol: .exclamationmarkTriangleFill) - Text("Be careful with unvalidated third-party sources! Make sure to only add sources that you trust.") + Text(L10n.AddSourceView.sourceWarningContinued) } } } @@ -39,12 +39,12 @@ struct AddSourceView: View { SwiftUI.Button { self.continueHandler(self.sourceUrlText) } label: { - Text("Continue") + Text(L10n.AddSourceView.continue) } .disabled(URL(string: self.sourceUrlText)?.host == nil) } .listStyle(InsetGroupedListStyle()) - .navigationTitle("Add Source") + .navigationTitle(L10n.AddSourceView.title) } } diff --git a/AltStore/Views/Browse/BrowseView.swift b/AltStore/Views/Browse/BrowseView.swift index 32e5221f..ec46ea86 100644 --- a/AltStore/Views/Browse/BrowseView.swift +++ b/AltStore/Views/Browse/BrowseView.swift @@ -131,7 +131,7 @@ struct PromotedCategoryView: View { HStack { Image(systemSymbol: .dpadRightFill) - Text("Games &\nEmulators") + Text(L10n.BrowseView.Categories.gamesAndEmulators) .multilineTextAlignment(.leading) } .foregroundColor(.accentColor) diff --git a/AltStore/Views/Browse/ConfirmAddSourceView.swift b/AltStore/Views/Browse/ConfirmAddSourceView.swift index 9ce687c1..e9959861 100644 --- a/AltStore/Views/Browse/ConfirmAddSourceView.swift +++ b/AltStore/Views/Browse/ConfirmAddSourceView.swift @@ -25,7 +25,7 @@ struct ConfirmAddSourceView: View { List { Section { VStack(alignment: .leading) { - Text("\(source.apps.count) Apps") + Text("\(source.apps.count) \(L10n.ConfirmAddSourceView.apps)") Text(source.apps.map { $0.name }.joined(separator: ", ")) .font(.callout) @@ -34,28 +34,28 @@ struct ConfirmAddSourceView: View { } VStack() { - Text("\(source.newsItems.count) News Items") + Text("\(source.newsItems.count) \(L10n.ConfirmAddSourceView.newsItems)") } } header: { - Text("Source Contents") + Text(L10n.ConfirmAddSourceView.sourceContents) } Section { VStack(alignment: .leading) { - Text("Source Identifier") + Text(L10n.ConfirmAddSourceView.sourceIdentifier) Text(source.identifier) .font(.callout) .foregroundColor(.secondary) } VStack(alignment: .leading) { - Text("Source URL") + Text(L10n.ConfirmAddSourceView.sourceURL) Text(source.sourceURL.absoluteString) .font(.callout) .foregroundColor(.secondary) } } header: { - Text("Source Info") + Text(L10n.ConfirmAddSourceView.sourceInfo) } } .listStyle(InsetGroupedListStyle()) @@ -65,7 +65,7 @@ struct ConfirmAddSourceView: View { SwiftUI.Button { confirmationHandler(fetchedSource) } label: { - Label("Add Source", systemSymbol: .plus) + Label(L10n.ConfirmAddSourceView.addSource, systemSymbol: .plus) } .buttonStyle(FilledButtonStyle()) .padding() diff --git a/AltStore/Views/Browse/SourcesView.swift b/AltStore/Views/Browse/SourcesView.swift index c06d9811..3dabd26b 100644 --- a/AltStore/Views/Browse/SourcesView.swift +++ b/AltStore/Views/Browse/SourcesView.swift @@ -35,7 +35,7 @@ struct SourcesView: View { LazyVStack(alignment: .leading, spacing: 24) { // Installed Sources LazyVStack(alignment: .leading, spacing: 12) { - Text("Sources control what apps are available to download through SideStore.") + Text(L10n.SourcesView.sourcesDescription) .font(.callout) .foregroundColor(.secondary) @@ -58,7 +58,7 @@ struct SourcesView: View { SwiftUI.Button { self.removeSource(source) } label: { - Label("Remove", systemSymbol: .trash) + Label(L10n.SourcesView.remove, systemSymbol: .trash) } })) } @@ -67,11 +67,11 @@ struct SourcesView: View { // Trusted Sources LazyVStack(alignment: .leading) { - Text("Trusted Sources") + Text(L10n.SourcesView.trustedSources) .font(.title3) .bold() - Text("SideStore has reviewed these sources to make sure they meet our safety standards.") + Text(L10n.SourcesView.reviewedText) .font(.callout) .foregroundColor(.secondary) @@ -80,7 +80,7 @@ struct SourcesView: View { } .padding() } - .navigationTitle("Sources") + .navigationTitle(L10n.SourcesView.sources) .toolbar { ToolbarItem(placement: .navigationBarLeading) { SwiftUI.Button { @@ -107,7 +107,7 @@ struct SourcesView: View { ToolbarItem(placement: .navigationBarTrailing) { SwiftUI.Button(action: self.dismiss) { - Text("Done").bold() + Text(L10n.SourcesView.done).bold() } } } diff --git a/AltStore/Views/My Apps/AppAction.swift b/AltStore/Views/My Apps/AppAction.swift index 5ccb6684..91b15e04 100644 --- a/AltStore/Views/My Apps/AppAction.swift +++ b/AltStore/Views/My Apps/AppAction.swift @@ -20,18 +20,18 @@ enum AppAction: Int, CaseIterable { var title: String { switch self { - case .install: return "Install" - case .open: return "Open" - case .refresh: return "Refresh" - case .activate: return "Activate" - case .deactivate: return "Deactivate" - case .remove: return "Remove" - case .enableJIT: return "Enable JIT" - case .backup: return "Back Up" - case .exportBackup: return "Export Backup" - case .restoreBackup: return "Restore Backup" - case .chooseCustomIcon: return "Change Icon" - case .resetCustomIcon: return "Reset Icon" + case .install: return L10n.AppAction.install + case .open: return L10n.AppAction.open + case .refresh: return L10n.AppAction.refresh + case .activate: return L10n.AppAction.activate + case .deactivate: return L10n.AppAction.deactivate + case .remove: return L10n.AppAction.remove + case .enableJIT: return L10n.AppAction.enableJIT + case .backup: return L10n.AppAction.backup + case .exportBackup: return L10n.AppAction.exportBackup + case .restoreBackup: return L10n.AppAction.restoreBackup + case .chooseCustomIcon: return L10n.AppAction.chooseCustomIcon + case .resetCustomIcon: return L10n.AppAction.resetIcon } } diff --git a/AltStore/Views/My Apps/MyAppsView.swift b/AltStore/Views/My Apps/MyAppsView.swift index 9a48c5dd..4e087488 100644 --- a/AltStore/Views/My Apps/MyAppsView.swift +++ b/AltStore/Views/My Apps/MyAppsView.swift @@ -68,7 +68,7 @@ struct MyAppsView: View { LazyVStack(spacing: 16) { if let progress = SideloadingManager.shared.progress { VStack { - Text("Sideloading in progress...") + Text(L10n.MyAppsView.sideloading) .padding() ProgressView(progress) @@ -84,14 +84,14 @@ struct MyAppsView: View { } HStack { - Text("Active") + Text(L10n.MyAppsView.active) .font(.title2) .bold() Spacer() SwiftUI.Button { } label: { - Text("Refresh All") + Text(L10n.MyAppsView.refreshAll) } } @@ -111,14 +111,14 @@ struct MyAppsView: View { VStack { if DatabaseManager.shared.activeTeam()?.type == .free { - Text("\(remainingAppIDs) App IDs Remaining") + Text("\(remainingAppIDs) \(L10n.MyAppsView.appIDsRemaining)") .foregroundColor(.secondary) } SwiftUI.Button { self.isShowingAppIDsView = true } label: { - Text("View App IDs") + Text(L10n.MyAppsView.viewAppIDs) } .sheet(isPresented: self.$isShowingAppIDsView) { NavigationView { @@ -130,7 +130,7 @@ struct MyAppsView: View { .padding(.horizontal) } .background(Color(UIColor.systemGroupedBackground).ignoresSafeArea()) - .navigationTitle("My Apps") + .navigationTitle(L10n.MyAppsView.myApps) .toolbar { ToolbarItem(placement: .navigationBarLeading) { SwiftUI.Button { @@ -239,7 +239,7 @@ extension MyAppsView { NotificationManager.shared.reportError(error: failure.value) } else { // TODO: Localize - let title = "Failed to refresh \(failures.count) apps." + let title = "\(L10n.MyAppsView.failedToRefresh) \(failures.count) \(L10n.MyAppsView.apps)" let error = failures.first?.value as NSError? let message = error?.localizedFailure ?? error?.localizedFailureReason ?? error?.localizedDescription diff --git a/AltStore/Views/RootView.swift b/AltStore/Views/RootView.swift index da5eb8e8..a2d8be5b 100644 --- a/AltStore/Views/RootView.swift +++ b/AltStore/Views/RootView.swift @@ -90,10 +90,10 @@ extension RootView { var displayName: String { switch self { - case .news: return "News" - case .browse: return "Browse" - case .myApps: return "My Apps" - case .settings: return "Settings" + case .news: return L10n.RootView.news + case .browse: return L10n.RootView.browse + case .myApps: return L10n.RootView.myApps + case .settings: return L10n.RootView.settings } } diff --git a/AltStore/Views/Settings/ConnectAppleIDView.swift b/AltStore/Views/Settings/ConnectAppleIDView.swift index 04be4f3e..e53c8183 100644 --- a/AltStore/Views/Settings/ConnectAppleIDView.swift +++ b/AltStore/Views/Settings/ConnectAppleIDView.swift @@ -30,16 +30,16 @@ struct ConnectAppleIDView: View { var body: some View { ScrollView { VStack(alignment: .leading, spacing: 32) { - Text("Sign in with your Apple ID to get started.") + Text(L10n.ConnectAppleIDView.startWithSignIn) VStack(spacing: 16) { - RoundedTextField(title: "Apple ID", placeholder: "user@sidestore.io", text: $email) + RoundedTextField(title: L10n.ConnectAppleIDView.appleID, placeholder: "user@sidestore.io", text: $email) - RoundedTextField(title: "Password", placeholder: "••••••", text: $password, isSecure: true) + RoundedTextField(title: L10n.ConnectAppleIDView.password, placeholder: "••••••", text: $password, isSecure: true) } SwiftUI.Button(action: signIn) { - Text("Sign in") + Text(L10n.ConnectAppleIDView.signIn) .bold() } .buttonStyle(FilledButtonStyle(isLoading: isLoading)) @@ -48,10 +48,10 @@ struct ConnectAppleIDView: View { Spacer() VStack(alignment: .leading) { - Text("Why do we need this?") + Text(L10n.ConnectAppleIDView.whyDoWeNeedThis) .bold() - Text("Your Apple ID is used to configure apps so they can be installed on this device. Your credentials will be stored securely in this device's Keychain and sent only to Apple for authentication.") + Text(L10n.ConnectAppleIDView.footer) } .padding() .background( @@ -62,11 +62,11 @@ struct ConnectAppleIDView: View { .padding(.horizontal) } .frame(maxWidth: .infinity) - .navigationTitle("Connect your Apple ID") + .navigationTitle(L10n.ConnectAppleIDView.connectYourAppleID) .toolbar { ToolbarItem(placement: .navigationBarTrailing) { SwiftUI.Button(action: self.cancel) { - Text("Cancel") + Text(L10n.ConnectAppleIDView.cancel) } } } @@ -87,7 +87,7 @@ struct ConnectAppleIDView: View { break case .failure(let error as NSError): - let error = error.withLocalizedFailure(NSLocalizedString("Failed to Log In", comment: "")) + let error = error.withLocalizedFailure(NSLocalizedString(L10n.ConnectAppleIDView.failedToSignIn, comment: "")) print(error) case .success((let account, let session)): diff --git a/AltStore/Views/Settings/SettingsView.swift b/AltStore/Views/Settings/SettingsView.swift index b201f904..1d9510da 100644 --- a/AltStore/Views/Settings/SettingsView.swift +++ b/AltStore/Views/Settings/SettingsView.swift @@ -36,21 +36,21 @@ struct SettingsView: View { if let connectedAppleID = connectedTeams.first { HStack { - Text("Name") + Text(L10n.SettingsView.ConnectedAppleID.name) .foregroundColor(.secondary) Spacer() Text(connectedAppleID.name) } HStack { - Text("E-Mail") + Text(L10n.SettingsView.ConnectedAppleID.eMail) .foregroundColor(.secondary) Spacer() Text(connectedAppleID.account.appleID) } HStack { - Text("Type") + Text(L10n.SettingsView.ConnectedAppleID.type) .foregroundColor(.secondary) Spacer() Text(connectedAppleID.type.localizedDescription) @@ -59,18 +59,18 @@ struct SettingsView: View { SwiftUI.Button { self.connectAppleID() } label: { - Text("Connect your Apple ID") + Text(L10n.SettingsView.connectAppleID) } } } header: { if !connectedTeams.isEmpty { HStack { - Text("Connected Apple ID") + Text(L10n.SettingsView.ConnectedAppleID.text) Spacer() SwiftUI.Button { self.disconnectAppleID() } label: { - Text("Sign Out") + Text(L10n.SettingsView.ConnectedAppleID.signOut) .font(.callout) .bold() } @@ -78,21 +78,21 @@ struct SettingsView: View { } } footer: { VStack(spacing: 4) { - Text("Your Apple ID is required to sign the apps you install with SideStore.") + Text(L10n.SettingsView.ConnectedAppleID.Footer.p1) - Text("Your credentials are only sent to Apple's servers and are not accessible by the SideStore Team. Once successfully logged in, the login details are stored securely on your device.") + Text(L10n.SettingsView.ConnectedAppleID.Footer.p2) } } Section { Toggle(isOn: self.$isBackgroundRefreshEnabled, label: { - Text("Background Refresh") + Text(L10n.SettingsView.backgroundRefresh) }) SwiftUI.Button { self.isShowingAddShortcutView = true } label: { - Text("Add to Siri...") + Text(L10n.SettingsView.addToSiri) } .sheet(isPresented: self.$isShowingAddShortcutView) { if let shortcut = INShortcut(intent: INInteraction.refreshAllApps().intent) { @@ -100,22 +100,22 @@ struct SettingsView: View { } } } header: { - Text("Refreshing Apps") + Text(L10n.SettingsView.refreshingApps) } footer: { - Text("Enable Background Refresh to automatically refresh apps in the background when connected to WiFi and with Wireguard active.") + Text(L10n.SettingsView.refreshingAppsFooter) } Section { SwiftUI.Button(action: switchToUIKit) { - Text("Switch to UIKit") + Text(L10n.SettingsView.switchToUIKit) } SwiftUI.Button(action: resetImageCache) { - Text("Reset Image Cache") + Text(L10n.SettingsView.resetImageCache) } } header: { - Text("Debug") + Text(L10n.SettingsView.debug) } @@ -124,7 +124,7 @@ struct SettingsView: View { SafariView(url: URL(string: "https://fabian-thies.de")!) } label: { HStack { - Text("SwiftUI Redesign") + Text(L10n.SettingsView.swiftUIRedesign) .foregroundColor(.secondary) Spacer() Text("fabianthdev") @@ -132,7 +132,7 @@ struct SettingsView: View { } } header: { - Text("Credits") + Text(L10n.SettingsView.credits) } Section { @@ -144,7 +144,7 @@ struct SettingsView: View { } } .listStyle(InsetGroupedListStyle()) - .navigationTitle("Settings") + .navigationTitle(L10n.SettingsView.title) .toolbar { ToolbarItem(placement: .navigationBarTrailing) { SwiftUI.Button {