iyOmSd/Title: SwiftUI

[SwiftUI] Localization 다국어 적용하기

냄수 2022. 2. 10. 14:33
반응형

앱을 개발하면서

영어사용 국가에선 영어로 보여주고

대한민국에선 한글로 보여주도록 해주는

다국어 기능을 적용을 해보려고해요

 

Strings File을 하나 만들어요

이 때 이름은 Localizable.strings 으로 꼭 설정 해주세요

이 파일이름을 인식해서 로컬라이제이션을 적용시켜요

 

방금만든 파일에서 오른쪽 인스팩터창에서(커맨드 + 옵션 + 0)

로컬라이제이션을 눌러주고

 

프로젝트파일을 눌러서

이 밑에있는 로컬라이제이션에 +를 눌러주세요

 

Korean를 찾고 클릭!

이 로컬라이제이션파일을 다국어 처리할거기 때문에 클릭

설정도 됬고 파일도 생성되서

영어랑 한글이 지원되도록 적용됬어요

 

이제 설정은 끝났고 어떻게 사용하는지 해볼께요

 

우선 사용은

 

key = value;

형식으로 사용해요

해당 키에 맞는 스트링 값을 가져오는거에요

; 세미콜론 잊으면 빌드에러가나요 주의하세요!

 

예를 들어 위와같이 선언 되어있다면

hi를 사용했을때

ko국가에선 안녕하세요로 나오고

en국가에선 hello로 나오는 거죠

 

 

원하는 스트링으로 지정해주고

 

SwiftUI에서 사용할 땐

LocalizedStringKey타입을 사용해요

위에서 사용한 키값을 스트링형식으로 넣어서 사용하기만 하면되요

간단하죠

struct HomeTitleView: View {
    private let title: LocalizedStringKey = "HomeTitle"
    
    var body: some View {
        ...
            
        Text(title)
        
        ...
    }
}


// Localizable(English)파일
"HomeTitle" = "finish..?";

// Localizable(Korean)파일
"HomeTitle" = "해치웠나...?";

 

프리뷰에서 테스트해보고 싶을땐

struct HomeView_Previews: PreviewProvider {
    static var previews: some View {
        HomeView(viewModel: HomeViewModel())
        HomeView(viewModel: HomeViewModel())
            .environment(\.locale, .init(identifier: "ko"))
    }
}

.environment를 이용해서 locale을 설정해볼 수 있어요

한국과 미국인경우 잘 적용되는걸 볼 수 있어요

 

 

일반 텍스트가 아니라

도중에 값이 들어가는 텍스트라면?

 

보통쓸때

"\(loaclizationKey) \(number)개"

이런 형식을 생각할테지만 이형식은 에러가 나요

 

정의 할 때

// en

"testInt %lld" = "test: %lld";
"testString %@" = "test: %@";

// ko
"testInt %lld" = "테스트: %lld";
"testString %@" = "테스트: %@";

int값은 %lld

string값은 %@

를 사용해주고

키값과 동일하게 텍스트로 정의해주면되요

 

let number = 3
Text("testInt \(number)")

int형 값을 넣을 거이기때문에

사용할 키값은 testInt %lld이고

여기서 testInt는 스트링으로 똑같이 입력하고

%lld는 넣고싶은 인트형 변수를 넣어주면돼요

그러면 값으로 정의한 스트링 %lld위치에 값에 매칭되어서 넣어준 숫자가 나타나요

 

 

 

 

반응형