Интернационализация с перьями. Это точно хорошая идея? - PullRequest
7 голосов
/ 28 февраля 2009

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

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

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

Ответы [ 3 ]

9 голосов
/ 28 февраля 2009

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

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

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

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

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

5 голосов
/ 28 февраля 2009

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

5 голосов
/ 28 февраля 2009

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

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