2013-07-12 168 views
2

我試圖建立與維克斯開發了支持多語言的UI我的MSI安裝程序的MSI安裝程序的本土化作戰的,所以我創建Strings_en-us.wxl文件包含此:使用維克斯

<?xml version="1.0" encoding="utf-8"?> 
<WixLocalization Culture="en-us" xmlns="http://schemas.microsoft.com/wix/2006/localization"> 
    <String Id="Language">1033</String> 
    <String Id="Codepage">1252</String> 
    <String Id="DowngradeErrorMessage">A newer version of [ProductName] is already installed.</String> 
</WixLocalization> 

然後從內Product.wxs文件:

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Product Id="$(var.ProduceCode)" 
      Name="TestSetupProject1" 
      Version="$(var.Version)" 
      Language="!(loc.Language)" 
      Codepage="!(loc.Codepage)" 
      Manufacturer="$(var.CompanyName)" 
      UpgradeCode="$(var.UpgradeCode)"> 

我立即得到一個錯誤:

error CNDL0276: The code page '!(loc.Codepage)' is not a valid Windows code page. Please check the Product/@Codepage attribute value in your source file.

那麼我在這裏做錯了什麼?

回答

1

來看由於缺乏任何回覆的我會認爲這是不可能的。

我不知道這是否是微軟的錯,或在維克斯解析器一些疏漏?要做到這一點,唯一的方法是直接將代碼頁編碼寫入.wxs文件本身,這非常不方便,因爲在重新編譯不同的語言時,必須切換到適當的代碼頁號。除此之外,無論如何,現在誰還在使用代碼頁?

PS。在一次固定它和所有的希望,我想這樣做(像它應該已經從一開始就做了):

Codepage="UTF-8" 

它編譯但生成的MSI文件的UI看上去像這樣:)

enter image description here

+1

我在這方面沒有經驗,但是...... Windows安裝程序使用代碼頁獲取摘要信息和字符串。他們有不同的用途和限制。您不能在產品/ @代碼頁中放置任何Unicode代碼頁ID。這些鏈接可能有幫助:[使用中性代碼頁創建數據庫](http://msdn.microsoft.com/en-us/library/windows/desktop/aa368057.aspx)[WiX代碼頁](http:// wix.sourceforge.net/manual-wix3/codepage.htm)[總結信息流](http://msdn.microsoft.com/en-us/library/windows/desktop/aa372044.aspx) –

0

伸長元件WixLocalization具有一個指定Product/@Codepage重寫的屬性@Codepage。從鏈接頁面:

The code page integer value or web name for the resulting database. You can also specify -1 which will not reset the database code page.

也與此有關,如果這個問題沒有直接提及,有本地化的字符串出現在最終的MSI兩個不同的地方:在摘要信息流,並在安裝數據庫正確。有關更多信息,請參見MSI Databases and Code Pages。 SIS的代碼頁由屬性Package/@SummaryCodepage指定,您可以在其中使用!(loc)變量。