Передача переменной в макрос NSLocalizedString
не должна быть проблемой, вот что я сделал для тестирования:
Localizable.strings
"MyString"="My sample localized string";
И мой TestClass
@interface TestClass : NSObject
@property (readonly) NSString *localizedTitle;
-(instancetype)initWithTitle:(NSString *)title;
@end
@implementation TestClass {
NSString *_title;
}
-(instancetype)initWithTitle:(NSString *)title {
self = [super init];
if (self) {
_title = NSLocalizedString(title, nil);
}
return self;
}
-(NSString *)localizedTitle {
return _title;
}
@end
Инициируйте мой тестовый класс, затем получите доступ к его свойству
TestClass *myClass = [[TestClass alloc] initWithTitle:@"MyString"];
NSLog(@"%@", myClass.localizedTitle);
Вот что у меня в консоли:
2018-11-05 19:16:36.268393 TestApp[1471:352553] My sample localized string
Обновление
Макрос:
#define NSLocalizedString(key, comment) \
[NSBundle.mainBundle localizedStringForKey:(key) value:@"" table:nil]
Является ли ярлык для функции localizedStringForKey:value:table:
и в соответствии с документом:
Возвращаемое значение
Локализованная версия строки, обозначенная ключом в
таблица tableName. Этот метод возвращает следующее, когда ключ равен нулю или
не найдено в таблице:
Если ключ равен нулю, а значение равно нулю, возвращает пустую строку.
Если ключ равен нулю, а значение не равно нулю, возвращает значение.
Если ключ не найден и значение равно nil или пустой строке, возвращается ключ.
Если ключ не найден, а значение не ноль и не пусто, вернуть значение.
Если вы передадите ключ несуществования в макрос, вы получите сам ключ. Это назначенное поведение.
Кстати, в общем смысле вы не можете запросить локализованную строку, если она не определена, верно?