[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Локализация X-овых приложений
Aleksey Novodvorsky wrote:
>
> On 01-Dec-1999 Alexey Kizilov wrote:
> > Aleksey Novodvorsky wrote:
> >>
> >> On 30-Nov-1999 Alexey Kizilov wrote:
> >> > День добрый.
> >> >
> >> > Не подскажите ли ссылочку где можно почитать про корректную
> >> > локализацию (в смысле сообщений, элементов меню и т.д.) иксовых программ ?
> >> > А то существует большой проект написаный с использованием
> >> > Motif и Xt и одним gettext'ом уже просто так не обойтись...
> >> ???
> >> Коректная локализация -- локализация gettext'ом. Не вполне понятно в какой
> >> ситуации его может не хватить. В документации же к нему все расписано по
> >> шагам.
> > да, но для консольных приложений.
> Нет, консольность приложения здесь ни при чем. Все приложения gtk, qt (не 2.0!)
> локализованы gettext'ом.
Да, но они не используют Xt resources...
> >> Если можно -- объясните подробнее.
> >
> > Объясняю:
> >
> > Xt имеет такое понятие как "ресурсы", которые в настоящий момент
> > описываются в отдельном файле, а потом из них генерится .h,
> > и эти ресурсы в настоящий момент железно заносятся в код,
> > где и отдаются функции XtAppSetFallbackResources
> >
> > Вот пример этого файла ресурсов (размер этого файла ~40K,
> > но он не один):
> > ...
> > *mainWindow*searchButton.labelString: Search
> > *mainWindow*searchButton.mnemonic: S
> > *mainWindow*menuBar*search.labelString: Search...
> > *mainWindow*menuBar*search.mnemonic: S
> > *mainWindow*menuBar*replace.labelString: Replace...
> > *mainWindow*menuBar*replace.mnemonic: R
> > *mainWindow*menuBar*sr_next.labelString: Search/Replace Next
> > *mainWindow*menuBar*sr_next.mnemonic: N
> > ...
> > Это то, что относится к тем ресурсам, которые нужно локализовывать,
> > однако в этом файле ресурсов есть много чего, не относящегося
> > к локазизации. Поэтому просто так эти данные gettext'у не скормить...
> Ok. Но можно считывать эти ресурсы из файла ресурсов в app-defaults (извините,
> функцию забыл). Вы его переводите (то, что нужно переводить) и кладете русский
> вариант в <Xroot>/lib/X11/ru/app-defaults. Немецкий -- в
> <Xroot>/lib/X11/de/app-defaults и т.д. Все работает -- проверьте. А если
> перевода нет, то все берется из текста или из обычного
> места:<Xroot>/lib/X11/app-defaults.
мне нужно немного не так, необходимо чтобы все файлы были внутри
иерархии пакета а не <Xroot> или еще где.
С gettext'ом тут проблем не возникла, а вот с app-defauts сегодня
пришлось немало повозиться, ища тот самый rtfm :)
Xt, а соответственно и Motif, app-defaults файлы ищет примерно в следующей
последовательности (если установлена локаль, LC_ALL=ru_RU.KOI8-R):
1) $HOME/ru_RU/app_defaults_file
2) $HOME/ru/app_defaults_file
3) $HOME/app_defaults_file
4) <Xroot>/lib/X11/ru_RU/app-defaults
5) <Xroot>/lib/X11/ru/app-defaults
6) <Xroot>/lib/X11/app-defaults
Мне же нужно было заставить его брать app_defaults_file из
<PackageDir>/<locales_dir>/ru/app_defaults_file
Почесав репу и прочитав толстую книжку, оказалось, что
есть такая хитрая переменная среды XAPPLRESDIR, установив
которую можно вместо $HOME искать app_defaults_file начиная
от указанного в этой переменной каталога. Т.е. если эта переменная
установлена, то в описанной последовательности $HOME замещается
на $XAPPLRESDIR. Это исключает из поиска каталог $HOME, но в моем
слуаче это не так страшно.
Ну что-ж теперь пойду делать .po файлы, переводить много-много и править
исходники, вставляя вызов gettext()...
--
Alexey Kizilov
alx@solvo.spb.su