[英]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.