umup
Июль 14, 2007 20:35:35
интересует кто какими методами пользуется для создания программ с легко локализируемым интерфейсом
Пока остановился на таком методе - весь вывод строк проходит через одну функцию 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:39:51
umup
интересует кто какими методами пользуется для создания легко программ с легко локализируемым интерфейсом
Пока остановился на таком методе - весь вывод строк проходит через одну функцию translate(“фраза”), которая возвращает переведенную фразу.
да. примерно по такому принципу и работает бородатый gnu gettext, которым пользуется ОS сообщество. соответсвующий биндинг есть в стандартной библиотеке питона.
bialix
Июль 14, 2007 21:05:02
umup
Июль 14, 2007 21:11:56
да уж, слишком заморочено и много ненужного
остаюсь пока на XML и словаре
bialix
Июль 14, 2007 22:51:26
заморочено? ну уж нет, не согласен.
я конечно понимаю, что свой собственный велосипед ближе к телу, но все же…
OlDer
Июль 15, 2007 00:32:30
umup
да уж, слишком заморочено и много ненужного
Замороченно как раз в меру. А ненужное использовать не нужно.
Хотя, конечно, изобретение велосипедов - очень увлекательное занятие (знаю по себе) ;-)
umup
Сен. 25, 2007 00:08:56
Вот небольшой модулек для перевода фраз. Написал так как требуется перевод динамически формируемых фраз в процессе работы программы. Новые неизвестные слова дописываются в tran_dict, перед завершением программы словарь можно записать с помощью tran_dict_write в xml файл, в редакторе дописать перевод нужных слов. Читается словарь функцией tran_dict_load (можно читать несколько разных файлов, словари суммируются). Сам перевод осуществляется функцией tran(word), если не находит перевода, возвращает входное слово и включает его в словарь. tran_lng_def задает использованный по умолчанию язык, tran_lng_to - на какой делается перевод.
pythonwin
Сен. 25, 2007 09:25:50
bialix, OlDer можно ли сделать интернационалицию программы, чтобы перевод хранился в БД и как это можно сделать?
bialix
Сен. 25, 2007 11:00:10
pythonwin
bialix, OlDer можно ли сделать интернационалицию программы, чтобы перевод хранился в БД и как это можно сделать?
what do you mean ;-) ?
если в базе будет лежать полностью бинарный mo-файл с переводами, то можно прсто унаследовать от класса gettext.GnuTranslations и сделать свою инициализацию словаря перевода, а дальше – как обычно с gettext.
Если же в базе лежат просто пары “английский - русский”, то ИМХО простой обвертки к словарю, которая предоставляет интерфейс а-ля gettext, будет достаточно.
pythonwin
Сен. 25, 2007 17:01:35
bialix
Если же в базе лежат просто пары “английский - русский”, то ИМХО простой обвертки к словарю, которая предоставляет интерфейс а-ля gettext, будет достаточно.
можно более подробно?
если можно с ссылками и примерами :)