在Delphi编程的那段“古老”的日子里(就是在版本4之前),在程序中使用字符串有两个基本的方法。你可以使用字符串将它们嵌入到源程序中,例如:

MessageDlg( 'Leave your stinkin' mitts off that button, fool!',mtError, [mbOK], 0);

或者,你可以创建一个文本文件(使用.rc扩展名),例如:

STRINGTABLE DISCARDABLE 

1 "Dialog Expert" 
2 "Dialog Expert from demonstration Expert DLL." 
3 "Application Expert" 
4 "Application Expert from demonstration Expert DLL" 
5 "&Create" 
6 "&Next" 
7 "An application name is required!" 
8 "The application name is not a valid identifier." 
9 "The path entered does not exist." 
10 MAIN.PAS" 
11 "MAIN.DFM" 
12 "MAIN.TXT" 
... 
// Variable names. 
20 "StatusLine" 
... 
}

然后你需要做的工作是将它编译成为资源文件,加入到Delphi的工程或者单元中,使用命令行工具Brcc32.exe编译,然后在程序中当你使用到这些字符串时,使用LoadStr等函数将它们从资源中提取出来。这看起来有点麻烦,而且你可能会被困在这麻烦的操作中,因此你可能会无休止地将字符串加入到你的源代码中而不是使用资源。

现在,resourcestring关键字的出现,可以帮助你摆脱这麻烦的工作。resourcestring带给我们两个好处:可以简单地加入字符串,而且所有的字符串集中保存在同一个位置;同时,使用resourcestring提供更好的内存管理,因为所有在resourcestring部分的字符串是以资源形式保存在应用程序中。

让我们赶快进入使用resourcestring关键字的新世界,增加一个单元到你的工程中,名字是ResStrngs(或者其它名字),然后将所有的字符串(特别是那些将会被用户看到的字符串:列表的内容,错误消息等等)加入到这个单元的接口(Interface)部分,就像下面一样:

unit ResStrngs;

interface

resourcestring 
// 著名的军事家 
SGeneralElectric = 'General Electric'; 
SGeneralMills = 'General Mills'; 
SGeneralUsage = 'General Usage'; 
SGeneralHospital = 'General Hospital'; 
SGeneralLedger = 'General Ledger'; 
SGeneralProtectionFault = 'General Protection Fault'; 
SGeneralSQLError = 'General SQL Error'; 
SGeneralLeeSpeaking = 'General Lee Speaking'; 
SCorporalPunishment = 'Corporal Punishment'; 
SSgtFury = 'Sgt. Fury'; 
SSgtCarter = 'Sgt. Carter'; 
SSgtSchultz = 'Sgt. Schultz'; 
SSargentShriver = 'Sargent Shriver'; 
SCaptKangaroo = 'Capt. Kangaroo'; 
SCaptUnderpants = 'Capt. Underpants'; 
SColonelKlink = 'Colonel Klink'; 
SPrivateBenjamin = 'Private Benjamin'; 
SPrivateProperty = 'Private Property'; 
SLeftenantDan = 'Leftenant Dan'; 
SMutineerChristian = 'Mutineer Christian'; 
SAtlantaHawks = 'Atlanta Hawks'; 
// 友好的提示 
SDontSleepInTheSubwayDarlin = 
'Don't sleep in the subway darlin''; 
// 你还可以继续增加字符串

implementation

end.

在任何可能引用这些字符串的单元的实现(implementation)部分的uses语句中加入此单元。然后,你可以这样使用这些字符串:

if ItIsPetulasVirtualHusband and HeIsLate then 
MessageDlg(SDontSleepInTheSubwayDarlin, 
mtInformation, [mbOK], 0);

还有一个例子:Borland/Inprise同样使用字符串资源,你可以看看..\source\vcl目录下的consts.pas、dbconsts.pas等文件。

将字符串集中放在resourcestring部分还有一个好处就是,通常程序员并不是最适合写用户将会看到的反馈信息或者错误消息的人,他们写的往往太技术性,例如:“模块xyz:生成子线程时发生一个未预期错误”,这对用户来说等于没说,也许“请在开始前保存修改”会更好一些。

将这些消息字符串单独保存在一个分离的文件中,可以让那些适合编写用户消息的人来处理(当然,要有程序员来当顾问,以便确定每条消息表示什么含义)。如果你不想让这些非编程人员来修改你的.pas文件,你可以将这些字符串保存到一个文件文件中交给他们处理,当他们处理完成后,你再将他们修改后的字符串复制到你的resourcestring部分。

