Форум сайта python.su
интересует кто какими методами пользуется для создания программ с легко локализируемым интерфейсом
Пока остановился на таком методе - весь вывод строк проходит через одну функцию 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)
Офлайн
umupда. примерно по такому принципу и работает бородатый gnu gettext, которым пользуется ОS сообщество. соответсвующий биндинг есть в стандартной библиотеке питона.
интересует кто какими методами пользуется для создания легко программ с легко локализируемым интерфейсом
Пока остановился на таком методе - весь вывод строк проходит через одну функцию translate(“фраза”), которая возвращает переведенную фразу.
Отредактировано (Июль 15, 2007 09:24:53)
Офлайн
Офлайн
да уж, слишком заморочено и много ненужного
остаюсь пока на XML и словаре
Офлайн
заморочено? ну уж нет, не согласен.
я конечно понимаю, что свой собственный велосипед ближе к телу, но все же…
Офлайн
umupЗамороченно как раз в меру. А ненужное использовать не нужно.
да уж, слишком заморочено и много ненужного
Офлайн
Вот небольшой модулек для перевода фраз. Написал так как требуется перевод динамически формируемых фраз в процессе работы программы. Новые неизвестные слова дописываются в tran_dict, перед завершением программы словарь можно записать с помощью tran_dict_write в xml файл, в редакторе дописать перевод нужных слов. Читается словарь функцией tran_dict_load (можно читать несколько разных файлов, словари суммируются). Сам перевод осуществляется функцией tran(word), если не находит перевода, возвращает входное слово и включает его в словарь. tran_lng_def задает использованный по умолчанию язык, tran_lng_to - на какой делается перевод.
Отредактировано (Сен. 25, 2007 00:11:10)
Офлайн
bialix, OlDer можно ли сделать интернационалицию программы, чтобы перевод хранился в БД и как это можно сделать?
Отредактировано (Сен. 25, 2007 09:29:00)
Офлайн
pythonwinwhat do you mean ;-) ?
bialix, OlDer можно ли сделать интернационалицию программы, чтобы перевод хранился в БД и как это можно сделать?
Офлайн
bialixможно более подробно?
Если же в базе лежат просто пары “английский - русский”, то ИМХО простой обвертки к словарю, которая предоставляет интерфейс а-ля gettext, будет достаточно.
Офлайн