[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Linux internationalization page
Вот-вот! Напишите Saratxaga и об этом. Объясняю еще раз: меня он не
слушает давно, на него может пожействовать только "мнение
общественности". И дело не в том, где будет лучше написано. В первую
очередь он должен заменить свои locales.
Alexander Voropay wrote:
>
> > А про симлинки и алиасы он просто не знает.
>
> Кстати, я тут буквально вчера нарыл весьма тонкий
> момент в POSIX и locale... Если строго следовать POSIX,
> то ЛЮБЫЕ Aliases нарушают стандарт.
>
> Дело в том, что setlocale(3) определена так :
> char * setlocale(int category, const char *locale)
>
> То есть, функция ВОЗВРАЩАЕТ указатель на string.
>
> Теперь предположим, что у нас работает Alias
> ru_RU.KOI8-R ---> ru_SU
>
> ================
> ##include <stdio.h>
> #include <locale.h>
> #include <string.h>
>
> main () {
> char * reqlcname="ru_RU.KOI8-R";
> char * gotlcname;
>
> printf("We req = %s\n",reqlcname);
> gotlcname=setlocale(LC_CTYPE, reqlcname);
> printf("We got = %s\n",gotlcname);
>
> if ( strcmp(gotlcname, reqlcname))
> printf("We can't set REQUIRED locale !\n");
> else
> printf("Great! All OK.\n");
> }
> =========
>
> То есть, если имя locale пропушено через locale.alias или
> даже через symlink, у нас есть полное право считать что
> setlocale() не сработала. Других способов определить,
> сработала ли установка locale *просто нет*, потому что, если мы
> запросим действительно НЕСУЩЕСТВУЮЩУЮ locale :
> setlocale(LC_CTYPE, "un_KNOWN.Locale");
> мы по стандарту POSIX должны получить указатель на "C" !
>
> (Представляю, как кисло будет Ulrich-у Drepper-у ;-)
>
> Отсюда вытекает правило : если вы хотите точно следовать
> POSIX, используйте ПОЛНОЕ длинное имя locale :
> language_TERRITORY.Codeset и сделайте чтобы данный
> "объект локализации" РЕАЛЬНО существовал.
>
> --
> -=AV=-