web-dev-qa-db-ja.com

loadlocale.cのアサーションを修正する正しい方法は何ですか?

最近、Ubuntuを18.04に更新しました。この後、コマンドldの発行は常に次のアサーションで失敗しました:

loadlocale.c:129: _nl_intern_locale_data: Assertion `cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' failed.

私はこの問題をグーグル検索しましたが、これはよく知られている問題のようです。私が読んだすべてのソリューションは、次のコマンドを使用してこれを修正することを提案しました:

export LC_ALL=C

たとえば this one を参照してください。しかし、そうすると、私の母国語のコメントのフォントがVIMなどで壊れます。

したがって、このソリューションは私には適していません。この問題を修正する他の方法はありますか?

9
Alex Hoppus

Ubuntu 14でこの問題が発生しましたが、次のように解決しました。

まず、/etc/locale.genを編集して、必要なロケールを追加します。

ロケール名のutf8が小文字であることを確認してください。 UTF-8

だから私は:

en_US.utf8
ru_RU.utf8

Rootとして実行します。

rm -f /usr/lib/locale/locale-archive
locale-gen --no-archive
locale-gen --no-archive en_US.utf8
locale-gen --no-archive ru_RU.utf8

--no-archiveフラグは重要です。

次に、~/.bash_profile~/.bashrcなどのスタートアップファイルで、LANGおよび関連する変数を小文字のutf8フォームに設定します。正しいフォームについては、/usr/lib/localeのディレクトリを参照してください。

1
Rafael Kitover