diff --git a/Sources/Packages/Localizable.xcstrings b/Sources/Packages/Localizable.xcstrings index 7022a66..f8b9d5b 100644 --- a/Sources/Packages/Localizable.xcstrings +++ b/Sources/Packages/Localizable.xcstrings @@ -1274,7 +1274,8 @@ } } }, - "Copy" : { + "copy_button" : { + "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { @@ -2605,14 +2606,7 @@ } }, "Done" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Done" - } - } - } + }, "edit_cancel_button" : { "extractionState" : "manual", @@ -3141,26 +3135,6 @@ } } }, - "Getting Started" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Getting Started" - } - } - } - }, - "Integrations" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Integrations" - } - } - } - }, "integrations_add_this_title" : { "extractionState" : "manual", "localizations" : { @@ -3205,6 +3179,50 @@ } } }, + "integrations_getting_started_row_title" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Getting Started" + } + } + } + }, + "integrations_getting_started_section_title" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Integrations" + } + } + } + }, + "integrations_other_section_title" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Other" + } + } + } + }, + "integrations_other_shell_row_title" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "other" + } + } + } + }, "integrations_path_title" : { "extractionState" : "manual", "localizations" : { @@ -3216,6 +3234,28 @@ } } }, + "integrations_shell_section_title" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Shell" + } + } + } + }, + "integrations_system_section_title" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "System" + } + } + } + }, "integrations_view_other_github_link" : { "extractionState" : "manual", "localizations" : { @@ -3238,7 +3278,8 @@ } } }, - "Integrations..." : { + "integrationsMenuBarTitle" : { + "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { @@ -3479,6 +3520,17 @@ } } }, + "onboarding_done_button" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Done" + } + } + } + }, "onboarding_getting_started_multiple_config" : { "extractionState" : "manual", "localizations" : { @@ -3567,7 +3619,7 @@ } } }, - "onboarding_integrations_button_title" : { + "onboarding_integrations_button" : { "extractionState" : "manual", "localizations" : { "en" : { @@ -3599,12 +3651,6 @@ } } } - }, - "other" : { - - }, - "Other" : { - }, "persist_authentication_accept_button" : { "comment" : "When the user authorizes an action using a secret that requires unlock, they're shown a notification offering to leave the secret unlocked for a set period of time. This is the title for the notification.", @@ -3762,7 +3808,8 @@ } } }, - "Reveal in Finder" : { + "reveal_in_finder_button" : { + "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { @@ -5350,16 +5397,6 @@ } } }, - "Shell" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Shell" - } - } - } - }, "signed_notification_description" : { "comment" : "When the user performs an action using a secret, they're shown a notification describing what happened. This is the description, showing which secret was used. The placeholder is the name of the secret.", "extractionState" : "manual", @@ -5587,16 +5624,6 @@ } } }, - "System" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "System" - } - } - } - }, "unnamed_secret" : { "extractionState" : "manual", "localizations" : { diff --git a/Sources/Secretive/App.swift b/Sources/Secretive/App.swift index 7e6c83d..b2db3af 100644 --- a/Sources/Secretive/App.swift +++ b/Sources/Secretive/App.swift @@ -65,7 +65,7 @@ struct Secretive: App { } .commands { CommandGroup(before: CommandGroupPlacement.appSettings) { - Button("Integrations...", systemImage: "app.connected.to.app.below.fill") { + Button(.integrationsMenuBarTitle, systemImage: "app.connected.to.app.below.fill") { showingIntegrations = true } } diff --git a/Sources/Secretive/Views/ConfigurationItemView.swift b/Sources/Secretive/Views/ConfigurationItemView.swift index 7544454..312182b 100644 --- a/Sources/Secretive/Views/ConfigurationItemView.swift +++ b/Sources/Secretive/Views/ConfigurationItemView.swift @@ -32,14 +32,14 @@ struct ConfigurationItemView: View { Spacer() switch action { case .copy(let string): - Button("Copy", systemImage: "document.on.document") { + Button(.copyButton, systemImage: "document.on.document") { NSPasteboard.general.declareTypes([.string], owner: nil) NSPasteboard.general.setString(string, forType: .string) } .labelStyle(.iconOnly) .buttonStyle(.borderless) case .revealInFinder(let rawPath): - Button("Reveal in Finder", systemImage: "folder") { + Button(.revealInFinderButton, systemImage: "folder") { // All foundation-based normalization methods replace this with the container directly. let processedPath = rawPath.replacingOccurrences(of: "~", with: "/Users/\(NSUserName())") let url = URL(filePath: processedPath) diff --git a/Sources/Secretive/Views/IntegrationsView.swift b/Sources/Secretive/Views/IntegrationsView.swift index 01be401..1e07ec1 100644 --- a/Sources/Secretive/Views/IntegrationsView.swift +++ b/Sources/Secretive/Views/IntegrationsView.swift @@ -23,7 +23,7 @@ struct IntegrationsView: View { } detail: { IntegrationsDetailView(selectedInstruction: $selectedInstruction) .fauxToolbar { - Button("Done") { + Button(.onboardingDoneButton) { dismiss() } .normalButton() @@ -190,7 +190,7 @@ private struct Instructions { zsh } - var gettingStarted: ConfigurationFileInstructions = ConfigurationFileInstructions("Getting Started", id: .gettingStarted) + var gettingStarted: ConfigurationFileInstructions = ConfigurationFileInstructions(LocalizedStringResource.integrationsGettingStartedRowTitle, id: .gettingStarted) var ssh: ConfigurationFileInstructions { ConfigurationFileInstructions( @@ -243,17 +243,17 @@ private struct Instructions { var instructions: [ConfigurationGroup] { [ - ConfigurationGroup(name: "Integrations", instructions: [ + ConfigurationGroup(name: LocalizedStringResource.integrationsGettingStartedSectionTitle, instructions: [ gettingStarted ]), ConfigurationGroup( - name: "System", + name: LocalizedStringResource.integrationsSystemSectionTitle, instructions: [ ssh, git, ] ), - ConfigurationGroup(name: "Shell", instructions: [ + ConfigurationGroup(name: LocalizedStringResource.integrationsShellSectionTitle, instructions: [ zsh, ConfigurationFileInstructions( tool: "bash", @@ -265,9 +265,9 @@ private struct Instructions { configPath: "~/.config/fish/config.fish", configText: "set -x SSH_AUTH_SOCK \(socketPath)" ), - ConfigurationFileInstructions("other", id: .otherShell), + ConfigurationFileInstructions(LocalizedStringResource.integrationsOtherShellRowTitle, id: .otherShell), ]), - ConfigurationGroup(name: "Other", instructions: [ + ConfigurationGroup(name: LocalizedStringResource.integrationsOtherSectionTitle, instructions: [ ConfigurationFileInstructions(LocalizedStringResource.integrationsAppsRowTitle, id: .otherApp), ]), ] diff --git a/Sources/Secretive/Views/SetupView.swift b/Sources/Secretive/Views/SetupView.swift index ad26638..5e52ebf 100644 --- a/Sources/Secretive/Views/SetupView.swift +++ b/Sources/Secretive/Views/SetupView.swift @@ -55,7 +55,7 @@ struct SetupView: View { systemImage: "firewall", ) { OnboardingButton( - LocalizedStringResource.onboardingIntegrationsButtonTitle, + LocalizedStringResource.onboardingIntegrationsButton, complete: integrations, width: buttonWidth ) { @@ -70,7 +70,7 @@ struct SetupView: View { .frame(minWidth: 700, maxWidth: .infinity) HStack { Spacer() - Button("Done") { + Button(.onboardingDoneButton) { setupComplete = true dismiss() }