Re: [gnome-cyr] GNOME2
- From: Serge Pavlovsky <pal re com ua>
- To: Serge Pavlovsky <pal re com ua>
- Cc: gnome-cyr gnome org
- Subject: Re: [gnome-cyr] GNOME2
- Date: 29 Jan 2002 09:11:37 +0200
я тут подумал и решил для ускорения процесса исправления сделать патч.
это не патч, а пример, но идея ясна
можно, в принципе, просто NULL заменить на "", но на случай, что
gtk_set_locale зависит от текущих установок, это можно сделать примерно
так: заменить
ctype = setlocale (LC_CTYPE, NULL);
на
char * ctype_tmp = g_strdup ( setlocale (LC_CTYPE, "") );
ctype = setlocale (LC_CTYPE, NULL);
setlocale (LC_CTYPE, ctype_tmp);
g_free ( ctype_tmp );
On Втр, 2002-01-29 at 08:58, Serge Pavlovsky wrote:
> On Пнд, 2002-01-28 at 13:51, Dmitry G. Mastrukov Дмитрий Геннадьевич
> Мастрюков wrote:
> > В Пнд, 28.01.2002, в 12:20, Vlad Harchev написал:
> > > On 28 Jan 2002, Dmitry G. Mastrukov Дмитрий Геннадьевич Мастрюков wrote:
> > >
> > > Привет всем!
> > >
> > > > В Пнд, 28.01.2002, в 02:29, Grumegargler написал:
> > > > > On Сбт, 2002-01-26 at 16:51, Dmitry G. Mastrukov Дмитрий Геннадьевич
> > > > > Мастрюков wrote:
> > > > > > В Птн, 25.01.2002, в 22:57, Dmitry G. Mastrukov Дмитрий Геннадьевич
> > > > > > Мастрюков написал:
> > > > > > > В Птн, 25.01.2002, в 13:32, Timur I. Bakeyev написал:
> > > > > > > > On Fri, Jan 25, 2002 at 01:39:14PM +0300, Valek Filippov wrote:
> > > > > > > >
> > > > > > > > > > IMHO, это они ламернулись :) По-идее, LC_ALL "нэ нада" :)
> > > > > > > > > Может пнёшь багрепортом?
> > > > > > > >
> > > > > > > > Ну, проявляется не у меня - трудно описать проблему, которую не видел... Дима, может
> > > > > > > > ты пнешь :)?
> > > > > > > >
> > > > > > > Вот чего я обнаружил. В libgnomeui в файле libgnomeui/gnome-ui-init.c в
> > > > > > > функции libgnomeui_pre_args_parse есть такой кусок
> > > > > > >
> > > > > > > --- код
> > > > > > >
> > > > > > > /* Begin hack to propogate an en_US locale into Gtk+ if
> > > > > > > LC_CTYPE=C, so that non-ASCII
> > > > > > > characters will display for as many people as possible.
> > > > > > > Related to bug #1979 */
> > > > > > > ctype = setlocale (LC_CTYPE, NULL);
> > > > > > >
> > > > > > > if (strcmp (ctype, "C") == 0) {
> > > > > > > old_ctype = g_strdup (g_getenv ("LC_CTYPE"));
> > > > > > > gnome_setenv ("LC_CTYPE", "en_US", TRUE);
> > > > > > > ctype_set = TRUE;
> > > > > > > } else {
> > > > > > > ctype_set = FALSE;
> > > > > > > }
> > > > > > >
> > > > > > > gsl=gtk_set_locale ();
> > > > > > > g_print("Set locale: %s\n", gsl);
> > > > > > >
> > > > > > > if (ctype_set) {
> > > > > > > if (old_ctype) {
> > > > > > > gnome_setenv ("LC_CTYPE", old_ctype, TRUE);
> > > > > > > g_free (old_ctype);
> > > > > > > } else {
> > > > > > > gnome_unsetenv ("LC_CTYPE");
> > > > > > > }
> > > > > > > }
> > > > > > > /* End hack */
> > > > > > >
> > > > > > > --- код
> > > > > > >
> > > > > > > Здесь все прибамбасы, связанные с переменной gsl - мои, я хотел
> > > > > > > проверить, что получается при вызове gtk_set_locale(). Оказалось, локаль
> > > > > > > устанавливается в C. Других вызовов gtk_set_locale() в libgnomeui нет.
> > > > > > > Чего-то тут не всё гладко. Хак он всегда хак.
> > > > > > > Хорошо бы это дело Влад посмотрел.
> > > > > > >
> > > > > > Похоже, баг в вызове
> > > > > > ctype = setlocale (LC_CTYPE, NULL);
> > > > > это строчка ничего не делает с локалью, она используется для получения
> > > > > текущей локали для категории LC_CTYPE и далее в коде видно, зачем.
> > > > >
> > > > На моей машине с локалью ru_RU.KOI8-R после этого вызова переменная
> > >
> > > И до вызова скорее всего тоже С, да?
> > >
> > До вызова она вообще неинициализирована, по-моему.
> >
> > > > ctype имеет значение C, что автоматически вызывает исполнение хака и
> > > > подставление локали en_US. Если уж так хочется хака, то снечала надо
> > > > проинициализировать локаль с либо с помощью gtk_set_locale(), либо
> > > > заменив NULL на "".
> > >
> > > Мне тоже кажется, что до первой строчки должен быть вызов
> > > setlocale(LC_ALL,"") - чтобы локаль настроилась в соответствии с пер-ными
> > > окружения. Тогда хак будет иметь смысл.
> > Функция gtk_set_locale делает всё это, плюс ещё X-овые "локальные"
> > настройки. Почему она стоит в середине хака - непонятно.
> >
> > > Ведь до первого вызова
> > > setlocale(LC_ALL,"") все категории локализации соответствуют С локали.
> > >
> > Судя по манам - да.
> >
> > Похоже, баг можно постить с двумя даже решениями
> > 1. Заменить NULL на "" в setlocale(LC_CTYPE, NULL) - проверено мной,
> > работает, предупреждения исчезают, локаль становится корректной.
> > 2. Поставить вызов gtk_set_locale() перед началом хака - чисто
> > умозрительная возможность, непроверена.
> думаю, это будет аналогично 1)
> но, если 1) помогает.
> это значит, что до вызова этого кода локаль нигде не устанавливалась.
> это действительно баг, так как переменная LC_CTYPE имеет приоритет выше,
> чем LANG и категория LC_CTYPE будет установлена в en_US, если у
> пользователя используется LANG и не используется ни LC_CTYPE ни LC_ALL.
> надо запостить.
>
> на фоне этого неясны жалобы на "Оказывается, вызов
> setlocale идёт с категорией LC_ALL" :)
>
>
> >
> > Дмитрий
> >
> > ЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЮ·┴·Щл╚≥╗╔┼x%┼к`·┴·Щл╚Ч Х≥ОХ╝m╤÷ЪЧf╒≈Ь'╒gЪ╒╦?≥╗╔≥╘Ъ√+-┼wХЧ Х≥Оэ
> >
>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]