Можно ли использовать переменные и / или параметры с NSLocalizedString?
Я пробовал использовать переменную в качестве входного параметра для NSLocalizedString, но все, что я получаю обратно-это входной параметр. Что я делаю не так? Можно ли использовать переменное строковое значение в качестве индекса для NSLocalized string?
например, у меня есть некоторые строки, которые я хочу, чтобы локализованные версии отображались. Однако я хотел бы использовать переменную в качестве параметра для NSLocalizedString вместо постоянной строки. Кроме того, я хотел бы включить форматирование элементы в параметре для NSLocalizedString, поэтому я мог бы получить локализованную версию строки с теми же параметрами форматирования. Могу ли я сделать следующее:
Случай 1: Переменная NSLocalizedstring:
NSString *varStr = @"Index1";
NSString *string1 = NSLocalizedString(varStr,@"");
Case 2: Formatted NSLocalizedString:
NSString *string1 = [NSString stringWithFormat:NSLocalizedString(@"This is an %@",@""),@"Apple"];
(обратите внимание, что переменная может содержать что угодно, а не только фиксированный набор строк.)
спасибо!
6 ответов:
если вы хотите вернуть локализованную версию "This Is an Apple / Orange / whatever", вы хотите:
NSString *localizedVersion = NSLocalizedString(([NSString stringWithFormat:@"This is an %@", @"Apple"]), nil);
(то есть, гнездование
NSLocalizedString()
и[NSString stringWithFormat:]
поменялись местами.)если вы хотите
Я просто хочу добавить одно очень полезное определение, которое я использую во многих моих проектах.
вдохновленный возможностью андроидов, я добавил эту функцию в свой
header prefix
file:#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);
для swift:
let myString = String(format: NSLocalizedString("I authorize the payment of %d ", comment: ""), amount)
оказывается, что недостающая целевая запись виновата. Просто проверяю, что моя текущая цель сборки включает Локализуемое.string file решил проблему!
Если у вас есть более одной переменной в локализованной строке, вы можете использовать это решение:
В Файл Localizable.строки
"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);