2015-02-06 1 views
0

Я получаю следующую ошибку: Аргумент не является литеральной строкой. Кто-нибудь знает, в чем проблема?Плохая запись в файле .//controller.m Аргумент не является литеральной строкой

strAbout - динамическая строка.

[btnBack setTitle:NSLocalizedString(strAbout, @"") forState:UIControlStateNormal]; 
+0

Можете ли вы разместить свой файл локализации? Кроме того, вы пытались передать ниль в качестве второго аргумента вместо @ ""? – Miknash

+0

https://medium.com/ios-apprentice/working-with-localization-905e4052b9de –

+0

[Objective C Literals] (http://clang.llvm.org/docs/ObjectiveCLiterals.html) –

ответ

2

Ключевое значение и комментарий в макрос NSLocalizedString должен быть постоянным, это значения использовать для создания таблицы ключей с комментариями, как подсказки, чтобы помочь переводчикам. Таким образом, вы не можете иметь динамический ключ, потому что система не будет знать, что вы хотите локализовать.

С другой стороны, вы можете иметь порты динамические как формат, если вам нужно, например, количество в тексте, но если весь ваш текст является динамическим, лучше всего использовать NSLocalizedString.

Это пример использования формата в NSLocalizedString:

[NSString stringWithFormat:NSLocalizedString(@"%@'s Profile", @"{User First Name}'s Profile"), user.name]; 

Вы можете прочитать об этом в NSHipster article, где я получил пример.

+0

Я застреваю, потому что вы не может Локализовать строку динамически во время выполнения в соответствии с этим ... вы не можете загрузить ключ из таблицы, а затем перевести, как вы получите сообщение об ошибке «Плохая запись в файле xxx.m (строка = xx): Аргумент не является литералом строка «. Я довольно удивлен этим, потому что часто для динамических моделей используются динамические модели, и большинство людей захочет локализовать результат. – delta2flat

Смежные вопросы