[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