Files

31 lines
960 B
Swift

import Combine
import Foundation
/// 应用语言覆盖使用 macOS 的应用级 AppleLanguages 偏好;不写全局偏好。
/// Bundle 在进程内缓存语言选择,因此保存后由下次启动统一应用。
@MainActor
final class AppLanguagePreferences: ObservableObject {
@Published private(set) var selection: AppLanguage
private let defaults: UserDefaults
init(
defaults: UserDefaults = .standard,
applicationID: String = "com.qiuyuzhou.ShadowsocksX-NG2"
) {
self.defaults = defaults
let languages =
defaults.persistentDomain(forName: applicationID)?["AppleLanguages"] as? [String]
selection = languages?.first.flatMap(AppLanguage.init(rawValue:)) ?? .automatic
}
func select(_ language: AppLanguage) {
if language == .automatic {
defaults.removeObject(forKey: "AppleLanguages")
} else {
defaults.set([language.rawValue], forKey: "AppleLanguages")
}
selection = language
}
}