[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Linux internationalization page



> А про симлинки и алиасы он просто не знает.


 Кстати, я тут нарыл весьма тонкий момент в POSIX
и locale... Если строго следовать POSIX, то ЛЮБЫЕ
Aliases нарушают стандарт.

 Дело в том, что setlocale(3) определена так :

char * setlocale(int category, const char *locale)

 То есть, функция ВОЗВРАЩАЕТ указатель на string.

 Теперь предположим, что у нас работает Alias.
(код навскидку)

================
#include <stdio.h>
#include <locale.h>
#include <string.h>

main () {
char * reqlcname="ru_RU.KOI8-R";
char * gotlcname;

gotlcname=setlocale(LC_CTYPE, reqlcname);

if ( ! strcmp(gotlcname, reqlcname))
   printf("We can't set REQUIRED locale !\n");
}
=========

 То есть, если имя locale пропушено через locale.alias или
даже через symlink, у нас есть полное право считать что
setlocale() не сработала. Других способов определить,
установилась ли locale *просто нет*, потому что, если мы
запросим действительно НЕСУЩЕСТВУЮЩУЮ locale :

 setlocale(LC_CTYPE, "un_KNOWN.Locale");

 мы по стандарту POSIX должны получить указатель на "C" !


--
-=AV=-