답변:
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-reconfigure locales에서 비 대화식으로 로케일 목록을 설정하는 방법에 대한 아이디어가 있습니까?
위의 답변을 얻을 수 없습니다. 대신,이 방법을 사용합니다 (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은 사람들이 내가 겪고있는 문제를 검색하려고 할 때 관련성이 있다고 표시 할 수 있습니다.
스크립트 내에서 시간대와 로케일을 비 대화식으로 재구성하려면 다음이 데비안에서 작동합니다.
시간대를 구성하기 위해 먼저 '/ 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 하위 디렉토리 아래의 파일입니다.
로케일을 구성하기 위해 먼저 '/ usr / share / i18n / SUPPORTED'파일의 내용을 기반으로 '/etc/locale.gen'파일의 새 사본을 작성 하는 sed 스크립트를 실행 합니다. 입력 파일의 모든 행이 복사되지만 시스템에서 사용할 언어 (예 : 영어, 네덜란드어, 프랑스어, 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 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 명령 을 한 번만 호출하면 이러한 모든 매개 변수를 지정할 수 있었지만, 항목이 '/ etc / default / locale'파일에 기록되는 순서는 예측할 수없는 것으로 보입니다. 항상 같은 순서를 유지하는 것을 선호하므로 하나씩 생성합니다.)
마지막으로 update-locale 명령을 마지막으로 실행하여 LANGUAGE 변수 (예 : 번역 가능한 문자 메시지를 표시 할 언어 목록)를 설정하려고합니다.
update-locale LANGUAGE='en_GB:en_US:en'
이 모든 것을 bash 스크립트에 함께 넣으면 간단한 스크립트 실행으로 로케일 설정을 쉽게 재구성 할 수 있으며, 이는 더 이상의 사용자 상호 작용이 필요하지 않습니다.
그러나 필자의 경험으로는 시스템을 두 번 재부팅 한 후 (적어도 Debian Jessie Xfce에서) 새 설정이 완전히 활성화되지 않습니다. 처음 다시 부팅 한 후 로그인 관리자는 새 설정을 그대로 유지하지만 로그인 후에도 사용자 세션은 이전 설정을 계속 사용합니다. 그런 다음 두 번째 재부팅 후 사용자 세션에서도 새로운 설정이 적용됩니다.
@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-Vars를 설정해야했습니다.
# - 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"))
...