Уведомления

Группа в Telegram: @pythonsu

#1 Июль 14, 2007 20:35:35

umup
От:
Зарегистрирован: 2007-07-14
Сообщения: 53
Репутация: +  0  -
Профиль   Отправить e-mail  

интернационализация программы

интересует кто какими методами пользуется для создания программ с легко локализируемым интерфейсом

Пока остановился на таком методе - весь вывод строк проходит через одну функцию translate(“фраза”), которая возвращает переведенную фразу. Текущий язык устанавливается глобальной переменной lng_to. Исходные фразы и перевод хранятся в словаре вида tran_dict = {lng1 : {dict1}, lng2 : {dict2}, …}, где dictN = {“phrase_original” : “phrase_translated”, …}. Если фраза не находится в словаре, она включается в него без перевода. Весь текст хранится в Unicode, все файлы - в UTF-8.

При закрытии программы весь накопленный словарь выводится в файл XML со структурой типа :


<?xml version=“1.0” encoding=“utf-8” ?>
<tran>
<lang name=“eng” xml:space=“preserve”>
<word original=“work” translation=“” />
<word original=“use” translation=“” />
</lang>
</tran>


Можно вывести в отдельный файл словарь исходного языка с пустыми полями перевода, который копируется пользователем в файл c названием типа tran_rus.xml или tran_ukr.xml, куда вписываются фразы перевода оригинальных фраз. При запуске в общий словарь считываются все файлы tran*.xml. При закрытии программы можно записывать все словари, таким образом при изменении в тексте программы будут автоматически добавлятся новые фразы.



Отредактировано (Июль 14, 2007 20:42:55)

Офлайн

#2 Июль 14, 2007 20:39:51

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

интернационализация программы

umup
интересует кто какими методами пользуется для создания легко программ с легко локализируемым интерфейсом

Пока остановился на таком методе - весь вывод строк проходит через одну функцию translate(“фраза”), которая возвращает переведенную фразу.
да. примерно по такому принципу и работает бородатый gnu gettext, которым пользуется ОS сообщество. соответсвующий биндинг есть в стандартной библиотеке питона.



Отредактировано (Июль 15, 2007 09:24:53)

Офлайн

#4 Июль 14, 2007 21:11:56

umup
От:
Зарегистрирован: 2007-07-14
Сообщения: 53
Репутация: +  0  -
Профиль   Отправить e-mail  

интернационализация программы

да уж, слишком заморочено и много ненужного
остаюсь пока на XML и словаре



Офлайн

#5 Июль 14, 2007 22:51:26

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

интернационализация программы

заморочено? ну уж нет, не согласен.
я конечно понимаю, что свой собственный велосипед ближе к телу, но все же…



Офлайн

#6 Июль 15, 2007 00:32:30

OlDer
От:
Зарегистрирован: 2006-07-19
Сообщения: 133
Репутация: +  0  -
Профиль   Отправить e-mail  

интернационализация программы

umup
да уж, слишком заморочено и много ненужного
Замороченно как раз в меру. А ненужное использовать не нужно.
Хотя, конечно, изобретение велосипедов - очень увлекательное занятие (знаю по себе) ;-)



Офлайн

#7 Сен. 25, 2007 00:08:56

umup
От:
Зарегистрирован: 2007-07-14
Сообщения: 53
Репутация: +  0  -
Профиль   Отправить e-mail  

интернационализация программы

Вот небольшой модулек для перевода фраз. Написал так как требуется перевод динамически формируемых фраз в процессе работы программы. Новые неизвестные слова дописываются в tran_dict, перед завершением программы словарь можно записать с помощью tran_dict_write в xml файл, в редакторе дописать перевод нужных слов. Читается словарь функцией tran_dict_load (можно читать несколько разных файлов, словари суммируются). Сам перевод осуществляется функцией tran(word), если не находит перевода, возвращает входное слово и включает его в словарь. tran_lng_def задает использованный по умолчанию язык, tran_lng_to - на какой делается перевод.



Отредактировано (Сен. 25, 2007 00:11:10)

Офлайн

#8 Сен. 25, 2007 09:25:50

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

интернационализация программы

bialix, OlDer можно ли сделать интернационалицию программы, чтобы перевод хранился в БД и как это можно сделать?



Отредактировано (Сен. 25, 2007 09:29:00)

Офлайн

#9 Сен. 25, 2007 11:00:10

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

интернационализация программы

pythonwin
bialix, OlDer можно ли сделать интернационалицию программы, чтобы перевод хранился в БД и как это можно сделать?
what do you mean ;-) ?

если в базе будет лежать полностью бинарный mo-файл с переводами, то можно прсто унаследовать от класса gettext.GnuTranslations и сделать свою инициализацию словаря перевода, а дальше – как обычно с gettext.

Если же в базе лежат просто пары “английский - русский”, то ИМХО простой обвертки к словарю, которая предоставляет интерфейс а-ля gettext, будет достаточно.



Офлайн

#10 Сен. 25, 2007 17:01:35

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

интернационализация программы

bialix
Если же в базе лежат просто пары “английский - русский”, то ИМХО простой обвертки к словарю, которая предоставляет интерфейс а-ля gettext, будет достаточно.
можно более подробно?
если можно с ссылками и примерами :)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version