Подтвердить что ты не робот

Не-ASCII символы в переводе GTK-GUI в Windows не работают?

У меня есть небольшая программа на Python, которая показывает, как выполнять перевод графических интерфейсов GTK (pygobject) для Linux и Windows. В Linux все работает, но в Windows символы не-ASCII не отображаются в переводе.

Я предполагаю, что и файл Glade, и файл *.mo декодированы правильно, потому что:

  • Английский интерфейс показывает отличные от ASCII символы
  • Как в английском, так и в переводах в выражениях для печати отображаются символы, не входящие в ASCII

Вот как выглядит интерфейс на английском оригинале:

enter image description here

И перевод на немецкий язык без использования переменной среды или PANGOCAIRO_BACKEND=win32:

enter image description here

Перевод на немецкий язык с использованием переменной среды PANGOCAIRO_BACKEND=fontconfig (PANGOCAIRO_BACKEND=fc). Первая метка настроена на использование Calibri с использованием Pango. И это, безусловно, шрифт, который имеет "ö", "ä" и "ü" в Windows.

enter image description here

В консоли появляется это предупреждение для перевода: Pango-Warning **: Invalid UTF-8 string passed to pango_layout_set_text().

Некоторые подробности о том, как заставить переводы работать, уже обсуждались здесь:

Репозиторий:

Установщик для Windows:

Возможно ли, что builder.set_translation_domain("pygibank") выдвигает переводы с неправильной кодировкой? Можно ли это отладить или кто-нибудь знает как это исправить?

4b9b3361

Ответ 1

Похоже, вы используете Python 2. Python 2 по умолчанию использует ASCII, однако вы можете указать ему использовать Unicode, указав это в первой строке.

# -*- coding: utf-8 -*-

Это избавит вас от добавления префикса к каждой строке с u, что вы можете забыть сделать, потенциально создавая ошибки.

В качестве альтернативы, если вы переходите на Python 3, он по умолчанию использует Unicode, так что вам не нужно это делать.

Ответ 2

Я решил эту проблему, выполнив все строковые строки Unicode. Чтобы создать строку Unicode, сделайте следующее: u'Unicode string with fünky charàcters'.