(다른 모든 사람들과 마찬가지로) NSLocalizedString
내 앱을 현지화 하는 데 사용 하고 있습니다.
불행히도 다음을 포함하여 몇 가지 "결점"이 있습니다 (NSLocalizedString 자체의 결함 일 필요는 없음).
- Xcode에서 문자열에 대한 자동 완성이 없습니다. 이로 인해 오류가 발생하기 쉬울뿐만 아니라 번거 롭습니다.
- 이미 존재하는 동등한 문자열을 알지 못했기 때문에 단순히 문자열을 다시 정의하게 될 수 있습니다 (예 : "비밀번호를 입력하십시오"대 "비밀번호를 먼저 입력하십시오")
- 자동 완성 문제와 마찬가지로 주석 문자열을 "기억"/ 복사해야합니다. 그렇지 않으면
genstring
한 문자열에 대해 여러 주석이 생깁니다. genstring
이미 일부 문자열을 현지화 한 후 사용하려면 이전 현지화를 잃지 않도록주의해야합니다.- 전체 프로젝트에 동일한 문자열이 흩어져 있습니다. 예를 들어
NSLocalizedString(@"Abort", @"Cancel action")
어디에서나 사용한 다음 코드 검토NSLocalizedString(@"Cancel", @"Cancel action")
에서 코드의 일관성을 높이기 위해 문자열의 이름을 바꾸도록 요청합니다 .
내가하는 일은 (그리고 많은 사람들이 이것을 찾은 후에 많은 사람들이 이것을하는 것으로 생각했습니다) 모든 현지화 코드 가있는 별도의 strings.h
파일 을 갖는 것 #define
입니다. 예를 들어
// In strings.h
#define NSLS_COMMON_CANCEL NSLocalizedString(@"Cancel", nil)
// Somewhere else
NSLog(@"%@", NSLS_COMMON_CANCEL);
이것은 본질적으로 코드 완성, 변수 이름을 변경하기위한 단일 위치 (더 이상 genstring 필요 없음) 및 자동 리팩터링을위한 고유 키워드를 제공합니다. 그러나 이것은 #define
본질적으로 구조화되지 않은 (예를 들어 LocString.Common.Cancel 또는 이와 유사한) 명령문 으로 끝납니다 .
그래서, 이것은 다소 효과가 있지만 프로젝트에서 어떻게하는지 궁금합니다. NSLocalizedString의 사용을 단순화하는 다른 접근 방법이 있습니까? 캡슐화하는 프레임 워크가 있을까요?