Cómo mostrar el formato de hora sensible a la configuración regional sin segundos en Python

Puedo generar un formato de hora sensible a la configuración regional usandostrftime('%X'), pero esto siempre incluye segundos. ¿Cómo puedo mostrar este formato de hora sin segundos?

>>> import locale
>>> import datetime
>>> locale.setlocale(locale.LC_ALL, 'en_IE.utf-8')
'en_IE.utf-8'
>>> print datetime.datetime.now().strftime('%X')
12:22:43
>>> locale.setlocale(locale.LC_ALL, 'zh_TW.utf-8')
'zh_TW.utf-8'
>>> print datetime.datetime.now().strftime('%X')
12時22分58秒

La única forma en que se me ocurre hacer esto es intentar analizar la salida delocale.nl_langinfo(locale.T_FMT) y quitar los segundos, pero eso trae su propio truco.

>>> print locale.nl_langinfo(locale.T_FMT)
%H時%M分%S秒
>>> locale.setlocale(locale.LC_ALL, 'en_IE.utf-8')
'en_IE.utf-8'
>>> print locale.nl_langinfo(locale.T_FMT)
%T
Solución:

(Basado en la respuesta de pixelbeat).

# -*- coding: utf-8 -*-
import locale
def locale_time(t, show_seconds=False):
    if show_seconds:
        return t.strftime('%X')
    replacement_fmts = [
        (u'.%S', u''),
        (u':%S', u''),
        (u',%S', u''),
        (u':%OS', ''),
        (u'ཀསར་ཆ%S', u''),
        (u' %S초', u''),
        (u'%S秒', u''),
        (u'%r', '%I:%M %p'),
        (u'%t', '%H:%M'),
        (u'%T', '%H:%M')
    ]
    enc=locale.getpreferredencoding(do_setlocale=False)
    t_fmt = locale.nl_langinfo(locale.T_FMT).decode(enc)
    for fmt in replacement_fmts:
        new_t_fmt = t_fmt.replace(*fmt)
        if new_t_fmt != t_fmt:
            return t.strftime(new_t_fmt.encode(enc))
    return t.strftime(t_fmt.encode(enc)

Uso:

>>> locale.setlocale(locale.LC_ALL, 'en_IE.utf-8')
'en_IE.utf-8'
>>> print locale_time(t)
15:47
>>> locale.setlocale(locale.LC_ALL, 'zh_TW.utf-8')
'zh_TW.utf-8'
>>> print locale_time(t)
15時47分

Respuestas a la pregunta(4)

Su respuesta a la pregunta