NSLocalizedString извлекает только ключ, а не значение в Localizable.strings (IOS) - PullRequest
40 голосов
/ 12 февраля 2012

Я создал файл строк с именем «Localizable.strings» и добавил к нему два языка, например:

"CONNECTIONERROR" = "Check that you have a working internet connection.";
"CONNECTIONERRORTITLE" = "Network error";

Я также преобразовал файлы в Unicode UTF-8 Однако, когда я создаю UIAlertView, как это:

 UIAlertView *myAlert = [[UIAlertView alloc]
 initWithTitle:NSLocalizedString(@"CONNECTIONERRORITLE",nil)
 message:NSLocalizedString(@"CONNECTIONERROR",nil)                    
 delegate:self
 cancelButtonTitle:@"Ok"
 otherButtonTitles:nil];

в окне предупреждения отображается только текст ключа, а не значение. Это работает, если я, например, установил для текста UITextviews значение NSLocalizedString (@ "CONNECTIONERROR", nil), но в представлении предупреждений отображается только ключ. Кто-нибудь знает, что не так?

Ответы [ 29 ]

6 голосов
/ 07 июля 2014

Переименуйте файл InfoPlist.strings в Localizable.strings (двойной щелчок), после чего вы получите правильную строку для этого ключа.

4 голосов
/ 24 июля 2013

Чтобы узнать, находится ли файл Localizable.strings, проверьте содержимое вашей сборки .app, и вы также можете сделать это в коде:

// en для английского языка, например, укажите ваш здесь NSString * path = [[NSBundle mainBundle] pathForResource: @ "en" ofType: @ "lproj"];

Если путь равен NULL, это означает, что файл не найден.

3 голосов
/ 29 ноября 2013

Если вы написали двойные точки с запятой в конце строки, NSLocalization не работает.Вы должны проверить файл Localizable.strings, если есть ';;'

2 голосов
/ 07 октября 2015

Если в вашем строковом файле есть лишняя точка с запятой, она не локализуется.

1 голос
/ 04 февраля 2014

положить; в конце строк в файлах Localizable.strings.

1 голос
/ 08 декабря 2014

В моем случае, я попытался очистить проект и удалить производные данные все еще не работает.Я удаляю несколько разрывов строк в файле строк, а затем Xcode снова находит строки.

1 голос
/ 18 января 2016

Я столкнулся с подобной проблемой, вдруг мои локализуемые строки не работали вообще. Затем я использовал файл-сравнение со старой копией .strings и, наконец, обнаружил, что случайно удалил ключ в нем.

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

Это ожидаемый формат "Ключ" = "Значение";

1 голос
/ 19 августа 2015

Ни одно из предложенных решений не помогло мне, но я решил проблему, удалив файл .app в продуктах

.
0 голосов
/ 13 декабря 2018

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

Проблема в моем случае заключалась в том, что после ручного объединения конфликта контроля версий осталась лишняя строка '>>>>>', проект не жаловался (не так, как если вы пропустите точку с запятой, он жалуется)и собирался правильно, поэтому каждый ключ до этого «>>>>>» переводился, а каждый ключ после, нет.

Если более простые решения не помогли, вам, возможно, придется пройти каждую строку и искать дополнительные символы (не только '>>>>>', также другие дополнительные символы), либо если вы используете контроль версийполучить более старую стабильную версию файла Localizable.strings и вручную выполнить изменения и добавить последующие коммиты.

0 голосов
/ 24 октября 2018

Поскольку я наткнулся на это при поиске ответа на похожую проблему, я оставляю свое решение здесь:

Если в вашем ключе вместо "\ n" указан ключ "\ u2028", онвсегда будет возвращать только ключ, а не значение.Кажется, это ошибка с локализацией.

...