Ubuntu 12.04にcs_CZ.ISO8859-2ロケールをインストールする方法

Ubuntu 12.04にcs_CZ.ISO8859-2ロケールをインストールする方法

特定のユニットテストに合格するには、Ubuntu 12.04にcs_CZ.ISO8859-2ロケールが必要です。テストでは、次の呼び出しを実行します。

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

OS X Lionをインストールするとロケールが存在するため、std :: localeへの呼び出しが機能する必要があります。

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

ただし、Ubuntu 12.04をインストールしてもUTF8バリアントのみがあり、cs_CZロケールのISO8859-2バージョンはありません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
$

このコンピュータでユニットテストが失敗しました。 straceで単体テストを実行すると、実際にISO8859-2バリアントを探していますが、どこにも見つからないことがわかります。

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)

私はロケール、i18nなどについて何も知りません。しかし、私はこのテストに合格したいので、テストを変更することはできません。誰かがこのロケールをUbuntu 12.04に存在させる方法についての洞察を提供できる場合は感謝します。

答え1

次のステップはArch Linux用です(Ubuntuは不明です)。

  1. ファイル編集/etc/locale.gen
  2. 行を追加cs_CZ ISO-8859-2する
  3. sudo locale-genロケールファイルを作成するには実行してください。

その後はstd::locale("cs_CZ.ISO8859-2")うまくいきます。

答え2

Ubuntuが調整されましたlocale-gen便利です。作成したいロケール名で呼び出します。

locale-gen cs_CZ.ISO8859-2

関連情報