Комментарии 17
На правах лайфхака — всё становится лучше с
@IBInspectable
Вместо «User Defined Runtime Attributes» можно использовать IBInspectable свойства
Все равно не обойтись без файлов
Поскольку UILabel зачастую содержит не статичный текст.
Localizable.strings
InfoPlist.strings
Поскольку UILabel зачастую содержит не статичный текст.
Да, именно так. Однако, если текст статичный, лучше не выносить его в код.
Естественно, для локализации, описанным в статье способом, строки должны храниться в
Естественно, для локализации, описанным в статье способом, строки должны храниться в
Localizable.strings
как и в случае с программной локализацией. Все это по тому, что локализация, фактически, осуществляется программно. Она лишь скрыта таким образом, что создается ощущение редактирования обычных свойств в Interface Builder.а в чем проблема сделать нормальную локализацию storyboard? никакого гемора, никаких лишних файлов… или я что то не понял?
Ответ на ваш вопрос находится в первом абзаце главы «Суть проблемы».
Если вкратце, то вы не можете закрепить перевод за какой-то конкретной View. Если вы ее переместите, перевод не переместится. Например, у вас на storyboard был ViewController и вы решили хранить его в отдельном XIB файле. Вы создаете отдельный XIB, перемещаете туда ViewController, но переводы не перемещаются. Мало того, для каждой View создастся новый идентификатор и вам придется подгонять идентификаторы строк вручную. Просто так скопировать переводы не получится.
Если вкратце, то вы не можете закрепить перевод за какой-то конкретной View. Если вы ее переместите, перевод не переместится. Например, у вас на storyboard был ViewController и вы решили хранить его в отдельном XIB файле. Вы создаете отдельный XIB, перемещаете туда ViewController, но переводы не перемещаются. Мало того, для каждой View создастся новый идентификатор и вам придется подгонять идентификаторы строк вручную. Просто так скопировать переводы не получится.
почмему не получится… боже мой… без проблем всё перенесется. ) Storyboard с переводом может быть в двух состояниях, первый как тексты, воторй как отображения. Для переноса достаточно перевести ВСЕ переводы в режим отображения. Дальше дело техники. И да, при таких широченных возможностях storyboard'a возвращаться назад к XIB, смысла вообще никакого нет. И тем более ради этого код усложнять…
Перевод storyboard в режиме отображения несет в себе кучу проблем. Его нужно использовать только в крайних случаях, когда для какого либо языка нужно использовать немного иную разметку.
Мало того. В этом случае вам придется копировать каждый язык вручную. И быть внимательным, что бы не перепутать языки.
Мало того. В этом случае вам придется копировать каждый язык вручную. И быть внимательным, что бы не перепутать языки.
«Перевод storyboard в режиме отображения несет в себе кучу проблем.» каких например? Всегда можно вернуть режим текста после того как выдран View и перенесен из storyboard в xib. Это не односторонний процесс а обратимый без каких либо последствий.
«Перевод storyboard в режиме отображения несет в себе кучу проблем.» каких например?Тем что у вас на каждый язык своя разметка и их всех нужно редактировать независимо друг от друга.
Если у нас своя разметка, тогда нет смысла переводить в текст, вы это понимаете? Значит вообще никаких проблем с копированием и переносом в XIB не будет.
Вообще надо так же сказать, что есть сторонние инструменты, для перевода всего Xcode проекта которые сами следят за айдишниками и генерят по основному файлу дополнительные с переводами. И да у Apple эта сторона проекта действительно далека от идеала. И таких мелких не идеальных вещей много и про них мало кто знает.
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Удобная локализация iOS приложений в Interface Builder