В GTK версията, че не ми се правеше виртуална среда и инсталация на библиотеки само за това.
Но и в Qt6 варианта би трябвало да е абсолютно същото.
Прави се също таблица и се прилага след това на текста с превода към думата.
На практика прави същото. Подменя едни символи с други.
Ето таблицата:
Код:
mapping = {
"\xa1": "æ",
"\xa3": "ɔ",
"\xa4": "ŋ",
"\xa5": "θ",
"\xa6": "ʃ",
"\xa7": "ʊ",
"\xa8": "ɛ",
"\xa9": "ʒ",
"\xad": "ð",
"Ў": "æ", / тези ги добавих заради примера с plank
"¥": "θ", / не ми се търсеше, на какво отговарят шеснайсетичните стойности. Може директно по този начин, ако трябва да се добавят още символи
}
trans_table = str.maketrans(mapping)Този код може да се постави след декларацията на другите променливи.
След това trans_table се прилага към превода на думата, за се подменят символите чрез метода translate.
Ето и как би изглеждала цялата функция load_kbg_dat след промяната:
Код:
def load_kbg_dat(path):
with open(path, "rb") as f:
data = f.read()
entries = {}
parts = data.split(b"\x00")
mapping = {
"\xa1": "æ",
"\xa3": "ɔ",
"\xa4": "ŋ",
"\xa5": "θ",
"\xa6": "ʃ",
"\xa7": "ʊ",
"\xa8": "ɛ",
"\xa9": "ʒ",
"\xad": "ð",
"Ў": "æ",
"¥": "θ",
}
trans_table = str.maketrans(mapping)
for part in parts:
if not part:
continue
try:
text = part.decode("utf-8")
except:
# Тук накрая се прилага таблицата и се прави подмяната на съответните символи
text = part.decode("cp1251", errors="ignore").translate(trans_table)
if "\n" not in text:
continue
word, translation = text.split("\n", 1)
word = word.strip()
translation = translation.strip()
if not word:
continue
entries[word] = translation
return entries
Мисля, че това е достатъчно инфо за Радо, за да се оправи по-натам.
Транскрипцията на превода на plank вече изглежда нормално.
Ще може да смени и снимките в GitHub.

![Beer [_]3](https://www.linux-bg.org/forum/Smileys/default/beer.gif)


Нещата са чисто практически, върху практически опит.