Можно ли использовать переменные и / или параметры с 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 58

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);

ваши идеи должны работать. Но если вы возвращаете входной параметр, это означает, что входной параметр не был найден как ключ в вашем Локализуемом.строки файла. Проверьте синтаксис и расположение этого файла.