Xcode 9 - Предупреждение о проблеме локализации Раскадровка

В настоящее время я тестирую Xcode 9 beta 3 на момент написания этой статьи.

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

Приложение довольно сложное, и многие представления получают эти предупреждения.

Предупреждение:

Certain autolayout constraint combinations may result in an appropriate layout in the current development language but will pose issues in other languages and regions.

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

Есть ли способ отключить только это предупреждение? Звучит глупо, но я не могу видеть все свои просмотры с желтым значком предупреждения и счетчиком вверху (110 предупреждений!)

проблема локализации


person Simon    schedule 11.07.2017    source источник
comment
stackoverflow .com/questions/33111048/   -  person Anish Parajuli 웃    schedule 11.07.2017
comment
Желтые треугольники на вашем снимке экрана кликабельны и отображают всплывающее окно с предлагаемыми разрешениями. Решение проблем является идеальным решением здесь. Эти проблемы были устранены в более поздних бета-сборках Xcode 9, а также в Xcode 9.1. В настоящее время нет способа просто отключить предупреждения, кроме отмены локализации вашего документа. Пожалуйста, отправьте файл с ошибками (по адресу bugreport.apple.com) для любых предупреждений, которые кажутся неверными, и прикрепите образец документа.   -  person Quinn Taylor    schedule 02.10.2017


Ответы (4)


Источником нежелательных предупреждений является то, что Xcode по умолчанию использует раскадровки, «подготовленные» для локализации. Они «подготовлены», настроив их с помощью базовая интернационализация.

Чтобы полностью отключить это предупреждение в определенной раскадровке, вам нужно сообщить Xcode, что раскадровка не должна считаться локализуемой. Самый простой способ сделать это — просто переместить файл раскадровки из папки Base.lproj на один уровень выше и повторно добавить файл в проект. Как только я это сделал, предупреждения исчезли.

Шаги

Этот процесс должен работать со старыми и новыми проектами. Протестировано в Xcode 9.1 с использованием проекта, созданного с помощью Xcode 9.1

  1. Переместите раскадровку из папки Base.lproj на один уровень вверх через Finder.
  2. Удалите ссылку на раскадровку из вашего проекта через Xcode
  3. Перетащите (или повторно добавьте) раскадровку в свой проект.
  4. С помощью File Inspector убедитесь, что раскадровка больше не имеет базовой локализации.

     

Иллюстрированное прохождение

По умолчанию Xcode имеет раскадровки, «подготовленные» для локализации.

«Структура

     

Переместите файлы раскадровки из папки Base.lproj, чтобы предотвратить появление предупреждений.

Желаемая структура папок

     

Удалить ссылку на файл

Удалить ссылку на файл

     

Повторно добавьте раскадровку

«Перетащите введите здесь описание изображения

     

Вы увидите кнопку "Локализация...", когда все получится.

Ура! Больше никаких предупреждений

     

Если вы хотите локализовать в будущем

Просто нажмите кнопку «Локализация...» и следуйте инструкциям Xcode. Кроме того, вам действительно нужно обратиться к предупреждениям, о которых вам сообщает Xcode. Существуют различные способы их решения, я рекомендую этот wa">вопрос для начала.

Для видеодемонстрации процесса посмотрите запись экрана.

