Главная » Просмотр файлов » Руководство программиста в Photon

Руководство программиста в Photon (1037671), страница 38

Файл №1037671 Руководство программиста в Photon (Раздаточные материалы) 38 страницаРуководство программиста в Photon (1037671) страница 382017-12-25СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 38)

Решение элементарно. Сделайте кнопки больше, чтобы подогнать их под более длинные переведенные строки. Вот так, например:

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

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

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

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

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

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

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

Шрифты некоторых языков, таких как японский или китайский [Чур меня, чур – Прим. пер.], читабельны только при большом размере шрифта. Для таких шрифтов минимальным размером может быть 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 автоматически позаботится о включении текстовых сообщений, когда будет генерировать базу данных текстовых строк приложения. Это более удобно, чем простое использование внешнего текстового файла и проектирование какого-то другого способа перевода этого файла.

Использование символа "@" в именах экземпляров

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

Чтобы различать виджеты, которые важны в смысле перевода, но не в смысле генерации исходного кода, PhAB опознаёт специальный символ, когда тот расположен в первой позиции имени экземпляра. Этот специальный символ – "@". Это означает, что Вы можете присвоить надписи имя экземпляра "@label1", и PhAB опознает эту надпись при генерации базы данных разноязычных текстов, но пропустит при генерации исходного кода.

Это всё звучит хорошо, за исключением того, что PhAB также требует, чтобы все имена экземпляров были уникальными. Это правило должно выдерживаться, так чтобы PhAB при исполнении программы знал, какую текстовую строку заменять. К несчастью, выдумывание потенциально сотен уникальных имён экземпляров, которые в действительности Вас не интересуют, может оказаться кучей работы. Для решения этой задачи PhAB позволяет Вам задавать одиночный символ "@" в качестве имени экземпляра, и PhAB сам добавит сзади внутренний последовательный номер. Это освободит Вас от необходимости отслеживать все константные текстовые строки, которые требуют имён экземпляров только для перевода. Если Вы хотите сгруппировать переводные текстовые строки (скажем, в модуле), Вы можете дать им всем одно имя экземпляра, и PhAB добавит последовательный номер, чтобы создать уникальное имя. Например, если Вы назначили имя "@base" нескольким виджетам, PhAB сгенерирует в качестве имён экземпляров "@base", "@base0", "@base1" и т.д.

Двуязычные приложения

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

PhAB предлагает Вам использовать другой подход. Вы можете создать приложение в одном языке и обеспечить возможность переключения на другой через управление приложением. Это выполняется через функцию API PhAB – функцию ApSetTranslation(). Эта функция (описание см. в "Справочнике библиотечных функций Photon'a") изменяет текущий файл перевода для приложения немедленно, так что все последующие диалоги, окна и всё такое прочее рисуются с использованием нового файла перевода.

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

Общие строки

Если у Вас есть несколько приложений для перевода, Вы можете уменьшить объём работы, совместно используя общие текстовые строки и переводя их отдельно. Чтобы это сделать:

  1. Создайте самостоятельное приложение, которое содержит один модуль картинки (базу данных виджетов) общих текстовых строк.

  2. Используйте редактор языка PhAB для перевода строк.

  3. Как только база данных создана и переведена, получите доступ к ней из другого приложения, вызвав функцию ApAppendTranslation() (описанный в "Справочнике библиотечных функций Photon'a").

Генерация языковой базы данных

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

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

Чтобы сгенерировать языковую базу данных приложения:

  1. Выберите меню "Application"

  2. Выберите пункт "Languages/Generate Language database". Всплывёт прогрессирующий диалог, и немедленно будет сгенерирована база данных.

  3. Щёлкните на "Done", когда генерация завершится.

 Пункт "Languages" в меню "Application" недоступен, если Вы не сохранили Ваше приложение в первый раз, присвоив ему имя.

Теперь база данных сгенерирована и готова для использования языковым редактором PhAB. Имя базы данных – "app.ldb", где "app" – это имя исполняемого файла приложения (которое обычно такое же, как и имя приложения, если Вы не использовали команду "Save As", чтобы переименовать приложение [В противном случае это имя оригинала – Прим.пер.]). Языковая база данных помещается в директорию приложения (туда, где найден файл abapp.dfn).

Базы данных сообщений

База данных сообщений – это файл, содержащий текстовые строки. Каждое сообщение идентифицируется именем тэга. Чтобы загрузить базу данных сообщений, вызывается функция ApLoadMessageDB(). Эта функция выполняет обычный поиск файла, основываясь на переменной окружения ABLPATH и текущем языке:

  • Если никакой язык не определён, база данных сообщений загружена. Она должна иметь имя "name.mdb".

  • Если язык определён, функция просматривает файл перевода с именем "name.language". Файлы перевода могут быть созданы, используя редактор-переводчик PhAB'а – он может обрабатывать базы данных сообщений.

Чтобы получить сообщение по его тэгу, используется функция ApGetMessage().

Чтобы закрыть базу данных сообщений, используется вызов функции ApCloseMessageDB().

Редактор языка

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

Рис. 14-1. Языковый редактор PhAB

Запуск языкового редактора из PhAB

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

  1. Выберите "Application Menu"

  2. Выберите пункт "Select Languages/Run Language Editor".

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

Запуск языкового редактора как автономного приложения

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

  • /usr/photon/appbuilder/phablang

  • /usr/photon/appbuilder/languages.def

 Файл languages.def должен находиться в той же директории, что и языковый редактор phablang.

  • файл базы данных языков Вашего приложения, xxx.ldb

Чтобы запуститься со стороны клиента, Вы можете:

  • набрать команду /usr/photon/appbuilder/phablang &

или

  • создать вход в менеджере рабочего стола (DesktopManager) для запуска /usr/photon/appbuilder/phablang (предполагая, что клиент запускается в полном окружении рабочего стола).

После запуска phablang:

  1. Щёлкните на иконке "Open Folder" чтобы вызвать файловый селектор.

  1. Используя файловый селектор, найдите файл приложения xxx.ldb.

  2. Откройте файл xxx.ldb.

Создание нового файла перевода

Чтобы создать новый файл перевода:

  1. Щёлкните на кнопке "New", расположенной в нижней части окна. Отобразится диалог "Language Selection".

Рис. 14-2. Диалог "Language Selection"

  1. Выберите желаемый язык из списка поддерживаемых типов языковых файлов.

  2. Щёлкните на "Add".

  3. В этом месте Вам потребуется подтвердить свой выбор. Щёлкните на "Yes".

Диалог "Language Selection" закроется, и Вы теперь увидите вновь созданный файл перевода в списке доступных переводов.

Редактирование существующего файла перевода

Чтобы отредактировать файл перевода в списке переводов [список "Translactions" диалога "PhAB Language Editor" – прим. пер.]

  1. Щёлкните на нужном языке в списке.

  2. Щёлкните на клавише "Open".

Появится диалог "Text Translation Editor". Этот текстовый редактор отображает все текстовые строки, доступные для перевода, в текущей базе данных языков.

Перевод текста

Чтобы перевести текстовую строку:

  1. Щёлкните на текстовой строке, которую Вы хотите перевести. Выбранная текстовая строка отобразится в текстовой области в верхней части окна:

Характеристики

Тип файла
Документ
Размер
7,62 Mb
Тип материала
Высшее учебное заведение

Список файлов учебной работы

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6418
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее