Локализация приложений: различия между версиями

Материал из Вики проекта 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('CultureForm2.en-US.resources');
   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('CultureForm2.ru-RU.resources');
   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.