로캘을 생성할 때 "오류: 잘못된 항목 'en_US'"가 표시되는 이유는 무엇입니까?

로캘을 생성할 때 "오류: 잘못된 항목 'en_US'"가 표시되는 이유는 무엇입니까?

코드는 말보다 더 크게 말합니다.

root@myhost # locale-gen
Generating locales (this might take a while)...

(여기서 조금 건너뛰세요)

error: Bad entry 'en_GB '
  en_GB.UTF-8... done

(여기서 조금 건너뛰세요)

  en_SG.UTF-8... done
error: Bad entry 'en_US '
  en_US.ISO-8859-1... done
  en_US.UTF-8... done
error: Bad entry 'en_US.iso88591 '
error: Bad entry 'en_US.iso885915 '
  en_ZA.UTF-8... done

(여기서 조금 건너뛰세요)

Generation complete.

이러한 오류가 발생하는 이유와 이를 방지하는 방법은 무엇입니까?

노트:

  • 저는 Linux Mint 18.2를 사용하고 있지만 Mint 18.1과 함께 (거의?) 어느 시점부터 이런 일이 발생하기 시작했습니다. 나는 그것들이 모두 우분투 16.04를 기반으로 한다고 생각합니다.
  • ; 아래에서 이러한 "잘못된 항목"(끝에 추가 공백이 있거나 없음)이 포함된 파일을 찾지 못했습니다 /etc. 구체적으로 /etc/locale.gen.

추가 정보:

관련 정보 /etc/locale.gen:

# grep -v "#" /etc/locale.gen | sed "s/$/+/" | grep "en_"
en_GB.UTF-8 UTF-8+
en_US ISO-8859-1+
en_US.UTF-8 UTF-8+

답변1

locale-gen(잘 작성되지 않은) bash스크립트입니다. 이 버그는 다음에 의해 보고되었습니다:

is_entry_ok() {
  if [ -n "$locale" -a -n "$charset" ] ; then
    true
  else
    echo "error: Bad entry '$locale $charset'"
    false
  fi
}

따라서 여기서 질문은 $charset비어 있습니다.

생성될 로케일 목록은 /etc/locale.gen에서 가져 옵니다 /var/lib/locales/supported.d.

파일 자체에 en_US문자 세트 이름이 포함되어 있지 않을 수도 있습니다.

/etc/locale.gen그렇지 않기 때문에 en_SG.UTF-8에 파일이 있을 가능성이 높으며 /var/lib/locale/supported.d해당 파일에는 잘못된 줄이 있을 수 있습니다. 범인을 식별하면 dpkg -S해당 경로에서 해당 범인이 어떤 패키지에서 왔는지 확인할 수 있습니다(있는 경우).

답변2

편집: 이 해결 방법은 최선의 해결책은 아니지만 작동합니다.

@StephaneChazelas를 기반으로 함답변, 나는 문제가 /var/lib/locales/supported.d/mintlocale내 배포판인 Linux Mint와 관련된 파일이라는 것을 발견했습니다. 잘못 생성되었습니다. 대부분의 (전부는 아님) 줄에 charset 필드가 없습니다. 예를 들면 다음과 같습니다.

en_GB
en_GB.iso88591
en_GB.UTF-8 UTF-8

(뛰어 넘다)

en_US
en_US.iso88591
en_US.iso885915
en_US.UTF-8 UTF-8

그래서 내가 해야 할 일은 모든 것에 대한 두 번째 필드를 생성하는 것입니다. 기본적으로 제가 한 일은 다음과 같습니다.

sed -i -r '/^[a-zA-Z_]*$/d' mintlocale
sed -i -r 's/.([^. ]+)$/.\1 \1/' mintlocale
sed -i -r 's/ iso8859([0-9]+)$/ISO-8859-\1/' mintlocale

따라서 .charset 접미사가 없는 줄을 제거하고 공백 뒤에 .charset 접미사를 복사한 다음 ISO 8859 문자 집합 형식을 콘텐츠와 일치하도록 변경합니다 /usr/shared/i18n/charmaps/(그렇지 않으면 다른 오류가 발생합니다).

locale-gen결국 오류 없이 다시 실행했습니다 .

노트:문자 집합이 없는 줄을 제거하는 것에 대해 100% 확신할 수 없으므로 이에 대한 의견을 환영합니다.

관련 정보