原文 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. javascript prototype __proto__区别

    An Object's __proto__ property references the same object as its internal [[Prototype]] (often refer ...

  2. [转载] 50个Android开发人员必备UI效果源码

    好东西,多学习! Android 仿微信之主页面实现篇Android 仿微信之界面导航篇Android 高仿QQ 好友分组列表Android 高仿QQ 界面滑动效果Android 高仿QQ 登陆界面A ...

  3. 360云后台(使用HTTP Cache服务器)

    工作职责:设计优化HTTP Cache服务器,负载均衡服务器,调度系统等核心系统开发优化CDN系统架构满足流量.性能.成本要求 技能要求: 精通Linux, C/C++语言,HTTP协议精通高性能服务 ...

  4. javascript之url转义escape()、encodeURI()和decodeURI()

    我们可以知道:escape()除了 ASCII 字母.数字和特定的符号外,对传进来的字符串全部进行转义编码,因此如果想对URL编码,最好不要使用此方法.而encodeURI() 用于编码整个URI,因 ...

  5. linux usb 驱动详解

    linux usb 驱动详解 USB 设备驱动代码通过urb和所有的 USB 设备通讯.urb用 struct urb 结构描述(include/linux/usb.h ). urb 以一种异步的方式 ...

  6. Asp.Net的核心对象

    原文地址:http://www.cnblogs.com/fish-li/archive/2011/08/21/2148640.html 1.HttpRuntime 对象在处理Http请求的asp.ne ...

  7. UVA 11045-My T-shirt suits me(二分图匹配)

    题意:有N件T恤,N是6的倍数,因为有6种型号,每种件数相同,有M个人,每个人有两种型号的T恤适合他,每个人可以挑其中的一种,问能否所有的人都能分配到T恤. 解析:典型的二分图匹配,每N/6为同种T恤 ...

  8. ZOJ2913Bus Pass(BFS+set)

    Bus Pass Time Limit: 5 Seconds      Memory Limit: 32768 KB You travel a lot by bus and the costs of ...

  9. 喜欢的女生快被别人抢走了,我敢怎么抢? - V2EX

    喜欢的女生快被别人抢走了,我敢怎么抢? - V2EX 三大定律镇楼: 第一定律:永远不要以为女生对你有好感.第二定律:告白等于见光死.第三定律:秀恩爱分得快.

  10. 一起来学canvas (前言)

    codeyy - 一依丫丫 一起来学canvas (前言)