From de959345eda54476d37eb48cf8d6d50c0da20941 Mon Sep 17 00:00:00 2001 From: Max Goedjen Date: Thu, 4 Jan 2024 17:16:03 -0800 Subject: [PATCH] Set up and start main content view --- Sources/Secretive.xcodeproj/project.pbxproj | 4 + Sources/Secretive/Localizable.xcstrings | 154 ++++++++++++++++++++ Sources/Secretive/Views/ContentView.swift | 10 +- Sources/Secretive/Views/SetupView.swift | 2 +- 4 files changed, 164 insertions(+), 6 deletions(-) create mode 100644 Sources/Secretive/Localizable.xcstrings diff --git a/Sources/Secretive.xcodeproj/project.pbxproj b/Sources/Secretive.xcodeproj/project.pbxproj index 0eb5b4d..76ec23d 100644 --- a/Sources/Secretive.xcodeproj/project.pbxproj +++ b/Sources/Secretive.xcodeproj/project.pbxproj @@ -18,6 +18,7 @@ 5003EF612780081600DF2006 /* SmartCardSecretKit in Frameworks */ = {isa = PBXBuildFile; productRef = 5003EF602780081600DF2006 /* SmartCardSecretKit */; }; 5003EF632780081B00DF2006 /* SecureEnclaveSecretKit in Frameworks */ = {isa = PBXBuildFile; productRef = 5003EF622780081B00DF2006 /* SecureEnclaveSecretKit */; }; 5003EF652780081B00DF2006 /* SmartCardSecretKit in Frameworks */ = {isa = PBXBuildFile; productRef = 5003EF642780081B00DF2006 /* SmartCardSecretKit */; }; + 500B93C32B478D8400E157DE /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 500B93C22B478D8400E157DE /* Localizable.xcstrings */; }; 501421622781262300BBAA70 /* Brief in Frameworks */ = {isa = PBXBuildFile; productRef = 501421612781262300BBAA70 /* Brief */; }; 501421652781268000BBAA70 /* SecretAgent.app in CopyFiles */ = {isa = PBXBuildFile; fileRef = 50A3B78A24026B7500D209EA /* SecretAgent.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 50153E20250AFCB200525160 /* UpdateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50153E1F250AFCB200525160 /* UpdateView.swift */; }; @@ -108,6 +109,7 @@ 50020BAF24064869003D4025 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 50033AC227813F1700253856 /* BundleIDs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BundleIDs.swift; sourceTree = ""; }; 5003EF39278005C800DF2006 /* Packages */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = Packages; sourceTree = ""; }; + 500B93C22B478D8400E157DE /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = ""; }; 50153E1F250AFCB200525160 /* UpdateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdateView.swift; sourceTree = ""; }; 50153E21250DECA300525160 /* SecretListItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecretListItemView.swift; sourceTree = ""; }; 5018F54E24064786002EB505 /* Notifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Notifier.swift; sourceTree = ""; }; @@ -228,6 +230,7 @@ 508BF28D25B4F005009EFB7E /* InternetAccessPolicy.plist */, 50617D8F23FCE48E0099B055 /* Secretive.entitlements */, 506772C62424784600034DED /* Credits.rtf */, + 500B93C22B478D8400E157DE /* Localizable.xcstrings */, 50617D8823FCE48E0099B055 /* Preview Content */, ); path = Secretive; @@ -444,6 +447,7 @@ buildActionMask = 2147483647; files = ( 50617D8A23FCE48E0099B055 /* Preview Assets.xcassets in Resources */, + 500B93C32B478D8400E157DE /* Localizable.xcstrings in Resources */, 50617D8723FCE48E0099B055 /* Assets.xcassets in Resources */, 506772C72424784600034DED /* Credits.rtf in Resources */, 508BF28E25B4F005009EFB7E /* InternetAccessPolicy.plist in Resources */, diff --git a/Sources/Secretive/Localizable.xcstrings b/Sources/Secretive/Localizable.xcstrings new file mode 100644 index 0000000..126dbbc --- /dev/null +++ b/Sources/Secretive/Localizable.xcstrings @@ -0,0 +1,154 @@ +{ + "sourceLanguage" : "en", + "strings" : { + "\n" : { + + }, + "\n\n" : { + + }, + "✓" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "✓" + } + } + } + }, + "agent_running_notice_detail_body" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\\n\\n**You can close Secretive, and everything will still keep working.**" + } + } + } + }, + "agent_running_notice_detail_title" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "SecretAgent is Running" + } + } + } + }, + "agent_running_notice_title" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Agent is Running" + } + } + } + }, + "app_not_in_applications_notice_detail_body" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Secretive needs to be in your Applications folder to work properly. Please move it and relaunch." + } + } + } + }, + "app_not_in_applications_notice_title" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Secretive Is Not in Applications Folder" + } + } + } + }, + "Authentication not required when Mac is unlocked" : { + + }, + "Confirm Name:" : { + + }, + "Create a new one by clicking here." : { + + }, + "Create a New Secret" : { + + }, + "Delete" : { + + }, + "Delete %@?" : { + + }, + "If you delete %@, you will not be able to recover it. Type \"%@\" to confirm." : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "If you delete %1$@, you will not be able to recover it. Type \"%2$@\" to confirm." + } + } + } + }, + "Name:" : { + + }, + "No Secrets" : { + + }, + "No Secure Storage Available" : { + + }, + "Release Notes" : { + + }, + "Rename" : { + + }, + "Requires Authentication (Biometrics or Password) before each use" : { + + }, + "Secret Agent Is Not Running" : { + + }, + "Secretive" : { + + }, + "Secretive %@" : { + + }, + "Secretive supports EC256, EC384, RSA1024, and RSA2048 keys." : { + + }, + "Secretive wants to sign" : { + + }, + "Setup Secretive" : { + + }, + "This helper app is called **Secret Agent** and you may see it in Activity Manager from time to time." : { + + }, + "Touch ID Detail prompt.Detail two." : { + + }, + "Touch ID Prompt" : { + + }, + "Type your new name for \"%@\" below." : { + + }, + "Use your Smart Card's management tool to create a secret." : { + + }, + "Your Mac doesn't have a Secure Enclave, and there's not a compatible Smart Card inserted." : { + + } + }, + "version" : "1.0" +} \ No newline at end of file diff --git a/Sources/Secretive/Views/ContentView.swift b/Sources/Secretive/Views/ContentView.swift index defbf40..e3153c0 100644 --- a/Sources/Secretive/Views/ContentView.swift +++ b/Sources/Secretive/Views/ContentView.swift @@ -138,7 +138,7 @@ extension ContentView { showingAgentInfo = true }, label: { HStack { - Text("Agent is Running") + Text("agent_running_notice_title") .font(.headline) .foregroundColor(colorScheme == .light ? Color(white: 0.3) : .white) Circle() @@ -149,10 +149,10 @@ extension ContentView { .buttonStyle(ToolbarButtonStyle(lightColor: .black.opacity(0.05), darkColor: .white.opacity(0.05))) .popover(isPresented: $showingAgentInfo, attachmentAnchor: attachmentAnchor, arrowEdge: .bottom) { VStack { - Text("SecretAgent is Running") + Text("agent_running_notice_detail_title") .font(.title) .padding(5) - Text("SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**You can close Secretive, and everything will still keep working.**") + Text("agent_running_notice_detail_body") .frame(width: 300) } .padding() @@ -166,7 +166,7 @@ extension ContentView { showingAppPathNotice = true }, label: { Group { - Text("Secretive Is Not in Applications Folder") + Text("app_not_in_applications_notice_title") } .font(.headline) .foregroundColor(.white) @@ -178,7 +178,7 @@ extension ContentView { .resizable() .aspectRatio(contentMode: .fit) .frame(width: 64) - Text("Secretive needs to be in your Applications folder to work properly. Please move it and relaunch.") + Text("app_not_in_applications_notice_detail_body") .frame(maxWidth: 300) } .padding() diff --git a/Sources/Secretive/Views/SetupView.swift b/Sources/Secretive/Views/SetupView.swift index 90f1896..13db4b5 100644 --- a/Sources/Secretive/Views/SetupView.swift +++ b/Sources/Secretive/Views/SetupView.swift @@ -150,7 +150,7 @@ struct SecretAgentSetupView: View { bodyText: "Secretive needs to set up a helper app to work properly. It will sign requests from SSH clients in the background, so you don't need to keep the main Secretive app open.", buttonTitle: "Install", buttonAction: install) { - (Text("This helper app is called ") + Text("Secret Agent").bold().underline() + Text(" and you may see it in Activity Manager from time to time.")) + (Text("This helper app is called **Secret Agent** and you may see it in Activity Manager from time to time.")) .multilineTextAlignment(.center) } }