[QLang] 如何让你的程序支持多语言

QLang 的多语言支持使用起来一如既往的简单。要使你的程序支持多语言,你认为需要几个步骤?只需要一个:在你的项目中加入对 qlang 的引用。真的没了吗?没了,你的程序现在已经支持多语言,剩下的事情就是生成语言字典并翻译的问题了。

第一步:生成需要翻译的字典项目;

目前版本的QLang还没有完全自动化的多语言字典生成翻译工具,所以这里需要大家暂时采用以下办法:

  • 执行下面的代码将语言为窗体本身的原始语言:
    LangManager.ActiveIndex:=0;

     

  • 对于要翻译的窗体,使用 LangManager.FromComponent(LangManager.ActiveLang,窗体实例) 来将当前要翻译的窗体组件内容保存到默认语言字典:
    var
      F:TForm1;
    begin
    F:=TForm1.Create(Application);
    LangManager.FromComponent(LangManager.ActiveLanguage,F);
    F.Free;
    end;

    重复上面的代码,将各个窗体的组件内容保存到默认的语言字典。

  • 调用 LangManager.ActiveLanguage.SaveToFile 将生成的模板数据保存为扩展名为 .qlang 的语言文件;
  • 对于程序中的字符串常量和 EXE 资源中,则应通过后期使用 MsgPackView 来编辑生成的语言文件。
    msgpackview(1)、修改 Id 的值为语言对应的区域代码,中文为 2052,具体可以在工程的 Project->Options->Version Info 里找 Locale Id,将其转换为10进制即可。Name为对应的语言名称。
    (2)、在 Constants 下右键加入字符串常量的翻译定义,名称为原始字符串,值为翻译值,如上图加入了两个对应的项目;
    (3)、在 Resources 里加入资源项目字符串翻译定义,名称为原始字符串,值为翻译值;
    (4)、将文件保存到程序可执行文件目录下,名称任意,扩展为 .qlang 即可。
    (5)、修改区域代码、名称及新语言对应的值,另存为新的 .qlang 文件。
  • 启动程序,你的程序现在就会自动匹配当前操作系统的语言(如果有对应的语言)。如果要人工调整语言,程序可以添加一个ComboBox或类似的控件,然后调用 LangManager.EnumLanguages 来枚举可用的语言。然后根据通过设置 LangManager.ActiveIndex 来选择相应的语言。

QLang 将来会提供专用的语言翻译工具,来简化上述操作。下面说一下程序中如何使用一些常量:

  • 使用 resourestring 定义的资源字符串用法不变,不需要任何变动;
  • 常量字符串使用 _(常量字符串) 的方式来替换,这样在运行时,就会被替换为正确的翻译。以 _(常量字符串) 翻译的内容,会优先取 QLang 语言文件中的 Constants 小节的翻译,如果没有,则会自动查找 Resources 小节的翻译。如果要明确只使用 Constants 小节的翻译,则使用 _const(常量字符串) 来代替 _(常量字符串)。

对于可执行程序中的字符串资源,QLang 做了一个优化级处理,通过 @资源ID 命名的翻译会被优先采用,如果没有,则会查找字符串内容相匹配的翻译。这样,可以方便同样原文在不同的环境中意义不同的问题。

关于 QLang 目前所能提供给大家的信息基本上就这么多。如果需要更多内容,请群内讨论。

multilang

分享到: