回答:
locale-genを参照してください:
locale-gen --purge en_US.UTF-8
そして
echo -e 'LANG="en_US.UTF-8"\nLANGUAGE="en_US:en"\n' > /etc/default/locale
locale-gen --purge en_GB.UTF-8
クリーンインストールで実行すると、この予期しない出力が得Generating locales (this might take a while)... en_US.UTF-8... done Generation complete.
られます。dpkg-reconfigurelocalesで非対話的に行うようにロケールのリストを設定する方法はありますか?
上記の答えを得ることができませんでした。代わりに、この方法を使用します(Dockerfilesの場合):
# Configure timezone and locale
echo "Europe/Oslo" > /etc/timezone && \
dpkg-reconfigure -f noninteractive tzdata && \
sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \
sed -i -e 's/# nb_NO.UTF-8 UTF-8/nb_NO.UTF-8 UTF-8/' /etc/locale.gen && \
echo 'LANG="nb_NO.UTF-8"'>/etc/default/locale && \
dpkg-reconfigure --frontend=noninteractive locales && \
update-locale LANG=nb_NO.UTF-8
en_GB.UTF-8
CircleCIでロケールを設定する必要がありました-これが機能する最良の答えでした。このコメントが原因で、Googleが、私が抱えていた問題を検索しようとすると、関連性があると表示されることを期待しています。
スクリプト内から非対話形式でタイムゾーンとロケールを再構成するには、ここで私のために働くものがあります(Debianの下):
タイムゾーンを設定するために、最初に「/ usr / share / zoneinfo」ディレクトリの下の適切なzoneinfoファイルへのソフトリンクとして「/ etc / localtime」を作成します。次に、dpkg-reconfigureコマンドを実行すると、すべてが配置されます。したがって、たとえば、タイムゾーン「ヨーロッパ/ブリュッセル」を設定するには:
AREA='Europe'
ZONE='Brussels'
ZONEINFO_FILE='/usr/share/zoneinfo/'"${AREA}"'/'"${ZONE}"
ln --force --symbolic "${ZONEINFO_FILE}" '/etc/localtime'
dpkg-reconfigure --frontend=noninteractive tzdata
(AREAは '/ usr / share / info'の下のサブディレクトリであり、ZONEはAREAサブディレクトリの下のファイルであることに注意してください)。
ロケールを構成するために、最初にsedスクリプトを実行し、 '/ usr / share / i18n / SUPPORTED'ファイルの内容に基づいて、 '/ etc / locale.gen'ファイルの新しいコピーを作成します。入力ファイルのすべての行がコピーされますが、システムで使用できるようにする言語のUTF-8ロケールのエントリ(英語、オランダ語、フランス語、およびドイツ語):
sed --regexp-extended --expression='
1 {
i\
# This file lists locales that you wish to have built. You can find a list\
# of valid supported locales at /usr/share/i18n/SUPPORTED, and you can add\
# user defined locales to /usr/local/share/i18n/SUPPORTED. If you change\
# this file, you need to rerun locale-gen.\
\
}
/^(en|nl|fr|de)(_[[:upper:]]+)?(\.UTF-8)?(@[^[:space:]]+)?[[:space:]]+UTF-8$/! s/^/# /
' /usr/share/i18n/SUPPORTED > /etc/locale.gen
次に、debconfデータベースのデフォルトの環境ロケールを、たとえば英国英語に設定します。
debconf-set-selections <<< 'locales locales/default_environment_locale select en_GB.UTF-8'
その後、既存の「/ etc / default / locale」ファイルを削除し(古い内容が新しい設定に干渉しないようにするため)、dpkg-reconfigureコマンドを実行して、sedスクリプトが選択したすべてのロケールを生成します、および選択したデフォルトの環境ロケールに「LANG」変数を設定するエントリのみを含む新しい「/ etc / default / locale」ファイルを作成するには、次のようにします。
rm --force --verbose /etc/default/locale
dpkg-reconfigure --frontend=noninteractive locales
次に、要件に応じて、いくつかのupdate-localeコマンドを実行して、たとえば値のフォーマットに影響する変数をオーバーライドし、それらを別のロケール(アイルランド語など)に設定します。
update-locale LC_NUMERIC='en_IE.UTF-8'
update-locale LC_TIME='en_IE.UTF-8'
update-locale LC_MONETARY='en_IE.UTF-8'
update-locale LC_PAPER='en_IE.UTF-8'
update-locale LC_NAME='en_IE.UTF-8'
update-locale LC_ADDRESS='en_IE.UTF-8'
update-locale LC_TELEPHONE='en_IE.UTF-8'
update-locale LC_MEASUREMENT='en_IE.UTF-8'
update-locale LC_IDENTIFICATION='en_IE.UTF-8'
(update-localeコマンドの1回の呼び出しでこれらのパラメーターをすべて指定することもできましたが、どうやらエントリを '/ etc / default / locale'ファイルに書き込む順序は予測できません。それらは常に同じ順序であることが好ましいため、1つずつ生成します。)
最後に、最後にもう一度update-localeコマンドを実行して、LANGUAGE変数(つまり、翻訳可能なテキストメッセージを表示する言語のリスト)を設定することができます。
update-locale LANGUAGE='en_GB:en_US:en'
これらすべてをまとめてbashスクリプトに入れると、スクリプトを簡単に実行するだけでロケール設定を簡単に再構成できます。これにより、ユーザーの操作は不要になります。
ただし、私の経験では、システムを2回再起動するまで(少なくともDebian Jessie Xfceで)新しい設定は完全にアクティブになりません。最初の再起動後、ログインマネージャーは新しい設定を受け入れますが、ログイン後、ユーザーセッションは引き続き古い設定を使用します。その後、2回目の再起動後、ユーザーセッションにも新しい設定が適用されます。
@EirikWの回答のすばらしい成果に基づいています。に固有Dockerfile
:
ENV LANG=en_GB.UTF-8
RUN apt-get install -y locales && \
sed -i -e "s/# $LANG.*/$LANG.UTF-8 UTF-8/" /etc/locale.gen && \
dpkg-reconfigure --frontend=noninteractive locales && \
update-locale LANG=$LANG
私にとっては、追加の3つのENV-Varを設定する必要がありました。
# - Set the locale + timezone --------------------------------------------------
RUN echo "Europe/Vienna" > /etc/timezone && \
dpkg-reconfigure -f noninteractive tzdata && \
sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \
sed -i -e 's/# de_AT.UTF-8 UTF-8/de_AT.UTF-8 UTF-8/' /etc/locale.gen && \
echo 'LANG="de_AT.UTF-8"'>/etc/default/locale && \
dpkg-reconfigure --frontend=noninteractive locales && \
update-locale LANG=de_AT.UTF-8
ENV LANG de_AT.UTF-8
ENV LANGUAGE de_AT.UTF-8
ENV LC_ALL de_AT.UTF-8
しかし、彼の答えをくれたErikWsに感謝します:(https://serverfault.com/a/689947)
File "/usr/share/apt-listchanges/ALChacks.py", line 32, in <module> sys.stderr.write(_("Can't set locale; make sure $LC_* and $LANG are correct!\n"))
ます