오류가 발생하면 로캘이 잘못된 언어를 설정하는 것처럼 나타나는 경우가 있습니다. 로케일을 전환하는 것 외에 Google에서 해결 방법을 찾을 수 있도록 오류 메시지를 영어로 표시하는 다른 방법이 있습니까?
답변1
수정된 로케일 설정으로 유틸리티(프로그램)를 실행하려면:
$ env LC_ALL=C somecommand
이 env
유틸리티는 실행하는 유틸리티의 환경을 수정하며, 환경 변수를 (또는 ) LC_ALL
로 설정하면 POSIX 로케일에서 현지화된 오류 메시지가 표시됩니다. 정렬, 날짜 및 시간 형식, 숫자 형식에도 영향을 미칠 수 있습니다.C
POSIX
유틸리티 외부 환경(셸 또는 전체 시스템)은 이 임시 로케일 전환의 영향을 받지 않습니다.
locale(1)
시스템 설명서( )를 읽어 보십시오 man 1 locale
.
답변2
로케일 설정은 대부분의 프로그램이 사용할 언어를 결정하는 방법입니다. 일부 프로그램에는 설정이 다르지만 메시지 언어를 선택하는 가장 일반적인 방법은 지역 설정을 이용하는 것입니다. 여러 애플리케이션(또는 일련의 관련 애플리케이션)에서 작업하는 다른 방법은 없습니다.
그러나 시스템 설정을 지정할 필요는 없습니다. 다른 설정으로 프로그램을 한 번만 실행하십시오. 메시지의 로케일은 다음과 같습니다 LC_MESSAGES
(참조:로케일을 무엇으로 설정해야 하나요? 이것이 어떤 영향을 미칠까요?)이므로 환경 변수를 설정하여 설정할 수 있습니다 LC_MESSAGES
. C
모든 시스템은 번역되지 않은 기본 메시지(보통 영어)를 나타내는 특수 값을 지원합니다.
셸에서 다음 명령은 myprogram
환경 변수가 영어 메시지와 함께 실행 되도록 LC_MESSAGES
설정된 상태 에서 실행 되며 기타 로캘 설정은 변경되지 않은 상태로 유지됩니다(그래서 프로그램은 여전히 선호하는 문자 집합, 정렬 순서, 날짜 형식 등을 사용합니다).C
myprogram
LC_MESSAGES=C myprogram
프로그램이 실행되면 동일한 셸에서 실행되는 다른 프로그램은 일반적인 로케일을 사용하며 변경 사항은 유지되지 않습니다. 터미널 내에서 변경 사항을 유지하려면 다음을 실행하세요.
export LC_MESSAGES=C
이는 다른 터미널에서 시작된 프로그램에는 영향을 미치지 않습니다.
답변3
프로그램을 실행하기 전에 다음을 수행하십시오.
export LANGUAGE=en_US.UTF-8
export LANG=en_US.UTF-8
프로그램이 /etc/init.d의 스크립트에 의해 실행되는 경우 해당 프로그램을 스크립트에 넣어야 합니다.
답변4
"로케일 전환 이외" - 짧은 답변: 아니요.
긴 답변:
응용 프로그램 개발자가 로케일에 관계없이 모든 오류 메시지를 영어로 인쇄하기로 결정했다면 확실히 그렇게 쉽게 할 수 있을 것입니다. 그들이 해야 할 일은 gettext의 번역 기능을 통해 이러한 문자열을 보내지 않는 것뿐입니다.
응용 프로그램 개발자가 오류 메시지에 대해 다른 로캘을 지정하기 위해 다른 환경 변수(또는 다른 수단)를 도입하기로 결정한 경우 비교적 쉽게 이 작업을 수행할 수 있습니다. 기능 newlocale()
이 *_l()
유용할 수 있습니다. 하지만 저는 이런 앱을 본 적이 없으며 개발자가 귀찮게 할 이유가 없다고 생각합니다.
응용 프로그램은 일반적으로 환경 변수를 기반으로 로케일을 초기화한 다음 필요한 경우 사용 중인 로케일을 기반으로 문자열을 변환합니다.
오류 메시지를 번역하는 정기적인 국제화 애플리케이션이 있다고 가정하면(제가 생각하기에 이것이 여러분이 우려하는 것이라고 생각합니다) 표준 출력으로 이동하는 문자열에 대해 하나의 로케일을 사용하고 문자열을 처리하기 위해 다른 환경을 사용하도록 속일 수 있는 방법은 없습니다. 출력됩니다. 표준 오류에 나타납니다. 이는 LD_PRELOAD 라이브러리와 같은 트릭으로 "해킹"될 수 없습니다. 이유는 간단합니다. 번역된 문자열을 구성할 때 문자열이 동시에 어디에 표시되는지(stdout, stderr, 로그 파일, 그래픽 인터페이스, 유선을 통해 전송 등... 어쩌면 그 이상) 아직 알려지지 않았습니다. ). 그러나 처리할 수 있으려면 문자열을 번역된 형식으로 생성해야 합니다.
Google을 통해 솔루션을 검색할 때 영어가 아닌 로케일에서 앱을 사용하려는 경우 다음 제안 사항을 따르세요.
오류 메시지에서 고정된 문자열(예: 대체되지 않은 숫자 또는 단어)에서 발생할 수 있는 큰 하위 문자열을 찾아보세요. /usr/share/locale/(yourlocale)/LC_MESSAGES 아래에서 이 문자열을 실행하여 해당 문자열이 어떤 파일에서 왔는지 찾아보세요. 일치하는 항목이 없으면 7비트 ASCII(영어) 문자만 포함하는 하위 문자열로 반복합니다. *.mo/*.gmo 파일은 모든 인코딩에 있을 수 있기 때문입니다(최신 소프트웨어에서는 일반적으로 UTF-8이지만). 오류 메시지가 발생한 파일을 찾으면 msgunfmt
파일을 실행하여 원래 영어 문자열을 찾으십시오.
업데이트: 귀하가 AUR 및 makepkg에 문제가 있다고 댓글에서 언급했다는 것을 방금 깨달았습니다.
다른 사람들이 답변했듯이 영어 로케일을 사용하여 특정 프로그램을 실행하는 것은 쉽습니다. 이는 패키지 구축에 적극 권장됩니다.
그래서 제가 귀하의 질문을 오해했을 수도 있습니다. 위의 대답은 "내가 선호하는 영어가 아닌 로케일에서 응용 프로그램을 실행하는 것이 가능하지만 [동일한 프로세스]에서 오류 메시지를 영어로 인쇄할 수 있습니까?"라는 질문에 대한 대답입니다.