티스토리 뷰
반응형
안녕하세요 Gons 입니다.
오늘은 앱을 종료하지 않고 언어변경을 해보겠습니다.
먼저 다국어 설정이 완료된 상태여야합니다.
다국어 설정이 안되신 분들은
이전 포스팅을 확인해주세요.
저는 이렇게 준비해놨습니다.
@IBOutlet var myLabel: UILabel!
@IBOutlet var myLabel2: UILabel!
@IBOutlet var myLabel3: UILabel!
@IBOutlet var myLabel4: UILabel!
@IBOutlet var myLabel5: UILabel!
@IBOutlet var buttonKorean: UIButton!
@IBOutlet var buttonEnglish: UIButton!
시작하겠습니다.
기본적으로 앱 내에서 언어를 설정하면
폰 설정에 있는 언어를 따라가지 않습니다.
보통 NSLocalizedString 을 사용하는데 이 방법은 앱 내에서 언어를 변경해도 앱을 껐다 켜야만 언어가 바뀝니다.
override func viewDidLoad() {
super.viewDidLoad()
setLanguage()
}
func setLanguage() {
//기본 방법
myLabel.text = NSLocalizedString("Hello", comment: "")
//...
}
그래서 다국어 설정 파일에 접근해서 localizedString 으로 언어를 변경해줍니다.
func setLanguage() {
//설정된 언어 코드 가져오기
let language = UserDefaults.standard.array(forKey: "AppleLanguages")?.first as! String // 초기에 "ko-KR" , "en-KR" 등으로 저장되어있음
let index = language.index(language.startIndex, offsetBy: 2)
let languageCode = String(language[..<index]) //"ko" , "en" 등
//설정된 언어 파일 가져오기
let path = Bundle.main.path(forResource: languageCode, ofType: "lproj")
let bundle = Bundle(path: path!)
myLabel.text = bundle?.localizedString(forKey: "Hello", value: nil, table: nil)
myLabel2.text = bundle?.localizedString(forKey: "Welcome", value: nil, table: nil)
myLabel3.text = bundle?.localizedString(forKey: "Thank", value: nil, table: nil)
myLabel4.text = bundle?.localizedString(forKey: "Happy", value: nil, table: nil)
myLabel5.text = bundle?.localizedString(forKey: "Sorry", value: nil, table: nil)
buttonKorean.setTitle(bundle?.localizedString(forKey: "buttonKorean", value: nil, table: nil), for: .normal)
buttonEnglish.setTitle(bundle?.localizedString(forKey: "buttonEnglish", value: nil, table: nil), for: .normal)
}
UserDefaults "AppleLanguages" 에 설정된 언어가 저장되어 있고 앞으로 이 값을 통해 언어를 변경해주면 됩니다.
@IBAction func koreanClicked(_ sender: UIButton) {
//한국어로 변경
UserDefaults.standard.set(["ko"], forKey: "AppleLanguages")
UserDefaults.standard.synchronize()
//보통 메인화면으로 이동시켜줌
setLanguage()
}
@IBAction func englishClicked(_ sender: UIButton) {
//영어로 변경
UserDefaults.standard.set(["en"], forKey: "AppleLanguages")
UserDefaults.standard.synchronize()
//보통 메인화면으로 이동시켜줌
setLanguage()
}
실행해보겠습니다.
잘 변경되네요.
끝입니다.
저는 다음에 더 필요한 정보로 글을 쓰겠습니다.
읽어주셔서 감사합니다.
iOS Swift Xcode
반응형
'iOS Swift + UIKit' 카테고리의 다른 글
iOS Swift 웹뷰 html 바디 가져오기 (get webview html body tag) (0) | 2022.05.04 |
---|---|
iOS Swift 날짜 차이 구하기 (요일, 시간 사이 간격 변환 계산) Calc Date (0) | 2022.03.02 |
iOS Swift 다국어 설정 - Code Localizing (0) | 2021.04.02 |
iOS Swift 다국어 설정 - Storyboard Localizing (0) | 2021.04.01 |
iOS Swift 백그라운드 진입 시 민감한 정보 가리기 (개인정보 숨기기) (3) | 2021.03.22 |
댓글