티스토리 뷰

iOS

[iOS] Localization - 다국어 지원

Peppo 2023. 5. 16. 09:58
728x90

국내에서만 제공되는 서비스를 글로벌화 시키고 싶을때

 현지화 작업을 합니다. 키워드는 Localization.

기기 시스템언어 & 지역 설정 별로 앱에 보여지는 언어를 다르게 하고 싶을때 사용하는데요.

오늘은 Localization에 대해 정리해 보겠습니다.


목차

  • Storyboard Localization
  • Programmatically Localization
  • TIP
    • 앱 아이콘은 현지화 지원 X
    • extension으로 편하게 써보기
    • Xcode에서 언어 설정을?

Localization (적용 사진)

먼저 사진으로 현지화가 어떤건지 보고 가실게요.

시스템 언어 & 지역 (한국) 시스템 언어 & 지역 (미국)

 

 

 


1. Localization (with. Storyboard)

 

현지화 작업 테스트를 위해 Main.storyboard에 label 하나 추가 하겠습니다.

 

1. Project → 앱 선택 → Info → Localizations 카테고리 → '+' 버튼

 

 

2. 현지화 해줄 언어 선택

 

저는 한국어로 선택했습니다.

 

3. 현지화 해줄 파일 선택

 

저는 Main 스토리보드만 현지화 작업을 할거라 Main.storyboard만 체크 했습니다.

 

Finish를 해주면 Main.storyboard에 이렇게 추가가 됩니다.

 

영어도 추가해줍시다

 

 

Main(English).strings 파일에 들어가보면 현재 스토리보드에 있는 각 현지화 시킬 수 있는 class 들이 (UILabel 등) 나오는데 아래와 같이 이루어져 있습니다. 

 

"Key" = "Value"
"ObjectID" = "보여질 값

 

 

Storyboard는 Key 값으로 ObjectID를 이용해 현지화 시키고자 하는 걸 판별 합니다. 

 

시스템 언어 & 지역이 영어권일 때 보여질 부분을 "Value" 쪽에 적어주시면 돼요.

 

 

이렇게 적용 후 시스템 언어 & 지역을 영어로 하면 

 

 

영어로 바뀐걸 볼 수 있습니다! 


 

2. Localization (with. Programmatically)

 

다음은 코드로 UI를 구현했을때 현지화 하는 작업입니다. 

아까 스토리보드에 했던 작업에 코드로 작성한 UI를 추가해 줄건데요. (아래 파란글씨로 된 Label이 코드로 추가한 UI입니다.)

 

 

현지화 작업을 시작해보죠!

 

 

1. Strings File 추가

파일추가 (Cmd + N) → Strings File을 추가 합니다.

 

저장 이름은 Localizable 그대로 두시구요 

 

생성하면 아래처럼 Localizable.strings 파일이 생깁니다. 

클릭하고 'Localize...' 버튼을 눌러주세요.

 

현지화 할 언어 선택 후 Localize 버튼 클릭

 

Korean으로 하고 나서 좌측 네비게이터 영역에 Localizable 파일 클릭 후,

우측 인스펙터 영역에서 Localization에 English도 선택해줍니다.

 

그럼 Localizable에 언어별로 설정이 되는데요. 

이제 여기에 각각 사용할 언어를 써줄거에요.

 

 

2.  "Key" = "Value" 적용

스토리보드에선 Key값을 ObjectID로 현지화 할걸 판별한다고 했습니다.

코드에서는 Key값을 지정해주면 되는데 

String(localized: ) // 이걸로 Key 값을 정해줍니다.

 

적용한 예시를 보면 이해가 더 잘 될겁니다.

Localized 적용 전 Localized 적용 후

 

각각 Key값을 정해주었는데요 (city, name, gender)

 

이제 언어별로 보여줄 Value값을 적용해봅시다. 

Localizable.strings 파일로 가셔서 각 Key값에 보여줄 Value값을 넣어주면 됩니다. 

Localizable(Korean) Localizable(English)

 

============= 중요 =============

"Key" = "Value";

세미콜론 (;) 꼭 붙여주셔야 적용됩니다.

안그럼 아래와 같이 
에러가 나와요.

================================

validation failed: Couldn't parse property list because the input data was in an invalid format

 

다 적용한것 같네요. 

각각 시스템 언어를 변경해서 확인해보면!

 

Korean English

잘 적용 됐네요!! 

마지막으로 현지화 작업을 하면서 알게된 팁들 공유하면서 블로깅 마치겠습니다. 😆

 


 

TIP!

 

1. 앱 아이콘은 Localization이 안돼요!

이유는 HIG(해당부분 링크)에 나와있는데,

아이콘에 들어가는 텍스트는 종종 너무 작아 읽을 수 없어 현지화를 지원하지 않습니다. 

라고 합니다.

 

그리고.. 

 

닉값 하는 쿨한 애플 직원의 답변

 

 

2. extension으로 편하게 써보자.

extension을 하나 만들어 주고

extension String {
    func localized(comment: String = "") -> String {
        return NSLocalizedString(self, comment: comment)
    }
}
    아래와 같이 사용해줍니다.

comment를 따로 남겨주면 추후 작업할때 가독성에도 도움이 될것 같네요!

 

 

 

3. Xcode에서 언어 설정을?

 

번거롭게 기기에서 설정 > 일반 > 언어 &지역 > 언어변경 하느라 힘들었죠.

 

Xcode에서 Scheme설정을 해주면 쉽게 언어 변경을 할 수 있습니다. 

 

1. Edit Scheme > Run > Options > App Language > 테스트 할 언어 선택

 

 

 


 

참고

728x90

'iOS' 카테고리의 다른 글

[iOS] 비디오 플레이어 닫힘 감지  (9) 2023.12.23
[WebRTC] ICE, SDP 심화  (0) 2023.07.30
[iOS]긴급심사 요청  (0) 2023.05.07
[Swift] required init, super init  (0) 2023.04.20
[iOS] FileManager - 폴더, 파일 생성 & 삭제  (0) 2023.04.04