[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=-