본문 바로가기

Mobile App Development/IOS

[ IOS ] Swift 다국어 대응

[ 프로젝트 ] 우클릭 ⇨ [ New Group ]
[ res ] 폴더 생성
[ res ] 우클릭 ⇨ [ New File... ]
[ string ] 검색 ⇨ Strings File 선택 ⇨ [ Next ]
[ strings.strings ] 입력 ⇨ [ Create ]
[ 프로젝트 클릭 ] ⇨ PORJECT ⇨ info ⇨ Localizations ⇨ [ + ] 클릭
Japanese 및 Korean 추가
Finish
리소스 파일 생성 확인

// strings (English)

"text_title" = "Title";
// strings (Korean)

"text_title" = "타이틀";
// strings (Japanese)

"text_title" = "タートル";
// CustomUIView.swift

import UIKit

class CustomUIView : UIView
{
    private let label: UILabel = 
    {
        let lbl = UILabel()
        lbl.text = NSLocalizedString("text_title", tableName: "strings", comment: "this is title")
        
        lbl.textAlignment = .center
        lbl.translatesAutoresizingMaskIntoConstraints = false
        return lbl
    }()

    override init(frame: CGRect) 
    {
        super.init(frame: frame)
        setupView()
    }

    required init?(coder: NSCoder) 
    {
        super.init(coder: coder)
        setupView()
    }

    private func setupView()
    {
        addSubview(label)

        NSLayoutConstraint.activate([
            label.centerXAnchor.constraint(equalTo: centerXAnchor),
            label.centerYAnchor.constraint(equalTo: centerYAnchor)
        ])
    }
}
// ContentView.swift

import SwiftUI

struct ContentView : UIViewRepresentable
{
    func makeUIView(context: Context) -> UIView
    {
        return CustomUIView()
    }
    
    func updateUIView(_ uiView: UIView, context: Context)
    {
        
    }
}

struct ContentView_Previews: PreviewProvider 
{
    static var previews: some View 
    {
        Group 
        {
            ContentView()
            .environment(\.locale, Locale(identifier: "en_US"))
            .previewDisplayName("English")
            .onAppear
            {
                UserDefaults.standard.set(["en"], forKey: "AppleLanguages")
            }

            ContentView()
            .environment(\.locale, Locale(identifier: "ko_KR"))
            .previewDisplayName("Korean")
            .onAppear
            {
                UserDefaults.standard.set(["ko"], forKey: "AppleLanguages")
            }

            ContentView()
            .environment(\.locale, Locale(identifier: "ja_JP"))
            .previewDisplayName("Japanese")
            .onAppear
            {
                UserDefaults.standard.set(["ja"], forKey: "AppleLanguages")
            }
        }
    }
}

 

※ 프리뷰가 XCode 버그로 바로 적용되지 않으니 위 두 버튼을 토글해주면 적용된다.

영어 적용 확인
한국어 적용 확인
일본어 적용 확인