2012-01-31 6 views
2

나는 코드 내 프로젝트에서이 파일을 추가 한문제는

@interface Language : UIViewController 

@end 

@implementation Language 

static NSBundle *bundle = nil; 

+(void)setLanguage:(NSString *)l { 
    NSLog(@"preferredLang: %@", l); 
    NSString *path = [[ NSBundle mainBundle ] pathForResource:l ofType:@"lproj" ]; 
    bundle = [[NSBundle bundleWithPath:path] retain]; 
} 

+(void)initialize { 
    NSUserDefaults* defs = [NSUserDefaults standardUserDefaults]; 
    NSArray* languages = [defs objectForKey:@"AppleLanguages"]; 
    NSString *current = [[languages objectAtIndex:0] retain]; 
    [self setLanguage:current]; 

} 
다음

이 방법 +(NSString *)get: 호출 받고되지

+(NSString *)get:(NSString *)key alter:(NSString *)alternate { 
NSLog(@"Bundle path: %@", [bundle bundlePath]); 

    return [bundle localizedStringForKey:key value:alternate table:nil]; 
} 

@end 

그리고 내 viewController.m 파일에는 언어 변경을위한 두 개의 버튼이 있습니다. 터키어 및 영어 언어 :

-(IBAction)englishLang:(id)sender{ 

[Language setLanguage:@"en"]; 
NSLog(@"language to english"); 

} 

-(IBAction)turkishLang:(id)sender{ 

[Language setLanguage:@"tr"]; 
NSLog(@"language to turkish"); 
} 

문제는 내가 turkish lang 버튼을 클릭 할 때 언어가 변경되어야하고 다음 nib 파일이 현지화 된 터키어 여야하며 응용 프로그램에서 선택해야합니다. 하지만 내 응용 프로그램에서 그 동작을 얻지는 않습니다.

영어로 된 nib 파일 만로드합니다.

문제점은 무엇입니까? 여기

답변

0

당신은 몇 가지 할 필요가 휴대폰 언어를 기반으로 밤은 앱 언어를 사용하려면 : 언어를 기반으로 문자열을 반환합니다 NSLocalizedString의 자신의 버전을

  • 을 , 휴대 전화가 아닙니다 (이 문제는 주된 문제입니다. 앱을 통해 NSLocalizedString을 사용하는 경우 반환되는 값은 휴대 전화의 언어와 동일합니다)
  • 언어가 변경되면 알림이 게시됩니다. 새로운 콘텐츠로 조회수를 새로 고침 할 수 있습니다.
+0

해결 현지화 된 문자열을 만들었지 만 여전히 문제가 동일합니다 –

+0

당신은 올바른 방법을 볼 수있는 get 방법에 번들 경로를 로깅 해 봤어? – wattson12

+0

나는 그것을 얻지 못했습니다. –

0

좋아 몇 가지 : 당신이 +로 유지하는 이유는 무엇

1) 현재의 문자열을 초기화? 그것은 누출 될 것입니다.

2) 무엇을 기대하셨습니까? 당신은 매우 높은 수준으로 언어를 바꾸고 있습니다. 응용 프로그램은 언어를 즉시 조정하기 위해 이러한 설정을 확실히 준수하지 않습니다. 그것은 애플 리케이션을 relaunching 후 작동하지만 그것은 이것을 해결하는 방법이 아니야.

3) 앱에서 언어를 변경하려는 이유가 무엇입니까? 어느 누구도 앱에서이 기능을 기대하지 않습니다. 따라서 불필요하기 때문에이 기능을 제외하면됩니다.

+0

실제로이 코드를 구현해야합니다.이 질문을이 코드에서 가져 왔습니다. http://stackoverflow.com/questions/6185627/internationalization-in- 아이폰 응용 프로그램, 제발이 –

0

당신의 문제는 펜촉 로딩이 자신의 i18n 방법을 사용해야한다는 것을 모르고 있다는 것입니다. 따라서 프로그래밍 방식으로 viewDidLoad 메서드에서 레이블 등을 채울 필요가 있습니다