Локализация проектов на Дельфи

Всякая полезная информация из интернета и не только
Post Reply
User avatar
sHellBoard
Site Admin
Posts: 469
Joined: Sat Oct 22, 2016 7:29 pm

Локализация проектов на Дельфи

Post by sHellBoard » Sun Jan 15, 2017 9:23 pm

DxGetText — GNU Gettext for Delphi and C++ Builder tutorial - https://habrahabr.ru/post/264693/

Библиотека, позволяющая внедрять качественную локализацию в продукт общепринятым способом, работает так:
пишем код, почти как обычно;
запускаем приложение, сканирующее исходники на предмет текста, который нужно перевести;
генерим РО файлы;
переводим их в любом удобном редакторе;
компилим РО файлы в МО файлы;
на выбор либо внедряем перевод прямо в ЕХЕ либо кладём МО файлы рядом;
наслаждаемся результатом — язык приложения можно менять даже без перезапуска.

Чем этот способ крут:
минимум изменений в коде приложения;
никаких DLL и сторонних компонентов, всё OpenSource;
РО файлы — достаточно распространенный инструмент перевода, что значит перевод можно даже отдать на аутсорс, и переводчик знает что с этим делать;
перевод всего — формы, фреймы, месседжбоксы, и всё что угодно;
корректный перевод слов в множественном числе в любом языке;
полная поддержка Unicode.


Подробное описание установки работы с пакетом

Перевод надо запускать по событию OnShow главной формы, а не OnCreate.
Тогда можно перебором всех форм всех их перевести.
Как-то так для Дельфи

Code: Select all

//**************************************************
procedure LangIni();
var
  i: integer;
begin
for i := 0 to Application.ComponentCount - 1 do
  begin
    if (Application.Components[i] is TForm)
    then translatecomponent(application.Components[i]);;
  end;
end;


//**************************************************
procedure LangChange();
var
  i: integer;

begin
for i := 0 to Application.ComponentCount - 1 do
  begin
    if (Application.Components[i] is TForm)
    then Retranslatecomponent(application.Components[i]);;
  end;
end;

procedure TForm0.FormShow(Sender: TObject);
var
  i: integer;
begin
 if RadioGroup1.ItemIndex=0 then
 begin
     LangC:='EN';
  UseLanguage ('EN');
 end
  else
  begin
     LangC:='RU';
  UseLanguage ('RU');
  end;
 LangIni();
 end;
И да, заменить все строки типа s:='Apple'; на s:=_('Apple'); , тогда они тоже будут переводиться.
Языков можно добавить сколько угодно.

User avatar
sHellBoard
Site Admin
Posts: 469
Joined: Sat Oct 22, 2016 7:29 pm

Re: Локализация проектов на Дельфи

Post by sHellBoard » Sun Jan 15, 2017 9:32 pm

Еще одна статья о dxgettext
http://www.delphiplus.org/articles/comp ... index.html

Post Reply