8

내가 약 NSLocalizedString() 매크로를 요구 하진 않았어localizedStringWithFormat은 어떻게 작동합니까?

을 유의하시기 바랍니다. NSString 클래스 기능 + (instancetype)localizedStringWithFormat:(NSString *)format, ...에 대해 묻습니다.

다음은 두 가지입니다.

질문

나는 NSString 클래스 메소드 localizedStringWithFormat를 사용하려고 해요하지만 난 그냥 내가 그것을 사용하기로되어있어 방법을 작동하지 않을 수 있습니다.

Xcode 6 export for localization을 사용하여 번역 파일에 단어가 나타나지 않는 것으로 보입니다. 여기에 상위 2 가지 변형을 시도했지만 아무 것도 시도하지 않았습니다. 워드 프로세서에서

예는 ... 보여

NSString *myString = [NSString localizedStringWithFormat:@"%@: %f", @"Cost", 1234.56]; 

내가 가진이 평균이 번호에서 번역 된 단어를 구분합니까? 즉, 그냥 사용할 수 없습니까?

NSString *myString = [NSString localizedStringWithFormat:@"Cost: %f", 1234.56]; 

내가 이것을 사용할 수 있다면 번역 된 문구는 무엇이고 번역은 무엇이겠습니까?

그렇다면 왜이 기능을 사용해야합니까? 왜 그냥 사용하지 않는 ...

NSString *myString = [NSString stringWithFormat:@"%@: %f", NSLocalizedString(@"Cost"), 1234.56]; 

이 마지막 차이점과의 차이점은 무엇입니까?

어느 쪽이든 누군가 제게이 단어로 번역 된 실제 단어를 가져 오는 방법을 보여줄 수 있습니까? 그건 그냥 롤 모든 것을 오용 될 것으로 보인다 주위

업데이트

OK, 순간 나는 바보 같은 일을 사용하고 있습니다. 내가 할 경우

은 ...

NSString *myString = [NSString stringWithFormat:@"%@: %f", NSLocalizedString(@"Cost"), 1234.56]; 

는 그런 다음 단어 "비용"을 번역하지만, 숫자에 대한 올바른 로케일을 사용하지 않습니다. 내가 사용하는 경우

...

NSString *myString = [NSString localizedStringWithFormat:@"%@: %f", @"Cost", 1234.56]; 
// or 
NSString *myString = [NSString localizedStringWithFormat:@"Cost: %f", 1234.56]; 

그런 다음 엑스 코드 "현지화에 대한 수출이"그냥 "비용"에 대해 완전히 아무것도 그것을 무시 전혀 때문에 아무것도 번역 않겠다 번역 파일에 추가됩니다. 내가 중복을 많이 사용하는 것 같은이 번역 파일에 "비용"을 추가하고 올바른 로케일로 수를 변환하지만,

[NSString localizedStringWithFormat:@"%@: %f", NSLocalizedString(@"Cost", @"Cost context stuff..."), 1234.56]; 

그래서, 내가 사용에 의지 한

은 ... 보인다 여기에 물건.

+0

@matt 예, 나는 그것을 보았습니다. 번역 할 단어를 얻을 수 없습니다. 생각할 수있는 모든 것을 시도했지만 단어가 번역 파일에 나타나지 않는 것 같습니다. 나는 번역 된 숫자 형식을 얻은 다음 영어 텍스트를 얻는다. – Fogmeister

+0

@matt 예, 우리는 15 개 언어로 번역했으며 언어 당 약 50 개 단어를 번역했습니다. 이것은 작동하지 않는 유일한 비트입니다. 지금 질문을 업데이트했습니다. – Fogmeister

+0

@matt 그러나 나는이 마지막 두 의견이 무슨 뜻인지 모르겠다. 나는 번역이 나에게 달려 있다는 것을 알고있다. 나는 언어가 언어와 다르다는 것을 압니다. 이 사실들로 인해 나는이 번역본의 본문을 얻지 못한다. – Fogmeister

답변

5

NSLocalizedStrings를 생각하면 키/값으로 생각하십시오.당신은 당신의 두 번째 예제와 같이 키와 약간의 트릭을 재생할 수 있습니다 :

핵심이다
@"Cost: %f" 

이 - 값이 아마 @처럼 보이는 뭔가 될 것 "SomeOtherWord : % f를"- % f를 여전히 사용된다 나중에 형식 문자열의 일부.

NSString *myString = [NSString stringWithFormat:@"%@: %f", NSLocalizedString(@"Cost"), 1234.56]; 

잘 될 수있는 문자열의 리셋 단어 "비용"의 번역 밖으로 별도의 수 -하지만 효과적으로 의미를 전달하기에 충분 될 수 있습니다 :

마지막 예를 들어 당신이 준 모든 언어로. 어쩌면 Label : value가 아닌 언어가있어 "Cost"를 번역해도 좋은 현지화를 얻을 수는 없습니다.

NSLocalizedString은 대부분의 상황에서 도움이 될 수 있지만 현지화가 어렵고 특수한 경우가 있으므로 코드에 특별한 경우가있을 수 있습니다. 나머지 로직과 격리되도록 최선을 다하십시오.

편집 : 그것은 진화로 실제 질문을 주소 :

localizedStringWithFormat: 

는 형식 지정자를 교체하는 방법을 변경합니다. 애플의는 NSString의 문서에서

:

토론

이 방법은 initWithFormat을 사용하는 것과 같습니다 : 로케일 : 및 로케일 인수로 현재 로케일을 전달합니다.

+0

그것이 내가 처음 생각한 것입니다. (텍스트가 핵심이었습니다). 하지만 실제로 사용할 때 번역 파일에 아무 것도 추가되지 않습니다. Xcode의 현지화 기능에 대한 버그가 그 버그일까요? – Fogmeister

+0

두 단계로 수행하면 어떻게됩니까?먼저 NSLocalizedString (키)을 가져온 다음 stringWithFormat :을 수행합니다. XCode가 일을 올바르게 채 웁니까? – KirkSpaziani

+0

커맨드 라인 버전 시도 : "xcodebuild -exportLocalizations"는 유용한 출력을 가질 수 있습니다. 또는 아마도 localizedStringWithFormat의 버그/누락 된 기능입니다. – KirkSpaziani