首页 > 其他分享 >语言资源

语言资源

时间:2023-03-26 16:57:34浏览次数:24  
标签:文件 语言 XXX dfm 资源 EhLibLangConsts

语言资源
行政
2023 年 3 月 2 日
约4分钟
在本页
通过外部文件使用语言资源
为应用程序的语言常量创建语言资源
默认语言资源
使用动态语言资源加载的演示项目
Delphi标准建议对依赖于语言的常量字符串使用资源字符串和 dfm 文件的各个版本。

EhLib 自第 9 版起使用略有不同的技术来存储语言资源。

不使用 resourcestring 类型的常量。
所有字符串资源都存储在一个文件中 -EhLibLangConsts.dfm以及EhLibLangConsts.XXX.dfm每种语言的文件。
语言字符串存储为TEhLibLanguageConsts类的属性。
该技术具有以下优点:

程序运行时可以随时下载语言资源。
语言可以设置为最终用户并自动选择。
语言资源可以存储为单独的文件,因此嵌入到一个 exe 文件中。
![](../images/Language resources.png)

所有依赖于语言的字符串库常量都存储在类的属性中TEhLibLanguageConsts(源文件EhLibLangConsts.dfm+ EhLibLangConsts.pas)

要访问类对象,请使用全局函数EhLibLanguageConsts: TEhLibLanguageConsts。其他语言的字符串版本存储在具有相应名称的类似文件中


EhLibLangConsts.ENU.dfm
EhLibLangConsts.FRA.dfm
EhLibLangConsts.RUS.dfm
EhLibLangConsts.UKR.dfm
...
in folder<EhLib archive >\LangResources\Res\在IDE中安装库时,要把这个文件夹中的文件复制到文件夹中<EhLib installed dir>\Lib\如果你的语言的文件不在文件夹中,你可以创建它。为此,将文件复制EhLibLangConsts.ENU.dfm到一个新文件EhLibLangConsts.XXX.dfm,其中XXX包含三个字母的语言代码。使用文本编辑器,将文件中的文本更改dfm为所需的文本。三字母语言代码可以在以下地址的表格中找到: https: //www.microsoft.com/resources/msdn/goglobal/default.mspx在文件中,还将类名从 更改TEhLibLanguageConsts_ENU为新名称TEhLibLanguageConsts_XXX(其中 XXX 是三字母语言代码)。

当程序在运行时更改语言,算法通过三个字母代码找到所需的语言文件,并作为外部 dfm 资源加载到 EhLibLanguageConsts 对象中,或者通过资源名称中的最后三个字符加载到嵌入式资源中TEhLibLanguageConsts_XXX。在程序内部,以下代码用于更改语言


  LanguageResourceManagerEh.ActiveLanguageAbbr := 'THREE-LETTER CODE'.
要自动选择语言,请使用以下代码


LanguageResourceManagerEh.ActiveLanguageAbbr := LanguageResourceManagerEh.AutoselectLanguage();
根据变量选择语言 -System.SysUtils.SysLocale.DefaultLCID如果未找到适合的文件或所选语言的内置资源,默认语言将从文件中描述的内置资源下载EhLibLangConsts.dfm。EhLibLangConsts.dfm 文件在编译时链接到 EXE 文件。

#通过外部文件使用语言资源
当从文件中加载资源时,该算法会查找具有以下名称的文件:<EXE File Placment>\Res\EhLibLangConsts.[XXX].dfm

XXX三字符语言代码在哪里。您可以通过分配一个全局变量来配置资源下载文件夹LanguageResourcesEh.LanguageResourcesFolder: String

EhLibLangConsts.XXX.dfm要在您的应用程序中使用其他资源,您必须随文件一起提供文件EXE。

Res 文件夹中的文件以 Utf8 编码存储。对于这些版本的 Delphi 中的这项技术的工作Delphi7-Delphi2005,类似的文件以 Ansi 编码存储在 Res.Ansi 文件夹中。

在程序代码中,您可以下载可用资源列表,以使用代码下载语言


LanguageResourceManagerEh.LoadListOfAvailableLanguages('EhLibLangConsts');
该算法将扫描文件\Res夹中的EhLibLangConsts.[XXX].dfm文件并填写 的内部属性EhLibLanguageConsts.LanguageList。要访问可用语言列表,请使用该属性LanguageResourceManagerEh.LanguageList

#为应用程序的语言常量创建语言资源
您还可以使用存储语言相关常量的技术来存储应用程序的字符串。为了这

创建一个继承自 TComponent 的类,并将其写入已发布的部分,其属性值在您的应用程序中取决于语言。(例如,请参阅AppLangConsts.pas演示应用程序中的文件DEMOS\MainDemo\)

  TApplicationLanguageConsts = class(TComponent)
  ..
  public
    constructor Create(AOwner: TComponent); override;
  published
    property Caption: String read FCaption write SetCaption;
    property MenuFile: String read FMenuFile write FMenuFile;
  end;
在类构造函数中,使用下一个代码加载默认情况下使用的常量值:


  constructor TApplicationLanguageConsts.Create(AOwner: TComponent);
  begin
    inherited Create(AOwner);
    InitInheritedComponent(Self, TCustomControl);
  end;
创建一个资源dfm文件(AppLangConsts.dfm)来存储类的属性值

  object TApplicationLanguageConsts
    Caption = 'EhLib Main Complex Demo'
    MenuFile = 'File'
  end
将 dfm 文件写入应用程序的资源


  {$R AppLangConsts.dfm}
