簡體   English   中英

如何在wix和DTF中本地化自定義操作的錯誤消息?

[英]How to localize Error Messages for a Custom Action in wix and DTF?

我在DTF中編寫了一個自定義操作,並希望為它生成本地化的錯誤消息。 到目前為止,我已經通過以下方式解決了這個問題:自定義操作包含一個方法,該方法顯示已在字符串表中定義的消息,如下所示:

public static string getError(Session session, short errorNo)
    {
        Database db = session.Database;
        string errorMessage = (string)db.ExecuteScalar("SELECT `Message` FROM `Error` WHERE `Error` = {0}", errorNo);
        db.Close();
        return errorMessage;
    }

要使用此錯誤消息,必須在UI元素下創建一個Error元素,如下所示:

<UI>
  <Error Id="42042">!(loc.Error42042)</Error>
</UI>

然后,實際的錯誤消息可以存儲在本地化變量Error42042如下所示:

<String Id="Error42042">My localized Error Message.</String>

雖然它有一個嚴重的限制,但這種方法效果很好:它不會替換字符串中的屬性。 所以字符串

<String Id="Error42043">[MY_PROPERTY] is broken</String>

[MY_PROPERTY] is broken將逐字顯示。

我是否需要擴展我的getError方法來手動替換屬性(即在正則表達式或其他一些文本替換技術的幫助下)?

我可以使用wix源代碼中的預定義函數進行屬性替換嗎?

這完全是錯誤的做法嗎?

我已經看到了形式的字符串

<String Id="Error2227">Param: [2]. Invalid param "[3]" in action: [4].</String>

在其他安裝包中。 能夠像這樣將參數傳遞給String表也是解決這個問題的可行方法,但我還沒想出如何將參數傳遞給字符串表。 你知道怎么做嗎?

感謝PhilDW的評論,我找到了DTF解決方案,這非常簡單。 使用Session.Format方法,它是圍繞MsiFormatRecord的DTF包裝器,可以簡單地替換本地化字符串中的屬性。 基於上面的示例,getError方法必須擴展為以下內容:

public static string getError(Session session, short errorNo)
    {
        Database db = session.Database;
        string errorMessage = (string)db.ExecuteScalar("SELECT `Message` FROM `Error` WHERE `Error` = {0}", errorNo);
        db.Close();
        errorMessage = session.Format(errorMessage);
        return errorMessage;
    }

現在,可以使用Formatted語法替換本地化字符串中的屬性,如下所示:

<String Id="Error42043">{[MY_PROPERTY]} is broken</String>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM