web-dev-qa-db-ja.com

Debianでロケールをインストール/変更する方法は?

ユーザーインターフェイスがオランダ語であるWebアプリケーションを作成しました。システムの日付と時刻のルーチンを使用して、アプリケーションで日付文字列をフォーマットします。ただし、システムがフォーマットする日付文字列は英語ですが、オランダ語で必要なため、システムのロケールを設定する必要があります。 Debianではどうすればよいですか?設定してみましたLC_ALL=nl_NLしかし、効果がないようです:

$ date
Sat Aug 15 14:31:31 UTC 2009
$ LC_ALL=nl_NL date
Sat Aug 15 14:31:36 UTC 2009

私のUbuntuデスクトップシステムでLC_ALLを設定すると問題なく動作することを覚えています。これを機能させるために追加のパッケージをインストールする必要がありますか、それとも完全に間違っていますか?

67
Hongli Lai

/etc/default/localeを編集して、内容を次のように設定します。

LANG="nl_NL.UTF-8"

以下を使用して、現在生成しているロケールを確認できます。

# locale -a

/etc/locale.genを編集し、有効にするロケールの行のコメントを外すと、さらに生成できます。次に、次のコマンドを実行して生成できます。

# locale-gen

サポートされているロケールのリストは/usr/share/i18n/SUPPORTEDにあります

Debian wiki で利用可能な詳細情報があります。

77
David Pashley

localesパッケージをインストールする必要があるかもしれません。これにより、生成するロケールが尋ねられます。すでにインストールされている場合は、dpkg-reconfigure localesを使用すると、より多くのロケールを生成できます。

68
pgs

他のほとんどの場合と同様に、ここでの回答は不完全です。いくつかの場所から情報をつなぎ合わせた後、(1)必要なロケールが利用可能であることを確認し(利用できない場合は生成し)、(2)ロケール関連の環境変数を目的のロケールに設定しました。

私の場合、私はDockerコンテナにen_US.UTF-8をプログラムで(つまり非インタラクティブに)インストールする必要がありました。 ffは私が必要とするものを達成しましたが、インタラクティブなシェルでうまく機能するはずです。

apt-get update

# Install locales package
apt-get install -y locales

# Uncomment en_US.UTF-8 for inclusion in generation
sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen

# Generate locale
locale-gen

# Export env vars
echo "export LC_ALL=en_US.UTF-8" >> ~/.bashrc
echo "export LANG=en_US.UTF-8" >> ~/.bashrc
echo "export LANGUAGE=en_US.UTF-8" >> ~/.bashrc

同じシェルで、環境変数をすぐに有効にするには、source ~/.bashrcを実行する必要があります。 localeを呼び出すことにより、ロケールが正しく構成されていることを確認できます。

LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8

この件に関して多くのQ&Aエントリがありましたが、実際に役立ったのはほんのわずかです。クレジットの期日があるクレジット:

17
Czar

次のようにインストールされたLXCコンテナでは、これらの回答はどれもうまくいきませんでした。

_lxc-create -n sse-master -t download -n sse-master -- \
    -d debian -r jessie --Arch i386
_

私は常に_locale-gen_から次の出力を取得しました。つまり、ロケールを生成していません(リストされていない):

_$ Sudo locale-gen
Generating locales (this might take a while)...
Generation complete.
_

_dpkg-reconfigure locales_を実行して一部のロケールを選択しても、期待どおりに_/etc/locale.gen_が更新されませんでした。

ただし、そのファイルを手動で変更し、必要なロケールのコメントを外すと、_locale-gen_が正常に機能し始めました。

_$ Sudo locale-gen
Generating locales (this might take a while)...
  en_GB.UTF-8... done
  en_US.UTF-8... done
Generation complete.
_

このように手動でロケールを生成することもできました:

_Sudo localedef -i en_US -f UTF-8 en_US.UTF-8
Sudo localedef -i en_GB -f UTF-8 en_GB.UTF-8
_

しかし、これは恒久的な解決策ではありませんでした:_locale-gen_オプションなしで_--keep-existing_を実行すると、そのような手動で生成されたすべてのロケール、つまり_/etc/locale.gen_にリストされていない(コメントされていない)すべてのロケールが削除されます。

6
qris

Webアプリケーションの場合、システムのデフォルトを要求するよりも、プログラムの内部(-===-)でsetlocale()insideを使用する方が良い場合があります。ロケールは外部で適切に設定されます。それほど緩くないのはそのように終わります。

3
SamB

私と同じように、Ubuntu 14.04 LTSで/etc/locale.genファイルがない場合は、/var/lib/locales/supported.d/localに新しいロケールを追加して、次のコマンドを実行できます。

Sudo dpkg-reconfigure locales

この方法でフランス語(たとえば)ロケールを追加することもできます(/var/lib/locales/supported.d/localを編集する代わりに):

Sudo locale-gen fr_FR fr_FR.UTF-8

ISO-8859-1ロケールのUTF-8およびfr_FRコードセットを追加および生成し、最後に次のように入力します。

Sudo dpkg-reconfigure locales

仕事を終える

1
SebMa

ただし、最初に必要な言語パックをインストールしておく必要があります。私のドイツ語ベースのVPSでは、プリインストールされた英語の言語パックはありませんでした。したがって、まず、それがインストールされていることを確認します。

aptitude install language-pack-en
1
valentt