2013-12-18 2 views
3

그래서 저는 일본어에서 영어로 응용 프로그램을 현지화하고 있습니다.iOS 문자열 파일 충돌 - 소스 langage와 동일한 문자열, 대상이 다릅니다.

japanese에서는 "Mr." 와. "리"(/ ". 부인"), 그래서 나는 같은 것을 할 필요가 :

/* Salutation format for user (male) */ 
"%@様" = "Mr. %@"; 

/* Salutation format for user (female) */ 
"%@様" = "Ms. %@"; 

당신이 볼 수 있듯이, 일본 현지화는 두 경우 모두에서 동일한 문자열을 사용합니다. 문자열 파일에 동일한 '소스'(즉, 왼쪽) 문자열이있는 항목이 두 개 이상 포함되어있는 경우 '의견'을 사용하여 어떤 것이 사용되었는지 확인했습니다. 내가 틀렸어. 그리고 주석 매개 변수는 인간 번역가를위한 원조 일 뿐이며, 완전히 무시되었다. NSLocalizedString(). 나는 응용 프로그램을 실행하는 경우

그래서, 코드 경로의 양쪽 아래에 상관없이 사용자의 성별, 같은 캐릭터 라인을 작성 : 그래서

NSString* userName; 
BOOL userIsMale; 

/* userName and userIsMale are set... */ 

NSString* format; 

if(userIsMale){ 
    // MALE 
    format = NSLocalizedString(@"%@様", 
           @"Salutation format for user (male)"); 
} 
else{ 
    // FEMALE 
    format = NSLocalizedString(@"%@様", 
           @"Salutation format for user (female)"); 
} 

NSString* salutation = [NSString stringWithFormat:format, userName]; 

는, 어떻게 이런 경우에 대처해야 하는가?

+0

나는 새로운 아이디어를 얻지 못합니다. 어리석은 것처럼 보이지만 "@ % @ like"를위한 공간을 주려고 시도 할 수 있습니다. 나는 "@ % @ 様"공백없이 다른 공백을 추가했습니다. 이것은 단지 시도입니다. 솔루션 –

+1

으로 간주하지 말고 현지화 된 문자열 "% @ 様"= "Mr. % @"형식을 확인하십시오. 그것은 "key"= "value"로 시작합니다; 형식 u가 각 쌍의 시작 부분에 "@"를 추가했습니다. –

+0

예, 내 Localizable.strings 예제의 구문이 잘못되었습니다. 수정 해 드리겠습니다. 고맙습니다. –

답변

5

사실, NSLocalizedString의 "왼쪽면"이 열쇠입니다. 그래서 당신은 같은 것을 할 수있는 :베이스 *.strings 파일에 다음

NSLocalizedString(@"SalutForUserMale", @"Salutation format for user (male)"); 
NSLocalizedString(@"SalutForUserFemale", @"Salutation format for user (female)"); 

을 (일본어 내가 가정), 당신은 것입니다 :

"SalutForUserMale" = "%@様"; 
"SalutForUserFemale" = "%@様"; 

그리고 영어 *.strings 파일에

당신이 할 것이다 :

"SalutForUserMale" = "Mr. %@"; 
"SalutForUserFemale" = "Ms. %@"; 
+0

고마워, 너는 옳다.유일한주의 사항은 "항목을 찾을 수 없을 때 기본값으로 키 문자열 사용"기능을 사용하지 않는 것입니다 (누락 된 항목이있는 경우 - 문자열 파일을 수동으로 작성/확장하는 경우 매우 가능성이 높습니다). 숨겨진 문자열. 그러나 그것은 복용/테스트 할 가치가있는 위험입니다. –

1

Localizable.strings 파일은 키 값 목록에 불과합니다. 특이한 열쇠로 일본어 구문을 사용하고 있지만 작동한다고 생각합니다. 원래의 앱이 일본어로 개발 되었기 때문에 이것이라고 가정합니다 (?). 나는 보통 영어 문구 키를 사용하지만, 어쨌든.

요점은 단지 입니다. 하나의 번역에 두 개의 다른 구문을 사용하려면 모든 번역에 두 개의 다른 키가 있어야합니다.. 구별되지 않지만 번역에서 기본 언어로 된 것이 있다면 두 개의 새로운 키로 기존 키를 "분할"할 수 있습니다. 그냥 약간 변경하거나 번호를 추가하십시오. 아래를 참조하십시오.

/* english .strings file */ 
"hello_world_key" = "Hello World"; 
"Yes1" = "Yes"; // same in english but different values in german 
"Yes2" = "Yes"; 

/* german .strings file */ 
"hello_world_key" = "Hallo Welt"; 
"Yes1" = "Ja"; 
"Yes2" = "Jawohl";