最后但是也非常重要的是,当把用户或以看到的字符串都收集在一个地方,可以让你很容易地让你的应用程序国际化和本地化。使用Delphi的ITE(Integrated Translation Environment 集成翻译环境),国际化和本地化你的应用程序的字符串几乎是半自动完成的。使用ITE,你可以为每种语言创建一个独立的.dll。如果你发布时带有多个.dll文件,通过程序运行的计算机系统的地区号,你的程序可以自动调用对应的.dll。

ITE主要的工具就是资源DLL向导(Resource DLL Wizard) (File | New | Resource DLL Wizard) 和翻译管理器(Translation Manager)。翻译管理器用于输入翻译的内容,可以查看Delphi的帮助文件的"Integrated Translation Environment"部分获得具体信息。

除Delphin提供的ITE外,还有第三方的相关工具。我喜欢使用来自 "in the box." 的工具,当然,像ITE一样,只要他工作得好。

http://blog.163.com/liushui19860112@126/blog/static/132373046201312042453522/

ResourceString的用法的更多相关文章

  1. Delphi ResourceString的用法

    在Delphi编程的那段“古老”的日子里(就是在版本4之前),在程序中使用字符串有两个基本的方法.你可以使用字符串将它们嵌入到源程序中,例如: MessageDlg( 'Leave your stin ...

  2. Delphi常用关键字用法详解

    本文详细介绍了Delphi中常用的各个关键字名称及用法,供大家在编程过程中借鉴参考之用.详情如下: absolute: ? 1 2 3 4 5 6 7 8 9 10 //它使得你能够创建一个新变量, ...

  3. EditText 基本用法

    title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...

  4. jquery插件的用法之cookie 插件

    一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...

  5. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  6. [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法

    一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...

  7. python enumerate 用法

    A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...

  8. [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

    本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...

  9. 【JavaScript】innerHTML、innerText和outerHTML的用法区别

    用法: <div id="test">   <span style="color:red">test1</span> tes ...

随机推荐

  1. asp.net 1.1网站开发配置出现”Visual Studio .NET 无法创建或打开应用程序”解决方法

    可能的解决方案: 1.注册.net framework 1.1 C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_regiis /i 2,如果配置 ...

  2. Android数据存储三剑客——SharedPreferences、File、SQLite

    Android中常用的数据存储一般有三种方式:SharedPreferences.文件和SQLite数据库,用来保存需要长时间保存的数据.本文将通过几个具体的小实例来讲解这三种方式的具体实现. 数据存 ...

  3. Solr初步学习

    Solr采用Lucene搜索库为核心,提供全文索引和搜索开源企业平台,提供REST的HTTP/XML和JSON的API,如果你是Solr新手,那么就和我一起来入门吧!本教程以solr4.8作为测试环境 ...

  4. jquery中ajax的用法

    Jquery中队Ajax操作进行了封装,可分为3层:1.最底层$.ajax(),2.第二层load().$.get().$.post()方法,3.第三层$.getScript()和$.getJSON( ...

  5. svn出现“Previous operation has not finished; run 'cleanup' if it was interrupted”,解决方法

    1.首先不需要动svn的服务器端.2.在客户端安装svn的客户端工具,自定义工具中为:command line client tools    安装完之后,在本地目录有svn.exe执行程序3.然后c ...

  6. 金典 SQL笔记(4)

    由于在本地笔记上写的.CSDN markdown编辑器仅仅支持.md格式导入, 图片没办法直接导进去.写的多了懒的一张一张图片切图上传; 直接整个文章切成图片上传上去了. watermark/2/te ...

  7. Facebook Architecture

    Facebook Architecture Quora article a relatively old presentation on facebook architecture another I ...

  8. mysql 在windows下的安装,开发基础与要点

    1:安装(windows下) 官网下载.msi文件 运行安装时只需要安装server就行了 在环境变量中配置到bin目录:e.g:C:\programFile\...mysql\bin 完成后进入wi ...

  9. javascript "非法值"检验.

    <script type="text/javascript"> function getCoord() { var x = document.getElementByI ...

  10. 自己手动绿色化MyEclipse

    绿化过程因每个人的文件存放路径不同而不同 首先打开你解压的MyEclipse文件,或者以前安装的MyEclipse重装系统后不能用,打开到这里:记住路径,比如我的是:D:\MyEclipse 我们打开 ...