当前位置: 首页 > 工具软件 > multilanguage > 使用案例 >

delphi多语言MultiLanguage支持,Translation Manager详细使用方法

洪安顺
2023-12-01

delphi多语言MultiLanguage支持,经搜索网上流传的使用教程如下,

1.创建一个工程MultiLanguage, 在Form上放一个Label和一个Button, 分
别把Caption赋值为“English Label”和“English Button”。
2.选择菜单Project|Languages|Add ..., Delphi显示Add Languages对话框, 选择Next。
3.从语言列表中选中“英语(美国)”和“中文(中国)”, 选择Next。
4.ITE会根据所选的语言创建子目录,目录名称是语言的缩写,选择Next。
5.第一次增加语言时, Update Mode固定为Create new, 选择Next。
6.选择Finish。

Delphi会自动创建支持不同语言的资源动态库。
Delphi还会自动创建一个工程组, 其中包括原有的MultiLanguages.EXE, 还包括新建
的两个资源动态库 (MultiLanguages.enu, MultiLanguages.chs)。保存工程组。
Delphi启动Translation Manager, ...
选择“中文(中国)”|Forms|Unit1, 填写翻译后的中文。保存并关闭。
打开Project Manager, 编译MultiLanguages.enu和MultiLanguages.chs, Delphi会在
相应的子目录生成资源动态库(我的目录下有三个文件 扩展名分别是 rc rcn res )


此教程不够全面、详细,工程创建完成,接下来要怎么修改呢?

本人研究delphi自带的demo(Demos\RichEdit)后,颇有心得,现在将Translation Manager使用方法共享。

1.打开工程组bpg文件,点击View Form(Shift + F12),会看到有exe对应的窗体和多语言chs、enu等对应的窗体。exe文件对应的窗体可以增加、删除、修改窗体上的控件,而多语言chs、enu等对应的窗体只能调整窗体上的控件的caption和位置。如果在多语言chs、enu等对应的窗体上增加、删除、修改窗体上的控件会报错Modification not allowed in a form resource.

2.打开exe对应的窗体,新增一个button。

3.exe对应的窗体增加了一个button,这里就需要更新到多语言chs、enu等对应的窗体上。怎么操作呢?首先保存修改后的exe对应的窗体,再点击菜单

Project|Languages|Update Resource DLLs,接着会出现确认对话框,点击YES。
4.编译。点击View|Project Manager,首先编译多语言chs、enu等工程,在工程上右键点击Compile,然后再便宜exe工程。
-----------------------------------------------------------------------------------------------------------------------------------
动态切换语言
uses  reinit;
引用reinit单元,该单元在delphi自带的demo(Demos\RichEdit)项目文件夹下。
1.首先声明
const
  ENU = (SUBLANG_ENGLISH_US shl 10) or LANG_ENGLISH;
  CHS = (SUBLANG_CHINESE_SIMPLIFIED shl 10) or LANG_CHINESE;
  CHT = (SUBLANG_CHINESE_TRADITIONAL shl 10) or LANG_CHINESE;
 
2.使用
procedure TForm1.N2Click(Sender: TObject);
begin
  if LoadNewResourceModule(CHS) <> 0 then
  begin
    ReInitializeForms();
  end;
end;


procedure TForm1.N1Click(Sender: TObject);
begin
  if LoadNewResourceModule(CHT) <> 0 then
  begin
    ReInitializeForms();
  end;
end;


procedure TForm1.N3Click(Sender: TObject);
begin
  if LoadNewResourceModule(ENU) <> 0 then
  begin
    ReInitializeForms();
  end;
end;
 
 

 类似资料: