반응형
다국어 지원을 위해 NSLocalizedString 을 하면 아이폰 디바이스의 언어 설정으로 문자열을 가져옵니다.
만약 앱 안에서 언어 설정을 변경하고 싶다면 어떻게 해야 할까??
검색을 해보면 가장 많이 나오는 방법은 아래와 같다.
[[NSUserDefaults standardUserDefaults] setObject:@[ @"ko" ] forKey:@"AppleLanguages"]; [[NSUserDefaults standardUserDefaults] synchronize];
NSLocalizedString이 AppleLanguages에 설정된 언어에서 가져오므로 잘 동작한다.
하지만 문제는 앱을 재 실행해야 한다는 것이다. 설정 하나 바꿨다고 앱을 재 실행하라고??
내가 찾은 방법은 다국어를 가져올때 특정 언어 Bundle에서 가져오도록 하는 것이다.
NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"Localizable" ofType:@"strings" inDirectory:nil forLocalization:@"ko"]; NSBundle *localizableBundle = [[NSBundle alloc] initWithPath:[bundlePath stringByDeletingLastPathComponent]]; NSLocalizedStringFromTableInBundle(key, nil, localizableBundle, nil);
위 코드에서는 디바이스 언어와 상관없이 모두 한국어로 다국로 문자열을 가져오게 하였습니다.
이 코드를 적용해도 바로 화면의 언어들이 변경되지는 않을 것 입니다.
추가 적으로 뷰를 새로 그려지게 하면 됩니다. 언어를 일일이 다시 설정하는 방법도 있겠지만..... 전 window.rootViewController를 새로 설정했습니다.
AppDelegate *appDelegate = [UIApplication sharedApplication].delegate; appDelegate.window.rootViewController = viewController;
이제 설정할때마다 새로 화면을 불러와서 원하는 언어대로 표시합니다~!
반응형
'Programming > iOS' 카테고리의 다른 글
ReactiveCocoa 한번 써보자 (0) | 2015.07.16 |
---|---|
Could not load NIB in bundle (0) | 2015.06.23 |
시뮬레이터 매크로 (0) | 2015.01.27 |
Undefined symbols for architecture x86_64: “_OBJC_CLASS_$_NSMutableOrderedSet”, referenced from: objc-class-ref in libarclite_macosx.a(arclite.o) (0) | 2014.09.04 |
[Swift] The Basics (0) | 2014.06.20 |