Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПОУК / 09 семестр / Книги и методические указания / Руководство программиста в Photon.doc
Источник:
Скачиваний:
364
Добавлен:
04.03.2014
Размер:
7.99 Mб
Скачать

Выравнивание

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

Эта проблема легко решается установкой горизонтального выравнивания надписи в выравнивание справа. Это допускает более длинные переведенные текстовые строки и по-прежнему удерживает плотное выравнивание с областью ввода текста:

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

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

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

Высота шрифта

Шрифты некоторых языков, таких как японский или китайский [Чур меня, чур – Прим. пер.], читабельны только при большом размере шрифта. Для таких шрифтов минимальным размером может быть 14 пунктов или даже больше. Если Вы спроектировали всё Ваше приложение, используя шрифт Helvetica в 10 пунктов, у Вас появится куча проблем, когда все Ваши базирующиеся на тексте виджеты растянутся на 4 пикселя и больше, чтобы подстроится под большие по размеру шрифты. Если Ваше приложение должно переводиться на другие языки, посмотрите на требования к шрифтам, прежде чем начнёте работать, и используйте минимальный размер шрифта принятого по умолчанию языка, встроенного в приложение. Если Вы на самом деле хотите использовать для Вашего принимаемого по умолчанию в приложении текста меньшие размеры шрифтов, Вы можете позаимствовать рекомендации из раздела выше. Вы можете сделать высоту виджета больше и установить центрирование по вертикальному выравниванию. Однако это может не сработать для областей ввода текста, и Вы должны иметь это ввиду.

Жёстко закодированные строки

Другой большой сферой обсуждения являются информационные, предупреждающие, сообщающие об ошибках и иные текстовые сообщения, отображающиеся во всплывающих диалоговых окнах или других местах приложения. Например, включим вызовы функций PtAlert(), PtNotice() и PtPromt(). Наиболее общим способом обработки текстовых сообщений является вставка текстовых строк в исходный код приложения.

Например:

char *btns[] = { "&Yes", "&No", "&Cancel" };

answer = PtAlert( base_wgt, NULL, NULL, NULL, "File has changed. Save it?", NULL,

3, btns, NULL, 1, 3, Pt_MODAL );

Хотя это и быстро в коде, но невозможно перевести без переписывания исходного кода приложения, перекомпиляции и т.д. В сущности, Вам надо создать совершенно новую версию приложения под каждый поддерживаемый язык. Значительно лучшим методом является использование достоинств баз данных виджетов PhAB. Используя базу данных виджетов, Вы можете поместить все Ваши текстовые сообщения в одну (или несколько) базу данных и дать каждому сообщению уникальное имя. Чтобы извлечь текст во время исполнения, вызовите функцию ApGetTextRes() (подробности см. в "Справочнике библиотечных функций Photon") [ – тем самым получив текстовый ресурс заданного виджета, расположенного в заданной базе данных виджетов. Прим.пер.]. В вышеприведенном случае это может быть:

char *btns[3];

btns[0] = ApGetTextRes( textdb, "@msgyes" );

btns[1] = ApGetTextRes( textdb, "@msgno" );

btns[2] = ApGetTextRes( textdb, "@msgcancel" );

answer = PtAlert( base_wgt, NULL, NULL, NULL, ApGetTextRes( textdb, "@msg001"), NULL, 3,

btns, NULL, 1, 3, Pt_MODAL );

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