2009-02-28 1 views
7

В Apple Docs говорится, что Nib позволяет интернационализацию, просто переведя Nib на многие языки. Сейчас я думаю о худшем, но реалистичном сценарии: вы создали огромный пользовательский интерфейс. Затем вы переводите это на 25 языков. Таким образом, вы получаете 25 разных Nib. Вы также получаете огромную избыточность в дизайне и определение пользовательского интерфейса: в 25 раз больше. То же самое Связывает, то же самое. Просто текст отличается.Интернационализация с использованием Nibs. Это точно хорошая идея?

Итак, я действительно думаю, что это очень плохой подход. Вместо этого я бы предпочел просто соединить все тексты с набором ресурсов или что-то в этом роде. Просто файл с текстовыми строками, который связан во время выполнения с соответствующим языковым ресурсом. Тогда у вас есть только «проблема», связанная с текстом, который на самом деле не делает ничего интересного. Но тогда вы можете вносить изменения в свой UI ONCE без необходимости повторять один и тот же шаг 25 раз снова и снова. Новая привязка в каждом нобе. Это было бы так ужасно!

Теперь, пожалуйста, скажите мне, что я ошибался. Apple не предполагает, что мы делаем что-то такое creazy?

ответ

9

Локализация не идеальна. Хотя элементы пользовательского интерфейса Cocoa поддерживают некоторую динамическую гибкость в их калибровке (флагов ausosizing), их очень сложно упорядочить, чтобы они могли размещать текст любого размера.

Как указывает Хэн-Чонг, это обычно означает, что для каждой локализации требуется некоторая корректировка макета. Apple поддерживает процесс, называемый инкрементной локализацией, с помощью инструмента под названием «ibtool», в комплекте с инструментами разработчика. Этот процесс далек от интуитивного и, кажется, имеет некоторые тонкие ошибки, но помогает сделать процесс проще, чем, скажем, отдельно, поддерживая 25 разных перьев вручную. Этот процесс по существу включает в себя изменения картографии, которые вы делаете в своем первичном наконечнике, на другие локализованные наконечники. Apple, описывает процесс более подробно:

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html

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

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

5

Иногда локализация включает в себя не только замену текста, но и изменения в макете. Например, строки в одном языке/языке могут быть значительно длиннее, чем в другом, что приводит к изменению макета. Язык справа налево часто будет означать некоторые изменения в макете.

+1

I второй этот. Если вы планируете поддерживать языки справа налево, простая замена строк практически невозможна. – sbooth

5

Основываясь на предыдущих двух ответах, есть инструмент под названием iLocalize, целью которого является упрощение процесса, чем ibtool (и он старше, чем ibtool). Я никогда не использовал его сам, но мой друг Эван использует его как в Adium, так и в Growl и любит его.

Смежные вопросы