Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Локализация и интернационализация приложений

РАЗВЕРТЫВАНИЕ ПРИЛОЖЕНИЙ.

 

 

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

Начиная с Delphi 5 появилась прекрасная возможность подобной интернационализации приложений, развитая в Delphi 6. Правда, для этого надо спроектировать приложение так, чтобы оно поддавалось интернационализации. Прежде всего необходимо изолировать все ресурсы, которые должны изменяться в процессе локализации. То есть нужно перенести в файлы.dfm и.res все, что может изменяться при смене языка. Например, все тексты, используемые в приложении, надо перенести в ресурсы с помощью ключевого слова ResoursString.

Все далее изложенное вы можете применить к любому приложению. Разработаем совсем простенькое приложение, чтобы на его примере рассмотреть методику интернационализации и локализации. Откройте новое приложение, задайте какой-нибудь русский текст в заголовке (свойство Caption ), например, «Интернационализация».

Поместите на форму метку и разместите в ее заголовке Caption текст, например, «Мое приложение». Эти тексты нужны нам, чтобы видеть, как они будут меняться при изменении языка.

Поместите в разделimplementation код:

 

ResourceString

sText = 'Действительно хотите закрыть приложение?';

 

а в обработчик событияOnCloseQuery формы оператор:

 

CanClose:= MessageDlg(sText, mtConfirmation, mbYesNoCancel,

0) = mrYes;

 

Этот оператор при закрывании приложения предлагает пользователю диалоговое окно с просьбой подтвердить окончание работы Если пользователь нажмет кнопку Yes, функцияMessageDlg вернет значение mrYes. ПараметрCanClose обработчика станет равенtrue и приложение закроется. При любом другом ответе пользователя функцияMessageDlg вернет неmrYes, параметр CanClose будет равенfalse, что означает отказ от закрытия приложения. *

 

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

 

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

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

Сохраните созданное приложение, назвав его, например, Intern. Запустите на выполнение и убедитесь, что при попытках любым способом закрыть приложение оно сопротивляется, предлагая вам подтвердить свое желание окончить.

Теперь давайте займемся интернационализацией приложения. Проще всего это сделать, выполнив команду File | New | Other и выбрав на странице New окна Депозитария пиктограмму Resource DLL Wizard (Мастер DLL peсурсов). Предварительно приложение должно быть сохранено на диске и откомпилировано (у нас уже это сделано).

Мастер покажет вам серию экранов, которые, вероятно, не имеет cмысла описывать, так как в них в большинстве случаев вы можете ничего не делать, нажимая кнопку Next (следующее окно). Исключение составляет окно, в котором приведен перечень языков. В этом окне необходимо установить индикаторы тех языков, для которых необходимо создать варианты приложения. Языков очень много, так что при желании вы можете сделать свое приложение настоящим


полиглотом и распространять его по всему миру.

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

