iPhone: чтение NSLocalizedString из английского файла .strings, даже если установлен другой язык - PullRequest
4 голосов
/ 04 июня 2010

У меня есть приложение, в котором есть файлы не из США Localizable.strings. Они появляются в проекте так, как я от них ожидаю: есть объект Localizable.strings и дочерние объекты для «en», «fr» и т. Д. Каждый из них представляет собой текстовый файл UTF16, и я проверил, что они распространяются в пакет сборки как правильные бинарные файлы plist.

Однако при запуске моего приложения, даже если в настройках устройства используется другой язык, возвращаются только строки из моего английского файла Localizable.strings

Предпочтительным языком NSLocale является, например, "fr" И я вижу, что настройка устройства как-то проходит, потому что кнопки на системной панели инструментов ("отменить" и т. д.) переведены.

Но мои строки все еще на английском. (Обратите внимание, что они исходят из файла .strings, так как я редактировал это, чтобы проверить.)

Итак: файлы строк кажутся в порядке, а их сборка и развертывание в порядке.

Есть ли что-то еще, что мне нужно сделать, чтобы "сообщить" проекту, что другие локали поддерживаются?

Спасибо!

Ответы [ 5 ]

6 голосов
/ 27 сентября 2010

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

5 голосов
/ 04 июня 2010

Это происходит (очевидно), когда в корневом каталоге проекта есть файл Localizable.strings в дополнение к отдельным каталогам .lproj. Приложение, кажется, всегда предпочитает это, если оно присутствует. Тот факт, что это было там, скорее всего, был артефактом, пытавшимся заставить локализации работать в проекте.

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

2 голосов
/ 03 декабря 2011

Я решил так: Я удалил приложение из симулятора и в xcode: Product -> Clean

2 голосов
/ 23 ноября 2010

Это также может помочь удалить приложение из симулятора после локализации .NIB, так как локализованная версия будет иметь два (или более) новых файла в новых местах (например, 'en.lproj', 'fr.lproj' ). Однако, когда вы создаете симулятор, слишком глупо знать, чтобы удалить старый файл .xib, поэтому он будет продолжать загружать старый устаревший файл xib, а не вашу новую локализованную версию, пока вы не очистите устройство путем переустановки приложения.

0 голосов
/ 04 июня 2010

Для конкретной проблемы, когда en_US всегда возвращается, вам нужно запросить preferredLanguages для массива предпочитаемых языков, а не currentLocale.

NSLocalizedString не возвращает строку с ключом из правильного файла?

В локализации вы должны быть уверены, что вы меняете то, что, по вашему мнению, вы меняете. Если вы измените язык в настройках, это повлияет на строку, которая возвращается из вашего файла localizable.strings. Если вы измените настройки в поле «Формат региона», это только дата, символ валюты и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...