创建文件


  AppLangConsts.ENU.dfm
  AppLangConsts.BGR.dfm
  AppLangConsts.CHS.dfm
  AppLangConsts.CSY.dfm
  AppLangConsts.DEU.dfm
...
类比文件 EhLibLangConsts.XXX.dfm

在程序代码中,创建一个用于存储资源的变量

  FApplicationLanguageConsts := TApplicationLanguageConsts.Create(nil);
在程序代码中,在 LanguageResourceManager 中注册资源

  LanguageResourceManagerEh.AddLocalizableObject(FApplicationLanguageConsts,
       FApplicationLanguageConsts.ClassName, 'AppLangConsts', 'ENU');
更改语言时,WM_SETTINGCHANGE事件会发送到所有窗体和控件。

#默认语言资源
有一个概念——默认内置库语言。如果您不执行任何操作来更改应用程序中的语言,则会使用库中的默认语言资源。要更改所有使用的程序的默认内置语言:

将文件复制LangResources\Res\EhLibLangConsts.XXX.dfm到安装库文件夹中的Lib\EhLibLangConsts.dfm文件中。
_XXX删除带有类名后缀的文件的第一行,使其如下所示:object TEhLibLanguageConsts
重新编译库包。当库安装时EhLibInstaller.exe,程序会自动执行此操作。
#使用动态语言资源加载的演示项目
有关使用内置和外部资源的示例,请参见 Demo 项目


DEMOS\LanguageResEmbeddedExternal\Project1.dpr
在Unit1.pas文件中,您可以注释掉或取消注释这些行


{$DEFINE EMBEDDED_LANGUAGE_RESOURCES} 
{$DEFINE EMBEDDED_LANGUAGE_RESOURCES_ALL}
改变使用资源的方式,了解使用内置资源和外部资源的区别。有关如何使用指定的 DEFINE 定义来更改资源使用模式的详细信息,请参阅文件

Demos\LanguageResEmbeddedExternal\Info.Txt

另一个使用动态加载语言资源的例子可以看Demo工程

DEMOS\MainDemo\Project1.dpr

项目使用语言资源的主要方法如下:

procedure AppLangConsts.InitUnit;

注册将存储应用程序字符串资源的类 TApplicationLanguageConsts。
procedure TForm1.InitLanguageRes;

加载可用语言列表。
如果上次启动程序时选择了 Ini 文件中的语言,则激活该语言。
procedure TForm1.BuildLanguageMenu;

基于 LanguageResourceManagerEh.LanguageList 对象形成可用语言的菜单
procedure TForm1.MenuItemSelectLanguage(Sender: TObject);

当用户在菜单中选择另一种语言时加载新语言的文件。
procedure TForm1.ResourceLanguageChanged;

更改语言时分配属性和表单变量。

 

标签:文件,语言,XXX,dfm,资源,EhLibLangConsts
From: https://www.cnblogs.com/sixty-five/p/17258930.html

相关文章

  • 分布式技术原理与算法解析 02 - 分布式资源管理与负载调度
    分布式体系结构之集中式结构集中式结构就是由一台或多台机器组成中央服务器,所有数据存储于此,所有业务也先由其处理。多节点与中央服务器连接,并将自己信息汇报给中央服务器......
  • 多线程操作共享资源(如全局变量)原理
    CPU对变量的计算分为三个步骤:1.从内存读取变量到寄存器(如add寄存器)2.将读取到的变量进行计算3.将寄存器中计算的值写入内存 如有两个线程(线程1和线程......
  • 如何构建只需要浏览器就可访问企业内网资源 Web VPN
    我们企业员工出差,移动办公,分公司都需要防问企业内网应用需求,传统方案,基本上是采用VPN来满足,但部署传统VPN需要消耗大量人力成本,带来复杂的IT运营压力,且不稳定,易掉线;同时容易......
  • languageservices github action  语言服务
    languageservices是github团队开源的githubaction语言服务,可以实现类似vscode自动提示的能力,这样可以提高githubaction的开发速度,代码部分还是值得学习参考的参考......
  • C语言复习(四)
    第三章:最简单的程序设计——顺序结构设计3.1顺序程序设计举例3.2数据的表现形式及其自复查UN常量运算3.2.1常量和变量常量: 整形常量、实型常量  、字符常量{字符常......
  • 【入门】Go语言运算符详解
    目录一、算数运算符1.1案例一:算数运算符练习1.2案例二:求三门成绩的总和、平均分1.3计算商场买衣服总共消费多少元一、算数运算符+-*/%++--1.1案例一:算数......
  • 用C语言实现ElGamal算法
    缘起是我侄子问的题目,参考了书籍、博客,花了一些时间完成的,丢掉可惜了,记录下来吧。这个程序还有些缺陷,数值太大时计算结果会溢出代码#include<stdio.h>#include<time.h>......
  • Oracle入门6(plsql语言)
    游标,触发器,plsql存储过程,存储函数,包plsql编程语言--普通用户需要获取编程权限grantcreateprocedureto用户名;grantexecuteanyprocedureto用户名;grant......
  • go语言学习-grpc2:proto文件说明
    messageprotobuf中定义一个消息类型是通过关键字message字段指定。消息就是需要传输的数据格式的定义,它类似java中的class,go中的structmessageUser{stringusername=1......
  • 【入门】Go语言常量详解
    1、什么是常量?程序运行期间不可以变的量使用const定义不能修改常量的值不能打印常量的地址常量在定义时候必须赋值2、常量于变量的区别?变量的值是可以变的,常量......