Локализация приложений: различия между версиями
Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
Нет описания правки |
Нет описания правки |
||
(не показаны 4 промежуточные версии 2 участников) | |||
Строка 3: | Строка 3: | ||
На данный момент в PascalABC.NET нет редактора ресурсов. Однако их можно создать программно, используя класс ResourceWriter. Следует отметить, что имя файла ресурса (точнее корневая папка ресурса) должно совпадать с именем файла основной программы. Назовем основную программу CultureForm. Тогда код генерации ресурсов выглядит так. | На данный момент в PascalABC.NET нет редактора ресурсов. Однако их можно создать программно, используя класс ResourceWriter. Следует отметить, что имя файла ресурса (точнее корневая папка ресурса) должно совпадать с именем файла основной программы. Назовем основную программу CultureForm. Тогда код генерации ресурсов выглядит так. | ||
<source lang="Pascal"> #reference 'System.Windows.Forms.dll' | |||
uses System, System.Windows.Forms, System.Globalization, System.Resources, System.Diagnostics; | uses System, System.Windows.Forms, System.Globalization, System.Resources, System.Diagnostics; | ||
Строка 19: | Строка 19: | ||
begin | begin | ||
MakeResource(); | MakeResource(); | ||
end. | end.</source> | ||
Далее необходимо создать в папке программы CultureForm подпапку resources и скопировать туда файлы CultureForm.en-US.resources и CultureForm.ru-RU.resources. | Далее необходимо создать в папке программы CultureForm подпапку resources и скопировать туда файлы CultureForm.en-US.resources и CultureForm.ru-RU.resources. | ||
Теперь наша основная программа: | Теперь наша основная программа: | ||
<source lang="Pascal"> program CultureForm | |||
#reference 'System.Windows.Forms.dll' | #reference 'System.Windows.Forms.dll' | ||
#reference 'System.Drawing.dll' | #reference 'System.Drawing.dll' | ||
Строка 32: | Строка 32: | ||
var f : Form; | var f : Form; | ||
btn : Button; | btn : Button; | ||
rm : ResourceManager | rm : ResourceManager; | ||
ru_cult : CultureInfo := new CultureInfo('ru-RU'); | ru_cult : CultureInfo := new CultureInfo('ru-RU'); | ||
en_cult : CultureInfo := new CultureInfo('en-US'); | en_cult : CultureInfo := new CultureInfo('en-US'); | ||
Строка 40: | Строка 40: | ||
begin | begin | ||
if not local then | if not local then | ||
btn.Text := rm.GetString('MyButton',ru_cult) | btn.Text := rm.GetString('MyButton',ru_cult) //надпись на русском языке | ||
else | else | ||
btn.Text := rm.GetString('MyButton',en_cult); | btn.Text := rm.GetString('MyButton',en_cult); //на английском языке | ||
local := not local; | local := not local; | ||
end; | end; | ||
begin | begin | ||
//загрузка ресурсов | |||
rm := ResourceManager.CreateFileBasedResourceManager('CultureForm',System.IO.Path.Combine(GetCurrentDir(),'resources'),nil); | |||
f := new Form; | f := new Form; | ||
btn := new Button(); | btn := new Button(); | ||
btn.Text := ' | btn.Text := rm.GetString('MyButton',en_cult); | ||
btn.Click += ButtonClicked; | btn.Click += ButtonClicked; | ||
f.Controls.Add(btn); | f.Controls.Add(btn); | ||
Application.Run(f); | Application.Run(f); | ||
end. | end.</source> |
Текущая версия от 21:51, 9 августа 2009
В .NET есть развитые средства локализации приложений. Соответственно эти возможности доступны в PascalABC.NET. Ниже приведен минимальный код, использующий ресурсы для локализации приложения на лету.
На данный момент в PascalABC.NET нет редактора ресурсов. Однако их можно создать программно, используя класс ResourceWriter. Следует отметить, что имя файла ресурса (точнее корневая папка ресурса) должно совпадать с именем файла основной программы. Назовем основную программу CultureForm. Тогда код генерации ресурсов выглядит так.
#reference 'System.Windows.Forms.dll'
uses System, System.Windows.Forms, System.Globalization, System.Resources, System.Diagnostics;
procedure MakeResource;
begin
var rw := new ResourceWriter('CultureForm.en-US.resources');
rw.AddResource('MyButton','Click me');
rw.Close();
rw := new ResourceWriter('CultureForm.ru-RU.resources');
rw.AddResource('MyButton','Нажми меня');
rw.Close();
end;
begin
MakeResource();
end.
Далее необходимо создать в папке программы CultureForm подпапку resources и скопировать туда файлы CultureForm.en-US.resources и CultureForm.ru-RU.resources. Теперь наша основная программа:
program CultureForm
#reference 'System.Windows.Forms.dll'
#reference 'System.Drawing.dll'
uses System, System.Windows.Forms, System.Globalization, System.Resources;
var f : Form;
btn : Button;
rm : ResourceManager;
ru_cult : CultureInfo := new CultureInfo('ru-RU');
en_cult : CultureInfo := new CultureInfo('en-US');
local : boolean;
procedure ButtonClicked(sender : object; e : EventArgs);
begin
if not local then
btn.Text := rm.GetString('MyButton',ru_cult) //надпись на русском языке
else
btn.Text := rm.GetString('MyButton',en_cult); //на английском языке
local := not local;
end;
begin
//загрузка ресурсов
rm := ResourceManager.CreateFileBasedResourceManager('CultureForm',System.IO.Path.Combine(GetCurrentDir(),'resources'),nil);
f := new Form;
btn := new Button();
btn.Text := rm.GetString('MyButton',en_cult);
btn.Click += ButtonClicked;
f.Controls.Add(btn);
Application.Run(f);
end.