본문 바로가기
  • 그냥 하자
iOS

다국어 지원을 위한 Custom localization system

by Mash 2012. 3. 26.
반응형
<출처 :  http://aggressive-mediocrity.blogspot.com/2010/03/custom-localization-system-for-your.html >

How the new system works

a.  The iphone SDK way
: iphone SDK 에서는 NSLocalizableString("tag", "alternative") 을 제공한다. 이 함수는 Localizable.strings 으로부터 localized string을 취득하기위한 메크로이다. "tag"는 에 해당하는 문자열을 확인하지 못하면 "alternative" 로 대체한다.

b. The new way
: 기본시스템의 기능에 따라 LocalizationSystem.h 와 LocalizationSystem.m 을 추가하면
    ● 이미 완성된 것들에 대해 완벽하게 대응된다.
    ● run-time 시 언어가 변경된다.
    ● iphone OS 에서는 추가되어있지 않은 지원하지 않는 언어에 대해서 지원된다.

기본 함수에서 추가된 4가지 defined된 매크로를 사용함으로써 쉽게 적용할 수 있다.

1. LocalizationSetLanguage("language")
: 이 매크로를 사용하면 원하는 언어로 app의 언어가 변경될 것이다.
  1. // Sets the desired language of the ones you have.
  2. // example calls:
  3. // LocalizationSetLanguage(@"Italian");
  4. // LocalizationSetLanguage(@"German");
  5. // LocalizationSetLanguage(@"Spanish");
  6. //
  7. // If this function is not called it will use the default OS language.
  8. // If the language does not exists y returns the default OS language.
  9. - (void) setLanguage:(NSString*) l{
  10.  NSLog(@"preferredLang: %@", l);
  11.  
  12.  NSString *path = [[ NSBundle mainBundle ] pathForResource:l ofType:@"lproj" ];
  13.  
  14.  if (path == nil)
  15.        //in case the language does not exists
  16.        [self resetLocalization];
  17.  else
  18.        bundle = [[NSBundle bundleWithPath:path] retain];
  19. }
이 "language" string  은 Localizable.strings file이 가지고 있어야 한다. 

2. AMLocalizedString("tag", "alternative")
: 지역화된 언어를 얻기 위해서는 
  1. // Gets the current localized string as in NSLocalizedString.
  2. //
  3. // example calls:
  4. // AMLocalizedString(@"Text to localize",@"Alternative text, in case hte other is not find");
  5. - (NSString *)localizedStringForKey:(NSString *)key value:(NSString *)comment
  6. {
  7.  return [bundle localizedStringForKey:key value:comment table:nil];
  8. }
AMLocalizedString 은 NSLocalizedString과 같은 기능을 한다.

3. LocalizationReset
: OS의 기본셋팅으로 Localization을 리셋한다.
  1. // Resets the localization system, so it uses the OS default language.
  2. //
  3. // example call:
  4. // LocalizationReset;
  5. - (void) resetLocalization
  6. {
  7.  bundle = [NSBundle mainBundle];
  8. }

4. LocalizationGetLanguage
: 현재 언어 설정을 가져온다.
  1. // Just gets the current setted up language.
  2. // returns "es","fr",...
  3. //
  4. // example call:
  5. // NSString * currentL = LocalizationGetLanguage;
  6. - (NSString*) getLanguage{
  7.  
  8.  NSArray* languages = [[NSUserDefaults standardUserDefaults]
       objectForKey:@"AppleLanguages"];
  9.  
  10.  NSString *preferredLang = [languages objectAtIndex:0];
  11.  
  12.  return preferredLang;
  13. }






 
반응형