Quellcode durchsuchen

Add language selection button to Settings page.

Co-authored-by: Cursor <cursoragent@cursor.com>
AhtashamShahzad1 vor 1 Woche
Ursprung
Commit
8db4d9c81d
1 geänderte Dateien mit 54 neuen und 1 gelöschten Zeilen
  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
148 148
     private let savedJobsStack = NSStackView()
149 149
     private let settingsPageContainer = NSView()
150 150
     private weak var appearanceModeSegment: NSSegmentedControl?
151
+    private weak var languagePopUp: NSPopUpButton?
151 152
     private let cvMakerPageContainer = NSView()
152 153
     private lazy var cvMakerPageView: CVMakerPageView = {
153 154
         CVMakerPageView()
@@ -316,6 +317,12 @@ final class DashboardView: NSView, NSTextFieldDelegate, NSSharingServicePickerDe
316 317
         freeJobSearchQuotaLabel.textColor = Theme.secondaryText
317 318
 
318 319
         appearanceModeSegment?.selectedSegment = AppAppearanceManager.shared.mode.segmentIndex
320
+        if let langPopUp = languagePopUp {
321
+            let saved = UserDefaults.standard.string(forKey: Self.languageUserDefaultsKey) ?? "en"
322
+            if let index = Self.supportedLanguages.firstIndex(where: { $0.code == saved }) {
323
+                langPopUp.selectItem(at: index)
324
+            }
325
+        }
319 326
         cvMakerPageView.applyCurrentAppearance()
320 327
         profilesListPageView.applyCurrentAppearance()
321 328
         myProfilePageView.applyCurrentAppearance()
@@ -1758,8 +1765,11 @@ final class DashboardView: NSView, NSTextFieldDelegate, NSSharingServicePickerDe
1758 1765
 
1759 1766
         let themeSegment = makeAppearanceModeSegment()
1760 1767
         appearanceModeSegment = themeSegment
1768
+        let langPopUp = makeLanguagePopUp()
1769
+        languagePopUp = langPopUp
1761 1770
         let appearanceSection = makeSettingsSection(rows: [
1762
-            makeSettingsRow(title: "Theme", systemImage: "circle.lefthalf.filled", accessory: themeSegment, tapAction: nil)
1771
+            makeSettingsRow(title: "Theme", systemImage: "circle.lefthalf.filled", accessory: themeSegment, tapAction: nil),
1772
+            makeSettingsRow(title: "Language", systemImage: "character.bubble", accessory: langPopUp, tapAction: nil)
1763 1773
         ])
1764 1774
 
1765 1775
         let appearanceStack = NSStackView(views: [appearanceTitle, appearanceSection])
@@ -1830,6 +1840,49 @@ final class DashboardView: NSView, NSTextFieldDelegate, NSSharingServicePickerDe
1830 1840
         AppAppearanceManager.shared.mode = mode
1831 1841
     }
1832 1842
 
1843
+    private static let languageUserDefaultsKey = "com.appforindeed.preferredLanguage"
1844
+
1845
+    private static let supportedLanguages: [(code: String, title: String)] = [
1846
+        ("en", "English"),
1847
+        ("es", "Español"),
1848
+        ("fr", "Français"),
1849
+        ("de", "Deutsch"),
1850
+        ("pt", "Português"),
1851
+        ("zh", "中文"),
1852
+        ("ja", "日本語"),
1853
+        ("ko", "한국어"),
1854
+        ("ar", "العربية"),
1855
+        ("hi", "हिन्दी")
1856
+    ]
1857
+
1858
+    private func makeLanguagePopUp() -> NSPopUpButton {
1859
+        let popup = NSPopUpButton(frame: .zero, pullsDown: false)
1860
+        popup.translatesAutoresizingMaskIntoConstraints = false
1861
+        popup.removeAllItems()
1862
+
1863
+        for lang in Self.supportedLanguages {
1864
+            popup.addItem(withTitle: lang.title)
1865
+            popup.lastItem?.representedObject = lang.code
1866
+        }
1867
+
1868
+        let saved = UserDefaults.standard.string(forKey: Self.languageUserDefaultsKey) ?? "en"
1869
+        if let index = Self.supportedLanguages.firstIndex(where: { $0.code == saved }) {
1870
+            popup.selectItem(at: index)
1871
+        }
1872
+
1873
+        popup.target = self
1874
+        popup.action = #selector(languageChanged(_:))
1875
+        popup.setContentHuggingPriority(.required, for: .horizontal)
1876
+        popup.setContentCompressionResistancePriority(.required, for: .horizontal)
1877
+        return popup
1878
+    }
1879
+
1880
+    @objc private func languageChanged(_ sender: NSPopUpButton) {
1881
+        guard let code = sender.selectedItem?.representedObject as? String else { return }
1882
+        UserDefaults.standard.set(code, forKey: Self.languageUserDefaultsKey)
1883
+        UserDefaults.standard.set([code], forKey: "AppleLanguages")
1884
+    }
1885
+
1833 1886
     private func makeSettingsSection(rows: [NSView]) -> NSView {
1834 1887
         let section = NSStackView()
1835 1888
         section.orientation = .vertical