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"?>
<Locale>
  <String Type="PlainText" Id="S_ShortProductName">Keyman Desktop</String>
</Locale>
<Dialog Id="DownloadKeyboard" Width="600" Height="400">
  <footerheight>40</footerheight>
</Dialog>

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:

cscript [/nologo]
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.

Categories: Developing Keyman

Related Posts

Developing Keyman

Keyman Update for 28 August 2026

Major improvements on Autocorrect! These alpha versions bring localization on Windows, Linux, iOS. Keyman for Windows has support for PNG format icon, track caps lock state correctly. Keyman Developer fixes unsaved layer name, continue on kmc-convert. While, Keyman for Android and iPhone and iPad has new documentation on autocorrection. KeymanWeb enhances suggestion, memory-usage, and supports complex Latin-script languages. Improvements on the Laz keyboard. New Medžuslovjansky (latinica), Ligurian, Ntcham (AZERTY), and kachin keyboards! Don't forget about our 3 new contributors and another testimonial!

Developing Keyman

Keyman Update for 14 August 2026

This edition highlights the latest Keyman product and keyboard development updates from 3 — 14 August 2026, describing recent progress across the project and contributions from the community. A few links Learn how to create Read more…

Developing Keyman

Keyman Internship 2026 – Android UI

Earlier this year, the Keyman team working out of the National Polytechnic Institute of Cambodia (NPIC), វិទ្យាស្ថានជាតិពហុបច្ចេកទេសកម្ពុជា, in Phnom Penh, the capital of Cambodia, offered an internship program to keen students to take on a Read more…