Como instalo a localidade cs_CZ.ISO8859-2 no Ubuntu 12.04

3

Eu preciso que a localidade cs_CZ.ISO8859-2 exista no Ubuntu 12.04 para que um teste unitário específico possa ser aprovado. O teste faz a seguinte chamada:

std::locale("cs_CZ.ISO8859-2")

Na minha instalação do OS X Lion, esta localidade existe, portanto a chamada para std :: locale deve funcionar:

$ locale -a | grep cs
cs_CZ
cs_CZ.ISO8859-2
cs_CZ.UTF-8
$

No entanto, na minha instalação do Ubuntu 12.04, há apenas uma variante UTF8 e nenhuma versão ISO8859-2 da localidade cs_CZ, apesar de ter instalado language-pack-cs :

$ dpkg -l | grep language-pack-cs
ii  language-pack-cs                       1:12.04+20120417                        translation updates for language Czech
ii  language-pack-cs-base                  1:12.04+20120417                        translations for language Czech
$ locale -a | grep cs_
cs_CZ.utf8
$

O teste da unidade falha nesta máquina. Executar o teste de unidade sob strace mostra que ele realmente está procurando a variante ISO8859-2 e não a encontra em nenhum lugar:

open("/usr/lib/locale/cs_CZ.ISO8859-2/LC_CTYPE", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/cs_CZ.iso88592/LC_CTYPE", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/cs_CZ/LC_CTYPE", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/cs.ISO8859-2/LC_CTYPE", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/cs.iso88592/LC_CTYPE", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/cs/LC_CTYPE", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/cs_CZ.ISO8859-2/LC_CTYPE", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/cs_CZ.iso88592/LC_CTYPE", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/cs_CZ/LC_CTYPE", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/cs.ISO8859-2/LC_CTYPE", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/cs.iso88592/LC_CTYPE", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/cs/LC_CTYPE", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)

Não sei absolutamente nada sobre locales, i18n, etc. No entanto, gostaria de passar este teste e alterar o teste não é uma opção. Se alguém puder oferecer algum insight sobre como fazer esta localidade existir no Ubuntu 12.04, eu agradeceria muito.

    
por acm 15.05.2012 / 17:20

2 respostas

2

As etapas abaixo funcionam no Arch Linux (não tenho certeza sobre o Ubuntu).

  1. Editar o arquivo /etc/locale.gen ,
  2. adicione a linha cs_CZ ISO-8859-2 ,
  3. execute sudo locale-gen para gerar arquivos de localidade.

Depois disso std::locale("cs_CZ.ISO8859-2") deve funcionar bem.

    
por 15.05.2012 / 18:04
1

O Ubuntu ajustou o utilitário locale-gen . Chame-o com os nomes das localidades que você deseja gerar.

locale-gen cs_CZ.ISO8859-2
    
por 16.05.2012 / 01:28