Hace mucho tiempo escribí un post sobre como escribir aplicaciones en python que soporten/muestren varios lenguajes usando gettext (incluso después hice otro tutorial para crear una aplicación gráfica multilenguaje que se aprovechaba de esto).

Básicamente lo que hace es ocupar el modulo gettext, el cual lee el lenguaje que utiliza el sistema y a partir de este carga el correspondiente archivo de traducción (*.mo) cambiando las cadenas de texto al idioma del sistema.

Esto funciona de maravilla en sistemas POSIX (linux, la manzana, etc.) pero trae un pequeño problema en windows, ya que gettext usa por defecto las variables de entorno del sistema (como LANGUAGE, LC_MESSAGES, LC_ALL o LANG) para determinar el idioma que se utiliza en el equipo, pero estas variables de entorno por no están presentes en el típico equipo con Windows porque tanto el OS (Windows) como sus aplicaciones nativas obtienen esa información directamente del registro (y por lo tanto no están definidas por defecto).

Es más lo podemos comprobar fácilmente si abrimos el interprete interactivo en Windows:

>>>import os
>>>print(os.getenv('LANG'))
None

Que regresa un None, ya que por defecto esa variable no existe en Windows (obviamente si se ejecuta en GNU/Linux o cualquier otro tipo POSIX, en vez de None regresaría el idioma por defecto). También lo podríamos comprobar directamente en la linea de comandos de Windows usando SET

Ahora esto tiene una solución bastante simple, usando el modulo locate (de la biblioteca estándar de Python) se puede obtener el lenguaje y codificación que usa Windows por defecto en el equipo y con esa información podemos crear de manera temporal la variable del sistema que necesita gettext.

Es más, se puede utilizar sys para detectar el sistema usado (como lo explique por aquí) y en caso de que sea Windows se crea la variable faltante de forma temporal (la que necesita gettext para funcionar), el código para hacerlo seria algo como esto:

import os
import sys

if sys.platform.startswith('win'):
    import locale
    if os.getenv('LANG') is None:
        lang, enc = locale.getdefaultlocale()
        os.environ['LANG'] = lang

Nota: solo lo probé en Windows 7, así que no se si funcionara en Windows más antiguos (aunque debería funcionar)