티스토리 뷰
내가 앱스토어에 올린앱을 해외에서 누군가가 다운로드 받는걸 보면 참신기합니다.
앱스토어의 세계는 정말로 국경의 제약이 없다는 것을 실감하네요.
이왕이면 앱을 만들때 지역화를 고려해서 앱을 만들면 좋다는건 두말하면 잔소리죠
저는 특히 가벼운 기능의 앱을 만들때는 그리고 이 앱이 한국에서만 사용가능한 앱이 아니고선 지역화를 필수로 합니다.
구글번역기만 있으면 다소 번역이 불친절하더라도 필요한 나라의 단어들은 충분히 번역할 수 있고,
영어, 한국어 이렇게 두개만 지원해도 충분하니깐요.
처음 iOS 앱을 개발할때 지역화에 대한 설명이 너무 부족해서 고생이 많았습니다.
대부분의 출간된 서적들은 지역화에 대한 부분을 맨 마지막에 마치 부록처럼 다루는터라
제대로 설명해준 책도 찾기 힘들뿐더러
xcode의 ui가 버전업마다 조금씩 바뀌어 혼동이 많더라고요.
그래서 이참에 iOS 지역화 방법에 대한 상세 설명을 포스팅 해봅니다.
다른분들도 영어만이라도 지역화하셔서 더 많은 사용자, 더 많은 수익 거두셨으면 좋겠네요.
TestLocal 이라는 프로젝트를 single view application 템플릿을 선택하여 생성했습니다.
single view application을 만들게 되면 기본적으로 storyboard가 생성되는데요.
스토리보드에서도 지역화가 당연히 필요하고(버튼 이름, 라벨 텍스트 등)
스토리보드의 지역화 방법도 알아야 하니 single view application을 선택하기로 해요.
그리고 기본으로 생성되어있는 veiw controller에 label 하나를 추가해서 넣어봅시다.
왼쪽의 탐색기에서 프로젝트명을 클릭하면 우측 영역에 프로젝트의 기본설정을 할 수 있는 화면이 나타납니다.
여기서 Target부분을 클릭하면 아래의 그림처럼 메뉴가 나타나는데요.
여기서 맨위의 project명을 클릭해봅니다.
오호 여기에 Localizations 라는 메뉴가 숨어있었네요.
Language에 보니 Base하고 English 두개가 설정되어있네요.
Base언어는 대부분 영어로 하는것이 무난하죠
Base는 영어로 작성하고 그 외에 추가 언어를 넣으면 되는 그런 식입니다.
안드로이드에서 지역화 string을 작성할때 values폴더를 기본으로 values-ko 등의 폴더를 만드는 것과 비슷합니다.
(Base를 영어로 작성하고 별도의 korean 파일을 만든다는 것은 korean 언어가 설정되어있는 경우에는 korean 지역화가 적용되고 그 이외의 언어에서는 영어로 보인다는 의미입니다.)
+ 를 클릭하니 설정할 수 있는 언어들이 나타납니다.
Korean 을선택해볼까요
지역화하고 싶은 파일들을 선택하라고 나오네요.
xcode가 프로젝트에 포함된 파일중에서 지역화가 가능한 파일목록을 보여주는 것입니다.
(저는 프로젝트 생성시에 universal로 생성했더니 스토리보드가 iphone용과 ipad용 두개가 생성되어서 두개가 다 목록에 나타나네요)
아마 다른 지역화 가능한 파일이 있다면(예를 들면 strings파일) 다른 파일도 목록에 나타날거예요.
InfoPlist 파일은 가장 일반적으로 사용되는곳이 앱이름을 지역화 하고 싶을때(또는 다른 설정 부분들) 쓰입니다.
storyboard파일은 storyboard의 각 view에 직접 입력한 텍스트값을 지역별로 다르게 하고자 할때 생성하면 됩니다.(버튼이름, 라벨 등)
finish를 누르니 뭔가 파일이 생성된것을 확인할 수 있습니다.
xcode의 좌측 탐색기에 아까전에 확인했었던 storyboard파일과 InfoPlist.strings 파일이 지역화되어 나뉘어진것을 볼 수 있습니다.
그리고 각각의 파일에 괄호에 언어명이 표시되어있네요.
1. InfoPlist
지금은 InfoPlist 파일을 열어보면 아무런 내용이 없습니다만
아래와 같이 속성과 값을 입력하면 해당 값이 지역화에 따라 적용됩니다.
CFBundleDisplayName은 앱의 이름인데요.
이렇게 각각의 파일에 해당 언어로 작성하면
사용자가 앱을 설치했을때 표시되는 앱이름이 지역에 맞게 보여집니다.
https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/AboutInformationPropertyListFiles.html
InfoPlist.strings는 info.plist 파일을 지역화하기 위한 파일인데요
이때 사용하는 key는 info.plist에서 쓰이는 키와 동일합니다.
시스템은 InfoPlist.strings 파일에서 번역을 먼저 찾고 있는 경우에는 그것을 사용하고 없는 경우에는
info.plist 파일의 값을 사용한다고 하네요
2. 스토리보드
스토리보드를 살펴보면 스토리보드 아래에 뭔가 파일이 생성되었네요.
스토리보드아이콘은 아니고 뭔가 텍스트를 담고 있는 파일 아이콘이 보이네요.
파일을 열어보니 알수 없는 문자열의 text 속성에 Test Label 이라고 적혀있는것을 볼수 있습니다.
아니 이것은!!!
네 맞습니다. 우리가 지역화 파일을 생성하기 전에 스토리보드의 view controller에 label을 추가한 바로 그녀석입니다.
스토리보드 지역화 파일을 생성하면 파일 생성시점에 스토리보드에 있는 모든 view의 string들을 자동으로 추출하여 생성해줍니다.
근데 저 희귀한 텍스트 r19-wB-ZJQ의 정체는 뭘까요.
다시 스토리보드로 되돌아가서 처음에 추가한 label을 클릭하고 속성창의 세번째 탭을 클릭해보면 Object ID라는 항목이 있습니다.
보이나요?
바로 여기에 적혀있는 Object ID 값입니다.
우리가 view컴포넌트를 스토리보드에 붙여넣게 되면 해당 view컴포넌트에는 자동으로 Object ID가 생성됩니다.
바로 이 값을 이용해서 스토리보드의 버튼, 라벨 등의 텍스트들을 지역화 할수 있는거죠.
앞으로 여러분들이 스토리보드에 view를 추가하면 object ID를 확인하여 스토리보드 지역화 파일에 추가하여 작성해주시면 됩니다.
저는 보통 스토리보드에는 영어로 타이핑하고 한글 지역화 파일에 한글로 보여질 글자를 적습니다.
3. Localizable
자 여기서 한가지가 더 남았습니다.
앱 이름 지역화 하는거 알았고, 스토리보드 지역화 하는거 알았고, 또 뭐가 남았을까요?
우리가 프로그램 코드를 통해 다이나믹하게 생성한 문자열에 대해서 지역화 하는 방법이 남았습니다.
Supporting Files 폴더에 새 파일을 만들어 봅시다.
Resource 탭에서 strings files 를 선택하여 생성해봅시다.
파일명은 Localizable로 생성합니다.
생성된 Localizable 파일을 xcode 의 탐색기에서 클릭한다음에 오른쪽 속성바를 보면
요런 속성창이 보이는데
찾았다 Localization!!!
네 여기서 지역화 하고 싶은 항목을 체크하시면 추가로 파일이 생성됩니다.
Base하고 korean을 선택하니
Localizable.strings 파일도 지역별로 구분이 되었네요.
테스트를 해보아야하니 샘플로 텍스트를 입력해봅시다.
"키" = "값";
이러한 형태로 넣으면 됩니다.
Base에는 이렇게 적고
Korean에는 이렇게 적고
자 코드를 작성해볼까요.
[self.lableTest setText:NSLocalizedString(@"Pull to refresh", @"Pull to refresh")];
이런식으로 작성해주면
NSLocalizedString(@"Pull to refresh", @"Pull to refresh")가 해석될때 지역에 맞는 Localizable.strings 파일을 읽어 값을 넣는답니다.
NSLocalizedString(@"키", @"설명")
NSLocalizedString의 두번째 인자는 프로그램에 영향을 주지 않고 단지 프로그래머가 좀 더 알아 보기 쉽게 코멘트를 넣는 곳이니 해당 string키 값이 어떤 값인지 설명을 넣으면 됩니다.
물론 NSLocalizedString 에는 %@, %d 를 넣어서 NSString format을 사용할수 있습니다.
지역화 파일을 실수로 지웠거나 했더라도 당황하지마세요.
지역화가 가능한 파일은 파일 속성에 Localization에서 체크만 해주시면 언제든 지역화 파일이 생성됩니다.
대한민국의 앱도 세계로 뻗어나갑시다!!
'WEB2.0 > 프로그래밍' 카테고리의 다른 글
ios UITextView에 여백(padding) 제거하기 (0) | 2014.07.22 |
---|---|
개발자분들! 상태알림, 스마트폰 푸시알림으로 쉽게 받아보세요 (5) | 2014.07.15 |
iOS 에서 imageview 라운드 코너 처리 하기 (0) | 2014.06.04 |
TextWrangler 에서 ec2에 private key 파일로 접속하기 (0) | 2014.05.27 |
heartbleed 를 막아라 (0) | 2014.04.09 |
- Total
- Today
- Yesterday
- 트위터
- 네이버
- 앱
- 앱스토어
- iPhone
- 웹표준
- 안드로이드
- AWS
- 아이폰
- 게임
- android
- 모바일
- 경진대회
- 자바스크립트
- 창업
- 어플리케이션
- 애플
- php
- CSS
- 구글
- 벤처
- 공모전
- 아이디어
- 스마트폰
- 소프트웨어
- Apple
- 대학생
- JavaScript
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |