Найти - Пользователи
Полная версия: интернационализация программы
Начало » Python для экспертов » интернационализация программы
1 2
umup
интересует кто какими методами пользуется для создания программ с легко локализируемым интерфейсом

Пока остановился на таком методе - весь вывод строк проходит через одну функцию 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. При закрытии программы можно записывать все словари, таким образом при изменении в тексте программы будут автоматически добавлятся новые фразы.
Александр Кошелев
umup
интересует кто какими методами пользуется для создания легко программ с легко локализируемым интерфейсом

Пока остановился на таком методе - весь вывод строк проходит через одну функцию translate(“фраза”), которая возвращает переведенную фразу.
да. примерно по такому принципу и работает бородатый gnu gettext, которым пользуется ОS сообщество. соответсвующий биндинг есть в стандартной библиотеке питона.
umup
да уж, слишком заморочено и много ненужного
остаюсь пока на XML и словаре
bialix
заморочено? ну уж нет, не согласен.
я конечно понимаю, что свой собственный велосипед ближе к телу, но все же…
OlDer
umup
да уж, слишком заморочено и много ненужного
Замороченно как раз в меру. А ненужное использовать не нужно.
Хотя, конечно, изобретение велосипедов - очень увлекательное занятие (знаю по себе) ;-)
umup
Вот небольшой модулек для перевода фраз. Написал так как требуется перевод динамически формируемых фраз в процессе работы программы. Новые неизвестные слова дописываются в tran_dict, перед завершением программы словарь можно записать с помощью tran_dict_write в xml файл, в редакторе дописать перевод нужных слов. Читается словарь функцией tran_dict_load (можно читать несколько разных файлов, словари суммируются). Сам перевод осуществляется функцией tran(word), если не находит перевода, возвращает входное слово и включает его в словарь. tran_lng_def задает использованный по умолчанию язык, tran_lng_to - на какой делается перевод.
pythonwin
bialix, OlDer можно ли сделать интернационалицию программы, чтобы перевод хранился в БД и как это можно сделать?
bialix
pythonwin
bialix, OlDer можно ли сделать интернационалицию программы, чтобы перевод хранился в БД и как это можно сделать?
what do you mean ;-) ?

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

Если же в базе лежат просто пары “английский - русский”, то ИМХО простой обвертки к словарю, которая предоставляет интерфейс а-ля gettext, будет достаточно.
pythonwin
bialix
Если же в базе лежат просто пары “английский - русский”, то ИМХО простой обвертки к словарю, которая предоставляет интерфейс а-ля gettext, будет достаточно.
можно более подробно?
если можно с ссылками и примерами :)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB