Во-первых, программа нигде не привязана к 7-ми битным ASCII символам, и пользуется стандатрными библиотечными функциями isalpha(), isupper(), и tolower()/toupper() не полагаясь, что Upper=Lower+0x20 и т.д. Как правило, национальные алфавиты расположены начиная с кода 128, поэтому для совместимости со старыми реализациями locale можно объявить все символы как unsigned char, например ключом компилятора (для gcc -funsigned-char) или явно.
Во-вторых, программа явно начинается с вызова setlocale(LC_ALL,"") (такая форма вызова означает, что всем категориям локализации сразу будет присвоено значение переменной окружения LANG), или подобного кода.
*ПРИМЕЧАHИЕ: Во FreeBSD можно
вылечить некоторые программы путем
* задания строки окружения: export
ENABLE_STARTUP_LOCALE=""
* тогда setlocale(LC_ALL,"")
будет вызываться автоматически при
старте
* программ (без их перекомпиляции).
* В Linux libc такого нет (пока?)
и по умолчанию включено "C".
* Однако можно пересобрать Linux libc,
указав другое значение
* по умолчанию.
Для полной поддержки NLS весь вывод сообщений пользователю должен происходить c использованием функций NLS и должен быть создан каталог сообщений (message catalog) для данной программы (и данного языка).