gettext, Python, and Windows: a simple demo

Last time, I discussed some of the issues about localizing a Python app in Windows. This time, I’m providing a simple demo app which shows how localization can be accomplished.

To avoid an overly verbose explanation, I’ve set up a GitHub repo with the code, a sample .po file, plus some scripts for easily creating .po/.mo files in the correct hierarchies. (Consider its contents as public domain.)

Basically: MinGW/Msys provide the necessary utilities for extracting strings and compiling .mo files. If you’re in a non-English environment, things may act odd if LANG is not set appropriately, but other than that the tools work fine. So, it’s just a matter of a few minor tweaks, and maybe some scripts or Makefiles to automate things.

The demo app in the above repo contains a minimum of magic: it will check if gettext-compatible environment settings are set (LANG, LC_MESSAGES, etc.), and if not, will create a LANG value based on locale.getdefaultlocale().

Anyway, test output on my system (Japanese Windows with English set via Regional Settings dialog) looks like follows:

LANG/LC_* unspecified:

$ ./simple_test.py
Current locale:
LANGUAGE None
LC_ALL None
LC_MESSAGES None
LANG None

Adjusted locale:
LANGUAGE None
LC_ALL None
LC_MESSAGES None
LANG en_US

Hello world!

LANG=ja:

$ LANG=ja ./simple_test.py
Current locale:
LANGUAGE None
LC_ALL None
LC_MESSAGES None
LANG ja

こんにちは、世界!

And a final note: last time I made comments about encodings, but it seems that LANG values including encodings (“ja_JP.euc-jp”) don’t have any effect – at least in this demo and on Windows. Just the language/country portion is sufficient.

Leave a Reply

Your email address will not be published. Required fields are marked *