mirror of
https://github.com/SideStore/SideStore.git
synced 2026-02-09 06:43:25 +01:00
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
This commit is contained in:
@@ -34,7 +34,6 @@
|
|||||||
1F6284D5295209DA0060AAD8 /* AppAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F6284D4295209DA0060AAD8 /* AppAction.swift */; };
|
1F6284D5295209DA0060AAD8 /* AppAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F6284D4295209DA0060AAD8 /* AppAction.swift */; };
|
||||||
1F6284D7295218980060AAD8 /* DocumentPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F6284D6295218980060AAD8 /* DocumentPicker.swift */; };
|
1F6284D7295218980060AAD8 /* DocumentPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F6284D6295218980060AAD8 /* DocumentPicker.swift */; };
|
||||||
1F6284D929523D340060AAD8 /* SideloadingManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F6284D829523D340060AAD8 /* SideloadingManager.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 */; };
|
1F66F5BA2938CA5700A910CA /* VisualEffectView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F66F5B92938CA5700A910CA /* VisualEffectView.swift */; };
|
||||||
1F66F5BC2938F03700A910CA /* Modifiers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F66F5BB2938F03700A910CA /* Modifiers.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 */; };
|
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 = "<group>"; };
|
1F6284D4295209DA0060AAD8 /* AppAction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppAction.swift; sourceTree = "<group>"; };
|
||||||
1F6284D6295218980060AAD8 /* DocumentPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DocumentPicker.swift; sourceTree = "<group>"; };
|
1F6284D6295218980060AAD8 /* DocumentPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DocumentPicker.swift; sourceTree = "<group>"; };
|
||||||
1F6284D829523D340060AAD8 /* SideloadingManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SideloadingManager.swift; sourceTree = "<group>"; };
|
1F6284D829523D340060AAD8 /* SideloadingManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SideloadingManager.swift; sourceTree = "<group>"; };
|
||||||
1F6284DA295254C80060AAD8 /* AppScreenshot.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppScreenshot.swift; sourceTree = "<group>"; };
|
|
||||||
1F66F5B92938CA5700A910CA /* VisualEffectView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VisualEffectView.swift; sourceTree = "<group>"; };
|
1F66F5B92938CA5700A910CA /* VisualEffectView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VisualEffectView.swift; sourceTree = "<group>"; };
|
||||||
1F66F5BB2938F03700A910CA /* Modifiers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Modifiers.swift; sourceTree = "<group>"; };
|
1F66F5BB2938F03700A910CA /* Modifiers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Modifiers.swift; sourceTree = "<group>"; };
|
||||||
1F66F5BD2938F06100A910CA /* StoreApp+Filterable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "StoreApp+Filterable.swift"; sourceTree = "<group>"; };
|
1F66F5BD2938F06100A910CA /* StoreApp+Filterable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "StoreApp+Filterable.swift"; sourceTree = "<group>"; };
|
||||||
@@ -944,6 +942,7 @@
|
|||||||
D5F2F6A82720B7C20081CCF5 /* PatchViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PatchViewController.swift; sourceTree = "<group>"; };
|
D5F2F6A82720B7C20081CCF5 /* PatchViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PatchViewController.swift; sourceTree = "<group>"; };
|
||||||
D5F99A1728D11DB500476A16 /* AltStore10ToAltStore11.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; path = AltStore10ToAltStore11.xcmappingmodel; sourceTree = "<group>"; };
|
D5F99A1728D11DB500476A16 /* AltStore10ToAltStore11.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; path = AltStore10ToAltStore11.xcmappingmodel; sourceTree = "<group>"; };
|
||||||
D5F99A1928D12B1400476A16 /* StoreApp10ToStoreApp11Policy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreApp10ToStoreApp11Policy.swift; sourceTree = "<group>"; };
|
D5F99A1928D12B1400476A16 /* StoreApp10ToStoreApp11Policy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreApp10ToStoreApp11Policy.swift; sourceTree = "<group>"; };
|
||||||
|
DFEE02F82957998D00518C34 /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/Localizable.strings"; sourceTree = "<group>"; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
@@ -1203,7 +1202,6 @@
|
|||||||
1FB96FBD292A20E5007E68D1 /* ObservableScrollView.swift */,
|
1FB96FBD292A20E5007E68D1 /* ObservableScrollView.swift */,
|
||||||
1FB96FBF292A63F2007E68D1 /* AppPillButton.swift */,
|
1FB96FBF292A63F2007E68D1 /* AppPillButton.swift */,
|
||||||
1F0DD8422936B0F9007608A4 /* RoundedTextField.swift */,
|
1F0DD8422936B0F9007608A4 /* RoundedTextField.swift */,
|
||||||
1F6284DA295254C80060AAD8 /* AppScreenshot.swift */,
|
|
||||||
);
|
);
|
||||||
path = "View Components";
|
path = "View Components";
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -2332,6 +2330,7 @@
|
|||||||
knownRegions = (
|
knownRegions = (
|
||||||
en,
|
en,
|
||||||
Base,
|
Base,
|
||||||
|
"es-419",
|
||||||
);
|
);
|
||||||
mainGroup = BFD247612284B9A500981D42;
|
mainGroup = BFD247612284B9A500981D42;
|
||||||
packageReferences = (
|
packageReferences = (
|
||||||
@@ -2773,7 +2772,6 @@
|
|||||||
1F943C712927F90400ABE095 /* MyAppsView.swift in Sources */,
|
1F943C712927F90400ABE095 /* MyAppsView.swift in Sources */,
|
||||||
1FA1C8CA294906890083119D /* MyAppsViewModel.swift in Sources */,
|
1FA1C8CA294906890083119D /* MyAppsViewModel.swift in Sources */,
|
||||||
BF3BEFC124086A1E00DE7D55 /* RefreshAppOperation.swift in Sources */,
|
BF3BEFC124086A1E00DE7D55 /* RefreshAppOperation.swift in Sources */,
|
||||||
1F6284DB295254C80060AAD8 /* AppScreenshot.swift in Sources */,
|
|
||||||
BFE60740231AFD2A002B0E8E /* InsetGroupTableViewCell.swift in Sources */,
|
BFE60740231AFD2A002B0E8E /* InsetGroupTableViewCell.swift in Sources */,
|
||||||
BF0DCA662433BDF500E3A595 /* AnalyticsManager.swift in Sources */,
|
BF0DCA662433BDF500E3A595 /* AnalyticsManager.swift in Sources */,
|
||||||
BFCCB51A245E3401001853EA /* VerifyAppOperation.swift in Sources */,
|
BFCCB51A245E3401001853EA /* VerifyAppOperation.swift in Sources */,
|
||||||
@@ -2936,6 +2934,7 @@
|
|||||||
isa = PBXVariantGroup;
|
isa = PBXVariantGroup;
|
||||||
children = (
|
children = (
|
||||||
1F07F551295455A300F7BE95 /* en */,
|
1F07F551295455A300F7BE95 /* en */,
|
||||||
|
DFEE02F82957998D00518C34 /* es-419 */,
|
||||||
);
|
);
|
||||||
name = Localizable.strings;
|
name = Localizable.strings;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -3411,6 +3410,7 @@
|
|||||||
baseConfigurationReference = B3C39607284F4C8400DA9E2F /* Build.xcconfig */;
|
baseConfigurationReference = B3C39607284F4C8400DA9E2F /* Build.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||||
@@ -3479,6 +3479,7 @@
|
|||||||
baseConfigurationReference = B3C39607284F4C8400DA9E2F /* Build.xcconfig */;
|
baseConfigurationReference = B3C39607284F4C8400DA9E2F /* Build.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||||
|
|||||||
@@ -10,6 +10,68 @@ import Foundation
|
|||||||
// swiftlint:disable explicit_type_interface function_parameter_count identifier_name line_length
|
// swiftlint:disable explicit_type_interface function_parameter_count identifier_name line_length
|
||||||
// swiftlint:disable nesting type_body_length type_name vertical_whitespace_opening_braces
|
// swiftlint:disable nesting type_body_length type_name vertical_whitespace_opening_braces
|
||||||
internal enum L10n {
|
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 {
|
internal enum BrowseView {
|
||||||
/// Search
|
/// Search
|
||||||
internal static let search = L10n.tr("Localizable", "BrowseView.search", fallback: "Search")
|
internal static let search = L10n.tr("Localizable", "BrowseView.search", fallback: "Search")
|
||||||
@@ -19,6 +81,11 @@ internal enum L10n {
|
|||||||
/// Sources
|
/// Sources
|
||||||
internal static let sources = L10n.tr("Localizable", "BrowseView.Actions.sources", fallback: "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 Section {
|
||||||
internal enum AllApps {
|
internal enum AllApps {
|
||||||
/// All Apps
|
/// 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 {
|
internal enum NewsView {
|
||||||
/// NewsView
|
/// NewsView
|
||||||
internal static let title = L10n.tr("Localizable", "NewsView.title", fallback: "News")
|
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 explicit_type_interface function_parameter_count identifier_name line_length
|
||||||
// swiftlint:enable nesting type_body_length type_name vertical_whitespace_opening_braces
|
// swiftlint:enable nesting type_body_length type_name vertical_whitespace_opening_braces
|
||||||
|
|||||||
@@ -19,3 +19,106 @@
|
|||||||
"BrowseView.Section.PromotedCategories.showAll" = "Show all";
|
"BrowseView.Section.PromotedCategories.showAll" = "Show all";
|
||||||
"BrowseView.Section.AllApps.title" = "All Apps";
|
"BrowseView.Section.AllApps.title" = "All Apps";
|
||||||
"BrowseView.Actions.sources" = "Sources";
|
"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";
|
||||||
|
|||||||
123
AltStore/Resources/es-419.lproj/Localizable.strings
Normal file
123
AltStore/Resources/es-419.lproj/Localizable.strings
Normal file
@@ -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";
|
||||||
@@ -114,7 +114,7 @@ struct AppDetailView: View {
|
|||||||
|
|
||||||
ExpandableText(text: storeApp.localizedDescription)
|
ExpandableText(text: storeApp.localizedDescription)
|
||||||
.lineLimit(6)
|
.lineLimit(6)
|
||||||
.expandButton(TextSet(text: "More...", font: .callout, color: .accentColor))
|
.expandButton(TextSet(text: L10n.AppDetailView.more, font: .callout, color: .accentColor))
|
||||||
.padding(.horizontal)
|
.padding(.horizontal)
|
||||||
|
|
||||||
currentVersionView
|
currentVersionView
|
||||||
@@ -158,11 +158,11 @@ struct AppDetailView: View {
|
|||||||
VStack(alignment: .leading, spacing: 8) {
|
VStack(alignment: .leading, spacing: 8) {
|
||||||
HStack(alignment: .bottom) {
|
HStack(alignment: .bottom) {
|
||||||
VStack(alignment: .leading) {
|
VStack(alignment: .leading) {
|
||||||
Text("What's New")
|
Text(L10n.AppDetailView.whatsNew)
|
||||||
.bold()
|
.bold()
|
||||||
.font(.title3)
|
.font(.title3)
|
||||||
|
|
||||||
Text("Version \(storeApp.version)")
|
Text("\(L10n.AppDetailView.version) \(storeApp.version)")
|
||||||
.font(.callout)
|
.font(.callout)
|
||||||
.foregroundColor(.secondary)
|
.foregroundColor(.secondary)
|
||||||
}
|
}
|
||||||
@@ -180,9 +180,9 @@ struct AppDetailView: View {
|
|||||||
if let versionDescription = storeApp.versionDescription {
|
if let versionDescription = storeApp.versionDescription {
|
||||||
ExpandableText(text: versionDescription)
|
ExpandableText(text: versionDescription)
|
||||||
.lineLimit(5)
|
.lineLimit(5)
|
||||||
.expandButton(TextSet(text: "More...", font: .callout, color: .accentColor))
|
.expandButton(TextSet(text: L10n.AppDetailView.more, font: .callout, color: .accentColor))
|
||||||
} else {
|
} else {
|
||||||
Text("No version information")
|
Text(L10n.AppDetailView.noVersionInformation)
|
||||||
.foregroundColor(.secondary)
|
.foregroundColor(.secondary)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -190,12 +190,12 @@ struct AppDetailView: View {
|
|||||||
|
|
||||||
var permissionsView: some View {
|
var permissionsView: some View {
|
||||||
VStack(alignment: .leading, spacing: 8) {
|
VStack(alignment: .leading, spacing: 8) {
|
||||||
Text("Permissions")
|
Text(L10n.AppDetailView.permissions)
|
||||||
.bold()
|
.bold()
|
||||||
.font(.title3)
|
.font(.title3)
|
||||||
|
|
||||||
if storeApp.permissions.isEmpty {
|
if storeApp.permissions.isEmpty {
|
||||||
Text("The app requires no permissions.")
|
Text(L10n.AppDetailView.noPermissions)
|
||||||
.font(.callout)
|
.font(.callout)
|
||||||
.foregroundColor(.secondary)
|
.foregroundColor(.secondary)
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ struct AppPermissionGridItemView: View {
|
|||||||
.foregroundColor(.primary)
|
.foregroundColor(.primary)
|
||||||
}
|
}
|
||||||
.alert(isPresented: self.$isPopoverPresented) {
|
.alert(isPresented: self.$isPopoverPresented) {
|
||||||
Alert(title: Text("Usage Description"), message: Text(permission.usageDescription))
|
Alert(title: Text(L10n.AppPermissionGrid.usageDescription), message: Text(permission.usageDescription))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,15 +23,15 @@ struct AddSourceView: View {
|
|||||||
.autocapitalization(.none)
|
.autocapitalization(.none)
|
||||||
.autocorrectionDisabled()
|
.autocorrectionDisabled()
|
||||||
} header: {
|
} header: {
|
||||||
Text("Source URL")
|
Text(L10n.AddSourceView.sourceURL)
|
||||||
} footer: {
|
} footer: {
|
||||||
VStack(alignment: .leading, spacing: 4) {
|
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) {
|
HStack(alignment: .top) {
|
||||||
Image(systemSymbol: .exclamationmarkTriangleFill)
|
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 {
|
SwiftUI.Button {
|
||||||
self.continueHandler(self.sourceUrlText)
|
self.continueHandler(self.sourceUrlText)
|
||||||
} label: {
|
} label: {
|
||||||
Text("Continue")
|
Text(L10n.AddSourceView.continue)
|
||||||
}
|
}
|
||||||
.disabled(URL(string: self.sourceUrlText)?.host == nil)
|
.disabled(URL(string: self.sourceUrlText)?.host == nil)
|
||||||
}
|
}
|
||||||
.listStyle(InsetGroupedListStyle())
|
.listStyle(InsetGroupedListStyle())
|
||||||
.navigationTitle("Add Source")
|
.navigationTitle(L10n.AddSourceView.title)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -131,7 +131,7 @@ struct PromotedCategoryView: View {
|
|||||||
|
|
||||||
HStack {
|
HStack {
|
||||||
Image(systemSymbol: .dpadRightFill)
|
Image(systemSymbol: .dpadRightFill)
|
||||||
Text("Games &\nEmulators")
|
Text(L10n.BrowseView.Categories.gamesAndEmulators)
|
||||||
.multilineTextAlignment(.leading)
|
.multilineTextAlignment(.leading)
|
||||||
}
|
}
|
||||||
.foregroundColor(.accentColor)
|
.foregroundColor(.accentColor)
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ struct ConfirmAddSourceView: View {
|
|||||||
List {
|
List {
|
||||||
Section {
|
Section {
|
||||||
VStack(alignment: .leading) {
|
VStack(alignment: .leading) {
|
||||||
Text("\(source.apps.count) Apps")
|
Text("\(source.apps.count) \(L10n.ConfirmAddSourceView.apps)")
|
||||||
|
|
||||||
Text(source.apps.map { $0.name }.joined(separator: ", "))
|
Text(source.apps.map { $0.name }.joined(separator: ", "))
|
||||||
.font(.callout)
|
.font(.callout)
|
||||||
@@ -34,28 +34,28 @@ struct ConfirmAddSourceView: View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
VStack() {
|
VStack() {
|
||||||
Text("\(source.newsItems.count) News Items")
|
Text("\(source.newsItems.count) \(L10n.ConfirmAddSourceView.newsItems)")
|
||||||
}
|
}
|
||||||
} header: {
|
} header: {
|
||||||
Text("Source Contents")
|
Text(L10n.ConfirmAddSourceView.sourceContents)
|
||||||
}
|
}
|
||||||
|
|
||||||
Section {
|
Section {
|
||||||
VStack(alignment: .leading) {
|
VStack(alignment: .leading) {
|
||||||
Text("Source Identifier")
|
Text(L10n.ConfirmAddSourceView.sourceIdentifier)
|
||||||
Text(source.identifier)
|
Text(source.identifier)
|
||||||
.font(.callout)
|
.font(.callout)
|
||||||
.foregroundColor(.secondary)
|
.foregroundColor(.secondary)
|
||||||
}
|
}
|
||||||
|
|
||||||
VStack(alignment: .leading) {
|
VStack(alignment: .leading) {
|
||||||
Text("Source URL")
|
Text(L10n.ConfirmAddSourceView.sourceURL)
|
||||||
Text(source.sourceURL.absoluteString)
|
Text(source.sourceURL.absoluteString)
|
||||||
.font(.callout)
|
.font(.callout)
|
||||||
.foregroundColor(.secondary)
|
.foregroundColor(.secondary)
|
||||||
}
|
}
|
||||||
} header: {
|
} header: {
|
||||||
Text("Source Info")
|
Text(L10n.ConfirmAddSourceView.sourceInfo)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.listStyle(InsetGroupedListStyle())
|
.listStyle(InsetGroupedListStyle())
|
||||||
@@ -65,7 +65,7 @@ struct ConfirmAddSourceView: View {
|
|||||||
SwiftUI.Button {
|
SwiftUI.Button {
|
||||||
confirmationHandler(fetchedSource)
|
confirmationHandler(fetchedSource)
|
||||||
} label: {
|
} label: {
|
||||||
Label("Add Source", systemSymbol: .plus)
|
Label(L10n.ConfirmAddSourceView.addSource, systemSymbol: .plus)
|
||||||
}
|
}
|
||||||
.buttonStyle(FilledButtonStyle())
|
.buttonStyle(FilledButtonStyle())
|
||||||
.padding()
|
.padding()
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ struct SourcesView: View {
|
|||||||
LazyVStack(alignment: .leading, spacing: 24) {
|
LazyVStack(alignment: .leading, spacing: 24) {
|
||||||
// Installed Sources
|
// Installed Sources
|
||||||
LazyVStack(alignment: .leading, spacing: 12) {
|
LazyVStack(alignment: .leading, spacing: 12) {
|
||||||
Text("Sources control what apps are available to download through SideStore.")
|
Text(L10n.SourcesView.sourcesDescription)
|
||||||
.font(.callout)
|
.font(.callout)
|
||||||
.foregroundColor(.secondary)
|
.foregroundColor(.secondary)
|
||||||
|
|
||||||
@@ -58,7 +58,7 @@ struct SourcesView: View {
|
|||||||
SwiftUI.Button {
|
SwiftUI.Button {
|
||||||
self.removeSource(source)
|
self.removeSource(source)
|
||||||
} label: {
|
} label: {
|
||||||
Label("Remove", systemSymbol: .trash)
|
Label(L10n.SourcesView.remove, systemSymbol: .trash)
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
@@ -67,11 +67,11 @@ struct SourcesView: View {
|
|||||||
|
|
||||||
// Trusted Sources
|
// Trusted Sources
|
||||||
LazyVStack(alignment: .leading) {
|
LazyVStack(alignment: .leading) {
|
||||||
Text("Trusted Sources")
|
Text(L10n.SourcesView.trustedSources)
|
||||||
.font(.title3)
|
.font(.title3)
|
||||||
.bold()
|
.bold()
|
||||||
|
|
||||||
Text("SideStore has reviewed these sources to make sure they meet our safety standards.")
|
Text(L10n.SourcesView.reviewedText)
|
||||||
.font(.callout)
|
.font(.callout)
|
||||||
.foregroundColor(.secondary)
|
.foregroundColor(.secondary)
|
||||||
|
|
||||||
@@ -80,7 +80,7 @@ struct SourcesView: View {
|
|||||||
}
|
}
|
||||||
.padding()
|
.padding()
|
||||||
}
|
}
|
||||||
.navigationTitle("Sources")
|
.navigationTitle(L10n.SourcesView.sources)
|
||||||
.toolbar {
|
.toolbar {
|
||||||
ToolbarItem(placement: .navigationBarLeading) {
|
ToolbarItem(placement: .navigationBarLeading) {
|
||||||
SwiftUI.Button {
|
SwiftUI.Button {
|
||||||
@@ -107,7 +107,7 @@ struct SourcesView: View {
|
|||||||
|
|
||||||
ToolbarItem(placement: .navigationBarTrailing) {
|
ToolbarItem(placement: .navigationBarTrailing) {
|
||||||
SwiftUI.Button(action: self.dismiss) {
|
SwiftUI.Button(action: self.dismiss) {
|
||||||
Text("Done").bold()
|
Text(L10n.SourcesView.done).bold()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,18 +20,18 @@ enum AppAction: Int, CaseIterable {
|
|||||||
|
|
||||||
var title: String {
|
var title: String {
|
||||||
switch self {
|
switch self {
|
||||||
case .install: return "Install"
|
case .install: return L10n.AppAction.install
|
||||||
case .open: return "Open"
|
case .open: return L10n.AppAction.open
|
||||||
case .refresh: return "Refresh"
|
case .refresh: return L10n.AppAction.refresh
|
||||||
case .activate: return "Activate"
|
case .activate: return L10n.AppAction.activate
|
||||||
case .deactivate: return "Deactivate"
|
case .deactivate: return L10n.AppAction.deactivate
|
||||||
case .remove: return "Remove"
|
case .remove: return L10n.AppAction.remove
|
||||||
case .enableJIT: return "Enable JIT"
|
case .enableJIT: return L10n.AppAction.enableJIT
|
||||||
case .backup: return "Back Up"
|
case .backup: return L10n.AppAction.backup
|
||||||
case .exportBackup: return "Export Backup"
|
case .exportBackup: return L10n.AppAction.exportBackup
|
||||||
case .restoreBackup: return "Restore Backup"
|
case .restoreBackup: return L10n.AppAction.restoreBackup
|
||||||
case .chooseCustomIcon: return "Change Icon"
|
case .chooseCustomIcon: return L10n.AppAction.chooseCustomIcon
|
||||||
case .resetCustomIcon: return "Reset Icon"
|
case .resetCustomIcon: return L10n.AppAction.resetIcon
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ struct MyAppsView: View {
|
|||||||
LazyVStack(spacing: 16) {
|
LazyVStack(spacing: 16) {
|
||||||
if let progress = SideloadingManager.shared.progress {
|
if let progress = SideloadingManager.shared.progress {
|
||||||
VStack {
|
VStack {
|
||||||
Text("Sideloading in progress...")
|
Text(L10n.MyAppsView.sideloading)
|
||||||
.padding()
|
.padding()
|
||||||
|
|
||||||
ProgressView(progress)
|
ProgressView(progress)
|
||||||
@@ -84,14 +84,14 @@ struct MyAppsView: View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
HStack {
|
HStack {
|
||||||
Text("Active")
|
Text(L10n.MyAppsView.active)
|
||||||
.font(.title2)
|
.font(.title2)
|
||||||
.bold()
|
.bold()
|
||||||
Spacer()
|
Spacer()
|
||||||
SwiftUI.Button {
|
SwiftUI.Button {
|
||||||
|
|
||||||
} label: {
|
} label: {
|
||||||
Text("Refresh All")
|
Text(L10n.MyAppsView.refreshAll)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,14 +111,14 @@ struct MyAppsView: View {
|
|||||||
|
|
||||||
VStack {
|
VStack {
|
||||||
if DatabaseManager.shared.activeTeam()?.type == .free {
|
if DatabaseManager.shared.activeTeam()?.type == .free {
|
||||||
Text("\(remainingAppIDs) App IDs Remaining")
|
Text("\(remainingAppIDs) \(L10n.MyAppsView.appIDsRemaining)")
|
||||||
.foregroundColor(.secondary)
|
.foregroundColor(.secondary)
|
||||||
}
|
}
|
||||||
|
|
||||||
SwiftUI.Button {
|
SwiftUI.Button {
|
||||||
self.isShowingAppIDsView = true
|
self.isShowingAppIDsView = true
|
||||||
} label: {
|
} label: {
|
||||||
Text("View App IDs")
|
Text(L10n.MyAppsView.viewAppIDs)
|
||||||
}
|
}
|
||||||
.sheet(isPresented: self.$isShowingAppIDsView) {
|
.sheet(isPresented: self.$isShowingAppIDsView) {
|
||||||
NavigationView {
|
NavigationView {
|
||||||
@@ -130,7 +130,7 @@ struct MyAppsView: View {
|
|||||||
.padding(.horizontal)
|
.padding(.horizontal)
|
||||||
}
|
}
|
||||||
.background(Color(UIColor.systemGroupedBackground).ignoresSafeArea())
|
.background(Color(UIColor.systemGroupedBackground).ignoresSafeArea())
|
||||||
.navigationTitle("My Apps")
|
.navigationTitle(L10n.MyAppsView.myApps)
|
||||||
.toolbar {
|
.toolbar {
|
||||||
ToolbarItem(placement: .navigationBarLeading) {
|
ToolbarItem(placement: .navigationBarLeading) {
|
||||||
SwiftUI.Button {
|
SwiftUI.Button {
|
||||||
@@ -239,7 +239,7 @@ extension MyAppsView {
|
|||||||
NotificationManager.shared.reportError(error: failure.value)
|
NotificationManager.shared.reportError(error: failure.value)
|
||||||
} else {
|
} else {
|
||||||
// TODO: Localize
|
// 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 error = failures.first?.value as NSError?
|
||||||
let message = error?.localizedFailure ?? error?.localizedFailureReason ?? error?.localizedDescription
|
let message = error?.localizedFailure ?? error?.localizedFailureReason ?? error?.localizedDescription
|
||||||
|
|||||||
@@ -90,10 +90,10 @@ extension RootView {
|
|||||||
|
|
||||||
var displayName: String {
|
var displayName: String {
|
||||||
switch self {
|
switch self {
|
||||||
case .news: return "News"
|
case .news: return L10n.RootView.news
|
||||||
case .browse: return "Browse"
|
case .browse: return L10n.RootView.browse
|
||||||
case .myApps: return "My Apps"
|
case .myApps: return L10n.RootView.myApps
|
||||||
case .settings: return "Settings"
|
case .settings: return L10n.RootView.settings
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -30,16 +30,16 @@ struct ConnectAppleIDView: View {
|
|||||||
var body: some View {
|
var body: some View {
|
||||||
ScrollView {
|
ScrollView {
|
||||||
VStack(alignment: .leading, spacing: 32) {
|
VStack(alignment: .leading, spacing: 32) {
|
||||||
Text("Sign in with your Apple ID to get started.")
|
Text(L10n.ConnectAppleIDView.startWithSignIn)
|
||||||
|
|
||||||
VStack(spacing: 16) {
|
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) {
|
SwiftUI.Button(action: signIn) {
|
||||||
Text("Sign in")
|
Text(L10n.ConnectAppleIDView.signIn)
|
||||||
.bold()
|
.bold()
|
||||||
}
|
}
|
||||||
.buttonStyle(FilledButtonStyle(isLoading: isLoading))
|
.buttonStyle(FilledButtonStyle(isLoading: isLoading))
|
||||||
@@ -48,10 +48,10 @@ struct ConnectAppleIDView: View {
|
|||||||
Spacer()
|
Spacer()
|
||||||
|
|
||||||
VStack(alignment: .leading) {
|
VStack(alignment: .leading) {
|
||||||
Text("Why do we need this?")
|
Text(L10n.ConnectAppleIDView.whyDoWeNeedThis)
|
||||||
.bold()
|
.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()
|
.padding()
|
||||||
.background(
|
.background(
|
||||||
@@ -62,11 +62,11 @@ struct ConnectAppleIDView: View {
|
|||||||
.padding(.horizontal)
|
.padding(.horizontal)
|
||||||
}
|
}
|
||||||
.frame(maxWidth: .infinity)
|
.frame(maxWidth: .infinity)
|
||||||
.navigationTitle("Connect your Apple ID")
|
.navigationTitle(L10n.ConnectAppleIDView.connectYourAppleID)
|
||||||
.toolbar {
|
.toolbar {
|
||||||
ToolbarItem(placement: .navigationBarTrailing) {
|
ToolbarItem(placement: .navigationBarTrailing) {
|
||||||
SwiftUI.Button(action: self.cancel) {
|
SwiftUI.Button(action: self.cancel) {
|
||||||
Text("Cancel")
|
Text(L10n.ConnectAppleIDView.cancel)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -87,7 +87,7 @@ struct ConnectAppleIDView: View {
|
|||||||
break
|
break
|
||||||
|
|
||||||
case .failure(let error as NSError):
|
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)
|
print(error)
|
||||||
|
|
||||||
case .success((let account, let session)):
|
case .success((let account, let session)):
|
||||||
|
|||||||
@@ -36,21 +36,21 @@ struct SettingsView: View {
|
|||||||
|
|
||||||
if let connectedAppleID = connectedTeams.first {
|
if let connectedAppleID = connectedTeams.first {
|
||||||
HStack {
|
HStack {
|
||||||
Text("Name")
|
Text(L10n.SettingsView.ConnectedAppleID.name)
|
||||||
.foregroundColor(.secondary)
|
.foregroundColor(.secondary)
|
||||||
Spacer()
|
Spacer()
|
||||||
Text(connectedAppleID.name)
|
Text(connectedAppleID.name)
|
||||||
}
|
}
|
||||||
|
|
||||||
HStack {
|
HStack {
|
||||||
Text("E-Mail")
|
Text(L10n.SettingsView.ConnectedAppleID.eMail)
|
||||||
.foregroundColor(.secondary)
|
.foregroundColor(.secondary)
|
||||||
Spacer()
|
Spacer()
|
||||||
Text(connectedAppleID.account.appleID)
|
Text(connectedAppleID.account.appleID)
|
||||||
}
|
}
|
||||||
|
|
||||||
HStack {
|
HStack {
|
||||||
Text("Type")
|
Text(L10n.SettingsView.ConnectedAppleID.type)
|
||||||
.foregroundColor(.secondary)
|
.foregroundColor(.secondary)
|
||||||
Spacer()
|
Spacer()
|
||||||
Text(connectedAppleID.type.localizedDescription)
|
Text(connectedAppleID.type.localizedDescription)
|
||||||
@@ -59,18 +59,18 @@ struct SettingsView: View {
|
|||||||
SwiftUI.Button {
|
SwiftUI.Button {
|
||||||
self.connectAppleID()
|
self.connectAppleID()
|
||||||
} label: {
|
} label: {
|
||||||
Text("Connect your Apple ID")
|
Text(L10n.SettingsView.connectAppleID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} header: {
|
} header: {
|
||||||
if !connectedTeams.isEmpty {
|
if !connectedTeams.isEmpty {
|
||||||
HStack {
|
HStack {
|
||||||
Text("Connected Apple ID")
|
Text(L10n.SettingsView.ConnectedAppleID.text)
|
||||||
Spacer()
|
Spacer()
|
||||||
SwiftUI.Button {
|
SwiftUI.Button {
|
||||||
self.disconnectAppleID()
|
self.disconnectAppleID()
|
||||||
} label: {
|
} label: {
|
||||||
Text("Sign Out")
|
Text(L10n.SettingsView.ConnectedAppleID.signOut)
|
||||||
.font(.callout)
|
.font(.callout)
|
||||||
.bold()
|
.bold()
|
||||||
}
|
}
|
||||||
@@ -78,21 +78,21 @@ struct SettingsView: View {
|
|||||||
}
|
}
|
||||||
} footer: {
|
} footer: {
|
||||||
VStack(spacing: 4) {
|
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 {
|
Section {
|
||||||
Toggle(isOn: self.$isBackgroundRefreshEnabled, label: {
|
Toggle(isOn: self.$isBackgroundRefreshEnabled, label: {
|
||||||
Text("Background Refresh")
|
Text(L10n.SettingsView.backgroundRefresh)
|
||||||
})
|
})
|
||||||
|
|
||||||
SwiftUI.Button {
|
SwiftUI.Button {
|
||||||
self.isShowingAddShortcutView = true
|
self.isShowingAddShortcutView = true
|
||||||
} label: {
|
} label: {
|
||||||
Text("Add to Siri...")
|
Text(L10n.SettingsView.addToSiri)
|
||||||
}
|
}
|
||||||
.sheet(isPresented: self.$isShowingAddShortcutView) {
|
.sheet(isPresented: self.$isShowingAddShortcutView) {
|
||||||
if let shortcut = INShortcut(intent: INInteraction.refreshAllApps().intent) {
|
if let shortcut = INShortcut(intent: INInteraction.refreshAllApps().intent) {
|
||||||
@@ -100,22 +100,22 @@ struct SettingsView: View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} header: {
|
} header: {
|
||||||
Text("Refreshing Apps")
|
Text(L10n.SettingsView.refreshingApps)
|
||||||
} footer: {
|
} 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 {
|
Section {
|
||||||
SwiftUI.Button(action: switchToUIKit) {
|
SwiftUI.Button(action: switchToUIKit) {
|
||||||
Text("Switch to UIKit")
|
Text(L10n.SettingsView.switchToUIKit)
|
||||||
}
|
}
|
||||||
|
|
||||||
SwiftUI.Button(action: resetImageCache) {
|
SwiftUI.Button(action: resetImageCache) {
|
||||||
Text("Reset Image Cache")
|
Text(L10n.SettingsView.resetImageCache)
|
||||||
}
|
}
|
||||||
} header: {
|
} header: {
|
||||||
Text("Debug")
|
Text(L10n.SettingsView.debug)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -124,7 +124,7 @@ struct SettingsView: View {
|
|||||||
SafariView(url: URL(string: "https://fabian-thies.de")!)
|
SafariView(url: URL(string: "https://fabian-thies.de")!)
|
||||||
} label: {
|
} label: {
|
||||||
HStack {
|
HStack {
|
||||||
Text("SwiftUI Redesign")
|
Text(L10n.SettingsView.swiftUIRedesign)
|
||||||
.foregroundColor(.secondary)
|
.foregroundColor(.secondary)
|
||||||
Spacer()
|
Spacer()
|
||||||
Text("fabianthdev")
|
Text("fabianthdev")
|
||||||
@@ -132,7 +132,7 @@ struct SettingsView: View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
} header: {
|
} header: {
|
||||||
Text("Credits")
|
Text(L10n.SettingsView.credits)
|
||||||
}
|
}
|
||||||
|
|
||||||
Section {
|
Section {
|
||||||
@@ -144,7 +144,7 @@ struct SettingsView: View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
.listStyle(InsetGroupedListStyle())
|
.listStyle(InsetGroupedListStyle())
|
||||||
.navigationTitle("Settings")
|
.navigationTitle(L10n.SettingsView.title)
|
||||||
.toolbar {
|
.toolbar {
|
||||||
ToolbarItem(placement: .navigationBarTrailing) {
|
ToolbarItem(placement: .navigationBarTrailing) {
|
||||||
SwiftUI.Button {
|
SwiftUI.Button {
|
||||||
|
|||||||
Reference in New Issue
Block a user