Пройдя через серию окон и нажав в последнем из них кнопку Finish, вы, увидите диалоговое окно с вопросом: «This project needs to be compiled for the Resource Wizard to finish. Compile the project?» (Для завершения работы Мастера проект надо скомпилировать. Компилировать проект?). Следует согласиться и нажать кнопку Yes. В результате после компиляции вам будет показано окно со статистикой компиляции, а затем окно с вопросом: «The Translation Manager requires all files to be saved. Save files and proceed?» (Менеджер Трансляции требует, чтобы все файлы были сохранены. Сохранить?». Ответьте Yes, и попадете в окно Менеджера Трансляции, в котором вы можете осуществить трансляцию ресурсов на разные языки.

Окно имеет три страницы. Страница Environment просто содержит перечень языков, для которых ведется перевод. В нашем, случае она никакого интереса не представляет. Дело в том, что в Delphi 6 имеется два варианта Менеджера Трансляции:

· предназначенный для работы в среде Delphi,

· внешний — External Translation Manager (ETM), с которым можно работать вне Delphi.

Страница имеет смысл именно в ЕТМ, так как там эта страница позволяет добавить в проект новый язык. В среде Delphi добавление нового языка, как будет сказано далее, осуществляется иначе.

Страница Files содержит список файлов, в которых можно осуществлять трансляцию. При двойном щелчке на том или ином файле откроется внешний редактор в него загрузится в текстовом виде выделенный файл. По умолчанию внешним редактором является Notepad (Блокнот). Однако, в настройках, которые будут рассмотрены далее, можно в качестве внешнего редактора задать другую программу.

Главная страница окна Менеджера Трансляции — Workspace состоит из двух панелей. В левой вы видите дерево ресурсов форм (Forms) и ресурсов проекта (Resource Scripts) для разных языков.

Выделите, например, в английскомм языке вершину модуля формы (в примере модуль назван UIntern). Вы увидите в правой панели свойства формы и ее компонентов, допускающие трансляцию. В первом столбце Id расположены идентификаторы свойств.

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

Вы можете изменить в транслируемом варианте шрифт, множество символов и т.п. чтобы сделать тексты доступными на соответствующем языке. Но главное, что надо сделать — перевести тексты надписей на форме и ее компонентах. Чтобы это было проще осуществить, можно посоветовать предварительно щелкнуть на головке столбца Русский. Тогда строки таблицы станут упорядочены в алфавитном порядке значений свойств русского варианта. Поскольку русские символы считаются распложенными после латинских, то все надписи на русском языке соберутся вместе — внизу таблицы. В нашем примере надо перевести на русский язык надписи «Интернационализация» (Internationalization) и «Мое приложение» (My Application).

Аналогичным образом надо заменить строку ресурсов в вершине Intern_DRC () английского варианта, содержащую русскую надпись: «Действительно хотите закрыть приложение?» (Do you want to quit the Application?).

При трансляции формы в Delphi 6 доступны четыре очень полезные кнопки, расположенные справа на инструментальной панели (в более ранних версиях Delphi их нет). Перечислим их слева направо:

 

Show original form Показывает исходную форму, трансляция которой проводится. Это позволяет видеть все тексты, которые надо транслировать  
Show translated form Показывает форму с результатами трансляции. Позволяет контролировать трансляцию, видеть, например, не получается ли каких-то сдвигов из-за разной длины русских и иностранных текстов. Если требуется, можно совмещать перевод текстов с изменением положения и размеров компонентов, так как такие свойства компонентов, какLeft, Right, Width, Height, содержатся в правой панели окна  
Refresh translated form Обновляет форму, занося в нее сделанные изменения  
Keep forms on top Обеспечивает положение форм поверх других окон. Это позволяет одновременно видеть формы и проводить трансляцию  

 

Если вы закончили перевод текстов, сохраните результаты трансляции, нажав соответствующую быструю кнопку (первая слева в правой группе). Теперь с англоязычным вариантом приложения закончено — все русские тексты переведены. Но вспомним, что у нас было неладно и с исходным русским вариантом, Диалоговое окно содержало английские тексты в заголовке окна и в надписях на кнопках. Причем из приложения эти тексты недоступны, так как они определяются системными константами. Подобная ситуация возникает достаточно часто, в частности, с русификацией различных сообщений, например, об исключениях.

Попробуем исправить это, сделав локализованный вариант приложения для русского языка. Перейдите в окне в вершину Intem_DRC строки ресурсов русского варианта. В правой панели вы увидите множество системных констант с английскими текстами. Вы можете их перевести на русский язык. Для нашего примера надо заменить строки «&Yes» на «&Да», «&No» на «&Нет», «Сапcel» на «Отмена», «Confirm» на «Подтвердите».

Прежде, чем смотреть результаты нашей трансляции, давайте познакомимся еще с некоторыми возможностями окна Менеджера Трансляции. Пятая справа кнопка Actions на рис.5.27*** открывает выпадающее меню с рядом разделов. Это же о появляется при щелчке правой кнопкой в какой-то строке столбца Русский.

Остановимся на одном разделе этого меню, доступном вам при работе с вершиной английского варианта — Repository с двумя подразделами Add Strings to Repository и Strings from Repository. Первый из этих подразделов сохраняет ваш перевод и в депозитарии переводов. А второй переносит в выделенную строку перевод, хранящийся в депозитарии. В сам депозитарий (см. рис.5.28****) вы можете попасть, нажав среднюю из трех верхних кнопок в окне рис.5.27****. В нем вы можете хранить переводы различных типовых текстов, встречающихся в приложениях. Так что после интернационализации нескольких приложений у вас будет не так много забот с переводом новых текстов.

По рассмотренной выше команде Get Strings from Repository перенос из депозитария осуществляется автоматически, если там нашлось точное соответствие текста, указанного в выделенной строке, причем в депозитарии имеется только один перевод этого текста. Если имеется несколько переводов, то поведение определяется установкой опции Multiple Find Action в окне опций трансляции. Это окно (рис.5.29 ***) в Delphi 6 можно вызвать крайней левой кнопкой вверху окна на рис.5.27*** или командой Tools | Translation Tools Options главного меню. (В Delphi 5 это окно вы можете вызвать командой главного меню Delphi Tools | Environment Options и переходом страницу Translation Tools).

Если в опции Multiple Find Action вы установите радиокнопку Skip, то при обнаружении в депозитарии более одного перевода данного текста ничего делаться не будет. Если вы установите радиокнопку Use first, то в этом случае в строку будет вставлен первый из нескольких переводов. Если вы установите радиокнопку Display Selection, то вам будет предоставлен выбор из имеющихся переводов.

Поскольку речь зашла об окне опций трансляции, рассмотрим другие его опции. Опции группы Resource DLL Wizard означают следующее:

 

Automatic repository query Автоматически заполнять строки переводами из депозитария  
Automatically compile Автоматически компилировать проект, если необходимо, не запрашивая об этом пользователя  
Show Translation Manager Автоматически показывать окно Менеджера Трансляции после окончания работы Мастера ресурсов DLL  

 

Опция Automatically quote strings обеспечивает автоматическое добавление кавычек в тексты, которые вы пишете при трансляции. Опция Automatically Save Files обеспечивает автоматическое сохранение в нужных случаях файлов без запроса об этом пользователя.

Панель Translation Repository содержит опцию FileName, которая задает файл.rps депозитария трансляции. Вы можете создать несколько таких файлов и по мере необходимости использовать тот из них, который более подходит для очередного проекта.

Окно External Editor позволяет указать внешний редактор, вызываемый со страницы Files Менеджера Трансляции.

Мы рассмотрели все опции страницы Preferences окна настройки трансляции. Страница Colors этого окна позволяет задать цветовую гамму Менеджера Трансляции, а страница Fonts дает возможность установить разные шрифты для разных языков.

Давайте вернемся к нашему примеру. По окончании работы с Менеджером Трансляции создается группа проектов, с которой проще всего работать, вызвав окно Менеджера проектов (команда View | Project Manager), показанное для нашего примера на рис.5.30***. Оно содержит вершину Intern.ехе, отображающую сам проект, и вершины Intern.enu и Intern. rus, отображающие соответственно ресурсы английского и русского вариантов. Выбрав вершину Form1 того или иного варианта, вы можете увидеть, как выглядит ваша форма в русском или английском исполнении. Вершины Intern_DRC.rc покажут вам файлы ресурсов обоих вариантов. Hо не исправляйте их вручную - это не приведет ни к чему хорошему.

Предупреждение: Не исправляйте вручную в интернационализированном проекте файлы ресурсов. Все исправления делайте только через окно Менеджера Трансляции.

Сохраните файл группы проектов и попробуйте с ним работать. Прежде всего, поочередно выделите вершины Intern,enu и Intern.rus и откомпилируйте эти проект, не запуская их (команда Project | Compile или «горячие» клавиши Ctrl-F9). Для активизации той или иной вершины можно сделать на ней двойной щелчок, или выделить ее и нажать кнопку Activate, или нажать в инструментальной полосе среды Delphi маленькую кнопочку рядом с быстрой кнопкой Run. После компиляции активизируйте вершину Intern.exe и выполните ваше приложение. Вы увидите ту же картину, что и раньше (рис.5.25 а***).

А теперь выполните команду Project | Languages. Всплывет каскадное меню с разделами Аdd (добавить новый язык), Remove (удалить один из языков), Set Active (сделать активным один из языков) и Update Resource DLLs (обновить DLL pecypсов).

Предупреждение: Все разделы команды Project | Languages, кроме команды Add, доступны, только если у вас в окне Менеджера Проектов активизирована вершина головного файла проекта (в нашем примере — Intern.exe) или корневая вершина группы.

Команда Add приведет вас в одно из окон Мастера DLL ресурсов, в котором вы можете указать проект и далее добавить к нему новый язык. Команда Remove приведет вас в окно, в котором вы увидите список введенных в проект языков и около каждого языка будут стоять индикаторы. Их вы можете включить у тех языков, которые хотите удалить. Впрочем, удаление коснётся только возможности делать соответствующий язык активным. Сами DLL ресурсов на диске сохранятся.

Команда Update Resource DLLs обновляет DLL ресурсов. Выполняйте ее после изменений и вообще почаще работайте с ней в случаях возникновения каких-либо недоразумений.

Команда Set Active делает активным один из языков. В ответ на эту команду появится диалоговое окно, в котором вы можете выбрать один из языков для отладки вашего приложения, или выбрать <русский> (в Delphi 5 соответствующий раздел назван <none>). Последнее означает, что выбор варианта осуществляется автоматически в зависимости от языка, установленного в Windows. Установите активным русский язык. Выполнив проект, вы увидите (фиг.5.25 б***), что диалоговое окно исправилось и все надписи в нем стали русскими. Если же вы сделаете активным английский язык и после этого выполните проект, то увидите, (рис.5.25 в***), что ваше приложение заговорило на английском языке.

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

Активизируйте командой Set Active раздел <none>, откомпилируйте и сохраните ваш проект. Выйдите из среды Delphi и выполните ваш файл (Intern.exe) средствами Windows, например, программой «Проводник». Приложение будет разговаривать по-русски. А теперь установите в Windows английский язык. Для этого выполните программу «Панель управления», щелкните в ее окне на пиктограмме «Язык и стандарты» и на странице «Региональные стандарты» выберите из выпадающего списка английский язык. Щелкните на ОК. Вам будет предложено перезагрузить компьютер, чтобы ваша установка вступила в силу. Согласитесь на перезагрузку, а после нее опять выполните вне Delphi ваше приложение. Вы увидите, что оно разговаривает по-английски. А ведь вы ничего с ним не делали! Оно само поняло установленный в системе язык и заговорило на нем. Вот это и есть интернационализация приложения. Порадуйтесь на свое создание, которое стало полиглотом, но не забудьте опять вернуться к нормальным установкам, указав с помощью «Панели управления», что Вы все-таки хотите работать с русским языком.

Предупреждение:

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

Мы рассмотрели вариант интернационализации приложения с помощью Macтера ресурсов DLL. Но в дальнейшем вы можете работать с приложением: добавлять, например, новые языки, удалять введенные, изменять перевод и т.п., не прибегая к помощи Мастера. Для этого имеется команда View | Translation Manager, вызывающая окно Менеджера Трансляции (рис.4.27***).

В Delphi 5 в этом окне вы можете не только редактировать свой перевод, но и добавлять новый язык (быстрая кнопка со знаком «+») или удалять имеющийся (быстрая кнопка со знаком «-»). В обоих случаях произойдет автоматическое обращение к тем или иным окнам Мастера DLL ресурсов. Только имейте в виду, что в Delphi 5 команда View | Translation Manager доступна, только если у вас в окне Менеджера Проектов активизирована вершина головного файла проекта или корневая вершина группы.

B Delphi 6 эта команда доступна всегда, когда вы работаете с интернационализированным приложением. Но добавление и удаление языков производится не из окна Менеджера Трансляции, а описанной ранее командой Project | Languages.


<== предыдущая лекция | следующая лекция ==>
Создание и использование ini-файлов | Компонент speedbutton (кнопка с фиксацией)
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 750; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.031 сек.