diff --git a/Modules/Capabilities/AlbumsData/Sources/PhotoCollectionsDataSource.swift b/Modules/Capabilities/AlbumsData/Sources/PhotoCollectionsDataSource.swift index 346fc7dc..3ee7ab01 100644 --- a/Modules/Capabilities/AlbumsData/Sources/PhotoCollectionsDataSource.swift +++ b/Modules/Capabilities/AlbumsData/Sources/PhotoCollectionsDataSource.swift @@ -27,11 +27,11 @@ public class PhotoCollectionsDataSource: NSObject, ObservableObject, PHPhotoLibr private static func allSections() -> [PhotoCollectionSection] { var sections = [ - Self.section(title: AlbumsDataStrings.PhotoCollectionsDataSource.smartAlbumsHeader, types: [.library, .screenshots, .favorites]), + Self.section(title: Strings.PhotoCollectionsDataSource.smartAlbumsHeader, types: [.library, .screenshots, .favorites]), ] if PHPhotoLibrary.authorizationStatus(for: .readWrite) == .authorized { - sections.append(Self.section(title: AlbumsDataStrings.PhotoCollectionsDataSource.userAlbumsHeader, types: [.userAlbum])) + sections.append(Self.section(title: Strings.PhotoCollectionsDataSource.userAlbumsHeader, types: [.userAlbum])) } return sections diff --git a/Modules/Capabilities/AlbumsUI/Sources/AlbumsList.swift b/Modules/Capabilities/AlbumsUI/Sources/AlbumsList.swift index e3346ed7..3cdc818b 100644 --- a/Modules/Capabilities/AlbumsUI/Sources/AlbumsList.swift +++ b/Modules/Capabilities/AlbumsUI/Sources/AlbumsList.swift @@ -26,7 +26,7 @@ public struct AlbumsList: View { } } .listStyle(SidebarListStyle()) - .navigationTitle(AlbumsUIStrings.AlbumsViewController.navigationTitle) + .navigationTitle(Strings.AlbumsViewController.navigationTitle) .environmentObject(navigationWrapper) .albumsListBackground() } diff --git a/Modules/Capabilities/AlbumsUI/Sources/AlbumsViewController.swift b/Modules/Capabilities/AlbumsUI/Sources/AlbumsViewController.swift index 2e26f6d7..dab20cd4 100644 --- a/Modules/Capabilities/AlbumsUI/Sources/AlbumsViewController.swift +++ b/Modules/Capabilities/AlbumsUI/Sources/AlbumsViewController.swift @@ -15,7 +15,7 @@ public class AlbumsViewController: UIHostingController, NavigationWr view.tintColor = .primaryDark if let navigationObject { - navigationItem.title = AlbumsUIStrings.AlbumsViewController.navigationTitle + navigationItem.title = Strings.AlbumsViewController.navigationTitle albumsList.navigationWrapper = NavigationWrapper(navigationObject: navigationObject) self.rootView = albumsList } diff --git a/Modules/Capabilities/DesktopAutoRedactionsUI/Sources/Addition View/AdditionTextLabel.swift b/Modules/Capabilities/DesktopAutoRedactionsUI/Sources/Addition View/AdditionTextLabel.swift index 933685c1..58237a4c 100644 --- a/Modules/Capabilities/DesktopAutoRedactionsUI/Sources/Addition View/AdditionTextLabel.swift +++ b/Modules/Capabilities/DesktopAutoRedactionsUI/Sources/Addition View/AdditionTextLabel.swift @@ -7,7 +7,7 @@ class AdditionTextLabel: UILabel { init() { super.init(frame: .zero) font = .preferredFont(forTextStyle: .body) - text = DesktopAutoRedactionsUIStrings.AdditionTextLabel.text + text = Strings.AdditionTextLabel.text translatesAutoresizingMaskIntoConstraints = false setContentHuggingPriority(.required, for: .horizontal) diff --git a/Modules/Capabilities/DesktopAutoRedactionsUI/Sources/Addition View/CancelButton.swift b/Modules/Capabilities/DesktopAutoRedactionsUI/Sources/Addition View/CancelButton.swift index 9776a3a9..6982e85e 100644 --- a/Modules/Capabilities/DesktopAutoRedactionsUI/Sources/Addition View/CancelButton.swift +++ b/Modules/Capabilities/DesktopAutoRedactionsUI/Sources/Addition View/CancelButton.swift @@ -10,7 +10,7 @@ class CancelButton: UIButton { setContentHuggingPriority(.required, for: .vertical) translatesAutoresizingMaskIntoConstraints = false - setTitle(DesktopAutoRedactionsUIStrings.CancelButton.title, for: .normal) + setTitle(Strings.CancelButton.title, for: .normal) addTarget(nil, action: #selector(AdditionViewController.cancel(_:)), for: .primaryActionTriggered) } } diff --git a/Modules/Capabilities/DesktopAutoRedactionsUI/Sources/Addition View/SaveButton.swift b/Modules/Capabilities/DesktopAutoRedactionsUI/Sources/Addition View/SaveButton.swift index 33ecb850..1b7d55b3 100644 --- a/Modules/Capabilities/DesktopAutoRedactionsUI/Sources/Addition View/SaveButton.swift +++ b/Modules/Capabilities/DesktopAutoRedactionsUI/Sources/Addition View/SaveButton.swift @@ -10,7 +10,7 @@ class SaveButton: UIButton { setContentHuggingPriority(.required, for: .vertical) translatesAutoresizingMaskIntoConstraints = false - setTitle(DesktopAutoRedactionsUIStrings.SaveButton.title, for: .normal) + setTitle(Strings.SaveButton.title, for: .normal) addTarget(nil, action: #selector(AdditionViewController.saveWord), for: .primaryActionTriggered) } } diff --git a/Modules/Capabilities/DesktopAutoRedactionsUI/Sources/Controls/ListHeaderLabel.swift b/Modules/Capabilities/DesktopAutoRedactionsUI/Sources/Controls/ListHeaderLabel.swift index 08a0f269..829fe23c 100644 --- a/Modules/Capabilities/DesktopAutoRedactionsUI/Sources/Controls/ListHeaderLabel.swift +++ b/Modules/Capabilities/DesktopAutoRedactionsUI/Sources/Controls/ListHeaderLabel.swift @@ -8,7 +8,7 @@ class ListHeaderLabel: UILabel { super.init(frame: .zero) font = Self.labelFont - text = DesktopAutoRedactionsUIStrings.DesktopSettingsView.wordListLabel + text = Strings.DesktopSettingsView.wordListLabel translatesAutoresizingMaskIntoConstraints = false } diff --git a/Modules/Capabilities/DocumentScanning/Sources/DocumentScannerBarButtonItem.swift b/Modules/Capabilities/DocumentScanning/Sources/DocumentScannerBarButtonItem.swift index d5110c8c..9db8c3c0 100644 --- a/Modules/Capabilities/DocumentScanning/Sources/DocumentScannerBarButtonItem.swift +++ b/Modules/Capabilities/DocumentScanning/Sources/DocumentScannerBarButtonItem.swift @@ -17,7 +17,7 @@ public class DocumentScannerBarButtonItem: UIBarButtonItem { target: self, action: #selector(presentDocumentScanner(_:)) ) - standard.accessibilityLabel = DocumentScanningStrings.DocumentScannerBarButtonItem.accessibilityLabel + standard.accessibilityLabel = Strings.DocumentScannerBarButtonItem.accessibilityLabel return standard } diff --git a/Modules/Capabilities/DocumentScanning/Sources/PageCountAlertFactory.swift b/Modules/Capabilities/DocumentScanning/Sources/PageCountAlertFactory.swift index f6929dde..6d794034 100644 --- a/Modules/Capabilities/DocumentScanning/Sources/PageCountAlertFactory.swift +++ b/Modules/Capabilities/DocumentScanning/Sources/PageCountAlertFactory.swift @@ -7,14 +7,20 @@ import DesignSystem @MainActor class PageCountAlertFactory: NSObject { static func alert(completionHandler: @escaping (@MainActor () -> Void)) -> UIAlertController { - let alertController = UIAlertController(title: Strings.alertTitle, message: Strings.alertMessage, preferredStyle: .alert) + let alertController = UIAlertController( + title: Strings.PageCountAlertFactory.alertTitle, + message: Strings.PageCountAlertFactory.alertMessage, + preferredStyle: .alert + ) alertController.view.tintColor = .controlTint - alertController.addAction(UIAlertAction(title: Strings.dismissButtonTitle, style: .default) { _ in - completionHandler() - }) + + let dismissAction = UIAlertAction( + title: Strings.PageCountAlertFactory.dismissButtonTitle, + style: .default, + handler: { _ in completionHandler() } + ) + alertController.addAction(dismissAction) return alertController } - - typealias Strings = DocumentScanningStrings.PageCountAlertFactory } diff --git a/Modules/Capabilities/EditingToolbar/Sources/ColorPickerBarButtonItem.swift b/Modules/Capabilities/EditingToolbar/Sources/ColorPickerBarButtonItem.swift index e9fadf4f..b333a057 100644 --- a/Modules/Capabilities/EditingToolbar/Sources/ColorPickerBarButtonItem.swift +++ b/Modules/Capabilities/EditingToolbar/Sources/ColorPickerBarButtonItem.swift @@ -8,7 +8,7 @@ public class ColorPickerBarButtonItem: UIBarButtonItem { self.init(customView: ColorWell(target: target, color: color)) UIView.appearance(whenContainedInInstancesOf: [UIColorPickerViewController.self]).overrideUserInterfaceStyle = .dark - accessibilityLabel = EditingToolbarStrings.ColorPickerBarButtonItem.accessibilityLabel + accessibilityLabel = Strings.ColorPickerBarButtonItem.accessibilityLabel accessibilityValue = color.accessibilityName } diff --git a/Modules/Capabilities/EditingToolbar/Sources/DebugPreferencesBarButtonItem.swift b/Modules/Capabilities/EditingToolbar/Sources/DebugPreferencesBarButtonItem.swift index 5737e969..708a7c3c 100644 --- a/Modules/Capabilities/EditingToolbar/Sources/DebugPreferencesBarButtonItem.swift +++ b/Modules/Capabilities/EditingToolbar/Sources/DebugPreferencesBarButtonItem.swift @@ -7,6 +7,6 @@ import UIKit class DebugPreferencesBarButtonItem: UIBarButtonItem { convenience init(target: AnyObject?) { self.init(image: UIImage(systemName: "ladybug"), style: .plain, target: target, action: #selector(ActionsBuilderActions.showDebugPreferences(_:))) - accessibilityLabel = EditingToolbarStrings.DebugPreferencesBarButtonItem.accessibilityLabel + accessibilityLabel = Strings.DebugPreferencesBarButtonItem.accessibilityLabel } } diff --git a/Modules/Capabilities/EditingToolbar/Sources/DismissBarButtonItem.swift b/Modules/Capabilities/EditingToolbar/Sources/DismissBarButtonItem.swift index 8c40f919..a67587f4 100644 --- a/Modules/Capabilities/EditingToolbar/Sources/DismissBarButtonItem.swift +++ b/Modules/Capabilities/EditingToolbar/Sources/DismissBarButtonItem.swift @@ -10,7 +10,7 @@ public class DismissBarButtonItem: UIBarButtonItem { self.asset = asset super.init() self.style = .done - self.title = EditingToolbarStrings.DismissBarButtonItem.title + self.title = Strings.DismissBarButtonItem.title self.target = self self.action = #selector(handleButton) diff --git a/Modules/Capabilities/EditingToolbar/Sources/HighlighterToolBarButtonItem.swift b/Modules/Capabilities/EditingToolbar/Sources/HighlighterToolBarButtonItem.swift index 8453ae40..7c4e5aa4 100644 --- a/Modules/Capabilities/EditingToolbar/Sources/HighlighterToolBarButtonItem.swift +++ b/Modules/Capabilities/EditingToolbar/Sources/HighlighterToolBarButtonItem.swift @@ -28,14 +28,12 @@ class HighlighterToolBarButtonItem: UIBarButtonItem { private static func title(for tool: HighlighterTool) -> String { switch tool { - case .magic: return Strings.magicToolItem - case .lasso: return Strings.lassoToolItem - case .manual: return Strings.manualToolItem - case .eraser: return Strings.eraserToolItem + case .magic: return Strings.HighlighterToolBarButtonItem.magicToolItem + case .lasso: return Strings.HighlighterToolBarButtonItem.lassoToolItem + case .manual: return Strings.HighlighterToolBarButtonItem.manualToolItem + case .eraser: return Strings.HighlighterToolBarButtonItem.eraserToolItem } } - private static let buttonTitle = Strings.buttonTitle - - private typealias Strings = EditingToolbarStrings.HighlighterToolBarButtonItem + private static let buttonTitle = Strings.HighlighterToolBarButtonItem.buttonTitle } diff --git a/Modules/Capabilities/EditingToolbar/Sources/QuickRedactBarButtonItem.swift b/Modules/Capabilities/EditingToolbar/Sources/QuickRedactBarButtonItem.swift index 125af22f..ec6cde47 100644 --- a/Modules/Capabilities/EditingToolbar/Sources/QuickRedactBarButtonItem.swift +++ b/Modules/Capabilities/EditingToolbar/Sources/QuickRedactBarButtonItem.swift @@ -6,6 +6,6 @@ import UIKit class QuickRedactBarButtonItem: UIBarButtonItem { convenience init(target: AnyObject?) { self.init(image: UIImage(systemName: "gear"), style: .plain, target: target, action: #selector(ActionsBuilderActions.showAutoRedactAccess(_:))) - accessibilityLabel = EditingToolbarStrings.QuickRedactBarButtonItem.accessibilityLabel + accessibilityLabel = Strings.QuickRedactBarButtonItem.accessibilityLabel } } diff --git a/Modules/Capabilities/EditingToolbar/Sources/SeekBarButtonItem.swift b/Modules/Capabilities/EditingToolbar/Sources/SeekBarButtonItem.swift index 83843c67..a569089d 100644 --- a/Modules/Capabilities/EditingToolbar/Sources/SeekBarButtonItem.swift +++ b/Modules/Capabilities/EditingToolbar/Sources/SeekBarButtonItem.swift @@ -7,6 +7,6 @@ import UIKit class SeekBarButtonItem: UIBarButtonItem { convenience init(target: AnyObject?) { self.init(image: Icons.seekAndDestroy, style: .plain, target: target, action: #selector(ActionsBuilderActions.startSeeking(_:))) - accessibilityLabel = EditingToolbarStrings.SeekBarButtonItem.accessibilityLabel + accessibilityLabel = Strings.SeekBarButtonItem.accessibilityLabel } } diff --git a/Modules/Capabilities/EditingToolbar/Tests/DebugPreferencesBarButtonItemTests.swift b/Modules/Capabilities/EditingToolbar/Tests/DebugPreferencesBarButtonItemTests.swift index a3500a97..c4872982 100644 --- a/Modules/Capabilities/EditingToolbar/Tests/DebugPreferencesBarButtonItemTests.swift +++ b/Modules/Capabilities/EditingToolbar/Tests/DebugPreferencesBarButtonItemTests.swift @@ -18,6 +18,6 @@ struct DebugPreferencesBarButtonItemTests { #expect(item.style == .plain) #expect(item.target === target) #expect(item.action == #selector(ActionsBuilderActions.showDebugPreferences(_:))) - #expect(item.accessibilityLabel == EditingToolbarStrings.DebugPreferencesBarButtonItem.accessibilityLabel) + #expect(item.accessibilityLabel == EditingToolbar.Strings.DebugPreferencesBarButtonItem.accessibilityLabel) } } diff --git a/Modules/Capabilities/EditingToolbar/Tests/HighlighterToolBarButtonItemTests.swift b/Modules/Capabilities/EditingToolbar/Tests/HighlighterToolBarButtonItemTests.swift index e4b5313e..f7d89432 100644 --- a/Modules/Capabilities/EditingToolbar/Tests/HighlighterToolBarButtonItemTests.swift +++ b/Modules/Capabilities/EditingToolbar/Tests/HighlighterToolBarButtonItemTests.swift @@ -8,7 +8,7 @@ import Testing @MainActor struct HighlighterToolBarButtonItemTests { - private typealias Strings = EditingToolbarStrings.HighlighterToolBarButtonItem + private typealias Strings = EditingToolbar.Strings.HighlighterToolBarButtonItem @Test(arguments: [ HighlighterTool.magic, diff --git a/Modules/Capabilities/Exporting/Sources/ExportingPreparer.swift b/Modules/Capabilities/Exporting/Sources/ExportingPreparer.swift index e78bd588..7b5bd6a2 100644 --- a/Modules/Capabilities/Exporting/Sources/ExportingPreparer.swift +++ b/Modules/Capabilities/Exporting/Sources/ExportingPreparer.swift @@ -23,7 +23,7 @@ public class ExportingPreparer: NSObject { let exportedImage = try await Rendering.renderer .render(image: image, redactions: redactions) - let representedURLName = "\(ExportingStrings.PhotoEditingExporter.defaultImageName).\(imageType.preferredFilenameExtension ?? "png")" + let representedURLName = "\(Strings.PhotoEditingExporter.defaultImageName).\(imageType.preferredFilenameExtension ?? "png")" let temporaryURL = URL(fileURLWithPath: NSTemporaryDirectory()) .appendingPathComponent(representedURLName) diff --git a/Modules/Capabilities/Exporting/Sources/PhotoExportErrorAlertFactory.swift b/Modules/Capabilities/Exporting/Sources/PhotoExportErrorAlertFactory.swift index 9d03b045..c7f3002b 100644 --- a/Modules/Capabilities/Exporting/Sources/PhotoExportErrorAlertFactory.swift +++ b/Modules/Capabilities/Exporting/Sources/PhotoExportErrorAlertFactory.swift @@ -7,12 +7,12 @@ import UIKit public enum PhotoExportErrorAlertFactory { public static func alert(for error: Error) -> UIAlertController { let alert = UIAlertController( - title: ExportingStrings.PhotoExportErrorAlertFactory.title, - message: ExportingStrings.PhotoExportErrorAlertFactory.messageFormat(error.localizedDescription), + title: Strings.PhotoExportErrorAlertFactory.title, + message: Strings.PhotoExportErrorAlertFactory.messageFormat(error.localizedDescription), preferredStyle: .alert ) alert.addAction( - UIAlertAction(title: ExportingStrings.PhotoExportErrorAlertFactory.dismissButtonTitle, style: .default) + UIAlertAction(title: Strings.PhotoExportErrorAlertFactory.dismissButtonTitle, style: .default) ) alert.view.tintColor = .controlTint return alert diff --git a/Modules/Capabilities/Exporting/Sources/SaveActivity.swift b/Modules/Capabilities/Exporting/Sources/SaveActivity.swift index e6b0667e..393bfe78 100644 --- a/Modules/Capabilities/Exporting/Sources/SaveActivity.swift +++ b/Modules/Capabilities/Exporting/Sources/SaveActivity.swift @@ -19,7 +19,7 @@ class SaveActivity: UIActivity { } override var activityTitle: String? { - ExportingStrings.SaveActivity.title + Strings.SaveActivity.title } override var activityImage: UIImage? { diff --git a/Modules/Capabilities/Exporting/Sources/SaveCopyActivity.swift b/Modules/Capabilities/Exporting/Sources/SaveCopyActivity.swift index 79a9dc91..bd8d6551 100644 --- a/Modules/Capabilities/Exporting/Sources/SaveCopyActivity.swift +++ b/Modules/Capabilities/Exporting/Sources/SaveCopyActivity.swift @@ -10,7 +10,7 @@ import ErrorHandling class SaveCopyActivity: UIActivity { override var activityTitle: String? { - ExportingStrings.SaveCopyActivity.title + Strings.SaveCopyActivity.title } override var activityImage: UIImage? { diff --git a/Modules/Capabilities/IntroView/Sources/IntroView.swift b/Modules/Capabilities/IntroView/Sources/IntroView.swift index 3b2ced50..282e4f55 100644 --- a/Modules/Capabilities/IntroView/Sources/IntroView.swift +++ b/Modules/Capabilities/IntroView/Sources/IntroView.swift @@ -12,11 +12,11 @@ public struct IntroView: View { public var body: some View { VStack(alignment: .leading, spacing: 3) { - IntroLabel(Strings.permissionLabelText) - IntroButton(Strings.permissionButtonTitle, action: permissionAction) + IntroLabel(Strings.IntroView.permissionLabelText) + IntroButton(Strings.IntroView.permissionButtonTitle, action: permissionAction) - IntroLabel(Strings.importLabelText).padding(.top, 12) - IntroButton(Strings.importButtonTitle, action: importAction) + IntroLabel(Strings.IntroView.importLabelText).padding(.top, 12) + IntroButton(Strings.IntroView.importButtonTitle, action: importAction) }.background(Color.appPrimary).frame(maxWidth: 240) } @@ -24,6 +24,4 @@ public struct IntroView: View { private let permissionAction: (() -> Void) private let importAction: (() -> Void) - - private typealias Strings = IntroViewStrings.IntroView } diff --git a/Modules/Capabilities/IntroView/Tests/IntroViewTests.swift b/Modules/Capabilities/IntroView/Tests/IntroViewTests.swift index 6dcabb4b..de86a999 100644 --- a/Modules/Capabilities/IntroView/Tests/IntroViewTests.swift +++ b/Modules/Capabilities/IntroView/Tests/IntroViewTests.swift @@ -12,7 +12,7 @@ struct IntroViewTests { @Test func permissionLabel() throws { let introView = try IntroView().inspect() - _ = try introView.find(IntroLabel.self, containing: Strings.permissionLabelText) + _ = try introView.find(IntroLabel.self, containing: Strings.IntroView.permissionLabelText) } @Test @@ -21,8 +21,8 @@ struct IntroViewTests { let introView = try IntroView( permissionAction: { buttonTapped() } ).inspect() - let button = try introView.find(IntroButton.self, containing: Strings.permissionButtonTitle) - let internalButton = try button.find(button: Strings.permissionButtonTitle) + let button = try introView.find(IntroButton.self, containing: Strings.IntroView.permissionButtonTitle) + let internalButton = try button.find(button: Strings.IntroView.permissionButtonTitle) try internalButton.tap() } } @@ -30,7 +30,7 @@ struct IntroViewTests { @Test func importLabel() throws { let introView = try IntroView().inspect() - _ = try introView.find(IntroLabel.self, containing: Strings.importLabelText) + _ = try introView.find(IntroLabel.self, containing: Strings.IntroView.importLabelText) } @Test @@ -39,8 +39,8 @@ struct IntroViewTests { let introView = try IntroView( importAction: { buttonTapped() } ).inspect() - let button = try introView.find(IntroButton.self, containing: Strings.importButtonTitle) - let internalButton = try button.find(button: Strings.importButtonTitle) + let button = try introView.find(IntroButton.self, containing: Strings.IntroView.importButtonTitle) + let internalButton = try button.find(button: Strings.IntroView.importButtonTitle) try internalButton.tap() } } @@ -52,6 +52,4 @@ struct IntroViewTests { let (_, _, maxWidth, _, _, _, _) = try vStack.flexFrame() #expect(maxWidth == 240) } - - private typealias Strings = IntroViewStrings.IntroView } diff --git a/Modules/Capabilities/MobileAutoRedactionsUI/Sources/AutoRedactionsUI.swift b/Modules/Capabilities/MobileAutoRedactionsUI/Sources/AutoRedactionsUI.swift deleted file mode 100644 index 94ea1cbd..00000000 --- a/Modules/Capabilities/MobileAutoRedactionsUI/Sources/AutoRedactionsUI.swift +++ /dev/null @@ -1,4 +0,0 @@ -// Created by Geoff Pado on 5/31/24. -// Copyright © 2024 Cocoatype, LLC. All rights reserved. - -typealias Strings = MobileAutoRedactionsUIStrings diff --git a/Modules/Capabilities/MobileSettingsUI/Sources/List/App Reviews/ReviewButton.swift b/Modules/Capabilities/MobileSettingsUI/Sources/List/App Reviews/ReviewButton.swift index 5fb4a315..d1ffd65b 100644 --- a/Modules/Capabilities/MobileSettingsUI/Sources/List/App Reviews/ReviewButton.swift +++ b/Modules/Capabilities/MobileSettingsUI/Sources/List/App Reviews/ReviewButton.swift @@ -12,13 +12,11 @@ struct ReviewButton: View { UIApplication.shared.open(URL(staticString: "https://itunes.apple.com/us/app/appName/id1215283742?mt=8&action=write-review")) } label: { ButtonLabel( - title: Strings.appStoreTitle, - subtitle: Strings.appStoreSubtitle, + title: Strings.SettingsContentContactSection.appStoreTitle, + subtitle: Strings.SettingsContentContactSection.appStoreSubtitle, asset: MobileSettingsUIAsset.appStore ) } .settingsCell() } - - private typealias Strings = MobileSettingsUIStrings.SettingsContentContactSection } diff --git a/Modules/Capabilities/MobileSettingsUI/Sources/List/Content/SettingsContentContactSection.swift b/Modules/Capabilities/MobileSettingsUI/Sources/List/Content/SettingsContentContactSection.swift index d07252ad..9b56a00d 100644 --- a/Modules/Capabilities/MobileSettingsUI/Sources/List/Content/SettingsContentContactSection.swift +++ b/Modules/Capabilities/MobileSettingsUI/Sources/List/Content/SettingsContentContactSection.swift @@ -10,7 +10,7 @@ struct SettingsContentContactSection: View { } var body: some View { - Section(header: SettingsSectionHeader(Strings.header)) { + Section(header: SettingsSectionHeader(Strings.SettingsContentContactSection.header)) { MailButton() ReviewButton() BlueskyURLButton() @@ -24,6 +24,4 @@ struct SettingsContentContactSection: View { let versionString = infoDictionary?["CFBundleShortVersionString"] as? String return versionString ?? "???" } - - private typealias Strings = MobileSettingsUIStrings.SettingsContentContactSection } diff --git a/Modules/Capabilities/MobileSettingsUI/Sources/List/Content/SettingsContentInformationSection.swift b/Modules/Capabilities/MobileSettingsUI/Sources/List/Content/SettingsContentInformationSection.swift index f24a902a..578c3928 100644 --- a/Modules/Capabilities/MobileSettingsUI/Sources/List/Content/SettingsContentInformationSection.swift +++ b/Modules/Capabilities/MobileSettingsUI/Sources/List/Content/SettingsContentInformationSection.swift @@ -27,5 +27,5 @@ struct SettingsContentInformationSection: View { return versionString ?? "???" } - private typealias Strings = MobileSettingsUIStrings.SettingsContentInformationSection + private typealias Strings = MobileSettingsUI.Strings.SettingsContentInformationSection } diff --git a/Modules/Capabilities/MobileSettingsUI/Sources/List/Content/SettingsContentOtherAppsSection.swift b/Modules/Capabilities/MobileSettingsUI/Sources/List/Content/SettingsContentOtherAppsSection.swift index 85d28188..c027bcda 100644 --- a/Modules/Capabilities/MobileSettingsUI/Sources/List/Content/SettingsContentOtherAppsSection.swift +++ b/Modules/Capabilities/MobileSettingsUI/Sources/List/Content/SettingsContentOtherAppsSection.swift @@ -5,7 +5,7 @@ import SwiftUI struct SettingsContentOtherAppsSection: View { var body: some View { - Section(header: SettingsSectionHeader(MobileSettingsUIStrings.SettingsContentOtherAppsSection.header)) { + Section(header: SettingsSectionHeader(Strings.SettingsContentOtherAppsSection.header)) { OtherAppButton( name: "Barc", subtitle: "Save and store loyalty cards", diff --git a/Modules/Capabilities/MobileSettingsUI/Sources/List/Content/SettingsContentPurchasedFeaturesSection.swift b/Modules/Capabilities/MobileSettingsUI/Sources/List/Content/SettingsContentPurchasedFeaturesSection.swift index 7e340213..75cdad2a 100644 --- a/Modules/Capabilities/MobileSettingsUI/Sources/List/Content/SettingsContentPurchasedFeaturesSection.swift +++ b/Modules/Capabilities/MobileSettingsUI/Sources/List/Content/SettingsContentPurchasedFeaturesSection.swift @@ -36,5 +36,5 @@ struct SettingsContentPurchasedFeaturesSection: View { } } - private typealias Strings = MobileSettingsUIStrings.SettingsContentPurchasedFeaturesSection + private typealias Strings = MobileSettingsUI.Strings.SettingsContentPurchasedFeaturesSection } diff --git a/Modules/Capabilities/MobileSettingsUI/Sources/List/DoneButton.swift b/Modules/Capabilities/MobileSettingsUI/Sources/List/DoneButton.swift index 1e1eed97..9f9d83c5 100644 --- a/Modules/Capabilities/MobileSettingsUI/Sources/List/DoneButton.swift +++ b/Modules/Capabilities/MobileSettingsUI/Sources/List/DoneButton.swift @@ -10,7 +10,7 @@ struct DoneButton: View { } var body: some View { - Button(MobileSettingsUIStrings.DoneButton.label, action: action) + Button(Strings.DoneButton.label, action: action) .foregroundColor(.white) .font(Font.navigationBarButtonFont) } diff --git a/Modules/Capabilities/MobileSettingsUI/Sources/List/Mail/MailButton.swift b/Modules/Capabilities/MobileSettingsUI/Sources/List/Mail/MailButton.swift index 89854b8a..8b3b3fea 100644 --- a/Modules/Capabilities/MobileSettingsUI/Sources/List/Mail/MailButton.swift +++ b/Modules/Capabilities/MobileSettingsUI/Sources/List/Mail/MailButton.swift @@ -61,5 +61,5 @@ struct MailButton: View { // the URL to open to send e-mail private static let whatHaveYouDone = URL(staticString: "mailto:hello@cocoatype.com") - private typealias Strings = MobileSettingsUIStrings.SettingsContentContactSection + private typealias Strings = MobileSettingsUI.Strings.SettingsContentContactSection } diff --git a/Modules/Capabilities/MobileSettingsUI/Sources/List/SettingsView.swift b/Modules/Capabilities/MobileSettingsUI/Sources/List/SettingsView.swift index 1de463fb..5615b3fc 100644 --- a/Modules/Capabilities/MobileSettingsUI/Sources/List/SettingsView.swift +++ b/Modules/Capabilities/MobileSettingsUI/Sources/List/SettingsView.swift @@ -29,7 +29,7 @@ public struct SettingsView: View { SettingsList(dismissAction: dismissAction) { SettingsContent(state: purchaseState) } - .navigationTitle(MobileSettingsUIStrings.SettingsViewController.navigationTitle) + .navigationTitle(Strings.SettingsViewController.navigationTitle) .navigationBarTitleDisplayMode(.inline) } .environment(\.readableWidth, readableWidth) diff --git a/Modules/Capabilities/MobileSettingsUI/Sources/Purchase Item/PurchaseSubtitle.swift b/Modules/Capabilities/MobileSettingsUI/Sources/Purchase Item/PurchaseSubtitle.swift index e41b9edd..d6614176 100644 --- a/Modules/Capabilities/MobileSettingsUI/Sources/Purchase Item/PurchaseSubtitle.swift +++ b/Modules/Capabilities/MobileSettingsUI/Sources/Purchase Item/PurchaseSubtitle.swift @@ -39,7 +39,7 @@ struct PurchaseSubtitle: View { return Strings.withProduct(displayPrice) } - private typealias Strings = MobileSettingsUIStrings.PurchaseSubtitle + private typealias Strings = MobileSettingsUI.Strings.PurchaseSubtitle } #if DEBUG diff --git a/Modules/Capabilities/MobileSettingsUI/Sources/Purchase Item/PurchaseTitle.swift b/Modules/Capabilities/MobileSettingsUI/Sources/Purchase Item/PurchaseTitle.swift index 802d6a59..5f2bad31 100644 --- a/Modules/Capabilities/MobileSettingsUI/Sources/Purchase Item/PurchaseTitle.swift +++ b/Modules/Capabilities/MobileSettingsUI/Sources/Purchase Item/PurchaseTitle.swift @@ -5,7 +5,7 @@ import SwiftUI struct PurchaseTitle: View { var body: some View { - return Text(MobileSettingsUIStrings.PurchaseItem.title) + return Text(Strings.PurchaseItem.title) .font(.app(textStyle: .title3)) .foregroundColor(.white) } diff --git a/Modules/Capabilities/MobileSettingsUI/Sources/SettingsBarButtonItem.swift b/Modules/Capabilities/MobileSettingsUI/Sources/SettingsBarButtonItem.swift index 7862b313..2f9cee97 100644 --- a/Modules/Capabilities/MobileSettingsUI/Sources/SettingsBarButtonItem.swift +++ b/Modules/Capabilities/MobileSettingsUI/Sources/SettingsBarButtonItem.swift @@ -7,7 +7,7 @@ import UIKit public class SettingsBarButtonItem: UIBarButtonItem { public static var standard: SettingsBarButtonItem { let standard = SettingsBarButtonItem(image: Icons.help, style: .plain, target: nil, action: #selector(Actions.presentSettingsViewController)) - standard.accessibilityLabel = MobileSettingsUIStrings.SettingsBarButtonItem.accessibilityLabel + standard.accessibilityLabel = Strings.SettingsBarButtonItem.accessibilityLabel return standard } diff --git a/Modules/Capabilities/MobileSettingsUI/Sources/Web URLs/Instances/BlueskyURLButton.swift b/Modules/Capabilities/MobileSettingsUI/Sources/Web URLs/Instances/BlueskyURLButton.swift index 85e13b11..5d6a5b47 100644 --- a/Modules/Capabilities/MobileSettingsUI/Sources/Web URLs/Instances/BlueskyURLButton.swift +++ b/Modules/Capabilities/MobileSettingsUI/Sources/Web URLs/Instances/BlueskyURLButton.swift @@ -6,14 +6,12 @@ import SwiftUI struct BlueskyURLButton: View { var body: some View { WebURLButton( - title: Strings.blueskyTitle, - subtitle: Strings.blueskySubtitle, + title: Strings.SettingsContentContactSection.blueskyTitle, + subtitle: Strings.SettingsContentContactSection.blueskySubtitle, asset: MobileSettingsUIAsset.bluesky, url: URL(websitePath: "contact/bluesky") ) } - - private typealias Strings = MobileSettingsUIStrings.SettingsContentContactSection } #Preview { diff --git a/Modules/Capabilities/MobileSettingsUI/Sources/Web URLs/Instances/FacebookURLButton.swift b/Modules/Capabilities/MobileSettingsUI/Sources/Web URLs/Instances/FacebookURLButton.swift index 21a79646..52fb0c22 100644 --- a/Modules/Capabilities/MobileSettingsUI/Sources/Web URLs/Instances/FacebookURLButton.swift +++ b/Modules/Capabilities/MobileSettingsUI/Sources/Web URLs/Instances/FacebookURLButton.swift @@ -6,14 +6,12 @@ import SwiftUI struct FacebookURLButton: View { var body: some View { WebURLButton( - title: Strings.facebookTitle, - subtitle: Strings.facebookSubtitle, + title: Strings.SettingsContentContactSection.facebookTitle, + subtitle: Strings.SettingsContentContactSection.facebookSubtitle, asset: MobileSettingsUIAsset.facebook, url: URL(websitePath: "contact/facebook") ) } - - private typealias Strings = MobileSettingsUIStrings.SettingsContentContactSection } #Preview { diff --git a/Modules/Capabilities/MobileSettingsUI/Sources/Web URLs/Instances/ThreadsURLButton.swift b/Modules/Capabilities/MobileSettingsUI/Sources/Web URLs/Instances/ThreadsURLButton.swift index 92252a0c..58dd1fa9 100644 --- a/Modules/Capabilities/MobileSettingsUI/Sources/Web URLs/Instances/ThreadsURLButton.swift +++ b/Modules/Capabilities/MobileSettingsUI/Sources/Web URLs/Instances/ThreadsURLButton.swift @@ -6,14 +6,12 @@ import SwiftUI struct ThreadsURLButton: View { var body: some View { WebURLButton( - title: Strings.threadsTitle, - subtitle: Strings.threadsSubtitle, + title: Strings.SettingsContentContactSection.threadsTitle, + subtitle: Strings.SettingsContentContactSection.threadsSubtitle, asset: MobileSettingsUIAsset.threads, url: URL(websitePath: "contact/threads") ) } - - private typealias Strings = MobileSettingsUIStrings.SettingsContentContactSection } #Preview { diff --git a/Modules/Capabilities/MobileSettingsUI/Sources/Web URLs/Instances/XURLButton.swift b/Modules/Capabilities/MobileSettingsUI/Sources/Web URLs/Instances/XURLButton.swift index d9def6cf..d2d5ae67 100644 --- a/Modules/Capabilities/MobileSettingsUI/Sources/Web URLs/Instances/XURLButton.swift +++ b/Modules/Capabilities/MobileSettingsUI/Sources/Web URLs/Instances/XURLButton.swift @@ -6,14 +6,12 @@ import SwiftUI struct XURLButton: View { var body: some View { WebURLButton( - title: Strings.twitterTitle, - subtitle: Strings.twitterSubtitle, + title: Strings.SettingsContentContactSection.twitterTitle, + subtitle: Strings.SettingsContentContactSection.twitterSubtitle, asset: MobileSettingsUIAsset.x, url: URL(websitePath: "contact/x") ) } - - private typealias Strings = MobileSettingsUIStrings.SettingsContentContactSection } #Preview { diff --git a/Modules/Capabilities/Paywall/Sources/Footer/DurationPicker.swift b/Modules/Capabilities/Paywall/Sources/Footer/DurationPicker.swift index c63b7dfa..0aaa2e35 100644 --- a/Modules/Capabilities/Paywall/Sources/Footer/DurationPicker.swift +++ b/Modules/Capabilities/Paywall/Sources/Footer/DurationPicker.swift @@ -21,7 +21,7 @@ struct DurationPicker: View { Picker(selection: $selectedOption) { ForEach(options, content: DurationPickerItem.init) } label: { - Text(PaywallStrings.DurationPicker.label) + Text(Strings.DurationPicker.label) } .pickerStyle(.segmented) .introspect(.picker(style: .segmented), on: .iOS(.v13, .v14, .v15, .v16, .v17, .v18), customize: { segmentedControl in diff --git a/Modules/Capabilities/Paywall/Sources/Footer/DurationPickerItem.swift b/Modules/Capabilities/Paywall/Sources/Footer/DurationPickerItem.swift index f54bcc5c..3a03520e 100644 --- a/Modules/Capabilities/Paywall/Sources/Footer/DurationPickerItem.swift +++ b/Modules/Capabilities/Paywall/Sources/Footer/DurationPickerItem.swift @@ -22,17 +22,15 @@ struct DurationPickerItem: View { private var shortName: String? { switch option.duration { case .monthly: - return Strings.Monthly.shortName + return Strings.PaywallOption.Monthly.shortName case .annual where option.isTrialEligible: - return Strings.YearlyWithTrial.shortName + return Strings.PaywallOption.YearlyWithTrial.shortName case .annual: - return Strings.Yearly.shortName + return Strings.PaywallOption.Yearly.shortName case .oneTime: - return Strings.OneTime.shortName + return Strings.PaywallOption.OneTime.shortName case .unknown: return nil } } - - private typealias Strings = PaywallStrings.PaywallOption } diff --git a/Modules/Capabilities/Paywall/Sources/Footer/FooterPrivacyLink.swift b/Modules/Capabilities/Paywall/Sources/Footer/FooterPrivacyLink.swift index 8c19ccc3..d7efaae0 100644 --- a/Modules/Capabilities/Paywall/Sources/Footer/FooterPrivacyLink.swift +++ b/Modules/Capabilities/Paywall/Sources/Footer/FooterPrivacyLink.swift @@ -19,12 +19,12 @@ struct FooterPrivacyLink: View { var body: some View { if usesShortTitle { FooterLink( - title: PaywallStrings.FooterPrivacyLink.shortTitle, + title: Strings.FooterPrivacyLink.shortTitle, action: openPrivacy ) } else { FooterLink( - title: PaywallStrings.FooterPrivacyLink.title, + title: Strings.FooterPrivacyLink.title, action: openPrivacy ) } diff --git a/Modules/Capabilities/Paywall/Sources/Footer/FooterPurchaseButton.swift b/Modules/Capabilities/Paywall/Sources/Footer/FooterPurchaseButton.swift index d3ac2c1a..992ea654 100644 --- a/Modules/Capabilities/Paywall/Sources/Footer/FooterPurchaseButton.swift +++ b/Modules/Capabilities/Paywall/Sources/Footer/FooterPurchaseButton.swift @@ -46,29 +46,29 @@ struct FooterPurchaseButton: View { private var title: String { switch purchaseState { case .loading: - return Strings.loadingTitle + return Strings.PurchaseButton.loadingTitle case .purchasing, .restoring: - return Strings.purchasingTitle + return Strings.PurchaseButton.purchasingTitle case .readyForPurchase: - guard let selectedOption else { return Strings.loadingTitle } + guard let selectedOption else { return Strings.PurchaseButton.loadingTitle } switch selectedOption.duration { case .monthly: - return PaywallStrings.PaywallOption.Monthly.buttonTitle + return Strings.PaywallOption.Monthly.buttonTitle case .annual: if selectedOption.isTrialEligible { - return PaywallStrings.PaywallOption.YearlyWithTrial.buttonTitle + return Strings.PaywallOption.YearlyWithTrial.buttonTitle } else { - return PaywallStrings.PaywallOption.Yearly.buttonTitle + return Strings.PaywallOption.Yearly.buttonTitle } case .oneTime: - return PaywallStrings.PaywallOption.OneTime.buttonTitle + return Strings.PaywallOption.OneTime.buttonTitle case .unknown: - return Strings.readyTitle(selectedOption.displayPrice) + return Strings.PurchaseButton.readyTitle(selectedOption.displayPrice) } case .unavailable: - return Strings.loadingTitle + return Strings.PurchaseButton.loadingTitle case .purchased: - return Strings.purchasedTitle + return Strings.PurchaseButton.purchasedTitle } } @@ -92,8 +92,6 @@ struct FooterPurchaseButton: View { isErrorAlertPresented = true } } - - private typealias Strings = PaywallStrings.PurchaseButton } #if DEBUG diff --git a/Modules/Capabilities/Paywall/Sources/Footer/FooterRestoreLink.swift b/Modules/Capabilities/Paywall/Sources/Footer/FooterRestoreLink.swift index 72204c65..c04cb7df 100644 --- a/Modules/Capabilities/Paywall/Sources/Footer/FooterRestoreLink.swift +++ b/Modules/Capabilities/Paywall/Sources/Footer/FooterRestoreLink.swift @@ -20,12 +20,12 @@ struct FooterRestoreLink: View { var body: some View { if usesShortTitle { FooterLink( - title: PaywallStrings.FooterRestoreLink.shortTitle, + title: Strings.FooterRestoreLink.shortTitle, action: restore ) } else { FooterLink( - title: PaywallStrings.FooterRestoreLink.title, + title: Strings.FooterRestoreLink.title, action: restore ) } diff --git a/Modules/Capabilities/Paywall/Sources/Footer/FooterTermsLink.swift b/Modules/Capabilities/Paywall/Sources/Footer/FooterTermsLink.swift index 9ceb69b8..ab7fc566 100644 --- a/Modules/Capabilities/Paywall/Sources/Footer/FooterTermsLink.swift +++ b/Modules/Capabilities/Paywall/Sources/Footer/FooterTermsLink.swift @@ -18,11 +18,9 @@ struct FooterTermsLink: View { var body: some View { if usesShortTitle { - FooterLink(title: Strings.shortTitle, action: openTerms) + FooterLink(title: Strings.FooterTermsLink.shortTitle, action: openTerms) } else { - FooterLink(title: Strings.title, action: openTerms) + FooterLink(title: Strings.FooterTermsLink.title, action: openTerms) } } - - private typealias Strings = PaywallStrings.FooterTermsLink } diff --git a/Modules/Capabilities/Paywall/Sources/Footer/PaywallOptionDescription.swift b/Modules/Capabilities/Paywall/Sources/Footer/PaywallOptionDescription.swift index de2c30b6..b0a6b816 100644 --- a/Modules/Capabilities/Paywall/Sources/Footer/PaywallOptionDescription.swift +++ b/Modules/Capabilities/Paywall/Sources/Footer/PaywallOptionDescription.swift @@ -22,19 +22,17 @@ struct PaywallOptionDescription: View { private var description: String? { switch option.duration { case .monthly: - return Strings.Monthly.message(option.displayPrice) + return Strings.PaywallOption.Monthly.message(option.displayPrice) case .annual where option.isTrialEligible: - return Strings.YearlyWithTrial.message(option.displayPrice) + return Strings.PaywallOption.YearlyWithTrial.message(option.displayPrice) case .annual: - return Strings.Yearly.message(option.displayPrice) + return Strings.PaywallOption.Yearly.message(option.displayPrice) case .oneTime: - return Strings.OneTime.message(option.displayPrice) + return Strings.PaywallOption.OneTime.message(option.displayPrice) case .unknown: return nil } } - - private typealias Strings = PaywallStrings.PaywallOption } #if DEBUG diff --git a/Modules/Capabilities/Paywall/Sources/Footer/PurchaseErrorAlertModifier.swift b/Modules/Capabilities/Paywall/Sources/Footer/PurchaseErrorAlertModifier.swift index 863f3670..a18be2e7 100644 --- a/Modules/Capabilities/Paywall/Sources/Footer/PurchaseErrorAlertModifier.swift +++ b/Modules/Capabilities/Paywall/Sources/Footer/PurchaseErrorAlertModifier.swift @@ -12,14 +12,12 @@ struct PurchaseErrorAlertModifier: ViewModifier { func body(content: Content) -> some View { content - .alert(Strings.errorTitle, isPresented: $isPresented) { - Button(Strings.dismissButton) {} + .alert(Strings.PurchaseErrorAlertModifier.errorTitle, isPresented: $isPresented) { + Button(Strings.PurchaseErrorAlertModifier.dismissButton) {} } message: { - Text(Strings.errorMessage) + Text(Strings.PurchaseErrorAlertModifier.errorMessage) } } - - private typealias Strings = PaywallStrings.PurchaseErrorAlertModifier } @available(iOS 16.0, *) diff --git a/Modules/Capabilities/Paywall/Sources/PaywallView.swift b/Modules/Capabilities/Paywall/Sources/PaywallView.swift index 7c1e70ae..59c5e16d 100644 --- a/Modules/Capabilities/Paywall/Sources/PaywallView.swift +++ b/Modules/Capabilities/Paywall/Sources/PaywallView.swift @@ -87,7 +87,7 @@ public struct PaywallView: View { } } - private typealias Strings = PaywallStrings.PaywallView + private typealias Strings = Paywall.Strings.PaywallView let inspection = Inspection() } diff --git a/Modules/Capabilities/Paywall/Sources/Top Bar/TopBarHeadline.swift b/Modules/Capabilities/Paywall/Sources/Top Bar/TopBarHeadline.swift index c4164de6..1737366e 100644 --- a/Modules/Capabilities/Paywall/Sources/Top Bar/TopBarHeadline.swift +++ b/Modules/Capabilities/Paywall/Sources/Top Bar/TopBarHeadline.swift @@ -5,7 +5,7 @@ import SwiftUI struct TopBarHeadline: View { var body: some View { - Text(PaywallStrings.TopBarHeadline.text) + Text(Strings.TopBarHeadline.text) .foregroundColor(.white) .lineLimit(2) .fixedSize(horizontal: false, vertical: true) diff --git a/Modules/Capabilities/Paywall/Sources/Top Bar/TopBarSubheadline.swift b/Modules/Capabilities/Paywall/Sources/Top Bar/TopBarSubheadline.swift index 9b716aba..cbebb27d 100644 --- a/Modules/Capabilities/Paywall/Sources/Top Bar/TopBarSubheadline.swift +++ b/Modules/Capabilities/Paywall/Sources/Top Bar/TopBarSubheadline.swift @@ -6,7 +6,7 @@ import SwiftUI struct TopBarSubheadline: View { var body: some View { - Text(PaywallStrings.TopBarSubheadline.text) + Text(Strings.TopBarSubheadline.text) .foregroundColor(.primaryUltraLight) .lineLimit(nil) .fixedSize(horizontal: false, vertical: true) diff --git a/Modules/Capabilities/PhotoLibrary/Sources/AssetPhotoLibraryViewCell.swift b/Modules/Capabilities/PhotoLibrary/Sources/AssetPhotoLibraryViewCell.swift index 9250044e..c3252462 100644 --- a/Modules/Capabilities/PhotoLibrary/Sources/AssetPhotoLibraryViewCell.swift +++ b/Modules/Capabilities/PhotoLibrary/Sources/AssetPhotoLibraryViewCell.swift @@ -32,7 +32,7 @@ class AssetPhotoLibraryViewCell: UICollectionViewCell { if let date = asset.creationDate { dateString = Self.dateFormatter.string(from: date) } else { dateString = "" } - accessibilityLabel = PhotoLibraryStrings.AssetPhotoLibraryViewCell.accessibilityLabelFormat(dateString) + accessibilityLabel = Strings.AssetPhotoLibraryViewCell.accessibilityLabelFormat(dateString) accessibilityTraits = .button } } diff --git a/Modules/Capabilities/PhotoLibrary/Sources/LimitedLibraryBarButtonItem.swift b/Modules/Capabilities/PhotoLibrary/Sources/LimitedLibraryBarButtonItem.swift index 588cfcf9..f9d8563b 100644 --- a/Modules/Capabilities/PhotoLibrary/Sources/LimitedLibraryBarButtonItem.swift +++ b/Modules/Capabilities/PhotoLibrary/Sources/LimitedLibraryBarButtonItem.swift @@ -14,7 +14,7 @@ public class LimitedLibraryBarButtonItem: UIBarButtonItem { target: nil, action: #selector(LimitedLibraryPresenting.presentLimitedLibrary) ) - standard.accessibilityLabel = PhotoLibraryStrings.DocumentScannerPhotoLibraryViewCell.defaultAccessibilityLabel + standard.accessibilityLabel = Strings.DocumentScannerPhotoLibraryViewCell.defaultAccessibilityLabel return standard } diff --git a/Modules/Capabilities/PhotoLibrary/Sources/PhotoLibraryViewController.swift b/Modules/Capabilities/PhotoLibrary/Sources/PhotoLibraryViewController.swift index 704a1e80..10bc717f 100644 --- a/Modules/Capabilities/PhotoLibrary/Sources/PhotoLibraryViewController.swift +++ b/Modules/Capabilities/PhotoLibrary/Sources/PhotoLibraryViewController.swift @@ -22,7 +22,7 @@ class PhotoLibraryViewController: UIViewController, UICollectionViewDelegate, UI PHPhotoLibrary.shared().register(self) - navigationItem.title = collection.title ?? PhotoLibraryStrings.PhotoLibraryViewController.navigationItemTitle + navigationItem.title = collection.title ?? Strings.PhotoLibraryViewController.navigationItemTitle navigationItem.rightBarButtonItems = PhotoLibraryBarButtonsProvider().trailingNavigationItems.reversed() hideDocumentScannerObserver = NotificationCenter.default.addObserver( @@ -74,7 +74,7 @@ class PhotoLibraryViewController: UIViewController, UICollectionViewDelegate, UI let newDataSource = PhotoLibraryDataSource(newCollection) dataSource = newDataSource shouldScrollToBottom = true - navigationItem.title = collection.title ?? PhotoLibraryStrings.PhotoLibraryViewController.navigationItemTitle + navigationItem.title = collection.title ?? Strings.PhotoLibraryViewController.navigationItemTitle } } diff --git a/Modules/Capabilities/PhotoPermissions/Sources/PhotoPermissionsDeniedAlertController.swift b/Modules/Capabilities/PhotoPermissions/Sources/PhotoPermissionsDeniedAlertController.swift index c8a32b80..1cdac6ce 100644 --- a/Modules/Capabilities/PhotoPermissions/Sources/PhotoPermissionsDeniedAlertController.swift +++ b/Modules/Capabilities/PhotoPermissions/Sources/PhotoPermissionsDeniedAlertController.swift @@ -16,7 +16,11 @@ public struct PhotoPermissionsDeniedAlertFactory { } public func alert() -> UIAlertController { - let alertController = UIAlertController(title: Strings.alertTitle, message: Strings.alertMessage, preferredStyle: .alert) + let alertController = UIAlertController( + title: Strings.PhotoPermissionsDeniedAlertFactory.alertTitle, + message: Strings.PhotoPermissionsDeniedAlertFactory.alertMessage, + preferredStyle: .alert + ) alertController.view.tintColor = .controlTint alertController.addAction(settingsAction()) @@ -26,14 +30,19 @@ public struct PhotoPermissionsDeniedAlertFactory { } private func settingsAction() -> PhotoPermissionsAlertAction { - PhotoPermissionsAlertAction.action(title: Strings.actionButtonTitle, style: .default) { + PhotoPermissionsAlertAction.action( + title: Strings.PhotoPermissionsDeniedAlertFactory.actionButtonTitle, + style: .default + ) { guard let settingsURL = URL(string: UIApplication.openSettingsURLString) else { return } urlOpener.open(settingsURL, options: [:], completionHandler: nil) } } - private let cancelAction = PhotoPermissionsAlertAction.action(title: Strings.cancelButtonTitle, style: .cancel, handlerBody: nil) - - typealias Strings = PhotoPermissionsStrings.PhotoPermissionsDeniedAlertFactory + private let cancelAction = PhotoPermissionsAlertAction.action( + title: Strings.PhotoPermissionsDeniedAlertFactory.cancelButtonTitle, + style: .cancel, + handlerBody: nil + ) } protocol URLOpening { diff --git a/Modules/Capabilities/PhotoPermissions/Sources/PhotoPermissionsRestrictedAlertController.swift b/Modules/Capabilities/PhotoPermissions/Sources/PhotoPermissionsRestrictedAlertController.swift index 58b08b29..386f004d 100644 --- a/Modules/Capabilities/PhotoPermissions/Sources/PhotoPermissionsRestrictedAlertController.swift +++ b/Modules/Capabilities/PhotoPermissions/Sources/PhotoPermissionsRestrictedAlertController.swift @@ -8,7 +8,11 @@ public struct PhotoPermissionsRestrictedAlertFactory { public init() {} public func alert() -> UIAlertController { - let alertController = UIAlertController(title: Strings.alertTitle, message: Strings.alertMessage, preferredStyle: .alert) + let alertController = UIAlertController( + title: Strings.PhotoPermissionsRestrictedAlertFactory.alertTitle, + message: Strings.PhotoPermissionsRestrictedAlertFactory.alertMessage, + preferredStyle: .alert + ) alertController.view.tintColor = .controlTint alertController.addAction(dismissAction) @@ -16,7 +20,9 @@ public struct PhotoPermissionsRestrictedAlertFactory { return alertController } - private let dismissAction = PhotoPermissionsAlertAction.action(title: Strings.dismissButtonTitle, style: .cancel, handlerBody: nil) - - private typealias Strings = PhotoPermissionsStrings.PhotoPermissionsRestrictedAlertFactory + private let dismissAction = PhotoPermissionsAlertAction.action( + title: Strings.PhotoPermissionsRestrictedAlertFactory.dismissButtonTitle, + style: .cancel, + handlerBody: nil + ) } diff --git a/Modules/Capabilities/Unpurchased/Sources/UnpurchasedAlertControllerFactory.swift b/Modules/Capabilities/Unpurchased/Sources/UnpurchasedAlertControllerFactory.swift index 8af30338..3cb7b435 100644 --- a/Modules/Capabilities/Unpurchased/Sources/UnpurchasedAlertControllerFactory.swift +++ b/Modules/Capabilities/Unpurchased/Sources/UnpurchasedAlertControllerFactory.swift @@ -55,5 +55,5 @@ public class UnpurchasedAlertControllerFactory { return alertController } - private typealias Strings = UnpurchasedStrings.UnpurchasedAlert + private typealias Strings = Unpurchased.Strings.UnpurchasedAlert } diff --git a/Modules/Capabilities/Unpurchased/Sources/UnpurchasedAlertViewModifier.swift b/Modules/Capabilities/Unpurchased/Sources/UnpurchasedAlertViewModifier.swift index b229e8dc..3a83601e 100644 --- a/Modules/Capabilities/Unpurchased/Sources/UnpurchasedAlertViewModifier.swift +++ b/Modules/Capabilities/Unpurchased/Sources/UnpurchasedAlertViewModifier.swift @@ -46,7 +46,7 @@ public struct UnpurchasedAlertViewModifier: ViewModifier { } } - private typealias Strings = UnpurchasedStrings.UnpurchasedAlert + private typealias Strings = Unpurchased.Strings.UnpurchasedAlert } public extension View { diff --git a/Modules/Capabilities/Unpurchased/Sources/UnpurchasedFeature.swift b/Modules/Capabilities/Unpurchased/Sources/UnpurchasedFeature.swift index d04e03ff..c722fca5 100644 --- a/Modules/Capabilities/Unpurchased/Sources/UnpurchasedFeature.swift +++ b/Modules/Capabilities/Unpurchased/Sources/UnpurchasedFeature.swift @@ -29,5 +29,5 @@ public struct UnpurchasedFeature { let learnMoreAction: LearnMoreAction? let hideFeatureKey: Key? - private typealias Strings = UnpurchasedStrings.UnpurchasedFeature + private typealias Strings = Unpurchased.Strings.UnpurchasedFeature } diff --git a/Modules/Capabilities/Unpurchased/Tests/UnpurchasedAlertControllerFactoryTests.swift b/Modules/Capabilities/Unpurchased/Tests/UnpurchasedAlertControllerFactoryTests.swift index d6a63878..876f2a93 100644 --- a/Modules/Capabilities/Unpurchased/Tests/UnpurchasedAlertControllerFactoryTests.swift +++ b/Modules/Capabilities/Unpurchased/Tests/UnpurchasedAlertControllerFactoryTests.swift @@ -37,7 +37,7 @@ struct UnpurchasedAlertControllerFactoryTests { #expect(alert.actions.count == 1) let cancelAction = try #require(alert.actions.first) - #expect(cancelAction.title == UnpurchasedStrings.UnpurchasedAlert.dismissButton) + #expect(cancelAction.title == Strings.UnpurchasedAlert.dismissButton) #expect(cancelAction.style == .cancel) // just for code coverage @@ -57,7 +57,7 @@ struct UnpurchasedAlertControllerFactoryTests { #expect(alert.actions.count == 2) let learnMoreAction = try #require(alert.actions.first) - #expect(learnMoreAction.title == UnpurchasedStrings.UnpurchasedAlert.learnMoreButton) + #expect(learnMoreAction.title == Strings.UnpurchasedAlert.learnMoreButton) #expect(learnMoreAction.style == .default) let handler = try #require((learnMoreAction as? UnpurchasedAlertAction)?.action) handler() @@ -78,7 +78,7 @@ struct UnpurchasedAlertControllerFactoryTests { #expect(alert.actions.count == 2) let hideAction = try #require(alert.actions.first) - #expect(hideAction.title == UnpurchasedStrings.UnpurchasedAlert.hideButton) + #expect(hideAction.title == Strings.UnpurchasedAlert.hideButton) #expect(hideAction.style == .default) let handler = try #require((hideAction as? UnpurchasedAlertAction)?.action) handler() diff --git a/Modules/Capabilities/UserActivities/Sources/EditingUserActivity.swift b/Modules/Capabilities/UserActivities/Sources/EditingUserActivity.swift index 28b7a6f9..6f559f27 100644 --- a/Modules/Capabilities/UserActivities/Sources/EditingUserActivity.swift +++ b/Modules/Capabilities/UserActivities/Sources/EditingUserActivity.swift @@ -7,7 +7,7 @@ import UIKit public class EditingUserActivity: NSUserActivity { public init(assetLocalIdentifier: String? = nil, imageBookmarkData: Data? = nil, imageData: Data? = nil, redactions: [Redaction]? = nil) { super.init(activityType: EditingUserActivity.defaultActivityType) - title = UserActivitiesStrings.EditingUserActivity.activityTitle + title = Strings.EditingUserActivity.activityTitle self.assetLocalIdentifier = assetLocalIdentifier self.imageBookmarkData = imageBookmarkData self.imageData = imageData diff --git a/Modules/Capabilities/UserActivities/Sources/LibraryUserActivity.swift b/Modules/Capabilities/UserActivities/Sources/LibraryUserActivity.swift index 984da52f..1769da3f 100644 --- a/Modules/Capabilities/UserActivities/Sources/LibraryUserActivity.swift +++ b/Modules/Capabilities/UserActivities/Sources/LibraryUserActivity.swift @@ -22,7 +22,7 @@ public class LibraryUserActivity: NSUserActivity { self.chumbawamba = chumbawamba super.init(activityType: LibraryUserActivity.libraryActivityType) - title = UserActivitiesStrings.LibraryUserActivity.activityTitle + title = Strings.LibraryUserActivity.activityTitle } public convenience init?(userActivity: NSUserActivity) { diff --git a/Modules/Legacy/Core/Sources/Application/Help Menu/HelpMenuAboutAction.swift b/Modules/Legacy/Core/Sources/Application/Help Menu/HelpMenuAboutAction.swift index 94a5a374..b1ae259f 100644 --- a/Modules/Legacy/Core/Sources/Application/Help Menu/HelpMenuAboutAction.swift +++ b/Modules/Legacy/Core/Sources/Application/Help Menu/HelpMenuAboutAction.swift @@ -14,7 +14,7 @@ class HelpMenuAboutAction: UIAction { // MARK: Boilerplate - private static let menuItemTitle = MobileSettingsUIStrings.SettingsContentInformationSection.aboutTitle + private static let menuItemTitle = MobileSettingsUI.Strings.SettingsContentInformationSection.aboutTitle @available(*, unavailable) required init(coder: NSCoder) { diff --git a/Modules/Legacy/Core/Sources/Application/Help Menu/HelpMenuAcknowledgementsAction.swift b/Modules/Legacy/Core/Sources/Application/Help Menu/HelpMenuAcknowledgementsAction.swift index 72d2941f..f48d48b7 100644 --- a/Modules/Legacy/Core/Sources/Application/Help Menu/HelpMenuAcknowledgementsAction.swift +++ b/Modules/Legacy/Core/Sources/Application/Help Menu/HelpMenuAcknowledgementsAction.swift @@ -14,7 +14,7 @@ class HelpMenuAcknowledgementsAction: UIAction { // MARK: Boilerplate - private static let menuItemTitle = MobileSettingsUIStrings.SettingsContentInformationSection.acknowledgementsTitle + private static let menuItemTitle = MobileSettingsUI.Strings.SettingsContentInformationSection.acknowledgementsTitle @available(*, unavailable) required init(coder: NSCoder) { diff --git a/Modules/Legacy/Core/Sources/Application/Help Menu/HelpMenuContactAction.swift b/Modules/Legacy/Core/Sources/Application/Help Menu/HelpMenuContactAction.swift index 5bec1f02..410f1ff5 100644 --- a/Modules/Legacy/Core/Sources/Application/Help Menu/HelpMenuContactAction.swift +++ b/Modules/Legacy/Core/Sources/Application/Help Menu/HelpMenuContactAction.swift @@ -14,7 +14,7 @@ class HelpMenuContactAction: UIAction { // MARK: Boilerplate - private static let menuItemTitle = MobileSettingsUIStrings.SettingsContentContactSection.header + private static let menuItemTitle = MobileSettingsUI.Strings.SettingsContentContactSection.header @available(*, unavailable) required init(coder: NSCoder) { diff --git a/Modules/Legacy/Core/Sources/Application/Help Menu/HelpMenuPrivacyAction.swift b/Modules/Legacy/Core/Sources/Application/Help Menu/HelpMenuPrivacyAction.swift index 13048cbe..099dcf84 100644 --- a/Modules/Legacy/Core/Sources/Application/Help Menu/HelpMenuPrivacyAction.swift +++ b/Modules/Legacy/Core/Sources/Application/Help Menu/HelpMenuPrivacyAction.swift @@ -14,7 +14,7 @@ class HelpMenuPrivacyAction: UIAction { // MARK: Boilerplate - private static let menuItemTitle = MobileSettingsUIStrings.SettingsContentInformationSection.privacyTitle + private static let menuItemTitle = MobileSettingsUI.Strings.SettingsContentInformationSection.privacyTitle @available(*, unavailable) required init(coder: NSCoder) { diff --git a/Modules/Legacy/Core/Sources/Application/MenuBuilder.swift b/Modules/Legacy/Core/Sources/Application/MenuBuilder.swift index 6b829ed3..47b68346 100644 --- a/Modules/Legacy/Core/Sources/Application/MenuBuilder.swift +++ b/Modules/Legacy/Core/Sources/Application/MenuBuilder.swift @@ -5,13 +5,13 @@ import Editing import UIKit -enum MenuBuilder { - @MainActor static func buildMenu(with builder: UIMenuBuilder) { +@MainActor enum MenuBuilder { + static func buildMenu(with builder: UIMenuBuilder) { guard builder.system == .main else { return } let documentChildren = [ - UIKeyCommand(title: Strings.saveMenuItemTitle, action: #selector(PhotoEditingViewController.save(_:)), input: "S", modifierFlags: [.command]), - UIKeyCommand(title: Strings.saveAsMenuItemTitle, action: #selector(PhotoEditingViewController.saveAs(_:)), input: "S", modifierFlags: [.command, .shift]), + saveMenuItem, + saveAsMenuItem, ] if #available(macCatalyst 16.0, *) { @@ -29,9 +29,10 @@ enum MenuBuilder { let recentsMenuDataSource = RecentsMenuDataSource() builder.replace(menu: .openRecent, with: recentsMenuDataSource.recentsMenu) - let findMenu = UIMenu(options: .displayInline, children: [ - UIKeyCommand(title: Strings.findMenuItemTitle, action: #selector(PhotoEditingViewController.startSeeking(_:)), input: "F", modifierFlags: [.command]) - ]) + let findMenu = UIMenu( + options: .displayInline, + children: [findMenuItem] + ) builder.insertSibling(findMenu, beforeMenu: .spelling) let helpMenuDataSource = HelpMenuDataSource() @@ -39,13 +40,40 @@ enum MenuBuilder { helpMenuDataSource.helpMenu.children } - let preferencesMenu = UIMenu(options: .displayInline, children: [ - UIKeyCommand(title: Strings.preferencesMenuItemTitle, action: #selector(AppDelegate.displayPreferences), input: ",", modifierFlags: [.command]) - ]) + let preferencesMenu = UIMenu( + options: .displayInline, + children: [preferencesMenuItem] + ) builder.insertSibling(preferencesMenu, afterMenu: .about) } - private typealias Strings = CoreStrings.MenuBuilder + private static let saveMenuItem = UIKeyCommand( + title: Strings.MenuBuilder.saveMenuItemTitle, + action: #selector(PhotoEditingViewController.save(_:)), + input: "S", + modifierFlags: [.command] + ) + + private static let saveAsMenuItem = UIKeyCommand( + title: Strings.MenuBuilder.saveAsMenuItemTitle, + action: #selector(PhotoEditingViewController.saveAs(_:)), + input: "S", + modifierFlags: [.command, .shift] + ) + + private static let findMenuItem = UIKeyCommand( + title: Strings.MenuBuilder.findMenuItemTitle, + action: #selector(PhotoEditingViewController.startSeeking(_:)), + input: "F", + modifierFlags: [.command] + ) + + private static let preferencesMenuItem = UIKeyCommand( + title: Strings.MenuBuilder.preferencesMenuItemTitle, + action: #selector(AppDelegate.displayPreferences), + input: ",", + modifierFlags: [.command] + ) } #endif diff --git a/Modules/Legacy/Core/Sources/Application/NewFromClipboardCommand.swift b/Modules/Legacy/Core/Sources/Application/NewFromClipboardCommand.swift index e89d4673..52033075 100644 --- a/Modules/Legacy/Core/Sources/Application/NewFromClipboardCommand.swift +++ b/Modules/Legacy/Core/Sources/Application/NewFromClipboardCommand.swift @@ -6,7 +6,12 @@ import UIKit #if targetEnvironment(macCatalyst) class NewFromClipboardCommand: UIKeyCommand { override convenience init() { - self.init(title: CoreStrings.NewFromClipboardCommand.title, action: #selector(AppDelegate.newSceneFromClipboard), input: "N", modifierFlags: [.command, .alternate]) + self.init( + title: Strings.NewFromClipboardCommand.title, + action: #selector(AppDelegate.newSceneFromClipboard), + input: "N", + modifierFlags: [.command, .alternate] + ) } } #endif diff --git a/Modules/Legacy/Core/Sources/Application/Recents Menu/RecentsMenuDataSource.swift b/Modules/Legacy/Core/Sources/Application/Recents Menu/RecentsMenuDataSource.swift index 94d0a73a..fbccea69 100644 --- a/Modules/Legacy/Core/Sources/Application/Recents Menu/RecentsMenuDataSource.swift +++ b/Modules/Legacy/Core/Sources/Application/Recents Menu/RecentsMenuDataSource.swift @@ -37,7 +37,11 @@ import ErrorHandling } var recentsMenu: UIMenu { - UIMenu(title: Strings.menuTitle, identifier: nil, children: menuItems + [clearMenu]) + UIMenu( + title: Strings.RecentsMenuDataSource.menuTitle, + identifier: nil, + children: menuItems + [clearMenu] + ) } private var menuItems: [UIMenuElement] { @@ -46,9 +50,15 @@ import ErrorHandling } } - private let clearMenu = UIMenu(options: .displayInline, children: [ - UICommand(title: Strings.clearMenuItemTitle, action: #selector(AppDelegate.clearRecents)) - ]) + private let clearMenu = UIMenu( + options: .displayInline, + children: [ + UICommand( + title: Strings.RecentsMenuDataSource.clearMenuItemTitle, + action: #selector(AppDelegate.clearRecents) + ), + ] + ) private func icon(for url: URL) -> UIImage? { let cgImage = FileIconFetcher().icon(for: url).takeUnretainedValue() @@ -62,7 +72,5 @@ import ErrorHandling return recentBookmarks .compactMap { try? URL(resolvingBookmarkData: $0, relativeTo: nil, bookmarkDataIsStale: &bool) } } - - private typealias Strings = CoreStrings.RecentsMenuDataSource } #endif diff --git a/Modules/Legacy/Core/Sources/Desktop/Toolbar Items/ColorPickerItem.swift b/Modules/Legacy/Core/Sources/Desktop/Toolbar Items/ColorPickerItem.swift index d4e6671c..d165c737 100644 --- a/Modules/Legacy/Core/Sources/Desktop/Toolbar Items/ColorPickerItem.swift +++ b/Modules/Legacy/Core/Sources/Desktop/Toolbar Items/ColorPickerItem.swift @@ -13,7 +13,7 @@ class ColorPickerItem: NSToolbarItem { super.init(itemIdentifier: Self.identifier) image = UIImage(systemName: "paintpalette")?.applyingSymbolConfiguration(.init(scale: .large)) isBordered = true - label = CoreStrings.ColorPickerItem.itemLabel + label = Strings.ColorPickerItem.itemLabel target = delegate action = #selector(ColorPickerItemDelegate.displayColorPicker) diff --git a/Modules/Legacy/Core/Sources/Desktop/Toolbar Items/SeekItem.swift b/Modules/Legacy/Core/Sources/Desktop/Toolbar Items/SeekItem.swift index 950fd3ac..c0e8e029 100644 --- a/Modules/Legacy/Core/Sources/Desktop/Toolbar Items/SeekItem.swift +++ b/Modules/Legacy/Core/Sources/Desktop/Toolbar Items/SeekItem.swift @@ -13,7 +13,7 @@ class SeekItem: NSToolbarItem { super.init(itemIdentifier: Self.identifier) image = UIImage(systemName: "magnifyingglass")?.applyingSymbolConfiguration(.init(scale: .large)) isBordered = true - label = CoreStrings.SeekItem.label + label = Strings.SeekItem.label target = delegate action = #selector(SeekItemDelegate.toggleSeeking(_:)) diff --git a/Modules/Legacy/Core/Sources/Desktop/Toolbar Items/ShareItem.swift b/Modules/Legacy/Core/Sources/Desktop/Toolbar Items/ShareItem.swift index 4ce2d9d6..268fc821 100644 --- a/Modules/Legacy/Core/Sources/Desktop/Toolbar Items/ShareItem.swift +++ b/Modules/Legacy/Core/Sources/Desktop/Toolbar Items/ShareItem.swift @@ -13,7 +13,7 @@ class ShareItem: NSSharingServicePickerToolbarItem, UIActivityItemsConfiguration super.init(itemIdentifier: Self.identifier) image = UIImage(systemName: "square.and.arrow.up") - label = CoreStrings.ShareItem.label + label = Strings.ShareItem.label isEnabled = true activityItemsConfiguration = self diff --git a/Modules/Legacy/Core/Sources/Desktop/Toolbar Items/ToolPickerItem.swift b/Modules/Legacy/Core/Sources/Desktop/Toolbar Items/ToolPickerItem.swift index d89afecd..c63c4c12 100644 --- a/Modules/Legacy/Core/Sources/Desktop/Toolbar Items/ToolPickerItem.swift +++ b/Modules/Legacy/Core/Sources/Desktop/Toolbar Items/ToolPickerItem.swift @@ -14,12 +14,17 @@ class ToolPickerItem: NSMenuToolbarItem { self.delegate = delegate super.init(itemIdentifier: Self.identifier) image = selectedToolImage - label = Strings.itemLabel + label = Strings.ToolPickerItem.itemLabel itemMenu = currentMenu } private var currentMenu: UIMenu { - UIMenu(title: Strings.menuTitle, children: HighlighterTool.allCases.map { Command(tool: $0, currentTool: delegate.highlighterTool) }) + UIMenu( + title: Strings.ToolPickerItem.menuTitle, + children: HighlighterTool.allCases.map { + Command(tool: $0, currentTool: delegate.highlighterTool) + } + ) } private var selectedToolImage: UIImage? { @@ -36,8 +41,6 @@ class ToolPickerItem: NSMenuToolbarItem { itemMenu = currentMenu } - private typealias Strings = CoreStrings.ToolPickerItem - private class Command: UICommand { convenience init(tool: HighlighterTool, currentTool: HighlighterTool) { self.init(title: Self.title(for: tool), image: tool.image, action: #selector(PhotoEditingViewController.selectHighlighterTool(_:)), propertyList: HighlighterTool.allCases.firstIndex(of: tool), state: (currentTool == tool ? .on : .off)) @@ -45,10 +48,10 @@ class ToolPickerItem: NSMenuToolbarItem { static func title(for tool: HighlighterTool) -> String { switch tool { - case .magic: Strings.magicToolItem - case .lasso: Strings.lassoToolItem - case .manual: Strings.manualToolItem - case .eraser: Strings.eraserToolItem + case .magic: Strings.ToolPickerItem.magicToolItem + case .lasso: Strings.ToolPickerItem.lassoToolItem + case .manual: Strings.ToolPickerItem.manualToolItem + case .eraser: Strings.ToolPickerItem.eraserToolItem } } diff --git a/Modules/Legacy/Core/Sources/Desktop/Toolbar Items/Zoom/ZoomInItem.swift b/Modules/Legacy/Core/Sources/Desktop/Toolbar Items/Zoom/ZoomInItem.swift index 59b404a1..dcf93795 100644 --- a/Modules/Legacy/Core/Sources/Desktop/Toolbar Items/Zoom/ZoomInItem.swift +++ b/Modules/Legacy/Core/Sources/Desktop/Toolbar Items/Zoom/ZoomInItem.swift @@ -15,7 +15,7 @@ class ZoomInItem: NSToolbarItem { image = UIImage(systemName: "plus.magnifyingglass")? .applyingSymbolConfiguration(.init(scale: .large)) isBordered = true - label = CoreStrings.ZoomInItem.label + label = Strings.ZoomInItem.label target = delegate action = #selector(ZoomItemDelegate.zoomIn(_:)) diff --git a/Modules/Legacy/Core/Sources/Desktop/Toolbar Items/Zoom/ZoomItemGroup.swift b/Modules/Legacy/Core/Sources/Desktop/Toolbar Items/Zoom/ZoomItemGroup.swift index 4e4aab5b..762a9247 100644 --- a/Modules/Legacy/Core/Sources/Desktop/Toolbar Items/Zoom/ZoomItemGroup.swift +++ b/Modules/Legacy/Core/Sources/Desktop/Toolbar Items/Zoom/ZoomItemGroup.swift @@ -16,7 +16,7 @@ class ZoomItemGroup: NSToolbarItemGroup { init(delegate: any ZoomItemDelegate) { super.init(itemIdentifier: Self.identifier) - label = CoreStrings.ZoomItemGroup.label + label = Strings.ZoomItemGroup.label subitems = [ZoomOutItem(delegate: delegate), ZoomInItem(delegate: delegate)] } } diff --git a/Modules/Legacy/Core/Sources/Desktop/Toolbar Items/Zoom/ZoomOutItem.swift b/Modules/Legacy/Core/Sources/Desktop/Toolbar Items/Zoom/ZoomOutItem.swift index f101f12f..fad2e93b 100644 --- a/Modules/Legacy/Core/Sources/Desktop/Toolbar Items/Zoom/ZoomOutItem.swift +++ b/Modules/Legacy/Core/Sources/Desktop/Toolbar Items/Zoom/ZoomOutItem.swift @@ -15,7 +15,7 @@ class ZoomOutItem: NSToolbarItem { image = UIImage(systemName: "minus.magnifyingglass")? .applyingSymbolConfiguration(.init(scale: .large)) isBordered = true - label = CoreStrings.ZoomOutItem.label + label = Strings.ZoomOutItem.label target = delegate action = #selector(ZoomItemDelegate.zoomOut(_:)) diff --git a/Modules/Legacy/Core/Sources/Scene/DesktopSettingsSceneDelegate.swift b/Modules/Legacy/Core/Sources/Scene/DesktopSettingsSceneDelegate.swift index 131c26c5..fd856f9c 100644 --- a/Modules/Legacy/Core/Sources/Scene/DesktopSettingsSceneDelegate.swift +++ b/Modules/Legacy/Core/Sources/Scene/DesktopSettingsSceneDelegate.swift @@ -16,7 +16,7 @@ class DesktopSettingsSceneDelegate: NSObject, UIWindowSceneDelegate { scene.sizeRestrictions?.maximumSize = CGSize(width: 640, height: Double.greatestFiniteMagnitude) scene.sizeRestrictions?.minimumSize = CGSize(width: 640, height: 320) - scene.title = CoreStrings.DesktopSettingsSceneDelegate.windowTitle + scene.title = Strings.DesktopSettingsSceneDelegate.windowTitle let window = AppWindow(windowScene: scene) let settingsViewController = DesktopSettingsViewController() diff --git a/Modules/Legacy/Editing/Sources/Desktop/DesktopSaveAlertController.swift b/Modules/Legacy/Editing/Sources/Desktop/DesktopSaveAlertController.swift index c15a38cb..41ecfd18 100644 --- a/Modules/Legacy/Editing/Sources/Desktop/DesktopSaveAlertController.swift +++ b/Modules/Legacy/Editing/Sources/Desktop/DesktopSaveAlertController.swift @@ -7,7 +7,13 @@ import UIKit class DesktopSaveAlertController: UIAlertController { convenience init(error: DesktopSaveError) { self.init(title: error.alertTitle, message: error.alertMessage, preferredStyle: .alert) - addAction(UIAlertAction(title: EditingStrings.DesktopSaveAlertController.dismissButtonTitle, style: .default, handler: nil)) + addAction( + UIAlertAction( + title: Strings.DesktopSaveAlertController.dismissButtonTitle, + style: .default, + handler: nil + ) + ) } } #endif diff --git a/Modules/Legacy/Editing/Sources/Desktop/DesktopSaveError.swift b/Modules/Legacy/Editing/Sources/Desktop/DesktopSaveError.swift index 20088770..ca5b4c1e 100644 --- a/Modules/Legacy/Editing/Sources/Desktop/DesktopSaveError.swift +++ b/Modules/Legacy/Editing/Sources/Desktop/DesktopSaveError.swift @@ -8,13 +8,13 @@ enum DesktopSaveError: Error { var alertTitle: String { switch self { - case .missingRepresentedURL: return EditingStrings.DesktopSaveError.missingRepresentedURLTitle - case .missingImageType: return EditingStrings.DesktopSaveError.missingImageTypeTitle - case .noImageData: return EditingStrings.DesktopSaveError.noImageDataTitle + case .missingRepresentedURL: return Strings.DesktopSaveError.missingRepresentedURLTitle + case .missingImageType: return Strings.DesktopSaveError.missingImageTypeTitle + case .noImageData: return Strings.DesktopSaveError.noImageDataTitle } } var alertMessage: String { - return EditingStrings.DesktopSaveError.alertMessage + return Strings.DesktopSaveError.alertMessage } } diff --git a/Modules/Legacy/Editing/Sources/Editing View/Accessibility/RedactedWordObservationRotor.swift b/Modules/Legacy/Editing/Sources/Editing View/Accessibility/RedactedWordObservationRotor.swift index 4f45d3ce..a03b2193 100644 --- a/Modules/Legacy/Editing/Sources/Editing View/Accessibility/RedactedWordObservationRotor.swift +++ b/Modules/Legacy/Editing/Sources/Editing View/Accessibility/RedactedWordObservationRotor.swift @@ -5,7 +5,7 @@ import UIKit class RedactedWordObservationRotor: UIAccessibilityCustomRotor { init(accessibilityElements: [WordObservationAccessibilityElement]?) { - super.init(name: EditingStrings.RedactedWordObservationRotor.name) { predicate in + super.init(name: Strings.RedactedWordObservationRotor.name) { predicate in guard let accessibilityElements = accessibilityElements, let currentItem = Result(result: predicate.currentItem), let currentItemIndex = accessibilityElements.firstIndex(of: currentItem.element) diff --git a/Modules/Legacy/Editing/Sources/Editing View/Accessibility/WordObservationAccessibilityElement.swift b/Modules/Legacy/Editing/Sources/Editing View/Accessibility/WordObservationAccessibilityElement.swift index d47587d8..e72ec530 100644 --- a/Modules/Legacy/Editing/Sources/Editing View/Accessibility/WordObservationAccessibilityElement.swift +++ b/Modules/Legacy/Editing/Sources/Editing View/Accessibility/WordObservationAccessibilityElement.swift @@ -15,7 +15,7 @@ class WordObservationAccessibilityElement: UIAccessibilityElement { accessibilityLabel = wordObservation.string accessibilityFrameInContainerSpace = wordObservation.bounds.boundingBox accessibilityTraits = .button - accessibilityValue = isRedacted ? EditingStrings.WordObservationAccessibilityElement.redactedValue : nil + accessibilityValue = isRedacted ? Strings.WordObservationAccessibilityElement.redactedValue : nil } private let onActivate: (WordObservation, Bool) -> Bool diff --git a/Modules/Legacy/Editing/Sources/Editing View/PhotoEditingProtectionAlertController.swift b/Modules/Legacy/Editing/Sources/Editing View/PhotoEditingProtectionAlertController.swift index afe30aad..5ccd33a1 100644 --- a/Modules/Legacy/Editing/Sources/Editing View/PhotoEditingProtectionAlertController.swift +++ b/Modules/Legacy/Editing/Sources/Editing View/PhotoEditingProtectionAlertController.swift @@ -66,7 +66,7 @@ class PhotoEditingProtectionAlertController: UIAlertController { fatalError("\(className) does not implement init(coder:)") } - private typealias Strings = EditingStrings.PhotoEditingProtectionAlertController + private typealias Strings = Editing.Strings.PhotoEditingProtectionAlertController } @MainActor protocol PhotoEditingProtectionAlertDelegate: AnyObject { diff --git a/Modules/Legacy/Editing/Sources/Editing View/PhotoEditingViewController.swift b/Modules/Legacy/Editing/Sources/Editing View/PhotoEditingViewController.swift index d56273ba..cb1fbd11 100644 --- a/Modules/Legacy/Editing/Sources/Editing View/PhotoEditingViewController.swift +++ b/Modules/Legacy/Editing/Sources/Editing View/PhotoEditingViewController.swift @@ -601,7 +601,7 @@ public class PhotoEditingViewController: UIViewController, UIScrollViewDelegate, fatalError("\(className) does not implement init(coder:)") } - private typealias Strings = EditingStrings.PhotoEditingViewController + private typealias Strings = Editing.Strings.PhotoEditingViewController } @objc @MainActor public protocol PhotoEditingActions: NSObjectProtocol { diff --git a/Modules/Legacy/Editing/Sources/Editing View/Seek and Destroy/Desktop/DesktopSeekButton.swift b/Modules/Legacy/Editing/Sources/Editing View/Seek and Destroy/Desktop/DesktopSeekButton.swift index 2fe5be81..21832816 100644 --- a/Modules/Legacy/Editing/Sources/Editing View/Seek and Destroy/Desktop/DesktopSeekButton.swift +++ b/Modules/Legacy/Editing/Sources/Editing View/Seek and Destroy/Desktop/DesktopSeekButton.swift @@ -13,7 +13,7 @@ class DesktopSeekButton: UIButton { addSubview(box) titleLabel?.font = Self.font - setTitle(EditingStrings.DesktopSeekButton.title, for: .normal) + setTitle(Strings.DesktopSeekButton.title, for: .normal) setTitleColor(.secondaryLabel, for: .normal) setTitleColor(.label, for: .highlighted) contentEdgeInsets = UIEdgeInsets(top: 0, left: 8, bottom: 0, right: 8) diff --git a/Tuist/ResourceSynthesizers/Strings.stencil b/Tuist/ResourceSynthesizers/Strings.stencil new file mode 100644 index 00000000..f6c1992a --- /dev/null +++ b/Tuist/ResourceSynthesizers/Strings.stencil @@ -0,0 +1,153 @@ +// swiftlint:disable all +// swift-format-ignore-file +// swiftformat:disable all +// Generated using tuist — https://github.com/tuist/tuist + +{% if tables.count > 0 %} +{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} +{% set bundleToken %}{{param.name}}Resources{% endset %} +import Foundation + +// swiftlint:disable superfluous_disable_command file_length implicit_return + +// MARK: - Strings + +{% macro parametersBlock types %}{% filter removeNewlines:"leading" %} + {% for type in types %} + {% if type == "String" %} + _ p{{forloop.counter}}: Any + {% else %} + _ p{{forloop.counter}}: {{type}} + {% endif %} + {{ ", " if not forloop.last }} + {% endfor %} +{% endfilter %}{% endmacro %} +{% macro argumentsBlock types %}{% filter removeNewlines:"leading" %} + {% for type in types %} + {% if type == "String" %} + String(describing: p{{forloop.counter}}) + {% elif type == "UnsafeRawPointer" %} + Int(bitPattern: p{{forloop.counter}}) + {% else %} + p{{forloop.counter}} + {% endif %} + {{ ", " if not forloop.last }} + {% endfor %} +{% endfilter %}{% endmacro %} +{% macro interpolationBlock types %}{% filter removeNewlines:"leading" %} + {% for type in types %} + {% if type == "String" %} + \(String(describing: p{{forloop.counter}})) + {% elif type == "UnsafeRawPointer" %} + \(Int(bitPattern: p{{forloop.counter}})) + {% else %} + \(p{{forloop.counter}}) + {% endif %} + {% endfor %} +{% endfilter %}{% endmacro %} +{% macro recursiveBlock table item %} + {% for string in item.strings %} + {% if not param.noComments %} + /// {{string.translation}} + {% endif %} + {% if string.types %} + {{accessModifier}} static func {{string.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}({% call parametersBlock string.types %}) -> String { + return {{enumName}}.tr("{{table}}", "{{string.key}}", {% call argumentsBlock string.types %}) + } + {% elif param.lookupFunction %} + {# custom localization function is mostly used for in-app lang selection, so we want the loc to be recomputed at each call for those (hence the computed var) #} + {{accessModifier}} static var {{string.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}: String { return {{enumName}}.tr("{{table}}", "{{string.key}}") } + {% else %} + {{accessModifier}} static let {{string.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{enumName}}.tr("{{table}}", "{{string.key}}") + {% endif %} + {% endfor %} + {% for child in item.children %} + + {{accessModifier}} enum {{child.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call recursiveBlock table child %}{% endfilter %} + } + {% endfor %} +{% endmacro %} +{% macro despecified string %}{% filter replace:"%[0-9]*\$?[0-9]*\.?[0-9]*[diouxXfFeEgGcCsSpn@]","","regex"|removeNewlines:"leading" %} + {{ string }} +{% endfilter %}{% endmacro %} +{% macro recursiveResourcesBlock table item %} + {% for string in item.strings %} + {% if not param.noComments %} + /// {{string.translation}} + {% endif %} + {% if string.types %} + {{accessModifier}} static func {{string.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}({% call parametersBlock string.types %}) -> LocalizedStringResource { + let value = String.LocalizationValue("{% call despecified string.key %}{% call interpolationBlock string.types %}") + return {{resourcesEnumName}}.tr("{{table}}", value) + } + {% else %} + {{accessModifier}} static let {{string.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{resourcesEnumName}}.tr("{{table}}", "{{string.key}}") + {% endif %} + {% endfor %} + {% for child in item.children %} + + {{accessModifier}} enum {{child.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call recursiveResourcesBlock table child %}{% endfilter %} + } + {% endfor %} +{% endmacro %} +// swiftlint:disable explicit_type_interface function_parameter_count identifier_name line_length +// swiftlint:disable nesting type_body_length type_name +{% set enumName %}Strings{% endset %} +{{accessModifier}} enum {{enumName}} { + {% if tables.count > 1 or param.forceFileNameEnum %} + {% for table in tables %} + {{accessModifier}} enum {{table.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call recursiveBlock table.name table.levels %}{% endfilter %} + } + {% endfor %} + {% else %} + {% call recursiveBlock tables.first.name tables.first.levels %} + {% endif %} +} + +@available(iOS 16.0, *) +{% set resourcesEnumName %}StringResources{% endset %} +{{accessModifier}} enum {{resourcesEnumName}} { + {% if tables.count > 1 or param.forceFileNameEnum %} + {% for table in tables %} + {{accessModifier}} enum {{table.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { + {% filter indent:2 %}{% call recursiveResourcesBlock table.name table.levels %}{% endfilter %} + } + {% endfor %} + {% else %} + {% call recursiveResourcesBlock tables.first.name tables.first.levels %} + {% endif %} +} +// swiftlint:enable explicit_type_interface function_parameter_count identifier_name line_length +// swiftlint:enable nesting type_body_length type_name + +// MARK: - Implementation Details + +extension {{enumName}} { + private static func tr(_ table: String, _ key: String, _ args: CVarArg...) -> String { + {% if param.lookupFunction %} + let format = {{ param.lookupFunction }}(key, table) + {% else %} + let format = Bundle.module.localizedString(forKey: key, value: nil, table: table) + {% endif %} + return String(format: format, locale: Locale.current, arguments: args) + } +} + +@available(iOS 16.0, *) +extension {{resourcesEnumName}} { + private static func tr(_ table: String, _ localizationValue: String.LocalizationValue) -> LocalizedStringResource { + return LocalizedStringResource(localizationValue, table: table, locale: Locale.current, bundle: .atURL(Bundle.module.bundleURL)) + } +} +{% if not param.lookupFunction %} + +// swiftlint:disable convenience_type +{% endif %} +{% else %} +// No string found +{% endif %} +// swiftlint:enable all +// swiftformat:enable all \ No newline at end of file diff --git a/Widgets/Sources/DocumentScanControl.swift b/Widgets/Sources/DocumentScanControl.swift index d387887b..6fede02c 100644 --- a/Widgets/Sources/DocumentScanControl.swift +++ b/Widgets/Sources/DocumentScanControl.swift @@ -15,7 +15,7 @@ struct DocumentScanControl: ControlWidget { kind: "com.cocoatype.Highlighter.DocumentScanControl" ) { ControlWidgetButton( - WidgetsStrings.DocumentScanControl.title, + Strings.DocumentScanControl.title, action: OpenDocumentScannerIntent() ) { _ in Image(systemName: "doc.text.viewfinder") diff --git a/mise.toml b/mise.toml index 491fa129..98cf625d 100644 --- a/mise.toml +++ b/mise.toml @@ -2,7 +2,7 @@ run = "tuist generate" [tasks.lint] -run = "swiftlint lint" +run = "swiftlint lint --quiet" [tasks.module] run = "tuist scaffold module --name"