From a71a51d9d7a56c864c7cf2c217d2505134be8456 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1rady=20Mil=C3=A1n?= <61704770+MilanVarady@users.noreply.github.com> Date: Wed, 8 Jan 2025 19:18:13 +0100 Subject: [PATCH] Update localization --- Applite/AppliteApp.swift | 2 +- Applite/Extensions/BundleExtension.swift | 6 - .../CaskManager+BrewFunctions.swift | 2 +- .../Cask Manager/CaskManager+LoadData.swift | 9 +- .../Cask Manager/CaskManager.swift | 3 +- .../Model/Categories/CategoryViewModel.swift | 10 +- Applite/Utilities/Other/BrewPaths.swift | 4 +- Applite/Utilities/Other/UninstallSelf.swift | 8 +- .../App View/AppView+ActionsView.swift | 2 +- .../App View/AppView+OpenAndManageView.swift | 2 +- Applite/Views/App Views/AppliteAppView.swift | 4 +- Applite/Views/Commands.swift | 4 +- ...wPathSelectorView+GetPathDescription.swift | 4 +- .../BrewPathSelectorView+PathOption.swift | 2 +- .../ContentView+SidebarViews.swift | 2 +- .../Views/Detail Views/ActiveTasksView.swift | 2 +- .../AppMigrationView+ExportView.swift | 4 +- .../AppMigrationView+ImportView.swift | 7 +- .../App Migration/AppMigrationView.swift | 7 +- .../BrewManagementView+ActionsView.swift | 12 +- .../BrewManagementView+InfoView.swift | 2 +- .../Brew Management/BrewManagementView.swift | 7 +- .../DiscoverSectionView+CategoryHeader.swift | 2 +- .../Detail Views/Discover/DiscoverView.swift | 2 +- .../DownloadView+NoSearchResults.swift | 5 +- .../DownloadView+SortingOptions.swift | 4 +- .../Detail Views/Download/DownloadView.swift | 2 +- .../Update/UpdateView+ToolbarItems.swift | 5 +- .../Update/UpdateView+UpdateAllButton.swift | 2 +- .../Update/UpdateView+UpdateUnavailable.swift | 2 +- .../Settings/SettingsView+BrewPath.swift | 21 +- .../SettingsView+GeneralSettings.swift | 6 +- .../Settings/SettingsView+ProxySettings.swift | 9 +- .../Settings/SettingsView+Uninstaller.swift | 2 +- .../SettingsView+UpdateSettings.swift | 2 +- Applite/Views/Settings/SettingsView.swift | 11 + Applite/Views/Setup/SetupView+AllSet.swift | 4 +- .../Setup/SetupView+AppliteBrewInfoView.swift | 9 +- .../Setup/SetupView+AppliteBrewInstall.swift | 16 +- .../SetupView+BrewPathDetectedView.swift | 7 +- .../Setup/SetupView+BrewPathSelection.swift | 6 +- Applite/Views/Setup/SetupView+Welcome.swift | 2 +- Applite/Views/UninstallSelfView.swift | 17 +- Localizable.xcstrings | 627 +++++++++++++++--- 44 files changed, 667 insertions(+), 201 deletions(-) diff --git a/Applite/AppliteApp.swift b/Applite/AppliteApp.swift index cca90db..8378ca0 100755 --- a/Applite/AppliteApp.swift +++ b/Applite/AppliteApp.swift @@ -64,7 +64,7 @@ struct AppliteApp: App { } .windowResizability(.contentSize) - Window("Uninstall \(Bundle.main.appName)", id: "uninstall-self") { + Window("Uninstall Applite", id: "uninstall-self") { UninstallSelfView() .padding() .preferredColorScheme(selectedColorScheme) diff --git a/Applite/Extensions/BundleExtension.swift b/Applite/Extensions/BundleExtension.swift index e9ea3cc..390908c 100755 --- a/Applite/Extensions/BundleExtension.swift +++ b/Applite/Extensions/BundleExtension.swift @@ -8,12 +8,6 @@ import Foundation extension Bundle { - var appName: String { - object(forInfoDictionaryKey: "CFBundleDisplayName") as? String ?? - object(forInfoDictionaryKey: "CFBundleName") as? String ?? - "" - } - var version: String { return infoDictionary?["CFBundleShortVersionString"] as? String ?? "N/A" } diff --git a/Applite/Model/Cask Models/Cask Manager/CaskManager+BrewFunctions.swift b/Applite/Model/Cask Models/Cask Manager/CaskManager+BrewFunctions.swift index c8a05a9..4543d01 100644 --- a/Applite/Model/Cask Models/Cask Manager/CaskManager+BrewFunctions.swift +++ b/Applite/Model/Cask Models/Cask Manager/CaskManager+BrewFunctions.swift @@ -50,7 +50,7 @@ extension CaskManager { let alertMessage = switch completeOutput { // Already installed case _ where completeOutput.contains("It seems there is already an App"): - String(localized: "\(cask.info.name) is already installed. If you want to add it to \(Bundle.main.appName) click more options (chevron icon) and press Force Install.") + String(localized: "\(cask.info.name) is already installed. If you want to add it to Applite click more options (chevron icon) and press Force Install.") // Network error case _ where completeOutput.contains("Could not resolve host"): String(localized: "Couldn't download app. No internet connection, or host is unreachable.") diff --git a/Applite/Model/Cask Models/Cask Manager/CaskManager+LoadData.swift b/Applite/Model/Cask Models/Cask Manager/CaskManager+LoadData.swift index 46cc0fd..0a22a74 100644 --- a/Applite/Model/Cask Models/Cask Manager/CaskManager+LoadData.swift +++ b/Applite/Model/Cask Models/Cask Manager/CaskManager+LoadData.swift @@ -6,18 +6,19 @@ // import Foundation +import SwiftUI extension CaskManager { // URLs private static let cacheDirectory = URL.cachesDirectory - .appendingPathComponent(Bundle.main.appName, conformingTo: .directory) + .appendingPathComponent("Applite", conformingTo: .directory) private static let caskCacheURL = URL.cachesDirectory - .appendingPathComponent(Bundle.main.appName, conformingTo: .directory) + .appendingPathComponent("Applite", conformingTo: .directory) .appendingPathComponent("cask.json", conformingTo: .json) private static let analyicsCacheURL = URL.cachesDirectory - .appendingPathComponent(Bundle.main.appName, conformingTo: .directory) + .appendingPathComponent("Applite", conformingTo: .directory) .appendingPathComponent("caskAnalytics.json", conformingTo: .json) /// Gathers all necessary information and combines them to a list of ``Cask`` objects @@ -256,7 +257,7 @@ extension CaskManager { categoryViewModels.append( CategoryViewModel( - name: category.id, + name: LocalizedStringKey(category.id), sfSymbol: category.sfSymbol, casks: casks, casksCoupled: chunkedCasks diff --git a/Applite/Model/Cask Models/Cask Manager/CaskManager.swift b/Applite/Model/Cask Models/Cask Manager/CaskManager.swift index 5dee766..71af673 100755 --- a/Applite/Model/Cask Models/Cask Manager/CaskManager.swift +++ b/Applite/Model/Cask Models/Cask Manager/CaskManager.swift @@ -7,6 +7,7 @@ import Foundation import OSLog +import SwiftUI typealias CaskId = String typealias BrewAnalyticsDictionary = [CaskId: Int] @@ -39,7 +40,7 @@ final class CaskManager: ObservableObject { do { let categories = try loadCategoryJSON() let categoryViewModels = categories.map { - CategoryViewModel(name: $0.id, sfSymbol: $0.sfSymbol, casks: [], casksCoupled: []) + CategoryViewModel(name: LocalizedStringKey($0.id), sfSymbol: $0.sfSymbol, casks: [], casksCoupled: []) } self.categories = categoryViewModels diff --git a/Applite/Model/Categories/CategoryViewModel.swift b/Applite/Model/Categories/CategoryViewModel.swift index df3fef1..b6cde94 100644 --- a/Applite/Model/Categories/CategoryViewModel.swift +++ b/Applite/Model/Categories/CategoryViewModel.swift @@ -5,13 +5,17 @@ // Created by Milán Várady on 2025.01.01. // -import Foundation +import SwiftUI struct CategoryViewModel: Identifiable, Equatable, Hashable { - let name: String + let name: LocalizedStringKey let sfSymbol: String let casks: [Cask] let casksCoupled: [[Cask]] - var id: String { name } + var id: String { sfSymbol } + + func hash(into hasher: inout Hasher) { + hasher.combine(sfSymbol) + } } diff --git a/Applite/Utilities/Other/BrewPaths.swift b/Applite/Utilities/Other/BrewPaths.swift index d84565b..24737a5 100755 --- a/Applite/Utilities/Other/BrewPaths.swift +++ b/Applite/Utilities/Other/BrewPaths.swift @@ -68,12 +68,12 @@ struct BrewPaths { /// Brew directory when installing brew separately into Application Support static let appBrewDirectory = URL.applicationSupportDirectory - .appendingPathComponent(Bundle.main.appName, isDirectory: true) + .appendingPathComponent("Applite", isDirectory: true) .appendingPathComponent("homebrew", isDirectory: true) /// Brew exectuable path when installing brew separately into Application Support static let appBrewExetutable = URL.applicationSupportDirectory - .appendingPathComponent(Bundle.main.appName, isDirectory: true) + .appendingPathComponent("Applite", isDirectory: true) .appendingPathComponent("homebrew", isDirectory: true) .appendingPathComponent("bin", isDirectory: true) .appendingPathComponent("brew") diff --git a/Applite/Utilities/Other/UninstallSelf.swift b/Applite/Utilities/Other/UninstallSelf.swift index 5b63737..9930e44 100755 --- a/Applite/Utilities/Other/UninstallSelf.swift +++ b/Applite/Utilities/Other/UninstallSelf.swift @@ -27,12 +27,12 @@ func uninstallSelf(deleteBrewCache: Bool) async throws { // Delete related files and cache let command = """ - rm -r "$HOME/Library/Application Support/\(Bundle.main.appName)"; + rm -r "$HOME/Library/Application Support/Applite"; rm -r "$HOME/Library/Application Support/\(Bundle.main.bundleIdentifier!)"; rm -r $HOME/Library/Containers/\(Bundle.main.bundleIdentifier!); - rm -r $HOME/Library/Caches/\(Bundle.main.appName); + rm -r $HOME/Library/Caches/Applite; rm -r $HOME/Library/Caches/\(Bundle.main.bundleIdentifier!); - rm -r $HOME/Library/\(Bundle.main.appName); + rm -r $HOME/Library/Applite; rm -r $HOME/Library/Preferences/*\(Bundle.main.bundleIdentifier!)*.plist; rm -r "$HOME/Library/Saved Application State/\(Bundle.main.bundleIdentifier!).savedState"; rm -r $HOME/Library/SyncedPreferences/\(Bundle.main.bundleIdentifier!)*.plist; @@ -56,6 +56,6 @@ func uninstallSelf(deleteBrewCache: Bool) async throws { // Quit the app and remove it let process = Process() process.launchPath = "/bin/bash" - process.arguments = ["-c", "osascript -e 'tell application \"\(Bundle.main.appName)\" to quit' && sleep 2 && rm -rf \"\(Bundle.main.bundlePath)\" && defaults write \(Bundle.main.bundleIdentifier!) setupComplete 0"] + process.arguments = ["-c", "osascript -e 'tell application \"Applite\" to quit' && sleep 2 && rm -rf \"\(Bundle.main.bundlePath)\" && defaults write \(Bundle.main.bundleIdentifier!) setupComplete 0"] process.launch() } diff --git a/Applite/Views/App Views/App View/AppView+ActionsView.swift b/Applite/Views/App Views/App View/AppView+ActionsView.swift index 11cf305..a5dcd14 100644 --- a/Applite/Views/App Views/App View/AppView+ActionsView.swift +++ b/Applite/Views/App Views/App View/AppView+ActionsView.swift @@ -95,7 +95,7 @@ extension AppView { case .failed(let output): HStack { - Text("Error") + Text("Error", comment: "Cask action failed (e.g. installation failed)") .foregroundStyle(.red) Button { diff --git a/Applite/Views/App Views/App View/AppView+OpenAndManageView.swift b/Applite/Views/App Views/App View/AppView+OpenAndManageView.swift index 9c02756..4bb2d80 100644 --- a/Applite/Views/App Views/App View/AppView+OpenAndManageView.swift +++ b/Applite/Views/App Views/App View/AppView+OpenAndManageView.swift @@ -34,7 +34,7 @@ extension AppView { .font(.system(size: 14)) .buttonStyle(.bordered) .clipShape(Capsule()) - .alert("\(Bundle.main.appName) couldn't open \(cask.info.name)", isPresented: $showAppNotFoundAlert) {} + .alert("Applite couldn't open \(cask.info.name)", isPresented: $showAppNotFoundAlert) {} if deleteButton { UninstallButton(cask: cask) diff --git a/Applite/Views/App Views/AppliteAppView.swift b/Applite/Views/App Views/AppliteAppView.swift index 089b6b2..bd4efc2 100755 --- a/Applite/Views/App Views/AppliteAppView.swift +++ b/Applite/Views/App Views/AppliteAppView.swift @@ -26,10 +26,10 @@ struct AppliteAppView: View { // Name and description VStack(alignment: .leading) { - Text("Applite") + Text("Applite", comment: "Applite app card title") .font(.system(size: 16, weight: .bold)) - Text("This app") + Text("This app", comment: "Applite app card description") .foregroundColor(.secondary) } diff --git a/Applite/Views/Commands.swift b/Applite/Views/Commands.swift index dd961a9..123fa3e 100755 --- a/Applite/Views/Commands.swift +++ b/Applite/Views/Commands.swift @@ -17,7 +17,7 @@ struct CommandsMenu: Commands { SidebarCommands() CommandGroup(replacing: .appInfo) { - Button("About \(Bundle.main.appName)") { + Button("About Applite") { NSApplication.shared.orderFrontStandardAboutPanel( options: [ NSApplication.AboutPanelOptionKey.credits: NSAttributedString( @@ -41,7 +41,7 @@ struct CommandsMenu: Commands { } CheckForUpdatesView(updater: updaterController.updater) { - Text("Check for Updates...") + Text("Check for Updates...", comment: "Check for update menu bar item") } Divider() diff --git a/Applite/Views/Components/Brew Path Selector/BrewPathSelectorView+GetPathDescription.swift b/Applite/Views/Components/Brew Path Selector/BrewPathSelectorView+GetPathDescription.swift index d7afb00..a327069 100644 --- a/Applite/Views/Components/Brew Path Selector/BrewPathSelectorView+GetPathDescription.swift +++ b/Applite/Views/Components/Brew Path Selector/BrewPathSelectorView+GetPathDescription.swift @@ -8,10 +8,10 @@ import SwiftUI extension BrewPathSelectorView { - func getPathDescription(for option: BrewPaths.PathOption) -> String { + func getPathDescription(for option: BrewPaths.PathOption) -> LocalizedStringKey { switch option { case .appPath: - return "\(Bundle.main.appName)'s installation" + return "Applite's installation" case .defaultAppleSilicon: return "Apple Silicon Mac" diff --git a/Applite/Views/Components/Brew Path Selector/BrewPathSelectorView+PathOption.swift b/Applite/Views/Components/Brew Path Selector/BrewPathSelectorView+PathOption.swift index f76b8e5..a7b94b8 100644 --- a/Applite/Views/Components/Brew Path Selector/BrewPathSelectorView+PathOption.swift +++ b/Applite/Views/Components/Brew Path Selector/BrewPathSelectorView+PathOption.swift @@ -10,7 +10,7 @@ import SwiftUI extension BrewPathSelectorView { func pathOption(_ option: BrewPaths.PathOption, showPath: Bool = true) -> some View { HStack { - Text("\(getPathDescription(for: option))") + Text(getPathDescription(for: option)) if showPath { Text("(\(BrewPaths.getBrewExectuablePath(for: option, shellFriendly: false)))") diff --git a/Applite/Views/Content View/ContentView+SidebarViews.swift b/Applite/Views/Content View/ContentView+SidebarViews.swift index e2d5d23..912efb2 100644 --- a/Applite/Views/Content View/ContentView+SidebarViews.swift +++ b/Applite/Views/Content View/ContentView+SidebarViews.swift @@ -30,7 +30,7 @@ extension ContentView { Section("Categories") { ForEach(caskManager.categories) { category in - Label(LocalizedStringKey(category.name), systemImage: category.sfSymbol) + Label(category.name, systemImage: category.sfSymbol) .tag(SidebarItem.appCategory(category: category)) } } diff --git a/Applite/Views/Detail Views/ActiveTasksView.swift b/Applite/Views/Detail Views/ActiveTasksView.swift index 0cd9b28..71ca252 100644 --- a/Applite/Views/Detail Views/ActiveTasksView.swift +++ b/Applite/Views/Detail Views/ActiveTasksView.swift @@ -14,7 +14,7 @@ struct ActiveTasksView: View { ScrollView { VStack { if caskManager.activeTasks.isEmpty { - Text("No Active Tasks") + Text("No Active Tasks", comment: "No active tasks available message") .font(.title) } else { AppGridView(casks: caskManager.activeTasks.map { $0.cask }, appRole: .update) diff --git a/Applite/Views/Detail Views/App Migration/AppMigrationView+ExportView.swift b/Applite/Views/Detail Views/App Migration/AppMigrationView+ExportView.swift index bb86f38..807d526 100644 --- a/Applite/Views/Detail Views/App Migration/AppMigrationView+ExportView.swift +++ b/Applite/Views/Detail Views/App Migration/AppMigrationView+ExportView.swift @@ -19,7 +19,7 @@ extension AppMigrationView { var body: some View { VStack(alignment: .leading) { - Text("Export") + Text("Export", comment: "App migration export card title") .font(.appliteSmallTitle) HStack { @@ -45,7 +45,7 @@ extension AppMigrationView { } .padding(.bottom, 10) - Text("Export all apps currently installed by \(Bundle.main.appName) to a file.") + Text("Export all apps currently installed by Appname to a file.", comment: "App Migration export card description") Spacer() } diff --git a/Applite/Views/Detail Views/App Migration/AppMigrationView+ImportView.swift b/Applite/Views/Detail Views/App Migration/AppMigrationView+ImportView.swift index 271f449..0eb135f 100644 --- a/Applite/Views/Detail Views/App Migration/AppMigrationView+ImportView.swift +++ b/Applite/Views/Detail Views/App Migration/AppMigrationView+ImportView.swift @@ -20,7 +20,7 @@ extension AppMigrationView { var body: some View { VStack(alignment: .leading) { - Text("Import") + Text("Import", comment: "App Migration import card title") .font(.appliteSmallTitle) HStack { @@ -39,7 +39,10 @@ extension AppMigrationView { } .padding(.bottom, 10) - Text("**Tip:** You can also import apps from a Brewfile. However, only casks will be installed, other items like formulae and taps will be skipped.") + Text( + "**Tip:** You can also import apps from a Brewfile. However, only casks will be installed, other items like formulae and taps will be skipped.", + comment: "App Migration import card tip" + ) Spacer() } diff --git a/Applite/Views/Detail Views/App Migration/AppMigrationView.swift b/Applite/Views/Detail Views/App Migration/AppMigrationView.swift index 781097f..4b87285 100644 --- a/Applite/Views/Detail Views/App Migration/AppMigrationView.swift +++ b/Applite/Views/Detail Views/App Migration/AppMigrationView.swift @@ -35,11 +35,14 @@ struct AppMigrationView: View { var titleAndDescription: some View { VStack(alignment: .leading) { - Text("App Migration") + Text("App Migration", comment: "App Migration view title") .font(.appliteMediumTitle) .padding(.bottom, 2) - Text("Export all of your currently installed apps to a file. Import the file to another device to install them all. Useful when setting up a new Mac.") + Text( + "Export all of your currently installed apps to a file. Import the file to another device to install them all. Useful when setting up a new Mac.", + comment: "App migration view description" + ) } } } diff --git a/Applite/Views/Detail Views/Brew Management/BrewManagementView+ActionsView.swift b/Applite/Views/Detail Views/Brew Management/BrewManagementView+ActionsView.swift index d1abc9c..b3066c1 100644 --- a/Applite/Views/Detail Views/Brew Management/BrewManagementView+ActionsView.swift +++ b/Applite/Views/Detail Views/Brew Management/BrewManagementView+ActionsView.swift @@ -33,7 +33,7 @@ extension BrewManagementView { var body: some View { VStack(alignment: .leading) { - Text("Actions") + Text("Actions", comment: "Brew Management view action section title") .font(.appliteSmallTitle) HStack { @@ -52,8 +52,8 @@ extension BrewManagementView { paddig: cardPadding, actionSuccessful: $reinstallDone, remarks: [ - .init(title: "Note", color: .blue, remark: "This will (re)install \(Bundle.main.appName)'s Homebrew installation at: ~/Library/Application Support/\(Bundle.main.appName)/homebrew"), - .init(title: "Warning", color: .orange, remark: "After reinstalling, all currently installed apps will be unlinked from \(Bundle.main.appName). They won't be deleted, but you won't be able to update or uninstall them via \(Bundle.main.appName).") + .init(title: "Note", color: .blue, remark: "This will (re)install Applite's Homebrew installation at: `~/Library/Application Support/Applite/homebrew`"), + .init(title: "Warning", color: .orange, remark: "After reinstalling, all currently installed apps will be unlinked from Applite. They won't be deleted, but you won't be able to update or uninstall them via Applite.") ] ) { reinstallButton @@ -65,7 +65,7 @@ extension BrewManagementView { // Progress indicator if modifyingBrew { HStack { - Text("In progress...") + Text("In progress...", comment: "Brew Management view progress indicator") .bold() SmallProgressView() @@ -189,9 +189,9 @@ extension BrewManagementView { Button("Cancel", role: .cancel) { } } message: { if isAppBrewInstalled { - Text("All currently installed apps will be unlinked from \(Bundle.main.appName).") + Text("All currently installed apps will be unlinked from Applite.", comment: "Brew reinstallation alert warning") } else { - Text("A new Homebrew installation will be installed into ~/Library/Application Support/\(Bundle.main.appName)") + Text("A new Homebrew installation will be installed into `~/Library/Application Support/Applite`", comment: "Brew installation alert notice") } } .alert("Reinstall failed", isPresented: $reinstallFailed, actions: { diff --git a/Applite/Views/Detail Views/Brew Management/BrewManagementView+InfoView.swift b/Applite/Views/Detail Views/Brew Management/BrewManagementView+InfoView.swift index 352c013..47b53c4 100644 --- a/Applite/Views/Detail Views/Brew Management/BrewManagementView+InfoView.swift +++ b/Applite/Views/Detail Views/Brew Management/BrewManagementView+InfoView.swift @@ -19,7 +19,7 @@ extension BrewManagementView { var body: some View { VStack(alignment: .leading) { - Text("Info") + Text("Info", comment: "Brew Management view info section title") .font(.appliteSmallTitle) HStack { diff --git a/Applite/Views/Detail Views/Brew Management/BrewManagementView.swift b/Applite/Views/Detail Views/Brew Management/BrewManagementView.swift index fb580aa..5bde58e 100755 --- a/Applite/Views/Detail Views/Brew Management/BrewManagementView.swift +++ b/Applite/Views/Detail Views/Brew Management/BrewManagementView.swift @@ -44,11 +44,14 @@ struct BrewManagementView: View { var titleAndDescription: some View { VStack(alignment: .leading) { - Text("Manage Homebrew") + Text("Manage Homebrew", comment: "Manage Homebrew view title") .font(.appliteMediumTitle) .padding(.bottom, 2) - Text("This application uses the [Homebrew](https://brew.sh/) (brew for short) package manager to download apps. Homebrew is a free and open source command line utility that can download useful developer tools as well as desktop applications.") + Text( + "This application uses the [Homebrew](https://brew.sh/) (brew for short) package manager to download apps. Homebrew is a free and open source command line utility that can download useful developer tools as well as desktop applications.", + comment: "Manage Homebrew view description" + ) } } } diff --git a/Applite/Views/Detail Views/Discover/Discover Section/DiscoverSectionView+CategoryHeader.swift b/Applite/Views/Detail Views/Discover/Discover Section/DiscoverSectionView+CategoryHeader.swift index 3eba857..190fe91 100644 --- a/Applite/Views/Detail Views/Discover/Discover Section/DiscoverSectionView+CategoryHeader.swift +++ b/Applite/Views/Detail Views/Discover/Discover Section/DiscoverSectionView+CategoryHeader.swift @@ -15,7 +15,7 @@ extension DiscoverSectionView { Image(systemName: category.sfSymbol) .font(.system(size: fontSize)) - Text(LocalizedStringKey(category.name)) + Text(category.name) .font(.system(size: fontSize, weight: .bold)) Button("See All") { diff --git a/Applite/Views/Detail Views/Discover/DiscoverView.swift b/Applite/Views/Detail Views/Discover/DiscoverView.swift index 7cd1072..e300b6f 100755 --- a/Applite/Views/Detail Views/Discover/DiscoverView.swift +++ b/Applite/Views/Detail Views/Discover/DiscoverView.swift @@ -16,7 +16,7 @@ struct DiscoverView: View { var body: some View { LazyVStack(alignment: .leading) { - Text("Discover") + Text("Discover", comment: "Discover view title") .font(.appliteLargeTitle) .padding(.bottom) diff --git a/Applite/Views/Detail Views/Download/DownloadView+NoSearchResults.swift b/Applite/Views/Detail Views/Download/DownloadView+NoSearchResults.swift index 7b58dd0..2af3198 100644 --- a/Applite/Views/Detail Views/Download/DownloadView+NoSearchResults.swift +++ b/Applite/Views/Detail Views/Download/DownloadView+NoSearchResults.swift @@ -14,7 +14,10 @@ extension DownloadView { Image(systemName: "magnifyingglass") .font(.appliteMediumTitle) - Text("\"\(searchText)\" didn't match any app. Either it's not available in the Homebrew catalog or you misspelled it.") + Text( + "\"\(searchText)\" didn't match any app. Either it's not available in the Homebrew catalog or you misspelled it.", + comment: "Empty search results message" + ) .font(.system(size: 20)) } diff --git a/Applite/Views/Detail Views/Download/DownloadView+SortingOptions.swift b/Applite/Views/Detail Views/Download/DownloadView+SortingOptions.swift index 1bf2743..b5f071c 100644 --- a/Applite/Views/Detail Views/Download/DownloadView+SortingOptions.swift +++ b/Applite/Views/Detail Views/Download/DownloadView+SortingOptions.swift @@ -13,14 +13,14 @@ extension DownloadView { Menu { Picker("Sort by", selection: $sortBy) { ForEach(SortingOptions.allCases) { option in - Text(LocalizedStringKey(option.description)) + Text(option.description) .tag(option) } } .pickerStyle(.inline) Toggle(isOn: $hideUnpopularApps) { - Text("Hide apps with few downloads") + Text("Hide apps with few downloads", comment: "Few downloads search filter") } } label: { Label("Search Sorting Options", systemImage: "slider.horizontal.3") diff --git a/Applite/Views/Detail Views/Download/DownloadView.swift b/Applite/Views/Detail Views/Download/DownloadView.swift index 4e6793c..900be9c 100755 --- a/Applite/Views/Detail Views/Download/DownloadView.swift +++ b/Applite/Views/Detail Views/Download/DownloadView.swift @@ -27,7 +27,7 @@ struct DownloadView: View { var id: SortingOptions { self } - var description: String { + var description: LocalizedStringKey { switch self { case .mostDownloaded: return "Most downloaded (default)" case .bestMatch: return "Best match" diff --git a/Applite/Views/Detail Views/Update/UpdateView+ToolbarItems.swift b/Applite/Views/Detail Views/Update/UpdateView+ToolbarItems.swift index 03639f9..4557fba 100644 --- a/Applite/Views/Detail Views/Update/UpdateView+ToolbarItems.swift +++ b/Applite/Views/Detail Views/Update/UpdateView+ToolbarItems.swift @@ -41,7 +41,10 @@ extension UpdateView { Button("Cancel", role: .cancel) {} } message: { - Text("This will show updates from applications that have auto-update turned off, i.e., applications that are taking care of their own updates.") + Text( + "This will show updates from applications that have auto-update turned off, i.e., applications that are taking care of their own updates.", + comment: "Greedy update check alert message" + ) } } diff --git a/Applite/Views/Detail Views/Update/UpdateView+UpdateAllButton.swift b/Applite/Views/Detail Views/Update/UpdateView+UpdateAllButton.swift index 3ab6383..97fc854 100644 --- a/Applite/Views/Detail Views/Update/UpdateView+UpdateAllButton.swift +++ b/Applite/Views/Detail Views/Update/UpdateView+UpdateAllButton.swift @@ -22,7 +22,7 @@ extension UpdateView { Image(systemName: "arrow.2.circlepath") .rotationEffect(.degrees(updateAllButtonRotation)) - Text("Update All") + Text("Update All", comment: "Update all button title") } } .buttonStyle(.borderedProminent) diff --git a/Applite/Views/Detail Views/Update/UpdateView+UpdateUnavailable.swift b/Applite/Views/Detail Views/Update/UpdateView+UpdateUnavailable.swift index 2c23d16..d4708b2 100644 --- a/Applite/Views/Detail Views/Update/UpdateView+UpdateUnavailable.swift +++ b/Applite/Views/Detail Views/Update/UpdateView+UpdateUnavailable.swift @@ -12,7 +12,7 @@ extension UpdateView { VStack { Spacer() - Text("No Updates Available") + Text("No Updates Available", comment: "Update view no updates available") .font(.title) Spacer() diff --git a/Applite/Views/Settings/SettingsView+BrewPath.swift b/Applite/Views/Settings/SettingsView+BrewPath.swift index d8c4d41..3a9e6a5 100644 --- a/Applite/Views/Settings/SettingsView+BrewPath.swift +++ b/Applite/Views/Settings/SettingsView+BrewPath.swift @@ -20,24 +20,27 @@ extension SettingsView { var body: some View { VStack(alignment: .leading) { - Text("Brew Executable Path") + Text("Brew Executable Path", comment: "Settings brew path selector") .bold() BrewPathSelectorView(isSelectedPathValid: $isSelectedBrewPathValid) - Text("Currently selected brew path is invalid") + Text("Currently selected brew path is invalid", comment: "Settings invalid brew path message") .foregroundColor(.red) .opacity(isSelectedBrewPathValid ? 0 : 1) // Brew path changed if previousBrewOption != brewPathOption && isSelectedBrewPathValid { - Text("Brew path has been modified. Restart app for changes to take effect.") - .foregroundColor(.red) - .fixedSize(horizontal: false, vertical: true) + Text( + "Brew path has been modified. Restart app for changes to take effect.", + comment: "Settings brew path changed message" + ) + .foregroundColor(.red) + .fixedSize(horizontal: false, vertical: true) Button("Relaunch", role: .destructive) { Task.detached { - try? await Shell.runAsync("/usr/bin/osascript -e 'tell application \"\(Bundle.main.appName)\" to quit' && sleep 2 && open \"\(Bundle.main.bundlePath)\"") + try? await Shell.runAsync("/usr/bin/osascript -e 'tell application \"Applite\" to quit' && sleep 2 && open \"\(Bundle.main.bundlePath)\"") } } } @@ -45,7 +48,7 @@ extension SettingsView { Divider() .padding(.vertical, 8) - Text("Appdir") + Text("Appdir", comment: "Brew settings appdir section title") .bold() AppdirSelectorView() @@ -53,11 +56,11 @@ extension SettingsView { Divider() .padding(.vertical, 8) - Text("Other Flags") + Text("Other Flags", comment: "Brew settings command line flags section title") .bold() Toggle(isOn: $noQuarantine) { - Text("No Quartine") + Text("No Quarantine", comment: "Brew no quarantine flag toggle title") } } .onAppear { diff --git a/Applite/Views/Settings/SettingsView+GeneralSettings.swift b/Applite/Views/Settings/SettingsView+GeneralSettings.swift index 250b47c..5f202cb 100644 --- a/Applite/Views/Settings/SettingsView+GeneralSettings.swift +++ b/Applite/Views/Settings/SettingsView+GeneralSettings.swift @@ -18,12 +18,12 @@ extension SettingsView { var body: some View { VStack(alignment: .leading) { - Text("Appearance") + Text("Appearance", comment: "Appearnace settings title") .bold() Picker("Color Scheme:", selection: $colorSchemePreference) { ForEach(ColorSchemePreference.allCases) { color in - Text(LocalizedStringKey(color.rawValue.capitalized)) + Text(color.description) } } .pickerStyle(.segmented) @@ -31,7 +31,7 @@ extension SettingsView { Divider() .padding(.vertical) - Text("Notifications") + Text("Notifications", comment: "Notification settings title") .bold() Toggle("Task completions", isOn: $notificationOnSuccess) diff --git a/Applite/Views/Settings/SettingsView+ProxySettings.swift b/Applite/Views/Settings/SettingsView+ProxySettings.swift index c80f1f0..80da300 100644 --- a/Applite/Views/Settings/SettingsView+ProxySettings.swift +++ b/Applite/Views/Settings/SettingsView+ProxySettings.swift @@ -24,9 +24,12 @@ extension SettingsView { } .padding(.bottom) - Text("\(Bundle.main.appName) uses the system network proxy, but it can only use one protocol (HTTP, HTTPS, or SOCKS5). Select your preferred method.") - .font(.system(.body, weight: .light)) - .frame(minHeight: 60) + Text( + "Applite uses the system network proxy, but it can only use one protocol (HTTP, HTTPS, or SOCKS5). Select your preferred method.", + comment: "Proxy settings description" + ) + .font(.system(.body, weight: .light)) + .frame(minHeight: 60) } .padding() } diff --git a/Applite/Views/Settings/SettingsView+Uninstaller.swift b/Applite/Views/Settings/SettingsView+Uninstaller.swift index 0aeaf8b..d19960c 100644 --- a/Applite/Views/Settings/SettingsView+Uninstaller.swift +++ b/Applite/Views/Settings/SettingsView+Uninstaller.swift @@ -22,7 +22,7 @@ extension SettingsView { .tint(.red) .controlSize(.large) - Text("Uninstall \(Bundle.main.appName), related files and cache.") + Text("Uninstall Applite, related files and cache.", comment: "Settings Uninstall Applite view description") } .padding() } diff --git a/Applite/Views/Settings/SettingsView+UpdateSettings.swift b/Applite/Views/Settings/SettingsView+UpdateSettings.swift index 853aa65..68eecdb 100644 --- a/Applite/Views/Settings/SettingsView+UpdateSettings.swift +++ b/Applite/Views/Settings/SettingsView+UpdateSettings.swift @@ -27,7 +27,7 @@ extension SettingsView { Label("Check for Updates...", systemImage: "arrow.uturn.down") } - Text("Current app version: \(Bundle.main.version) (\(Bundle.main.buildNumber))") + Text("Current app version: \(Bundle.main.version) (\(Bundle.main.buildNumber))", comment: "Update settings current app version text (version, build number)") .font(.system(.body, weight: .light)) .foregroundColor(.secondary) diff --git a/Applite/Views/Settings/SettingsView.swift b/Applite/Views/Settings/SettingsView.swift index 8134530..45ffc55 100755 --- a/Applite/Views/Settings/SettingsView.swift +++ b/Applite/Views/Settings/SettingsView.swift @@ -15,6 +15,17 @@ public enum ColorSchemePreference: String, CaseIterable, Identifiable { case dark public var id: Self { self } + + var description: LocalizedStringKey { + switch self { + case .system: + "System" + case .light: + "Light" + case .dark: + "Dark" + } + } } /// Settings pane diff --git a/Applite/Views/Setup/SetupView+AllSet.swift b/Applite/Views/Setup/SetupView+AllSet.swift index 3423302..c7fbf78 100644 --- a/Applite/Views/Setup/SetupView+AllSet.swift +++ b/Applite/Views/Setup/SetupView+AllSet.swift @@ -13,11 +13,11 @@ extension SetupView { @AppStorage(Preferences.setupComplete.rawValue) var setupComplete = false var body: some View { - Text("All set!") + Text("All set!", comment: "Setup done message") .font(.appliteLargeTitle) .padding(.top, 40) - Button("Start Using \(Bundle.main.appName)") { + Button("Start Using Applite") { setupComplete = true } .buttonStyle(.borderedProminent) diff --git a/Applite/Views/Setup/SetupView+AppliteBrewInfoView.swift b/Applite/Views/Setup/SetupView+AppliteBrewInfoView.swift index 9b42f41..48c6ee8 100644 --- a/Applite/Views/Setup/SetupView+AppliteBrewInfoView.swift +++ b/Applite/Views/Setup/SetupView+AppliteBrewInfoView.swift @@ -16,15 +16,18 @@ extension SetupView { VStack { Spacer() - Text("Homebrew Installation") + Text("Homebrew Installation", comment: "Setup Applite's brew installation info view title") .font(.appliteMediumTitle) .padding(.bottom, 8) - Text("This application uses the free and open source [Homebrew](https://brew.sh/) package manager to download and manage applications. Applite has detected that you don't have brew installed, so it will create a new brew installation just for Applite under ~/Library/Application Support/Applite.") + Text( + "This application uses the free and open source [Homebrew](https://brew.sh/) package manager to download and manage applications. Applite has detected that you don't have brew installed, so it will create a new brew installation just for Applite under `~/Library/Application Support/Applite.`", + comment: "Setup Applite's brew installtion info view description" + ) Spacer() } - .frame(maxWidth: 540) + .frame(maxWidth: 500) .padding() } } diff --git a/Applite/Views/Setup/SetupView+AppliteBrewInstall.swift b/Applite/Views/Setup/SetupView+AppliteBrewInstall.swift index 3b0da57..565f511 100644 --- a/Applite/Views/Setup/SetupView+AppliteBrewInstall.swift +++ b/Applite/Views/Setup/SetupView+AppliteBrewInstall.swift @@ -23,7 +23,7 @@ extension SetupView { var body: some View { VStack { - Text("Installing dependencies") + Text("Installing dependencies", comment: "Brew dependency installation view title") .font(.appliteSmallTitle) .padding(.vertical) .padding(.top, 10) @@ -38,7 +38,7 @@ extension SetupView { // Homebrew dependencyView(title: "Homebrew", - description: "[Homebrew](https://brew.sh) is a free and open source package manager tool that makes installing third party applications really easy. \(Bundle.main.appName) uses Homebrew under the hood to download and manage applications.", + description: "[Homebrew](https://brew.sh) is a free and open source package manager tool that makes installing third party applications really easy. Applite uses Homebrew under the hood to download and manage applications.", progressOrder: .fetchingHomebrew) // Retry button @@ -63,7 +63,10 @@ extension SetupView { await installDependencies() } .alert("Xcode Command Line Tools", isPresented: $showCommandLineToolsInstallAlert) {} message: { - Text("You will be prompted to install Xcode Command Line Tools. Please select \"Install\" as it is required for this application to work.") + Text( + "You will be prompted to install Xcode Command Line Tools. Please select \"Install\" as it is required for this application to work.", + comment: "Brew dependency installation alert" + ) } .alert("Installation failed", isPresented: $showInstallFailAlert) { Button("Troubleshooting") { @@ -74,7 +77,10 @@ extension SetupView { Button("Quit", role: .destructive) { NSApplication.shared.terminate(self) } } message: { - Text("Retry the installation or visit the troubleshooting page.") + Text( + "Retry the installation or visit the troubleshooting page.", + comment: "Brew dependency installation failure alert" + ) } } } @@ -125,7 +131,7 @@ extension SetupView { private var installedBadge: some View { HStack { Image(systemName: "checkmark") - Text("Installed") + Text("Installed", comment: "Brew dependency installed badge text") } .padding(3) .foregroundColor(.white) diff --git a/Applite/Views/Setup/SetupView+BrewPathDetectedView.swift b/Applite/Views/Setup/SetupView+BrewPathDetectedView.swift index 1779ac5..fd8d927 100644 --- a/Applite/Views/Setup/SetupView+BrewPathDetectedView.swift +++ b/Applite/Views/Setup/SetupView+BrewPathDetectedView.swift @@ -15,11 +15,11 @@ extension SetupView { VStack { Spacer() - Text("Brew Installation Detected") + Text("Brew Installation Detected", comment: "Setup brew path detected view title") .font(.appliteSmallTitle) .padding(.bottom) - Text("A brew installation was detected at:") + Text("A brew installation was detected at:", comment: "Setup brew path detected view text") Card { HStack { @@ -31,10 +31,11 @@ extension SetupView { .frame(maxWidth: 200, maxHeight: 20) .padding(.bottom) - Text("Continue to use detected installation or select another option below.") + Text("Continue to use detected installation or select another option below.", comment: "Setup brew path detected view text") Spacer() } + .frame(maxWidth: 500) } } } diff --git a/Applite/Views/Setup/SetupView+BrewPathSelection.swift b/Applite/Views/Setup/SetupView+BrewPathSelection.swift index 37c255b..efcee92 100644 --- a/Applite/Views/Setup/SetupView+BrewPathSelection.swift +++ b/Applite/Views/Setup/SetupView+BrewPathSelection.swift @@ -16,7 +16,7 @@ extension SetupView { VStack(alignment: .center) { Spacer() - Text("Provide Brew Executable Path") + Text("Provide Brew Executable Path", comment: "Setup brew path selector") .font(.system(size: 26, weight: .bold)) .padding(.bottom, 30) @@ -24,12 +24,12 @@ extension SetupView { VStack(alignment: .leading) { BrewPathSelectorView(isSelectedPathValid: $isBrewPathValid) - Text("Selected brew path is invalid!") + Text("Selected brew path is invalid!", comment: "Setup view invalid brew path message") .foregroundColor(.red) .opacity(isBrewPathValid ? 0 : 1) .padding(.bottom) - Text("Appdir (optional)") + Text("Appdir (optional)", comment: "Setup brew appdir parameter") .font(.system(size: 16, weight: .bold)) AppdirSelectorView() diff --git a/Applite/Views/Setup/SetupView+Welcome.swift b/Applite/Views/Setup/SetupView+Welcome.swift index 291a84e..79d86b3 100644 --- a/Applite/Views/Setup/SetupView+Welcome.swift +++ b/Applite/Views/Setup/SetupView+Welcome.swift @@ -12,7 +12,7 @@ extension SetupView { struct Welcome: View { var body: some View { VStack { - Text("Welcome to \(Bundle.main.appName)") + Text("Welcome to Applite", comment: "Setup welcome page title") .font(.appliteSmallTitle) .padding(.top, 50) .padding(.bottom, 25) diff --git a/Applite/Views/UninstallSelfView.swift b/Applite/Views/UninstallSelfView.swift index 5aeac12..10cf608 100755 --- a/Applite/Views/UninstallSelfView.swift +++ b/Applite/Views/UninstallSelfView.swift @@ -16,23 +16,26 @@ struct UninstallSelfView: View { var body: some View { VStack(alignment: .leading) { - Text("Uninstall \(Bundle.main.appName)") + Text("Uninstall Applite", comment: "Uninstall Applite window title") .font(.system(size: 26, weight: .bold)) .padding(.bottom) - Text("This will uninstall all files and cache associated with \(Bundle.main.appName).") - + Text("This will uninstall all files and cache associated with Applite.", comment: "Uninstall applite window description") + Toggle("Delete Homebrew cache", isOn: $deleteBrewCache) - Text("**Warning**: Homebrew cache is shared between Homebrew installations. Deleting the cache will remove the cache for all installations!") - + Text( + "**Warning**: Homebrew cache is shared between Homebrew installations. Deleting the cache will remove the cache for all installations!", + comment: "Uninstall Applite window cache warning" + ) + Divider() .padding(.vertical) Button(role: .destructive) { showConfirmation = true } label: { - Label("Uninstall \(Bundle.main.appName)", systemImage: "trash.fill") + Label("Uninstall Applite", systemImage: "trash.fill") } .buttonStyle(.borderedProminent) .tint(.red) @@ -41,7 +44,7 @@ struct UninstallSelfView: View { Spacer() } .frame(width: 400, height: 250) - .confirmationDialog("Are you sure you want to permanently uninstall \(Bundle.main.appName)?", isPresented: $showConfirmation) { + .confirmationDialog("Are you sure you want to permanently uninstall Applite?", isPresented: $showConfirmation) { Button("Uninstall", role: .destructive) { Task.detached { do { diff --git a/Localizable.xcstrings b/Localizable.xcstrings index b2e9668..ec6837a 100644 --- a/Localizable.xcstrings +++ b/Localizable.xcstrings @@ -98,6 +98,7 @@ } }, "\"%@\" didn't match any app. Either it's not available in the Homebrew catalog or you misspelled it." : { + "comment" : "Empty search results message", "localizations" : { "fr" : { "stringUnit" : { @@ -166,6 +167,7 @@ } }, "[Homebrew](https://brew.sh) is a free and open source package manager tool that makes installing third party applications really easy. %@ uses Homebrew under the hood to download and manage applications." : { + "extractionState" : "stale", "localizations" : { "fr" : { "stringUnit" : { @@ -199,10 +201,29 @@ } } }, + "[Homebrew](https://brew.sh) is a free and open source package manager tool that makes installing third party applications really easy. Applite uses Homebrew under the hood to download and manage applications." : { + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ez az alkalmazás a [Homebrew](https://brew.sh) nevű csomagkezelőt használja az appok letöltéséhez. A Homebrew egy ingyenes és nyílt forráskódú szoftver, ami megkönnyíti az appok letöltését." + } + } + } + }, "**Tip:** You can also import apps from a Brewfile. However, only casks will be installed, other items like formulae and taps will be skipped." : { - + "comment" : "App Migration import card tip", + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "**Tip:** Alkalmazásokat egy Brewfile-ból is importálhat. Azonban csak a caskok lesznek telepítve, más elemek (formula, tap) figyelmen kívül lesznek hagyva." + } + } + } }, "**Warning**: Homebrew cache is shared between Homebrew installations. Deleting the cache will remove the cache for all installations!" : { + "comment" : "Uninstall Applite window cache warning", "localizations" : { "fr" : { "stringUnit" : { @@ -305,6 +326,7 @@ } }, "%@" : { + "extractionState" : "stale", "localizations" : { "fr" : { "stringUnit" : { @@ -338,17 +360,8 @@ } } }, - "%@ couldn't open %@" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "%1$@ couldn't open %2$@" - } - } - } - }, "%@ is already installed. If you want to add it to %@ click more options (chevron icon) and press Force Install." : { + "extractionState" : "stale", "localizations" : { "en" : { "stringUnit" : { @@ -388,6 +401,16 @@ } } }, + "%@ is already installed. If you want to add it to Applite click more options (chevron icon) and press Force Install." : { + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "A(z) %1$@ már telepítve van. Ha hozzá akarja adni az Applite-hoz, kattintson a további opciók gombra, és válassza a Kényszerített telepítés opciót." + } + } + } + }, "%@ successfully installed!" : { "extractionState" : "stale", "localizations" : { @@ -529,6 +552,7 @@ } }, "%@ uses the system network proxy, but it can only use one protocol (HTTP, HTTPS, or SOCKS5). Select your preferred method." : { + "extractionState" : "stale", "localizations" : { "fr" : { "stringUnit" : { @@ -563,9 +587,29 @@ } }, "A brew installation was detected at:" : { - + "comment" : "Setup brew path detected view text", + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Úgy tűnik a brew már telepítve van a következő helyen:" + } + } + } + }, + "A new Homebrew installation will be installed into `~/Library/Application Support/Applite`" : { + "comment" : "Brew installation alert notice", + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Egy új Homebrew telepítés fog kerülni a `~/Library/Application Support/Applite` elérési helyre" + } + } + } }, "A new Homebrew installation will be installed into ~/Library/Application Support/%@" : { + "extractionState" : "stale", "localizations" : { "fr" : { "stringUnit" : { @@ -599,7 +643,30 @@ } } }, + "A new Homebrew installation will be installed into ~/Library/Application Support/Applite" : { + "comment" : "Brew installation alert notice", + "extractionState" : "stale", + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Egy új Homebrew telepítés fog kerülni a ~/Library/Application Support/Applite elérési helyre" + } + } + } + }, + "A to Z" : { + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "A-Z" + } + } + } + }, "About %@" : { + "extractionState" : "stale", "localizations" : { "fr" : { "stringUnit" : { @@ -633,7 +700,18 @@ } } }, + "About Applite" : { + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Az Applite névjegye" + } + } + } + }, "Actions" : { + "comment" : "Brew Management view action section title", "localizations" : { "fr" : { "stringUnit" : { @@ -702,6 +780,7 @@ } }, "After reinstalling, all currently installed apps will be unlinked from %@. They won't be deleted, but you won't be able to update or uninstall them via %@." : { + "extractionState" : "stale", "localizations" : { "en" : { "stringUnit" : { @@ -741,7 +820,18 @@ } } }, + "After reinstalling, all currently installed apps will be unlinked from Applite. They won't be deleted, but you won't be able to update or uninstall them via Applite." : { + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Az újratelepítés után az összes jelenleg letöltött alkalmazás nem lesz elérhető az Applite felületén. Nem törlődnek, de nem lehet majd őket frissíteni vagy letörölni az Applite-on keresztül." + } + } + } + }, "All currently installed apps will be unlinked from %@." : { + "extractionState" : "stale", "localizations" : { "fr" : { "stringUnit" : { @@ -775,6 +865,17 @@ } } }, + "All currently installed apps will be unlinked from Applite." : { + "comment" : "Brew reinstallation alert warning", + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Minden jelenleg letöltött alkalmazás nem lesz elérhető az Applite-on keresztül." + } + } + } + }, "All other app functions will be disabled during the update!" : { "localizations" : { "fr" : { @@ -810,6 +911,7 @@ } }, "All set!" : { + "comment" : "Setup done message", "localizations" : { "fr" : { "stringUnit" : { @@ -877,45 +979,19 @@ } } }, - "App couldn't be located" : { - "extractionState" : "stale", + "App Migration" : { + "comment" : "App Migration view title", "localizations" : { - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "L'application est introuvable" - } - }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "Nem található elérési útvonal az alkalmazáshoz" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "アプリケーションが見つかりません" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无法找到应用程序" - } - }, - "zh-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "無法找到應用程式" + "value" : "App Költöztetés" } } } - }, - "App Migration" : { - }, "Appdir" : { + "comment" : "Brew settings appdir section title", "localizations" : { "fr" : { "stringUnit" : { @@ -950,6 +1026,7 @@ } }, "Appdir (optional)" : { + "comment" : "Setup brew appdir parameter", "localizations" : { "fr" : { "stringUnit" : { @@ -984,6 +1061,7 @@ } }, "Appearance" : { + "comment" : "Appearnace settings title", "localizations" : { "fr" : { "stringUnit" : { @@ -1017,7 +1095,18 @@ } } }, + "Apple Silicon Mac" : { + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apple Silicon Mac" + } + } + } + }, "Applite" : { + "comment" : "Applite app card title", "localizations" : { "fr" : { "stringUnit" : { @@ -1051,8 +1140,46 @@ } } }, + "Applite couldn't open %@" : { + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Az Applite nem tudta megnyitni a %@ alkalmazást" + } + } + } + }, + "Applite uses the system network proxy, but it can only use one protocol (HTTP, HTTPS, or SOCKS5). Select your preferred method." : { + "comment" : "Proxy settings description", + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ez az alkalmazás a rendszer hálózati proxy beállításait használja, de csak egy protokollt tud használni (HTTP, HTTPS vagy SOCKS5). Válassza ki a kívánt módszert." + } + } + } + }, + "Applite's installation" : { + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Applite telepítése" + } + } + } + }, "Apps Installed" : { - + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Letöltött appok száma" + } + } + } }, "Apps with few downloads are hidden, consider turning off this filter" : { "localizations" : { @@ -1157,6 +1284,7 @@ } }, "Are you sure you want to permanently uninstall %@?" : { + "extractionState" : "stale", "localizations" : { "fr" : { "stringUnit" : { @@ -1190,6 +1318,16 @@ } } }, + "Are you sure you want to permanently uninstall Applite?" : { + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Biztos véglegesen törli az Applite-ot?" + } + } + } + }, "Automatically check for updates" : { "localizations" : { "fr" : { @@ -1293,10 +1431,28 @@ } } }, + "Best match" : { + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Legjobb találat" + } + } + } + }, "Brew" : { - + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Brew" + } + } + } }, "Brew Executable Path" : { + "comment" : "Settings brew path selector", "localizations" : { "fr" : { "stringUnit" : { @@ -1331,7 +1487,15 @@ } }, "Brew Installation Detected" : { - + "comment" : "Setup brew path detected view title", + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Brew telepítés észlelve" + } + } + } }, "Brew Path" : { "extractionState" : "stale", @@ -1369,6 +1533,7 @@ } }, "Brew path has been modified. Restart app for changes to take effect." : { + "comment" : "Settings brew path changed message", "localizations" : { "fr" : { "stringUnit" : { @@ -1575,7 +1740,14 @@ } }, "Cask Info" : { - + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cask információ" + } + } + } }, "Cask list (.txt file)" : { "extractionState" : "manual", @@ -1647,6 +1819,7 @@ } }, "Check for Updates..." : { + "comment" : "Check for update menu bar item", "localizations" : { "fr" : { "stringUnit" : { @@ -1784,7 +1957,15 @@ } }, "Continue to use detected installation or select another option below." : { - + "comment" : "Setup brew path detected view text", + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ha az észlelt brew telepítést szeretné használni lépjen tovább, ellenkező esetben válasszon a lenti opciók közül." + } + } + } }, "Couldn't download app. No internet connection, or host is unreachable." : { "localizations" : { @@ -1856,6 +2037,7 @@ } }, "Current app version: %@ (%@)" : { + "comment" : "Update settings current app version text (version, build number)", "localizations" : { "en" : { "stringUnit" : { @@ -1896,6 +2078,7 @@ } }, "Currently selected brew path is invalid" : { + "comment" : "Settings invalid brew path message", "localizations" : { "fr" : { "stringUnit" : { @@ -1929,6 +2112,16 @@ } } }, + "Custom" : { + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Egyedi" + } + } + } + }, "Custom brew path" : { "localizations" : { "fr" : { @@ -2136,6 +2329,7 @@ } }, "Discover" : { + "comment" : "Discover view title", "localizations" : { "fr" : { "stringUnit" : { @@ -2169,41 +2363,6 @@ } } }, - "Do you already have Homebrew installed?" : { - "extractionState" : "stale", - "localizations" : { - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Avez-vous déjà installé Homebrew ?" - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ön már rendelkezik a Homebrew csomagkezelővel?" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "Homebrewはインストール済みですか?" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "你已经安装了 Homebrew 吗?" - } - }, - "zh-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "您已經安裝了 Homebrew 嗎?" - } - } - } - }, "Download Anyway" : { "localizations" : { "fr" : { @@ -2309,6 +2468,7 @@ } }, "Error" : { + "comment" : "Cask action failed (e.g. installation failed)", "localizations" : { "fr" : { "stringUnit" : { @@ -2343,7 +2503,15 @@ } }, "Export" : { - + "comment" : "App migration export card title", + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Exportálás" + } + } + } }, "Export a file containing all currently installed applications. This can be imported to another device." : { "extractionState" : "stale", @@ -2380,11 +2548,27 @@ } } }, - "Export all apps currently installed by %@ to a file." : { - + "Export all apps currently installed by Appname to a file." : { + "comment" : "App Migration export card description", + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "A jelenleg telepített alkalmazások fájlba exportálása." + } + } + } }, "Export all of your currently installed apps to a file. Import the file to another device to install them all. Useful when setting up a new Mac." : { - + "comment" : "App migration view description", + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Exportálja a jelenleg letöltött alkalmazásokat egy fájlba. Ezt később egy másik eszközön importálhatja, ezzel az összes alkalmazást telepíti. Hasznos egy új eszköz beállításához." + } + } + } }, "Export apps to file" : { "extractionState" : "stale", @@ -2422,7 +2606,14 @@ } }, "Export Apps to File" : { - + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Appok fájlba exportálása" + } + } + } }, "Export failed" : { "extractionState" : "stale", @@ -2668,7 +2859,14 @@ } }, "Get Info" : { - + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Infó megjelenítése" + } + } + } }, "GitHub" : { "localizations" : { @@ -2705,6 +2903,7 @@ } }, "Hide apps with few downloads" : { + "comment" : "Few downloads search filter", "localizations" : { "fr" : { "stringUnit" : { @@ -2773,10 +2972,25 @@ } }, "Homebrew Installation" : { - + "comment" : "Setup Applite's brew installation info view title", + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Homebrew telepítés" + } + } + } }, "Homebrew Version" : { - + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Homebrew verzió" + } + } + } }, "Homebrew version: " : { "extractionState" : "stale", @@ -2848,7 +3062,14 @@ } }, "I already have brew installed" : { - + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Már van egy brew telepítésem" + } + } + } }, "IDEs" : { "extractionState" : "manual", @@ -2886,7 +3107,15 @@ } }, "Import" : { - + "comment" : "App Migration import card title", + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Importálás" + } + } + } }, "Import apps" : { "extractionState" : "stale", @@ -2924,7 +3153,14 @@ } }, "Import Apps" : { - + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Appok importálása" + } + } + } }, "Import failed" : { "extractionState" : "stale", @@ -2997,6 +3233,7 @@ } }, "In progress..." : { + "comment" : "Brew Management view progress indicator", "localizations" : { "fr" : { "stringUnit" : { @@ -3031,6 +3268,7 @@ } }, "Info" : { + "comment" : "Brew Management view info section title", "localizations" : { "fr" : { "stringUnit" : { @@ -3099,7 +3337,14 @@ } }, "Install separate brew for Applite" : { - + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Külön brew telepítése" + } + } + } }, "Installation failed" : { "localizations" : { @@ -3136,6 +3381,7 @@ } }, "Installed" : { + "comment" : "Brew dependency installed badge text", "localizations" : { "fr" : { "stringUnit" : { @@ -3205,6 +3451,7 @@ } }, "Installing dependencies" : { + "comment" : "Brew dependency installation view title", "localizations" : { "fr" : { "stringUnit" : { @@ -3238,6 +3485,16 @@ } } }, + "Intel Mac" : { + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Intel Mac" + } + } + } + }, "Light" : { "extractionState" : "manual", "localizations" : { @@ -3309,6 +3566,7 @@ } }, "Manage Homebrew" : { + "comment" : "Manage Homebrew view title", "localizations" : { "fr" : { "stringUnit" : { @@ -3483,6 +3741,7 @@ } }, "No Active Tasks" : { + "comment" : "No active tasks available message", "localizations" : { "fr" : { "stringUnit" : { @@ -3550,8 +3809,16 @@ } } }, - "No Quartine" : { - + "No Quarantine" : { + "comment" : "Brew no quarantine flag toggle title", + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "No Quarantine" + } + } + } }, "No Selection" : { "extractionState" : "stale", @@ -3589,6 +3856,7 @@ } }, "No Updates Available" : { + "comment" : "Update view no updates available", "localizations" : { "fr" : { "stringUnit" : { @@ -3692,6 +3960,7 @@ } }, "Notifications" : { + "comment" : "Notification settings title", "localizations" : { "fr" : { "stringUnit" : { @@ -3864,7 +4133,15 @@ } }, "Other Flags" : { - + "comment" : "Brew settings command line flags section title", + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "További beállítások" + } + } + } }, "Password Managers" : { "extractionState" : "manual", @@ -3971,9 +4248,17 @@ } }, "Property" : { - + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tulajdonság" + } + } + } }, "Provide Brew Executable Path" : { + "comment" : "Setup brew path selector", "localizations" : { "fr" : { "stringUnit" : { @@ -4349,6 +4634,7 @@ } }, "Retry the installation or visit the troubleshooting page." : { + "comment" : "Brew dependency installation failure alert", "localizations" : { "fr" : { "stringUnit" : { @@ -4383,10 +4669,24 @@ } }, "Search Sorting Options" : { - + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keresés szűrési opciók" + } + } + } }, "Searching..." : { - + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keresés…" + } + } + } }, "See All" : { "localizations" : { @@ -4457,6 +4757,7 @@ } }, "Selected brew path is invalid!" : { + "comment" : "Setup view invalid brew path message", "localizations" : { "fr" : { "stringUnit" : { @@ -4662,6 +4963,7 @@ } }, "Start Using %@" : { + "extractionState" : "stale", "localizations" : { "fr" : { "stringUnit" : { @@ -4695,6 +4997,16 @@ } } }, + "Start Using Applite" : { + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kezdjünk bele!" + } + } + } + }, "System" : { "extractionState" : "manual", "localizations" : { @@ -4834,6 +5146,7 @@ } }, "This app" : { + "comment" : "Applite app card description", "localizations" : { "fr" : { "stringUnit" : { @@ -4868,6 +5181,7 @@ } }, "This application uses the [Homebrew](https://brew.sh/) (brew for short) package manager to download apps. Homebrew is a free and open source command line utility that can download useful developer tools as well as desktop applications." : { + "comment" : "Manage Homebrew view description", "localizations" : { "fr" : { "stringUnit" : { @@ -4901,8 +5215,28 @@ } } }, + "This application uses the free and open source [Homebrew](https://brew.sh/) package manager to download and manage applications. Applite has detected that you don't have brew installed, so it will create a new brew installation just for Applite under `~/Library/Application Support/Applite.`" : { + "comment" : "Setup Applite's brew installtion info view description", + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ez az alkalmazás az ingyenes és nyílt forráskódú [Homebrew](https://brew.sh/) csomagkezelőt használja az alkalmazások letöltésére és kezelésére. Az Applite érzékelte, hogy nincs telepítve a brew, ezért létrehoz egy új brew telepítést csak az Applite számára a `~/Library/Application Support/Applite` elérési útvonalon." + } + } + } + }, "This application uses the free and open source [Homebrew](https://brew.sh/) package manager to download and manage applications. Applite has detected that you don't have brew installed, so it will create a new brew installation just for Applite under ~/Library/Application Support/Applite." : { - + "comment" : "Setup Applite's brew installtion info view description", + "extractionState" : "stale", + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ez az alkalmazás az ingyenes és nyílt forráskódú [Homebrew](https://brew.sh/) csomagkezelőt használja az alkalmazások letöltésére és kezelésére. Az Applite érzékelte, hogy nincs telepítve a brew, ezért létrehoz egy új brew telepítést csak az Applite számára a ~/Library/Application Support/Applite elérési útvonalon." + } + } + } }, "This application uses the free and open source [Homebrew](https://brew.sh/) package manager to download and manage applications. If you already have it installed on your system, you can use it right away. If you don't have brew installed or don't know what it is, select **No**. This will create a new brew installation just for %@." : { "extractionState" : "stale", @@ -4940,6 +5274,7 @@ } }, "This will (re)install %@'s Homebrew installation at: ~/Library/Application Support/%@/homebrew" : { + "extractionState" : "stale", "localizations" : { "en" : { "stringUnit" : { @@ -4979,7 +5314,29 @@ } } }, + "This will (re)install Applite's Homebrew installation at: `~/Library/Application Support/Applite/homebrew`" : { + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ez a `~/Library/Application Support/Applite/homebrew` elérési útvonalon található Homebrew telepítést fogja (újra)telepíteni." + } + } + } + }, + "This will (re)install Applite's Homebrew installation at: ~/Library/Application Support/Applite/homebrew" : { + "extractionState" : "stale", + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ez (újra)telepíti az Applite Homebrew telepítését a ~/Library/Application Support/Applite/homebrew helyen" + } + } + } + }, "This will show updates from applications that have auto-update turned off, i.e., applications that are taking care of their own updates." : { + "comment" : "Greedy update check alert message", "localizations" : { "fr" : { "stringUnit" : { @@ -5014,6 +5371,7 @@ } }, "This will uninstall all files and cache associated with %@." : { + "extractionState" : "stale", "localizations" : { "fr" : { "stringUnit" : { @@ -5047,6 +5405,17 @@ } } }, + "This will uninstall all files and cache associated with Applite." : { + "comment" : "Uninstall applite window description", + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ez eltávolítja az Applite-hoz kapcsolódó összes fájlt és gyorsítótárat." + } + } + } + }, "Troubleshooting" : { "localizations" : { "fr" : { @@ -5150,6 +5519,7 @@ } }, "Uninstall %@" : { + "extractionState" : "stale", "localizations" : { "fr" : { "stringUnit" : { @@ -5184,6 +5554,7 @@ } }, "Uninstall %@, related files and cache." : { + "extractionState" : "stale", "localizations" : { "fr" : { "stringUnit" : { @@ -5217,6 +5588,28 @@ } } }, + "Uninstall Applite" : { + "comment" : "Uninstall Applite window title", + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Applite törlése" + } + } + } + }, + "Uninstall Applite, related files and cache." : { + "comment" : "Settings Uninstall Applite view description", + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Az Applite és hozzátartozó fájlok törlése" + } + } + } + }, "Uninstall Applite..." : { "localizations" : { "fr" : { @@ -5355,6 +5748,7 @@ } }, "Update All" : { + "comment" : "Update all button title", "localizations" : { "fr" : { "stringUnit" : { @@ -5595,7 +5989,14 @@ } }, "Use different brew path" : { - + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Másik brew elérési útvonal használata" + } + } + } }, "Use system proxy" : { "localizations" : { @@ -5667,7 +6068,14 @@ } }, "Value" : { - + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Érték" + } + } + } }, "View Error" : { "extractionState" : "stale", @@ -5809,6 +6217,7 @@ } }, "Welcome to %@" : { + "extractionState" : "stale", "localizations" : { "fr" : { "stringUnit" : { @@ -5842,6 +6251,17 @@ } } }, + "Welcome to Applite" : { + "comment" : "Setup welcome page title", + "localizations" : { + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Üdvözöljük az Applite-on" + } + } + } + }, "When importing a Brewfile only casks will be installed. Other items like formulae and taps will be skipped." : { "extractionState" : "stale", "localizations" : { @@ -5980,6 +6400,7 @@ } }, "You will be prompted to install Xcode Command Line Tools. Please select \"Install\" as it is required for this application to work." : { + "comment" : "Brew dependency installation alert", "localizations" : { "fr" : { "stringUnit" : {