4

Wix I18n Dev.wixtoolset的版本是V3.7。安装程序 UI 是由 UIExtension 创建的。在安装过程中,有一些 UI 字符串无法本地化。如“复制新文件”等。我搜索了这些字符串,并在 wix 源代码中放置了 (wix37-sources\src\ext\UIExtension\wixlib\WixUI_en-us.wxl),并且 wix 已经本地化了这些字符串。令我困惑的是,wix 已将这些字符串本地化,但在安装过程中仍显示为英文。即使我替换了 .wxl 文件中的字符串,它仍然显示为英文字符串。 在此处输入图像描述

在此处输入图像描述


我尝试了 BdN3504 的示例。wxs 文件与 BdN3504 相同。wxl 文件是 在此处输入图像描述

你可以看到状态仍然保持英语。 在此处输入图像描述

我的构建环境是 VS2010 & wix3.7。我不知道它有什么问题......

4

1 回答 1

4

我已经在这里回答了这个问题。

阅读或查看Progress Bar MessagesNick Ramirez 的书WiX 3.6: A Developer's Guide to Windows中的段落。

packtpublishing 的好人在这里免费提供他书中包含该段落的章节:

第 12 章:本地化安装程序。请参见第 329 页。

另一个有趣的页面是这篇 MSDN 文章:标准操作参考,本书中也有说明。

编辑:由于评论,我将发布一个工作的最小示例和屏幕截图,所以你会看到它有效:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="*" Name="LocalizingErrors" Language="1034" Version="1.0.0.0" Manufacturer="SomeOne" UpgradeCode="7ddbcad4-98d9-4c2d-9ae6-6fdc47314947">
        <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

        <MediaTemplate EmbedCab="no" />

        <Feature Id="ProductFeature" Title="LocalizingErrors" Level="1">
            <ComponentGroupRef Id="ProductComponents" />
        </Feature>

    <!-- Custom Progress messages

    Custom progress messages are defined by a table in the MSI called ActionText. However, by default
    this table isn't included. Without it, the messages are the stock English versions.

    To add the ActionText table with strings for progress messages, add a ProgressText element inside
    a UI element for each standard action found in the Execute sequence. For example, to add a 
    localized message for the InstallFiles action, add the following markup to one of your wxs files:
    -->
    <UI>
      <ProgressText Action="InstallFiles" Template="!(loc.InstallFilesTemplate)">!(loc.InstallFiles)</ProgressText>
      <ProgressText Action="CreateShortcuts" Template="!(loc.CreateShortcutsTemplate)">!(loc.CreateShortcuts)</ProgressText>
      <ProgressText Action="WriteRegistryValues" Template="!(loc.WriteRegistryValuesTemplate)">!(loc.WriteRegistryValues)</ProgressText>
      <ProgressText Action="RegisterUser" Template="!(loc.RegisterUserTemplate)">!(loc.WriteRegistryValues)</ProgressText>
      <ProgressText Action="RegisterProduct" Template="!(loc.RegisterProductTemplate)">!(loc.RegisterProduct)</ProgressText>
      <ProgressText Action="PublishFeatures" Template="!(loc.PublishFeaturesTemplate)">!(loc.PublishFeatures)</ProgressText>
      <ProgressText Action="PublishProduct" Template="!(loc.PublishProductTemplate)">!(loc.PublishFeatures)</ProgressText>
      <ProgressText Action="InstallFinalize" Template="!(loc.InstallFinalizeTemplate)">!(loc.InstallFinalize)</ProgressText>
    </UI>
    <UIRef Id="WixUI_Minimal"/>
    </Product>

    <Fragment>
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder">
                <Directory Id="INSTALLFOLDER" Name="LocalizingErrors" />
            </Directory>
        </Directory>
    </Fragment>

    <Fragment>
        <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
            <Component Id="ProductComponent" Guid="92A175A0-D15D-48EC-B2E1-FD5848FB6430">
        <File Id="somefile" Source="..\File.exe" KeyPath="yes" />
            </Component>
        </ComponentGroup>
    </Fragment>
</Wix>

伴随这个例子,你必须有一个你的文化的本地化文件。您必须在项目属性中设置文化Build->Cultures to build。就我而言,我将其命名为 es-es.wxl,文件内容如下:

<?xml version="1.0" encoding="utf-8"?>
<WixLocalization Culture="es-es" xmlns="http://schemas.microsoft.com/wix/2006/localization" Codepage="1252" Language="1034">
  <String Id="Error_1311">Archivo no encontrado: [2]. Compruebe que el archivo existe y que puedes acceder a él.</String>
  <String Id="InstallFiles">Installazione del archivos</String>
  <String Id="InstallFilesTemplate">Archivo: [1], Tamaño de archivo: [6], Directorio: [9]</String>
  <String Id="CreateShortcuts">Creacion de los atajos</String>
  <String Id="CreateShortcutsTemplate">Atajo [1] creado</String>
  <String Id="WriteRegistryValues">Escribir en registro</String>
  <String Id="WriteRegistryValuesTemplate">Camino: [1], Nombre: [2], valor: [3]</String>
  <String Id="RegisterUser">Registrar a los usuarios</String>
  <String Id="RegisterUserTemplate">Usario: [1]</String>
  <String Id="RegisterProduct">Registrar producto</String>
  <String Id="RegisterProductTemplate">Producto: [1]</String>
  <String Id="PublishFeatures">Publicar las características</String>
  <String Id="PublishFeaturesTemplate">Caraterística: [1]</String>
  <String Id="PublishProduct">Publicar el producto</String>
  <String Id="PublishProductTemplate">Producto: [1]</String>
  <String Id="InstallFinalize">Finalizar la instalación</String>
  <String Id="InstallFinalizeTemplate">Finalizar [ProductName]</String>
</WixLocalization>

最后一个屏幕截图向您展示它的工作原理: 带有本地化进度条字符串的本地化 wix 安装的图像。

另一个编辑:要本地化错误字符串,您只需定义Error具有相应错误编号的元素:

<UI>
    <Error Id="1322">Una parte de la ruta de la carpeta no es válido. Se está vacío o supera la longitud permitida por el sistema.</Error>
    <Error Id="1311">!(loc.Error_1311)</Error>
</UI>

第一个错误字符串是硬编码的,所以这不是一个好的解决方案。最好使用本地化文件,因为它是在第二个 Error元素中完成的。

于 2013-09-12T12:38:33.927 回答