I have written a custom action in DTF and would like to generate localized error messages for it. Until now, I have gone about this the following way: The custom action includes a method which displays a message that has been defined in the string table like this:
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;
}
To make use of this error message, an Error
element has to be created under the UI
element like this:
<UI>
<Error Id="42042">!(loc.Error42042)</Error>
</UI>
The actual error message can then be stored in the localization variable Error42042
like this:
<String Id="Error42042">My localized Error Message.</String>
This approach works quite well although it has one serious limitation: It won't replace properties in the strings. So the string
<String Id="Error42043">[MY_PROPERTY] is broken</String>
will be displayed verbatim as [MY_PROPERTY] is broken
.
Am I required to extend my getError
method to substitute properties manually (i.e. with the help of regular expressions or some other text substitution technique)?
Is there a predefined function in the wix source code I could use for property substitution?
Is this the wrong approach altogether?
I have seen strings in the form of
<String Id="Error2227">Param: [2]. Invalid param "[3]" in action: [4].</String>
in other installation packages. Being able to pass parameters to the String table like this would also be a feasible approach to tackle this problem, but I have not figured out how to pass parameters to the string table. Do you know how to do that?