iPhone 현지화 : 각 언어에 대한 NIB를 복사하지 않고도 NIB 파일을 쉽게 번역 할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/619867

문제

iPhone 응용 프로그램에서 모든 가시적 인 문자열을 번역하는 관리 가능한 방법을 찾으려고 노력하고 있습니다. 공식 Apple 문서는 프로그래밍 방식 문자열에 .Strings 파일을 사용한다고 말하면서 Xcode의 "Localized File 추가"옵션을 사용하여 NIB 파일을 현지화합니다.

내가 여기서 볼 수있는 문제는 현지화가 발생한 후 UI가 변경되어야한다면 각 언어의 펜촉을 개별적으로 최적이지 않은 것입니다. NIB 파일에 표시된 문자열을 .Strings 파일의 관련 값에 묶는 더 간단한 방법이 있습니까? 아니면 각 UI 요소에 대한 문자열을 프로그래밍 방식으로 설정해야합니까 (약간 낫지 만 여전히 성가신)?

도움이 되었습니까?

해결책

당신이 할 수있는 최선은 각보기를 통해 재귀 적으로 루프 한 다음 텍스트를 설정하는 것입니다.

static void translateView(NSBundle *bundle, UIView *view)
{
    id idView = view;
    if ([idView respondsToSelector:@selector(text)] && [view respondsToSelector:@selector(setText:)])
        [idView setText:[bundle localizedStringForKey:[idView text] value:nil table:nil]];
    if ([idView respondsToSelector:@selector(title)] && [view respondsToSelector:@selector(setTitle:)])
        [idView setTitle:[bundle localizedStringForKey:[idView title] value:nil table:nil]];
    if ([idView respondsToSelector:@selector(placeholder)] && [view respondsToSelector:@selector(setPlaceholder:)])
        [idView setPlaceholder:[bundle localizedStringForKey:[idView placeholder] value:nil table:nil]];
    if ([idView respondsToSelector:@selector(prompt)] && [view respondsToSelector:@selector(setPrompt:)])
        [idView setPrompt:[bundle localizedStringForKey:[idView prompt] value:nil table:nil]];
    if ([idView respondsToSelector:@selector(titleForState:)] && [view respondsToSelector:@selector(setTitle:forState:)])
        [idView setTitle:[bundle localizedStringForKey:[idView titleForState:UIControlStateNormal] value:nil table:nil] forState:UIControlStateNormal];
    if ([idView isKindOfClass:[UITabBar class]] || [idView isKindOfClass:[UIToolbar class]])
        for (UIBarItem *item in [idView items])
            [item setTitle:[bundle localizedStringForKey:[item title] value:nil table:nil]];
    for (UIView *subview in [view subviews])
        translateView(bundle, subview);
}

경고 : 다른 선택기 세트를 확인하여 모든 것을 잡을 수 있습니다. 이것은 모범 사례는 아니지만 작업이 훨씬 적은 것 같습니다.

다른 팁

Apple의 내장 명령 줄 프로그램 ibtool을 사용하면이를 수행 할 수 있습니다. XIB에서 문자열을 버리고 로컬라이즈 한 다음 기존 XIB를 기반으로하지만 현지화 된 문자열을 사용하여 새 XIB를 만들 수 있습니다. 따라서 현지화 된 문자열이 변경 될 때마다 항상 XIB의 기본 세트를 갖고 모두 재현 할 수 있습니다. 추가 정보는 여기에 있습니다 : http://www.bdunagan.com/2009/03/15/ibtool-localization-made-easy/.

명령 줄 도구 인 ibtool에 대해 읽고 싶다고 생각합니다. 원하는대로 단순화해야합니다.

이 간단한 가이드에 따라 펜촉을 복제하지 않고도 자동으로 현지화 할 수 있습니다.

http://programminghacks.net/2011/06/03/ios-nib-localization-localizable-strings/

아마도 모든 문자열을 수동으로 업데이트해야 할 것입니다. 사용자가 언어를 변경하면 배열에서 번역 된 문자열을 가져온 다음 UI로 변경할 때 다른 언어로 문자열의 배열 또는 XML 파일이 있다고 가정 해 봅시다.

마르코

나는 항상 viewDidload () 메소드에 필요한 모든 문자열을 .xib에 자리 표시 자만 가지고있는 것만으로 설정했습니다. 이렇게하면 .String 파일을 업데이트하여 .xib를 쉽게 로컬화할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top