티스토리 뷰

반응형

안녕하세요 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 in app programmatically change language without restart.

잘 변경되네요.

 

 

 

 

끝입니다.

저는 다음에 더 필요한 정보로 글을 쓰겠습니다.

읽어주셔서 감사합니다.

 

 

 

 

 

iOS Swift Xcode

반응형
댓글
300x250
반응형
최근에 올라온 글
최근에 달린 댓글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Total
Today
Yesterday