原文 http://zwkufo.blog.163.com/blog/static/25882512010101041626803/?suggestedreading&wumii

用InnoSetup做安装包的时候,在iss文件中写[Code]经常会用MessageBox,像是这样:

[Code]
function InitializeSetup(): boolean;
begin
  if MsgBox('确定安装Eee Docking?', mbInformation, MB_OKCancel) = IDOK then
    result := true
  else
    result := false;
end;

这个时候运行界面如下:

 

很好,但是我们看到“确定安装Eee Docking?”这个字串是写死在Code代码中的,如果软件支持多国语言安装,是不是需要写n次MessageBox?这样显然不合理。

其实我们很多人会用isl文件来做多国语言翻译,而“确定安装Eee Docking?”之类的翻译信息会放在isl文件中。如下面ChineseSimp.isl文件中的SetupLdrStartupMessage字串就表示了我们需要表达的意思:

 
当然,你也可以直接把这些翻译字段写在iss文件的[Messages]或者[CustomMessages]中,但是这个不在这次的讨论范围内。
OK,现在如果能得到这个字串就可以完全解决支持多国语言安装包的MessageBox翻译问题。
InnoSetup中有一个获取isl中特定ID字串的函数:
function SetupMessage(const ID: TSetupMessageID): String;
而这里的TSetupMessageID为 'msg'+'isl文件中的字段',如我们需要这里的SetupLdrStartupMessage,则TSetupMessageID:=’msgTSetupMessageID‘   。好了,现在代码可以修改如下:
[Code]
function InitializeSetup(): boolean;
var S: String;
begin
  S := SetupMessage(msgSetupLdrStartupMessage);
  if MsgBox(S, mbInformation, MB_OKCancel) = IDOK then
    result := true
  else
    result := false;
end;
结果看起来会是这样:
 
“将在你的电脑上安装%1”?!其实如果足够仔细,你会发现在isl中其实有大量的 " %1 ”、" %2 ” 标记,用于留给User(好吧:打包者)自定义。我翻遍InnoSetup的Help文档,没有什么形式的API可以填充这个 " %1 "!
但是故事没有到这里结束,有一个最简单的方法可以避免这么尴尬的事情,那就是直接用你想要的文字替换它!现在最后的代码可以这样:
[Code]
function InitializeSetup(): boolean;
var S: String;
begin
  S := SetupMessage(msgSetupLdrStartupMessage);
  StringChange(S, '%1', 'EeeDocking');
  if MsgBox(S, mbInformation, MB_OKCancel) = IDOK then
    result := true
  else
    result := false;
end;
好了,结果如你想象的那样完美:
1、中文环境:

2、英文环境:

Inno Setup:获取isl中的多国语言字串的更多相关文章

  1. INNO SETUP卸载程序中加入自定义窗体

    原文:INNO SETUP卸载程序中加入自定义窗体 [Setup] AppName=My Program AppVerName=My Program v.1.2 DefaultDirName={pf} ...

  2. Inno Setup入门(七)——提供安装语言选项

    Inno Setup安装目录下有一个Languages的文件夹,该文件夹提供了可供使用的语言,通过在脚本中加入[languages]段,可以实现该项功能,实现代码如下: [setup] ;全局设置,本 ...

  3. Inno Setup入门(七)——提供安装语言选项

    Inno Setup安装目录下有一个Languages的文件夹,该文件夹提供了可供使用的语言,通过在脚本中加入[languages]段,可以实现该项功能,实现代码如下: [setup] ;全局设置,本 ...

  4. (转)Inno Setup入门(七)——提供安装语言选项

    本文转载自:http://blog.csdn.net/yushanddddfenghailin/article/details/17250803 Inno Setup安装目录下有一个Languages ...

  5. INNO SETUP 5.5.0以上版本中文语言包

    ; *** Inno Setup version 5.5.0+ Chinese messages ***;; To download user-contributed translations of ...

  6. 返回字符串中最长连续相同字串的长度---正则实现与JavaScript实现

    JavaScript 实现 let str = 'AAABBAACCAAAADDE' function continuousString(str) { let finalObj = {} let te ...

  7. [Inno Setup] 字符串列表,当要处理一长串文件时很有用

    https://wiki.freepascal.org/TStringList-TStrings_Tutorial TStringList-TStrings Tutorial │ Deutsch (d ...

  8. Inno Setup制作安装包的几个问题

    1. 卸载时,如何判断应用程序是否运行    InnoSetup 提供变量AppMutex,用来保存应用程序的Mutex名称.现在很多应用程序都是唯一实例运行.这样避免配置文件被错误修改以及其他很多衍 ...

  9. [!!!!!]Inno Setup教程-常见问题解答

    [转]Inno Setup教程-常见问题解答 功能 * 翻译 Inno Setup 文字  * 它支持 MBCS (多字节字符集) 吗?  * 将来会支持 Windows Installer 吗?   ...

随机推荐

  1. LLinux系统编程(10)——进程间通信之管道

    管道是Linux中很重要的一种通信方式,是把一个程序的输出直接连接到另一个程序的输入,常说的管道多是指无名管道,无名管道只能用于具有亲缘关系的进程之间,这是它与有名管道的最大区别.有名管道叫named ...

  2. HTML5视音频小结

    目前,大多数视频是通过插件(比如 Flash)来显示的.然而,并非所有浏览器都拥有同样的插件.HTML5 规定了一种通过 video 元素来包含视频的标准方法.当前HTML5只支持三种格式的视频. 格 ...

  3. cf479A Expression

    A. Expression time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  4. python选择排序实现与C选择排序实现

    python代码: #coding=utf-8 if __name__=="__main__": arr=[3,2,1,7,11,4,5,8] print "Before ...

  5. 《如何让TT T4模板输出多个文件(VS2010中)》-- access911.net 文章

    <如何让TT T4模板输出多个文件(VS2010中)>-- access911.net 文章   问题:   VS2010中自带的 TT 模板功能挺好用,但是如何定义其输出的目录,或者如何 ...

  6. 行变列 pivot

    SELECT p.City , [临时] , [会员] , VIPFROM ( SELECT c.CustomerID , c.City , CASE WHEN COUNT(o.OrderID) &l ...

  7. 设置Android设备在睡眠期间始终保持WLAN开启的代码实现

    MainActivity例如以下: package cc.ab; import android.os.Bundle; import android.provider.Settings; import ...

  8. ff与ie 的关于js兼容性

    FF的FIREBUG,不仅能测试JS还能检查CSS错误,是一般常用的.但它主要检查FF方面的错误,对IE就无能为力了.要测试IE,就用ieTester,它可以测试IE几乎所有版本(1.0恐怕也用不到测 ...

  9. winform —— 常用控件

    1.textbox: 属性:text:    文本selectedtext:         获或设置选中文本canundo:         是否能够撤销 passwordchar:替换字符实现密码 ...

  10. SQL Server 强行Insert包含自增列值的记录

    SET IDENTITY_INSERT 表 ON INSERT INTO 表 ([ID] ,[SequenceNumber] ,[EnumCode] ,[Description]) VALUES ( ...