понедельник, 1 ноября 2010 г.

Проблемы с локализацией кнопок диалогового окна wx.MessageDialog

Э-э-х, где же ты, кросс-платформенность?

Класс wx.MessageDialog имеет разную реализацию на разных операционных системах. Собственно на операционных системах GNU/Linux этой проблемы вовсе нет, так как это диалоговое окно реализовано средствами wxWidgets, и перевод кнопок осуществляется через стандартный механизм интернационализации wxPython. Совсем по другому обстоят дела на ОС семейства Windows.

wx.MessageDialog на ОС Windows

Для ОС Windows данное диалоговое окно реализовано средствами операционной системы (лень, видать было сделать по-другому). Соответственно, имеем вызов функции MessageBox из всеми любимого нами Windows API. А по сему вся интернационализация производится также средствами операционной системы, и влезть в этот процесс мы никак не можем, а окна, которые наполовину на одном языке, наполовину на другом совсем уж не красят приложение и его автора.

Свет в конце тоннеля

Да, он есть. Выход заключается в написании собственного диалога на базе wx.Dialog. Пример можно посмотреть в wxDemo. Хорошо то, что при замене старого диалога новым не приходится переписывать программный код взаимодействия с ним. Вы также можете использовать методы Show() и ShowModal(), а также идентификаторы кнопок, такие как wx.ID_OK, wx.ID_NO, и т.д.

Совет на будущее (в том числе и себе)

Так, что если ваша программа будет нуждаться в локализации, о wx.MessageDialog советую забыть вообще, и делать свои диалоги на базе wx.Dialog.

Комментариев нет:

Отправить комментарий

В этом гаджете обнаружена ошибка