person allenh    schedule 11.07.2017
comment
Я переместил файл раскадровки на уровень выше в проекте через Finder, но все еще та же проблема. Мне нужно удалить его через Xcode, а затем добавить в проект в Xcode? - person Simon; 11.07.2017
comment
Вам нужно переместить его на уровень выше с помощью Finder. Он будет находиться внутри папки с именем Base.lproj или English.lproj или точкой lproj на другом языке. Используя Finder, переместите файл раскадровки из этой папки. На этом этапе Xcode не будет знать, где находится файл, поэтому удалите ссылку и повторно добавьте файл, просто перетащив его. - person allenh; 11.07.2017
comment
Потрясающий. Повлияет ли это на что-нибудь в долгосрочной перспективе? Смогу ли я переместить его обратно в каталог Base.lproj, когда захочу? Просто убедитесь, прежде чем продолжить этот вариант. - person Simon; 11.07.2017
comment
Если вы решите, что хотите поддерживать локализацию, просто нажмите кнопку Localize..., и Xcode переместит вашу раскадровку в выбранную вами папку lproj (он предложит либо Base, либо ваш язык разработки) . - person allenh; 11.07.2017
comment
@Simon Дайте мне знать, если это сработало для вас. И если это так, пожалуйста, примите! - person allenh; 12.07.2017
comment
@alien humphreys: Когда я снова локализую после этого процесса. Он снова покажет того же Уоринга. - person Mitesh jadav; 23.09.2017
comment
@Miteshjadav Вопрос и ответ касаются отключения предупреждения. Если у вас есть раскадровка, которую действительно нужно локализовать, вам следует обновить макет, чтобы он правильно соответствовал разной длине языков. Вы можете сделать следующее: установить для параметра Lines значение 0, что позволит метке расти вертикально, использовать фиксированные ограничения для начала и сверху с гибкими ограничениями для конца и снизу. Если вы хотите опубликовать конкретный вопрос, я уверен, что вы получите ответ о том, как лучше всего разрешить вашу ситуацию. - person allenh; 23.09.2017
comment
Я пробую этот метод, но продолжаю получать terminating with uncaught exception of type NSException, когда пытаюсь его запустить. Мои шаги: Переместите Main.storyboard с помощью Finder за пределы Base.lproj. Затем откройте проект с помощью Xcode. Удалите старый Main.storyboard, так как его расположение неверно. Затем перетащите файл из Finder в Xcode. Скомпилируйте и запустите. - person Jason Brady; 12.10.2017
comment
@JasonBrady Нет ли другого объяснения, кроме исключения? Пробовали ли вы очищать проект/производные данные после переноса? - person allenh; 12.10.2017
comment
@AllenHumpreys, оказалось, мне нужно было установить флажок в Target Membership, но теперь у меня все хорошо без локализации. - person Jason Brady; 12.10.2017
comment
Кажется, это работает для меня. Большое спасибо. Проголосовал..!! - person NSPratik; 28.11.2017
comment
Нажмите на значок папки, а не на стрелку. - person NSPratik; 28.11.2017
comment
@NSPratik Спасибо за это, я пошел обновлять изображение инструкции и обнаружил, что Xcode 9.1 больше не работает с этим методом исправления ссылки на файл. Я обновил инструкции, указав решение по удалению и повторному добавлению, которое должно быть более понятным. - person allenh; 28.11.2017
comment
моя проблема была решена, но я хочу спросить, после этого мне нужно переместить файл раскадровки обратно в папку bass.lproj ?? - person TheTravloper; 28.09.2018
comment
@HappilyHemu Нет, вы не должны возвращать его обратно. Если вы переместите его обратно, предупреждения снова появятся. Они должны быть только в Base.lproj, если они локализованы. Если вы хотите локализовать их позже, нажмите кнопку Localize, упомянутую в ответе. - person allenh; 28.09.2018

Предполагая, что ваше приложение не локализовано, вам необходимо восстановить параметр «Локализация» в раскадровке. Один из наших был настроен на английский язык. Снимите флажок «Английский» или любой другой, установленный у вас. Раскадровка находится в папке с кодом языка en для английского. Если снять этот флажок, он будет удален из каталога проекта, поскольку приложение больше не ищет папку en. Найдите раскадровку в папке Finder, переместите ее из папки en и перетащите обратно в проект. Убедитесь, что выбрано Целевое членство. Очистите, закройте, откройте, принудительно завершите работу и т. д. по мере необходимости, и все будет готово! У нас было 360 предупреждений в одной раскадровке, поэтому было приятно решить эту проблему!

введите здесь описание изображения

person John    schedule 27.09.2017
comment
Сначала было страшно, когда раскадровка исчезла, и я нашел ее в мусоре, но я согласен, что это решило проблему с предупреждением, ха-ха - person Yaroslav Dukal; 04.03.2018

Вы также можете удалить предупреждение о проблеме с локализацией, просто встроив метку или кнопку в прозрачное представление. Затем удалите ограничение фиксированной ширины с метки или кнопки и вместо этого установите его для этого представления контейнера.

Используя представление контейнера, вы можете отключить предупреждение и по-прежнему иметь возможность локализовать раскадровку. Иногда вам нужно иметь метку или кнопку с фиксированной шириной, даже если язык будет меняться, и если вы уверены, что фиксированная ширина достаточно велика, это не должно быть проблемой, но Xcode этого не знает, вот почему вы получаете предупреждение ;-)

person boherna    schedule 13.09.2017

Простое решение: отключите Respect Language Direction для каждого проблемного ограничения.

См. https://stackoverflow.com/a/45764271/201828.

person phatmann    schedule 20.12.2017