2013년 10월 11일 금요일

[iOS7] 다국어 스트링 지원하기.

iOS App에서 다국어를 지원하는 부분은 크게 3가지로 구성이 된다.
  • 다국어 스트링 적용하기
  • 다국어 리소스 적용하기
  • 국가별 프로그램 명 적용하기
이번 포스트에서는 다국어 스트링 적용만 알아보자.

다국어 스트링 적용하기 위해서, 신규파일로 Localizable.strings 파일을 생성한다.


위와 같이 New > File > iOS Resource > Strings File 선택하고, 이름을 Localizable로 입력한다.

파일이 추가 되었으면, 추가된 Localizable.strings를 선택하고, File Inspector를 통해서 Localize.. 시킨다. 현재 파일을 base로 만든다.
(Xcode 5 기준으로 위와 같이 생성되고, Xcode 4에서는 언어를 선택하게 되어 있다.)

Localize..를 하면, 아래와 같이 Based와 English를 생성이 된다. 

추가 언어를 넣기 위해서는 Project에서 Localization에 언어를 추가하면 된다.

그러면, 소스 코드에서 아래와 같이 사용하면 된다.

    NSLog(@"Name: %@", NSLocalizedString(@"Name", @"Name"));
    NSLog(@"Name: %@", NSLocalizedString(@"Text", @"Text"));
    NSLog(@"MyName: %@", NSLocalizedString(@"MyName", @"Name"));
    NSLog(@"MyText: %@", NSLocalizedString(@"MyText", @"Text"));

위와 같이 사용하면, Default로 Localizable.strings 파일에서 키("Name", "Text", "MyName", "MyText")에 대한 String을 찾아서 표시하게 된다.
만약, Localizable.strings외에 추가로 MyLocalizable.strings를 추가했을 경우, 거기에서 읽어 올 수 있는 방법이 있는가?
 기본적으로  NSLocalizedString은 NSBundle의

- (NSString *) localizedStringForKey: value: table:; 함수를 호출해서 읽어 오는데, table에 전달되는 것이 nil 이거나 파일이 없을 경우, Localizable.strings 파일에서 찾게 되는 것이다.
아래와 같이 직접 NSBundle을 이용해서 MyLocalizable을 넣어 주면, MyLocalizable.strings에서 찾아서 표시하게 된다.











위 코드의 결과를 아래와 같이 볼 수 있다.











여기서, Localizable.strings(Base) 에는
"Name" = "Name";
"Text" = "Text";
만 있고, Localizable.strings(English) 에는
"Name" = "이름 (en)";
"Text" = "텍스트 (en)";
이 있어서, "MyName", "MyText"에 대해서는 Default값이 표시가 된다.

여기서, MyLocalizable.strings(Base) 에는
"MyName" = "MyName";
"MyText" = "MyText";
만 있고, MyLocalizable.strings(English) 에는
"NyName" = "My 이름 (en)";
"MyText" = "My 텍스트 (en)";
이 있어서 "Name"과 "Text"에 대해서, Value로 전달되는 값이 표시된다.