Локализация Xcode сводит меня с ума! Не загружать раскадровки
Это было 2 дня, эта проблема меня заводила.
Я пытаюсь локализовать приложение iOS, но для жизни я не могу заставить его работать. Он работает достаточно легко, когда я пытаюсь выполнить пустой проект, но не в моем текущем проекте.
Я добавил языки в локализации с помощью "+", я локализовал раскадровку, но когда я проверяю симулятор или устройство, я все еще вижу английскую версию. И на самом деле это даже не английский, потому что, если я изменю Maintsoryboard (английский), я не вижу изменений в устройстве... Я все еще вижу исходные тексты.
Я пробовал переиздавать симулятор, удалять приложение и т.д. Не повезло.
Я вернусь к резервной копии, попробовал добавить все снова. Не повезло.
Кто-нибудь может помочь? Я знаю, что это не так много, но я не знаю, что объяснить, чтобы помочь вам помочь мне. Поэтому, пожалуйста, дайте мне знать, если мне не хватает информации.
FYI, когда я просматриваю папку приложения в Developer, у меня изначально нет en.lproj, когда кажется, что я должен иметь его по умолчанию?
Ответы
Ответ 1
Похоже, вы уже поняли это, но я думаю, что, вероятно, произошло то, что изначально у вас была "MainStoryboard.storyboard" как нелокализованный ресурс. Это означает, что при создании приложения вы получаете "MainStoryboard.storyboardc" как нелокализованный ресурс. Когда вы меняете раскадровку, чтобы быть локализованной, вы получаете "Base.lproj/MainStoryboard.storyboardc" в своих ресурсах пакета.
При создании в Xcode есть несколько копий вашего приложения. Там копия на вашем устройстве или в симуляторе, а также копия в вашей производной папке данных в Xcode. Когда вы делаете инкрементную сборку своего приложения, копия в производной папке данных в Xcode представляет собой слияние вашего нового контента и вашего старого контента. Итак, когда вы изменяете ресурс в Xcode и перестраиваете, вы получаете новейший ресурс. Однако при переименовании или удалении ресурсов старая копия остается в каталоге сборки до тех пор, пока вы не выполните чистую операцию.
Это означает, что у вашего продукта сборки, вероятно, были и "MainStoryboard.storyboardc" , и "Base.lproj/MainStoryboard.storyboardc". Когда NSBundle загружает ресурсы, он предпочитает нелокализованный контент и загружает старую "MainStoryboard.storyboardc" .
Ответ 2
Будьте абсолютно уверены, что у вас нет опечаток в файле Main.strings, например. двойные кавычки и точки с запятой. Если у вас есть опечатки, устройство просто игнорирует локализованные строки и применяет интернационализацию базы.
Ответ 3
Слепой снимок: проверьте, что файл строк - UTF-16 (немного верно, если я правильно помню), и у него нет синтаксических ошибок (отсутствует или цитата). Также запустите проект чистый до создания после изменений в файлах строк.
Ответ 4
Попробуйте выбрать все различные .strings
, .xib
и .storyboard
файлы, которые локализованы.
В "Инспекторе файлов" убедитесь, что для каждого файла отмечены все необходимые локализации.
После добавления локализации English
был снят флажок в нескольких файлах. Таким образом, некоторые взгляды были локализованы на непреднамеренные языки. Проверка English
исправила проблему.
![Английская локализация не отмечена]()