Eu suspeito que "ru" não seja uma localidade válida. Experimente o comando lang=ru locale
e veja se há alguma mensagem de erro. No meu sistema, "ru" é uma localidade inválida e "ru_RU" está em iso8859-5; você precisa do ru_RU.UTF-8 para funcionar em utf-8.
$ LANG=ru locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
Para encontrar o conjunto de caracteres usado para uma localidade, você pode usar a ferramenta locale
:
$ LANG=ru_RU locale -c -k charmap collate-codeset
LC_CTYPE
charmap="ISO-8859-5"
LC_COLLATE
collate-codeset="ISO-8859-5"
Observe que as localidades são definidas em categorias. A categoria LC_COLLATE é a usada para classificação. A configuração de LC_ALL substituirá todos eles ou você pode definir um individualmente usando a variável de ambiente nomeada ou pode definir um padrão configurando LANG. A maioria das pessoas vai querer definir LANG para uso diário em vez de LC_ALL.
Na saída da ferramenta locale
, as categorias definidas com base em LC_ALL ou LANG aparecerão entre aspas, enquanto as categorias serão definidas por suas próprias variáveis (e o próprio LC_ALL, se definido, e LANG, se LC_ALL não estiver definido) vai aparecer sem aspas. Por exemplo:
$ LANG=en_US.UTF-8 LC_MESSAGES=ru_RU.UTF-8 locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
...
LC_MESSAGES=ru_RU.UTF-8
...
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=