特定のユニットテストに合格するには、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は不明です)。
- ファイル編集
/etc/locale.gen
、 - 行を追加
cs_CZ ISO-8859-2
する sudo locale-gen
ロケールファイルを作成するには実行してください。
その後はstd::locale("cs_CZ.ISO8859-2")
うまくいきます。
答え2
Ubuntuが調整されましたlocale-gen
便利です。作成したいロケール名で呼び出します。
locale-gen cs_CZ.ISO8859-2