I was asked via email this morning about the changing locale.xml file format between build 223 and build 224 of Keyman Desktop. I had meant to write an update on this blog for my previous post about the file format – so here it is.
We reworked the locale.xml file format in build 224 to make it more consistent and eliminate some issues with extensibility. I believe the new format is more logical – here’s an overview:
<?xml version="1.0" encoding="utf-8"?>
<String Type="PlainText" Id="S_ShortProductName">Keyman Desktop</String>
<Dialog Id="DownloadKeyboard" Width="600" Height="400">
Each string has a type of PlainText, HTML, or FormatString, according to how it is used. PlainText cannot contain markup of any kind; HTML can. FormatStrings are used mostly in dialog boxes and other messages, and cannot contain markup, but often contain parameters such as %0:s or %1:d. These parameters can be put in any order in the output string – and can even be repeated.
We also have some new information – each HTML-based dialog in Keyman Desktop Configuration has an entry in the file that specifies its pixel width and height, and optionally some internal dimensions as well. In the example above, the footerheight for the DownloadKeyboard dialog is given as 40 pixels.
That’s all there is to the format… Of course the new file format is wonderful and is going to solve the world’s problems, but for anyone who already did a translation, that’s not going to make them happy! (Vincent?)
So, I wrote an XSLT template to translate the build 223 format to build 224 format. The template and some wrappers to execute it are available at: www.tavultesoft.com/support/files/. There are two wrappers for the template (or you can use your own favourite XSLT processor):
* An IE only web page – convertlocale.html (uses ActiveX to access Msxml2.DomDocument)
* A Windows Scripting file – convertlocale.js
To run convertlocale.js, start a command prompt and type:
convertlocale.js <infile.xml> [<outfile.xml>]
If no outfile is given, then the output is written to stdout.
If you have any issues with the conversion, please let me know.