Локализация приложений: различия между версиями
Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
(Новая: В .NET есть развитые средства локализации приложений. Соответственно эти возможности доступны в PascalABC.N...) |
Нет описания правки |
||
Строка 1: | Строка 1: | ||
В .NET есть развитые средства локализации приложений. Соответственно эти возможности доступны в PascalABC.NET. Ниже приведен минимальный код, использующий ресурсы для локализации приложения на лету. | В .NET есть развитые средства локализации приложений. Соответственно эти возможности доступны в PascalABC.NET. Ниже приведен минимальный код, использующий ресурсы для локализации приложения на лету. | ||
На данный момент в PascalABC.NET нет редактора ресурсов. Однако их можно создать программно, используя класс ResourceWriter. | На данный момент в PascalABC.NET нет редактора ресурсов. Однако их можно создать программно, используя класс ResourceWriter. Следует отметить, что имя файла ресурса (точнее корневая папка ресурса) должно совпадать с именем файла основной программы. Назовем основную программу CultureForm. Тогда код генерации ресурсов выглядит так. | ||
#reference 'System.Windows.Forms.dll' | #reference 'System.Windows.Forms.dll' | ||
Строка 9: | Строка 9: | ||
procedure MakeResource; | procedure MakeResource; | ||
begin | begin | ||
var rw := new ResourceWriter(' | var rw := new ResourceWriter('CultureForm.en-US.resources'); | ||
rw.AddResource('MyButton','Click me'); | rw.AddResource('MyButton','Click me'); | ||
rw.Close(); | rw.Close(); | ||
rw := new ResourceWriter(' | rw := new ResourceWriter('CultureForm.ru-RU.resources'); | ||
rw.AddResource('MyButton','Нажми меня'); | rw.AddResource('MyButton','Нажми меня'); | ||
rw.Close(); | rw.Close(); | ||
Строка 19: | Строка 19: | ||
begin | begin | ||
MakeResource(); | 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 := ResourceManager.CreateFileBasedResourceManager('CultureForm2',System.IO.Path.Combine(GetCurrentDir(),'resources'),nil); | |||
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 | |||
f := new Form; | |||
btn := new Button(); | |||
btn.Text := 'Click me'; | |||
btn.Click += ButtonClicked; | |||
f.Controls.Add(btn); | |||
Application.Run(f); | |||
end. | end. |
Версия от 13:17, 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 := ResourceManager.CreateFileBasedResourceManager('CultureForm2',System.IO.Path.Combine(GetCurrentDir(),'resources'),nil); 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 f := new Form; btn := new Button(); btn.Text := 'Click me'; btn.Click += ButtonClicked; f.Controls.Add(btn); Application.Run(f); end.