앱을 현지화(Localization)하는 방법을 알아봅시다.
앱을 출시할 때 하나의 나라에서만 출시할 것이라면 사실 현지화가 필요하지 않습니다. 하지만 여러 언어와 해당 지역의 언어로 번역하고 적용해서 많은 사람들이 사용할 수 있게끔 앱스토어에 출시를 해야한다면 하나의 언어로만으로는 해결이 되지 않을 것 입니다. 이를 해결하기 위한 방법이 바로 Localization(현지화) 입니다.
String File 생성
파일생성
이름은 그대로 Localizable로 생성해주어야 합니다.
Localize 진행
xcode를 확장하고 Localize 버튼을 눌러줍니다.
언어 추가
+를 클릭 후 추가하고 싶은 언어를 추가해주면 됩니다.
저는 한국어와 영어 총 2개의 Localization에서 추가했습니다.
그렇기에 Localizable에는 2개의 파일이 만들어진 상태입니다. 각각의 파일에 알맞은 언어를 추가해줌으로써 현지화 작업은 끝입니다.
결과 확인
이를 preview에서 간단히 확인할 수 있습니다.
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
ContentView()
.environment(\.locale, .init(identifier: "ko"))
}
}
이렇게 간단히 localization을 할 수 있습니다.
하지만 실제 앱에서는 이와 같이 정적인 값을 보여주는 경우보다 훨씬 다양한 경우가 존재합니다.
// InfoPlist (Korean)
"CFBundleDisplayName" = "로컬라이제이션 공부";
"CFBundleName" = "로컬라이제이션 공부";
// InfoPlist (English)
"CFBundleDisplayName" = "Localization Study";
"CFBundleName" = "Localization Study";
다음과 같이 각각의 파일에 입력해주면 끝입니다.
그렇다면 어떻게 테스트해볼 수 있을까요? 두 가지의 간단한 테스트 방법이 존재합니다.
시뮬레이터 설정에 들어가서 언어를 변경하는 방법
자신이 추가한 Localization의 언어추가를 통해 우선순위를 지정해줄 수 있습니다.
꾹 눌러서 옮긴 후 우선순위의 언어를 적용할 수 있습니다.
현재는 한국어가 우선순위로 되어있기 때문에 앱 이름이 한글로 나오는 모습을 볼 수 있습니다.
반대로 영어가 우선순위에 있다면 앱 이름은 당연하게도 영어로 나오게 됩니다. 실제 앱을 들어가서 확인하면 이전에 간단히 설정했던 Localization이 적용된 언어로 보이게 됩니다.
[Product] → [Scheme] → [Edit Scheme]
[App Language] 선택
이 방법은 빌드 시 언어를 설정할 수 있는 방법입니다.
앞서 설명드린 방법은 시뮬레이터 상에 이전에 설치되어 있던 앱을 실행하는 방법이었어요. 하지만 빌드 설정을 따르면 앱을 실행함과 동시에 앱 언어를 설정할 수 있다는 장점이 있습니다.
먼저 위치정보를 가져오고 싶다고 가정합니다.
// InfoPlist (Korean)
"NSLocationAlwaysUsageDescription" = "위치정보";
"NSLocationAlwaysAndWhenInUseUsageDescription" = "위치정보";
"NSLocationWhenInUseUsageDescription" = "위치정보";
// InfoPlist (English)
"NSLocationAlwaysUsageDescription" = "Location Please~~";
"NSLocationAlwaysAndWhenInUseUsageDescription" = "Location Please~~";
"NSLocationWhenInUseUsageDescription" = "Location Please~~.";
다른 정보도 가져오고 싶은데 이름을 모르는 경우가 있습니다. 보통 NS를 앞에 붙여주고 권한명을 붙여주면 됩니다. 두번째 방법도 존재합니다. 우리는 info.plist에 ‘위치정보’ 라는 값을 넣어주었습니다.
// InfoPlist (Korean)
"위치정보" = "위치정보";
// InfoPlist (English)
"위치정보" = "Location Please~~";
두 가지의 방법이 존재하기 때문에 사용자가 원하는 스타일에 따라 사용하시면 됩니다.
// Localizable (English)
"안녕 %lld" = "hello %lld";
"안녕 %@" = "hello %@";
// Localizable (Korean)
"안녕 %lld" = "안녕 %lld";
"안녕 %@" = "안녕 %@";
// 사용부
...
let number: Int = 10
let string: String = "mino"
Text("안녕 \(number)")
Text("안녕 \(string)")
%lld는 Int형이 들어왔을 때 처리할 수 있게 해주고,
%@는 String형을 처리할 수 있게 해줍니다.
[1] 외부로 방출하기 클릭
[2] 방출하게 될 저장소를 만들고 방출하기
성공적으로 방출을 하게되면 지정해둔 이름의 저장소가 만들어집니다.
현재 저희의 Localization은 총 2개입니다. 한국어와 영어 두가지가 있어요.
2가지의 파일이 생성됨!
Localizable에서 직접 입력한 것들을 보기 쉽게 표 형식으로 만들어주게 됩니다. 이를 애플에서는 번역가들에게 작업을 위한 분리를 할 수 있게 만들어 준다고 하네요.
저희는 개인이나 소규모인 프로젝트에 익숙할테니 보다 관리하기 편하게 제공해주는 기능이다! 로 알고계시면 될 것 같습니다. 폴더도 저희가 만든 폴더랑 똑같기 때문에 방출한 값들을 수정하여 프로젝트에 덮어씌우는 형식으로 관리를 할 수 있습니다.
해당 방법은 Xcode 15미만일 때 해결가능한 현지화 방법입니다. 다음 시간에는 Xcode 15이상일 때 문자열 카탈로그를 사용한 지역화 방법에 대해 알아보겠습니다.!
이렇게 하는 거였군요..
저는 언어별 텍스트 enum 같은 걸 만들어서 하는 줄 알았네요
막상 여러 언어를 지원하려고 하면 한국어로는 딱 사이즈가 맞는 디자인인데 영어로는 공간이 모자라다던지 하는 머리아픈 일이 발생하죠 ㅋㅋㅋ
심지어 아랍어는 오른쪽에서 왼쪽으로 읽는다고 하죠
이런 케이스는 어떻게 대처하는 게 좋을지 (디자이너랑 이야기해야되겠지만) 생각해보는 것도 좋을 것 같아요