NSLocalizedString에서 변수 및 / 또는 매개 변수를 사용할 수 있습니까?
NSLocalizedString에 대한 입력 매개 변수로 변수를 사용하려고 시도했지만 다시 얻는 것은 입력 매개 변수입니다. 내가 도대체 뭘 잘못하고있는 겁니까? NSLocalized 문자열의 인덱스로 변수 문자열 값을 사용할 수 있습니까?
예를 들어, 지역화 된 버전을 표시하려는 문자열이 있습니다. 그러나 상수 문자열 대신 변수를 NSLocalizedString에 대한 매개 변수로 사용하고 싶습니다. 마찬가지로 NSLocalizedString의 매개 변수에 형식화 요소를 포함하고 싶습니다. 따라서 동일한 형식화 매개 변수를 사용하여 현지화 된 버전의 문자열을 검색 할 수 있습니다. 다음을 수행 할 수 있습니까?
사례 1 : 변수 NSLocalizedstring :
NSString *varStr = @"Index1";
NSString *string1 = NSLocalizedString(varStr,@"");
사례 2 : 형식화 된 NSLocalizedString :
NSString *string1 = [NSString stringWithFormat:NSLocalizedString(@"This is an %@",@""),@"Apple"];
(변수는 고정 된 문자열 세트뿐만 아니라 모든 것을 포함 할 수 있습니다.)
감사!
"This is an Apple / Orange / whatever"의 현지화 된 버전을 반환하려는 경우 다음을 원할 것입니다.
NSString *localizedVersion = NSLocalizedString(([NSString stringWithFormat:@"This is an %@", @"Apple"]), nil);
(즉, NSLocalizedString()
및 의 중첩 [NSString stringWithFormat:]
이 반전됩니다.)
원하는 것이 현지화 할 형식 이지만 대체 값이 아닌 경우 다음을 수행하십시오.
NSString *finalString = [NSString stringWithFormat:NSLocalizedString(@"SomeFormat", nil), @"Apple"];
그리고 당신의 Localizable.strings
:
SomeFormat = "This is an %@";
많은 프로젝트에서 사용하는 매우 유용한 정의를 추가하고 싶습니다.
안드로이드 가능성에 영감을 받아이 기능을 header prefix
파일에 추가했습니다 .
#define NSLocalizedFormatString(fmt, ...) [NSString stringWithFormat:NSLocalizedString(fmt, nil), __VA_ARGS__]
이를 통해 다음과 같이 지역화 된 문자열을 정의 할 수 있습니다.
"ExampleScreenAuthorizationDescriptionLbl"= "I authorize the payment of %@ to %@.";
다음을 통해 사용할 수 있습니다.
self.labelAuthorizationText.text = NSLocalizedFormatString(@"ExampleScreenAuthorizationDescriptionLbl", self.formattedAmount, self.companyQualifier);
신속한 :
let myString = String(format: NSLocalizedString("I authorize the payment of %d ", comment: ""), amount)
누락 된 대상 항목이 비난받는 것으로 밝혀졌습니다. 현재 빌드 대상에 Localizable.string 파일이 포함되어 있는지 확인하기 만하면 문제가 해결되었습니다!
지역화 된 문자열에 둘 이상의 변수가있는 경우이 솔루션을 사용할 수 있습니다.
Localizable.strings에서
"winpopup" = "#name# wins a #type# and get #points# points(s)";
그리고 stringByReplacingOccurrencesOfString을 사용하여 값을 삽입하십시오.
NSString *string = NSLocalizedString(@"winpopup", nil); //"#name# wins a #type# and get #points# points(s)"
NSString *foo = [string stringByReplacingOccurrencesOfString:@"#name#" withString:gameLayer.turn];
NSString *fooo = [foo stringByReplacingOccurrencesOfString:@"#type#" withString:winMode];
NSString *msg = [fooo stringByReplacingOccurrencesOfString:@"#points#" withString:[NSString stringWithFormat:@"%i", pkt]];
NSLog(@"%@", msg);
extension String {
public var localizedString: String {
return NSLocalizedString(self, comment: "")
}
public func localizedString(with arguments: [CVarArg]) -> String {
return String(format: localizedString, arguments: arguments)
}
}
Localizable.string :
"Alarm:Popup:DismissOperation:DeviceMessage" = "\"%@\" will send position updates on a regular basis again.";
"Global:Text:Ok" = "OK";
용법:
let message = "Alarm:Popup:DismissOperation:DeviceMessage".localizedString(with: [name])
과
let title = "Global:Text:Ok".localizedString
당신의 아이디어는 효과가 있어야합니다. 그러나 입력 매개 변수를 다시 가져 오는 경우 입력 매개 변수가 Localizable.strings 파일에서 키로 발견되지 않았 음을 의미합니다. 해당 파일의 구문과 위치를 확인하십시오.
'program tip' 카테고리의 다른 글
PHP 에코 대 PHP 짧은 태그 (0) | 2020.12.03 |
---|---|
설치된 Drupal 버전을 찾는 방법 (0) | 2020.12.03 |
VS 2010 .net 4.0에서 엔티티 프레임 워크를 사용할 때 'datetime2'오류 (0) | 2020.12.03 |
FormData로 업로드 된 Blob에 파일 이름을 지정하는 방법은 무엇입니까? (0) | 2020.12.03 |
자바 : for (;;) 대 while (true) (0) | 2020.12.03 |