Подтвердить что ты не робот

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

(Обратите внимание, что переменная может содержать что угодно, а не только фиксированный набор строк.)

Спасибо!

4b9b3361

Ответ 1

Оказывается, что недостающая целевая запись виновата. Просто проверяя, что моя текущая цель сборки включает файл Localizable.string, решила проблему!

Ответ 2

Если вы хотите вернуть локализованную версию "Это Apple/Orange/whatever", вам нужно:

NSString *localizedVersion = NSLocalizedString(([NSString stringWithFormat:@"This is an %@", @"Apple"]), nil);

(I.e., вложение NSLocalizedString() и [NSString stringWithFormat:] отменено.)

Если вы хотите, чтобы формат был локализованным, но не замещаемым значением, сделайте следующее:

NSString *finalString = [NSString stringWithFormat:NSLocalizedString(@"SomeFormat", nil), @"Apple"];

И в вашем Localizable.strings:

SomeFormat = "This is an %@";

Ответ 3

Я просто хочу добавить одно очень полезное определение, которое я использую во многих своих проектах.

Вдохновленный возможностью андроидов, я добавил эту функцию в мой файл 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);

Ответ 4

Если в вашей локализованной строке имеется более одной переменной, вы можете использовать это решение:

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

Ответ 5

Для быстрого:

let myString = String(format: NSLocalizedString("I authorize the payment of %d ", comment: ""), amount)

Ответ 6

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