Localization
현지화 - Apple Developer
앱, 제품 페이지 및 마케팅 자료를 현지화하여 전 세계의 고객과 더 효과적으로 연결하는 방법에 대해 알아보십시오.
developer.apple.com
어플을 개발하고 출시했을 때 여러 나라의 언어를 대응해서 다양한 국가에 사용경험을 주기 위해서는 앱 현지화가 필수다.
국가마다 사용하는 언어를 대응해 개발하려면 Localizable을 사용하면 된다.
SwiftUI도 UIKit과 비슷하게 설정할 수 있다.
Localization 설정
Project > Info > Localizations 를 보면 언어를 추가할 수 있는 항목이 있다.
기본으로 English가 Base로 설정되어 있고 한국어만 추가하고 한국어-영어 대응 해보기.
Strings File을 추가 이름은 꼭 Localizable로 해야된다.
파일을 생성 후 들어가서 오른쪽 인스펙터를 보면 Localize... 버튼이 활성화 되어 있다.
내가 추가한 언어의 Localization을 할 수 있게 추가하고 체크해준다.
체크까지 하면 String File안에 추가한 언어별로 내부파일이 추가되어 있다.
각 파일에 맞는 언어로 대응을 해주면 된다. 작성 포맷은 "키값" = "표시될 언어값"; 이다. 세미콜론은 잊지 말기! Base는 영어기 때문에 영어를 키값으로 하고 작성해주면 된다.
//Localizable English
"Translate" = "Translate";
"Bookmark" = "Bookmark";
//Localizable Korean
"Translate" = "번역";
"Bookmark" = "즐겨찾기";
이렇게 StringFile을 다 작성하면 이제 실제 코드에 텍스트를 대응해주면 된다.
NSLocalizedString 메서드를 사용해서 키 값에 대응되는 텍스트를 기기언어에 맞춰 뽑아낼 수 있다.
tableName, bundle, value는 따로 설정은 안하지만 하나하나 알아보면..
- key -> Localizable에 작성한 대응할 텍스트 키 값
- tableName -> Localizable로 만든 파일을 테이블로 보고 파일 이름을 넣어주면 된다. 기본값은 nil인데 nil일 땐 Localizable이 기본값으로 들어간다
- (그래서 StringFile 만들때 Localizable로 하라고 했던 것, 만약 파일 이름이 다른거라고 해도, tableName 파라미터에 파일 이름을 적어주면 대응 가능)
- bundle -> Localizable StringFile이 있는 번들 선택. 기본이 main
- value -> 테이블에서 키값을 찾을 수 없을 때 반환되는 string값.
- comment -> 주석 같은거다.
NSLocalizedString("Translate", comment: "번역"),
간단하게는 키값만 사용하면 바로 적용이 된다.
만약 텍스트에 특정 변수를 같이 쓰고 싶다면 아래처럼 value에 문자열 보간 처리를 해주고, String format으로 arg를 넣어주면 된다.
// Localizable file
"argTest" = "%d arg test";
// 사용
let str = NSLocalizedString("argTest", comment: "test")
String(format: str, 10)
에러
validation failed: Couldn't parse property list because the input data was in an invalid format
다음과 같은 에러가 뜬다면 작성 포맷이 맞지 않는 것이니 세미콜론을 빠뜨리진 않았는지 확인해보면 된다.