logo
Литература_1 / photon_old

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

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

Yandex.RTB R-A-252273-3
Yandex.RTB R-A-252273-4