Sfoglia il codice sorgente

Add language selection button to Settings page.

Co-authored-by: Cursor <cursoragent@cursor.com>
AhtashamShahzad1 2 mesi fa
parent
commit
8db4d9c81d
1 ha cambiato i file con 54 aggiunte e 1 eliminazioni
  1. 54 1
      App for Indeed/Views/DashboardView.swift

+ 54 - 1
App for Indeed/Views/DashboardView.swift

@@ -148,6 +148,7 @@ final class DashboardView: NSView, NSTextFieldDelegate, NSSharingServicePickerDe
     private let savedJobsStack = NSStackView()
     private let settingsPageContainer = NSView()
     private weak var appearanceModeSegment: NSSegmentedControl?
+    private weak var languagePopUp: NSPopUpButton?
     private let cvMakerPageContainer = NSView()
     private lazy var cvMakerPageView: CVMakerPageView = {
         CVMakerPageView()
@@ -316,6 +317,12 @@ final class DashboardView: NSView, NSTextFieldDelegate, NSSharingServicePickerDe
         freeJobSearchQuotaLabel.textColor = Theme.secondaryText
 
         appearanceModeSegment?.selectedSegment = AppAppearanceManager.shared.mode.segmentIndex
+        if let langPopUp = languagePopUp {
+            let saved = UserDefaults.standard.string(forKey: Self.languageUserDefaultsKey) ?? "en"
+            if let index = Self.supportedLanguages.firstIndex(where: { $0.code == saved }) {
+                langPopUp.selectItem(at: index)
+            }
+        }
         cvMakerPageView.applyCurrentAppearance()
         profilesListPageView.applyCurrentAppearance()
         myProfilePageView.applyCurrentAppearance()
@@ -1758,8 +1765,11 @@ final class DashboardView: NSView, NSTextFieldDelegate, NSSharingServicePickerDe
 
         let themeSegment = makeAppearanceModeSegment()
         appearanceModeSegment = themeSegment
+        let langPopUp = makeLanguagePopUp()
+        languagePopUp = langPopUp
         let appearanceSection = makeSettingsSection(rows: [
-            makeSettingsRow(title: "Theme", systemImage: "circle.lefthalf.filled", accessory: themeSegment, tapAction: nil)
+            makeSettingsRow(title: "Theme", systemImage: "circle.lefthalf.filled", accessory: themeSegment, tapAction: nil),
+            makeSettingsRow(title: "Language", systemImage: "character.bubble", accessory: langPopUp, tapAction: nil)
         ])
 
         let appearanceStack = NSStackView(views: [appearanceTitle, appearanceSection])
@@ -1830,6 +1840,49 @@ final class DashboardView: NSView, NSTextFieldDelegate, NSSharingServicePickerDe
         AppAppearanceManager.shared.mode = mode
     }
 
+    private static let languageUserDefaultsKey = "com.appforindeed.preferredLanguage"
+
+    private static let supportedLanguages: [(code: String, title: String)] = [
+        ("en", "English"),
+        ("es", "Español"),
+        ("fr", "Français"),
+        ("de", "Deutsch"),
+        ("pt", "Português"),
+        ("zh", "中文"),
+        ("ja", "日本語"),
+        ("ko", "한국어"),
+        ("ar", "العربية"),
+        ("hi", "हिन्दी")
+    ]
+
+    private func makeLanguagePopUp() -> NSPopUpButton {
+        let popup = NSPopUpButton(frame: .zero, pullsDown: false)
+        popup.translatesAutoresizingMaskIntoConstraints = false
+        popup.removeAllItems()
+
+        for lang in Self.supportedLanguages {
+            popup.addItem(withTitle: lang.title)
+            popup.lastItem?.representedObject = lang.code
+        }
+
+        let saved = UserDefaults.standard.string(forKey: Self.languageUserDefaultsKey) ?? "en"
+        if let index = Self.supportedLanguages.firstIndex(where: { $0.code == saved }) {
+            popup.selectItem(at: index)
+        }
+
+        popup.target = self
+        popup.action = #selector(languageChanged(_:))
+        popup.setContentHuggingPriority(.required, for: .horizontal)
+        popup.setContentCompressionResistancePriority(.required, for: .horizontal)
+        return popup
+    }
+
+    @objc private func languageChanged(_ sender: NSPopUpButton) {
+        guard let code = sender.selectedItem?.representedObject as? String else { return }
+        UserDefaults.standard.set(code, forKey: Self.languageUserDefaultsKey)
+        UserDefaults.standard.set([code], forKey: "AppleLanguages")
+    }
+
     private func makeSettingsSection(rows: [NSView]) -> NSView {
         let section = NSStackView()
         section.orientation = .vertical