설정에서 시스템/한국어/영어/일본어 선택을 지원한다. 선택 시 Accept-Language 헤더와 UI locale을 즉시 반영한다. 언어 변경 후 스플래시를 거쳐 메인으로 소프트 재시작한다.
34 lines
916 B
Swift
34 lines
916 B
Swift
//
|
|
// LanguageRepository.swift
|
|
// SodaLive
|
|
//
|
|
// Created by Junie (AI) on 2025/12/16.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
protocol LanguageRepository {
|
|
func load() async throws -> LanguageOption?
|
|
func save(_ option: LanguageOption) async throws
|
|
}
|
|
|
|
final class UserDefaultsLanguageRepository: LanguageRepository {
|
|
private let key = "app.language"
|
|
|
|
func load() async throws -> LanguageOption? {
|
|
try Task.checkCancellation()
|
|
return await withCheckedContinuation { cont in
|
|
let value = UserDefaults.standard.string(forKey: key)
|
|
cont.resume(returning: value.flatMap { LanguageOption(rawValue: $0) })
|
|
}
|
|
}
|
|
|
|
func save(_ option: LanguageOption) async throws {
|
|
try Task.checkCancellation()
|
|
return await withCheckedContinuation { cont in
|
|
UserDefaults.standard.set(option.rawValue, forKey: key)
|
|
cont.resume()
|
|
}
|
|
}
|
|
}
|