В принципе не большая разница mse или lazarus, язык то один и тот же. Еще зависит с какой целью вы это делаете
Я например заранее не зная какие контролы и сколько их будет на форме, для перевода Caption использую в Lazarus примерно такую конструкцию:
- Код: Выделить всё
procedure LocalizeControl(Frm: TForm);
//Локализует некотрые существующие контролы на форме
var
i: integer;
begin
for i := 0 to Frm.ControlCount - 1 do
begin
//Локализуем Caption'ы
//TLabel
if Frm.Controls[i] is TLabel then
(Frm.Controls[i] as TLabel).Caption := Localize((Frm.Controls[i] as TLabel).Caption);
//TButton
if Frm.Controls[i] is TButton then
(Frm.Controls[i] as TButton).Caption := Localize((Frm.Controls[i] as TButton).Caption);
//Локализуем хинты
if Frm.Controls[i] is TControl then
(Frm.Controls[i] as TControl).Hint := Localize((Frm.Controls[i] as TControl).Hint);
и т.д.
end;
end;
procedure LocalizeMenu(Menu: TMenu); //Локализует меню
var
i: integer;
begin
for i := 0 to Menu.Items.Count - 1 do
begin
Menu.Items[i].Caption := Localize(Menu.Items[i].Caption);
end;
end;
Caption для контролов назначаются в зависимости от английской caption, а не от имени компонента, хотя можно использовать и TComponent.Name...
Для самого перевода использую способ подсмотренный у
alexs (за что ему отдельное спасибо)
LngList - это TStringList куда загружается файл с переводом вида
EngCaption=РусПодпись
- Код: Выделить всё
function Localize(const Caption: string): string; //Локализует строку
begin
if not assigned(LngList) then
begin
Result := Caption;
Exit;
end;
Result := LngList.Values[Caption];
if Result = '' then
Result := Caption;
end;
В MSE можно сделать аналогично, если подобный вариант приемлем..