
FreeBSD에 새로운 로케일을 만들고 싶습니다. 그냥 기존 것을 복사하면 되는 줄 알았는데, /usr/share/locale
쉽지가 않네요.
먼저, 로케일의 복사본을 만듭니다 en_US.UTF-8
.
$ sudo cp -R /usr/share/locale/en_US.UTF-8 /usr/share/locale/en_DK.UTF-8
Mosh를 사용하여 설정을 테스트하고 있으므로 표준에 따르면 en_US.UTF-8
모든 것이 정상입니다.
$ LC_ALL=en_US.UTF-8 PATH_LOCALE=/usr/share/locale mosh xyz.example.org
그러나 새로 생성된 로케일을 사용하려고 하면 en_DK.UTF-8
다음 오류가 발생합니다.
$ LC_ALL=en_DK.UTF-8 PATH_LOCALE=/usr/share/locale mosh xyz.example.org
The locale requested by LC_ALL=en_DK.UTF-8 isn't available here.
Running `locale-gen en_DK.UTF-8' may be necessary.
mosh-server needs a UTF-8 native locale to run.
Unfortunately, the local environment ([no charset variables]) specifies
the character set "US-ASCII",
The client-supplied environment (LC_ALL=en_DK.UTF-8) specifies
the character set "US-ASCII".
sh: warning: setlocale: LC_ALL: cannot change locale (en_DK.UTF-8)
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_DK.UTF-8
LC_CTYPE="en_DK.UTF-8"
LC_NUMERIC="en_DK.UTF-8"
LC_TIME="en_DK.UTF-8"
LC_COLLATE="en_DK.UTF-8"
LC_MONETARY="en_DK.UTF-8"
LC_MESSAGES="en_DK.UTF-8"
LC_PAPER="en_DK.UTF-8"
LC_NAME="en_DK.UTF-8"
LC_ADDRESS="en_DK.UTF-8"
LC_TELEPHONE="en_DK.UTF-8"
LC_MEASUREMENT="en_DK.UTF-8"
LC_IDENTIFICATION="en_DK.UTF-8"
LC_ALL=en_DK.UTF-8
Connection to xyz.example.org closed.
/usr/local/bin/mosh: Did not find mosh server startup message. (Have you installed mosh on your server?)
답변1
FreeBSD에서 Linuxism을 시도하고 있는 것 같습니다. FreeBSD에서는 다음을 사용해야 합니다.로그인 클래스
로케일에 대한 일반적인 설명이 잘 나와 있습니다.로케일을 무엇으로 설정해야 하나요? 이것이 어떤 영향을 미칠까요?.
이 답변에서 무시할 수 있는 부분은 "로케일 설치"입니다. FreeBSD는 모든 일반 로케일이 설치된 상태로 제공됩니다. 이를 확인할 수 있습니다.
locale -a
그런데 그러면 당신은아마도로케일을 수정하고 설정하려고 한다고 주장합니다. 이것이 내가 리눅스주의라고 부르는 것이다. 추가된 사람로케일실제로 무슨 일이 일어나고 있는지 이해하지 못한 채 Linux에 LC_ALL을 설정했습니다. 이것로케일변수 세트를 정의합니다 LC_*
. LC_ALL
그런 다음 그것을 덮는 데 사용하십시오!
FreeBSD에서 사용자(또는 시스템)의 로케일을 변경하는 데 선호되는 방법은 다음을 사용하는 것입니다.22.2.1.1. 로그인 클래스 방식. 여기에서 시스템 전체 기본값을 변경할 수도 있습니다.
LC_ALL은 다른 모든 LC_* 설정을 (강제로) 무시하려는 경우에만 설정해야 합니다. "로케일"을 설정한다고 생각할 수도 있지만 LC_ALL
실제로는 단지 설정하는 것 LANG
뿐입니다 LANG=en_DK.UTF-8
. 이것은 유효한 언어가 아니므로 그대로 두십시오.유니코드 CLDR 프로젝트. 자세한 내용은 다음을 확인하세요."LC_ALL=C"는 무엇을 합니까?
내 문제는 당신이 자신만의 새로운 언어를 만들고 싶어하지 않는다는 것입니다. 하지만 당신이 선택한 조합 중에서 내 것을 선택하세요추측하다시스템이 덴마크어(DK) 시스템처럼 작동하기를 원하지만 영어로 말해야 합니다. 이를 위해 LC_*
변수를 예비 콘텐츠와 혼합하고 일치시킬 수 있습니다.
예:
LANG=en_US.UTF-8
LC_CTYPE="da_DK.UTF-8"
LC_COLLATE="da_DK.UTF-8"
LC_TIME="da_DK.UTF-8"
LC_NUMERIC="da_DK.UTF-8"
LC_MONETARY="da_DK.UTF-8"
LC_MESSAGES="en_US.UTF-8"
(어떤 이유로든) 로그인 클래스를 설정하고 싶지 않은 경우에도 CLDR 정의 변수를 계속 사용해야 합니다. 이렇게 하면 가장 이식성이 뛰어난 결과를 얻을 수 있습니다.
$ LC_ALL=C LANG=en_US.UTF-8 LC_CTYPE=da_DK.UTF-8 LC_COLLATE=da_DK.UTF-8 LC_TIME=da_DK.UTF-8 LC_NUMERIC=da_DK.UTF-8 LC_MONETARY=da_DK.UTF-8 LC_MESSAGES=en_US.UTF-8 mosh xyz.example.org
/usr/local/bin/mosh: could not get canonical name for xyz.example.org: hostname nor servname provided, or not known
ssh_exchange_identification: Connection closed by remote host
/usr/local/bin/mosh: Did not find remote IP address (is SSH ProxyCommand disabled?).
$
자주 사용하려는 로케일이라면 로그인 클래스를 사용하여 설정할 수 있습니다. FreeBSD 매뉴얼 또는 내 답변을 참조하십시오.SSH에서 FreeBSD로(UTF-8)
나는 당신의 대답이 위 어딘가에 있다고 생각합니다. 그러나 귀하의 질문에 한 단어씩 대답하면 현재 FreeBSD는 13.0에 UTF-8 C 로케일을 추가합니다(커밋 r340144 참조). 추가하는 방법을 알고 싶다면새로운 로케일그럼 좀 봐봐C.UTF-8 로케일 소개
고쳐 쓰다
디렉토리는 /usr/share/locale/*
디렉토리일 뿐입니다. Q에서와 같이 그대로 복사하면 FreeBSD 11.2에서도 작동합니다. 나는 여전히 verbose LC_ALL
또는 로그인 클래스를 사용하는 것을 권장합니다. 현재 제가 생각하는 문제는"뚱뚱한 손가락".
이 디렉토리에는 기호 링크와 정의 파일이 포함되어 있습니다. 이러한 파일은 다음에 의해 생성될 수 있습니다.지역 정의그것은 대체한다mklocale 2015.
실제 정렬 순서를 변경하지 않으려면 "올바른" 정렬 순서가 있는 언어에 연결하거나 파일을 복사하면 됩니다. PATH_LOCALE=/usr/share/locale
이것이 기본값이기 때문에 암시적입니다.
test
내 시스템에서 그대로 및 에 복사했습니다 en_DK.UTF-8
. 그들은 즉시 나타납니다 locale -a
. 둘 다 예상대로 작동합니다.
$ locale -a | grep -e en_DK -e test
en_DK.UTF-8
test
$ LC_ALL=test mosh xyz.example.org
/usr/local/bin/mosh: could not get canonical name for xyz.example.org: hostname nor servname provided, or not known
ssh_exchange_identification: Connection closed by remote host
/usr/local/bin/mosh: Did not find remote IP address (is SSH ProxyCommand disabled?).
$ LC_ALL=test /bin/sh
$ locale
LANG=
LC_CTYPE="test"
LC_COLLATE="test"
LC_TIME="test"
LC_NUMERIC="test"
LC_MONETARY="test"
LC_MESSAGES="test"
LC_ALL=test
$ exit
$ LC_ALL=en_DK.UTF-8 mosh xyz.example.org
/usr/local/bin/mosh: could not get canonical name for xyz.example.org: hostname nor servname provided, or not known
ssh_exchange_identification: Connection closed by remote host
/usr/local/bin/mosh: Did not find remote IP address (is SSH ProxyCommand disabled?).
$ LC_ALL=dummy mosh xyz.example.org
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LC_ALL = "dummy",
LANG = (unset)
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LC_ALL = "dummy",
LANG = (unset)
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
/usr/local/bin/mosh: could not get canonical name for xyz.example.org: hostname nor servname provided, or not known
ssh_exchange_identification: Connection closed by remote host
/usr/local/bin/mosh: Did not find remote IP address (is SSH ProxyCommand disabled?).
$ uname -a
FreeBSD test 11.2-RELEASE FreeBSD 11.2-RELEASE #0 r335510: Fri Jun 22 04:32:14 UTC 2018 [email protected]:/usr/obj/usr/src/sys/GENERIC amd64