시스템 로케일을 어떻게 사용자 정의 할 수 있습니까?


24

시스템 관리 언어 지원 텍스트에서. 표준 로케일 만 선택할 수 있지만 미세 조정하고 싶습니다. 예를 들어 Windows에서는 시간 및 날짜 형식, 측정 단위, 소수 구분 기호, 통화 등을 수동으로 사용자 정의 할 수 있습니다. 우분투에서 어떻게 할 수 있습니까?

답변:


28

이 답변은 선택적으로 기존 로케일을 기본으로 사용하여 로케일을 완전히 사용자 정의하는 방법을 보여줍니다. 이 답변에 사용될 로케일 유형이 유형입니다 i18n. 이러한 유형의 로케일은 답변 본문에 "로케일"이라는 단어가 언급 될 때 암시됩니다.

가이드 찾기

로케일을 사용자 정의해야 할 첫 번째는 로케일의 형식을 알아야합니다. 이 웹 로캘 편집기 는 다른 사람이 바로 사용할 수는 없지만 로캘의 모든 필드에 대한 포괄적 인 설명을 제공합니다. 이 가이드가 사용됩니다.

필요한 도구

로케일로 작업하는 데 필요한 유일한 도구는

  1. 텍스트 편집기. VIM은 우수하지만 모든 것이 가능합니다.
  2. 텍스트-유니 코드 변환기 당신이없는 것이 가장 기대 될 것입니다. 그래서 나는 당신에게 간단한 것을 제공 할 것입니다. 다음 하위 섹션을 읽으십시오.

디렉토리를 만들고 로케일에서 수행 할 작업과 관련된 모든 것을 저장하는 것이 좋습니다.

텍스트-유니 코드 변환기 (encodestr)

참고 : 일반적이지 않은 문자 를 사용하는 경우 아래에 작성한 스크립트에 문제가있을 수 있습니다. nass로 연결된 대체 스크립트를 살펴볼 수 있습니다 .

다음 코드를 파일에 저장하십시오. 이 파일은 시스템에서 파이썬 스크립트로 식별되며 파일이기 때문에 괜찮습니다. 이 안내서에서는 사용자가 스크립트를 호출했다고 가정합니다 encodestr.

#!/usr/bin/python

def encode(string):
    newstring = str()
    for ch in string:
        newstring += "<U%04X>" % ord(ch)
    return newstring

if __name__ == '__main__':
    import sys
    print encode(sys.argv[1])

파일을 저장 한 후 파일 실행 권한을 부여하십시오.이 기능이 유용합니다. 노틸러스를 사용하거나 터미널에서 다음 명령을 실행하여 스크립트를 저장 한 디렉토리에서 수행 할 수 있습니다.chmod +x encodestr .

이제 동일한 디렉토리에서 실행하여이 스크립트를 테스트 할 수 있습니다 ./encodestr hello. 출력이와 같아야합니다 <U0068><U0065><U006C><U006C><U006F>.

기존 로케일 수정

기존 로케일을 수정하는 것이 가장 쉬운 경우입니다. 이상적으로는 거의 모든 요구 사항에 맞는 로케일을 선택하므로 작은 수정 만하면됩니다. 이를 조정하기 위해 가이드를 사용하여 변경하려는 섹션과 변경 방법을 알 수 있습니다. 설치된 모든 로케일이에 /usr/share/i18n/locales있지만 , 안내서 에는 거의 모든 로케일이 포함되어 있습니다.

그러나 로케일을 열면 가장 먼저 눈에 띄는 것은 이상한 <UXXXX>코드 만큼 영어 단어를 읽는다는 것 입니다. 이러한 코드를 만들 수 있어야합니다.encodestr . 스크립트 입니다.

어떤 섹션을 변경해야하는지 알면 섹션에 포함 된 각 필드를 알아야합니다.

예를 들어, LC_TIME섹션에는 필드 t_fmt및 기타 여러 필드가 포함되어 있습니다. 각 필드에는 가이드 에 대한 자체 설명이 있습니다 .

어떤 필드를 수정해야하는지 알았으므로 가이드를 다시 사용 하여 필드가 어떤 값을 허용하는지 확인하십시오.

예를 들어,이 필드 t_fmt는 텍스트 및 공통 strfmt 변수를 허용합니다 .

수정하려는 필드에 무엇을 쓸 것인지 아는 경우 텍스트를 통해 encodestr 스크립트를 인코딩 된 해당 항목을 가져 오십시오.

참고 : 모든 필드를 인코딩 할 필요는 없으며 필요한 경우 기존 로캘을 참조로 사용하십시오.

예를 들어, 필드에 시간 형식 Time: %T을 설정하려면 ; 이것은 돌아와서 로케일에 줄 을 가질 것 입니다 (물론 해당 섹션에 있습니다).t_fmt./encodestr "Time: %T"<U0054><U0069><U006D><U0065><U003A><U0020><U0025><U0054>t_fmt <U0054><U0069><U006D><U0065><U003A><U0020><U0025><U0054>

원하는 모든 필드를 수정 한 후 시스템에 로케일을 설치해야 사용할 수 있습니다. 이를 위해 설치 섹션으로 진행하십시오.

처음부터 로캘 만들기

하나를 수정하는 것과 달리 사용자 정의 로캘을 만드는 데 사용할 수있는 다른 방법은 처음부터 작업하고 있습니다. 이 가이드를 다시 사용하면 그리 어렵지 않습니다 . 유용한 팁은 다음과 같습니다 . 실제 복사 및 붙여 넣기 방법 없이 다른 로케일에서 섹션을 복사 할 수 있습니다 . 이 형식을 따라야합니다.

LC_SECTION
copy "locale"
END LC_SECTION

LC_SECTION수정하려는 섹션은 어디에 있으며 해당 섹션 locale을 복사하려는 로캘입니다.

예를 들어 영어 로케일로 시간 형식을 복사하려면이 텍스트에 사용자 정의 로케일 파일이 있어야합니다.

LC_TIME
copy "en_GB"
END LC_TIME

따라서 많은 작업이 절약되고 참조 된 로캘의 변경 사항이 사용자의 작업에 반영됩니다.

사용자 정의 로케일 설치

아래에 보여줄 단계는 최적이 아니지만 작동 할 수 있습니다.

  1. 로케일을 컴파일하십시오. 당황하지 마십시오! 시간이 걸리지 않습니다. 로케일의 이름 인 sudo localedef -i custom -f UTF-8 custom.UTF-8 -c -vwhere 명령을 실행하십시오 custom.

  2. 로케일을 /usr/share/i18n/locales/디렉토리에 복사하십시오 . 당신은 확실히해야합니다 sudo는 이 작업을 수행하는의 권한을, 당신은 명령으로 할 수있는 사용자 정의 로케일의 파일 이름입니다.sudo cp locale /usr/share/i18n/locales/locale

  3. 로캘을 지정하십시오 /var/lib/locales/supported.d/. 예를 들어, 파일 이름을 작성 /var/lib/locales/supported.d/asd하고 행을 추가하십시오 custom UTF-8. 여기서 custom은 로케일의 이름입니다.

  4. 마법 명령을 실행하십시오. 나는 실제로이 명령이 정확히 무엇을하는지 모르지만 그것은 중요합니다. 를 실행하십시오 sudo locale-gen. 필요한 경우 사용 가능한 로캘에 대한 참조를 생성하는 것이 가장 가능성이 높습니다.

  5. 시스템에 로케일을 사용하도록 지시하십시오. 로케일을 시스템 전체에서 사용하려면 /etc/environment파일을 수정 하십시오. 그렇지 않은 경우 ~/.profile파일 또는 시작시 제공되는 다른 파일을 수정할 수 있습니다. 후자가 무엇을 의미하는지 모른다면 걱정하지 말고 ~/.profile파일을 사용 하십시오. 무엇을 써야하는지 알려면 먼저 locale명령을 실행하십시오 . LANGUAGE, LC_MESSAGES등의 항목이 포함 된 목록을 발행해야 LC_CTYPE합니다. 원하는 각 섹션 (이전 명령으로 나열)에 대해 별도의 줄에 씁니다.이 SECTION="locale"부분 SECTIONlocale사용자 지정 로캘 의 섹션과 이름입니다.

예를 들어 네덜란드의 시간 형식을 사용하지만 영어는 사용하려면 다음과 같이 작성하십시오.

LANGUAGE="en_GB:en"
LC_TIME="nl_NL"

참고 : 모든 로캘 설정에 대해 하나의 로캘을 사용하려면 사용자 지정 로캘의 이름을 LC_ALL="locale"where locale라고 적으십시오. 당신이 모든 것을하지만 언어에 대한 로케일을 사용하려는 경우, 당신은 쓸 수 LANG="locale"및 (물론, 다른 라인) LANGUAGE="locale":XX여기서 XX원하는 언어에 대한 두 문자 코드입니다.

예를 들어 네덜란드어 로캘과 영어를 사용하려는 경우 다음을 사용할 수 있습니다.

LANG="nl_NL"
LANGUAGE="nl_NL:en"

끝났습니다

다음에 로그인 할 때 로케일이 사용 중이어야합니다. locale명령을 다시 실행하여이를 테스트 할 수 있습니다 .

이 안내서의 불일치 또는 허위 진술에 대해 의견을 말하십시오!


안녕하세요, 사용하는 파이썬 코드는 모든 경우에 작동하지 않습니다. 그리스 문자 의 경우 예상 문자 대신 πμ출력 <U00CF><U0080><U00CE><U00BC>됩니다 <U03C0><U03BC>. 작동 하는 링크 는 다음과 같습니다 .
nass

입력 해 주셔서 감사합니다! 이 때문에 :) 어디에 나는 텍스트의 의견을 포함했다
베로 말이 맞아

나는 추가했다 custom UTF-8/usr/share/i18n/SUPPORTED내가 실행하기 전에 sudo locale-gen. 그렇지 않으면 목록에 없습니다.
Wilbert

문자열 변환 메소드를 내 쉘 스크립트 콜렉션 ( github.com/budhajeewa/shell-scripts/commit/…)에 복사했습니다 . 고맙습니다!
budhajeewa

누구 든지이 답변에서 메소드의 역전을 수행하는 함수를 찾고 있다면 (로케일 파일의 기존 16 진수 값을 읽는 데 필요했습니다) PHP 스크립트를 작성했습니다. github.com/budhajeewa/shell-scripts/commit/... . 누군가 파이썬으로 작성할 수 있다면 알려주십시오. 내 컬렉션에 추가하고 싶습니다.
budhajeewa

8

어떤 종류의 사용자 정의를 원하는지 확실하지 않지만을 사용하여 로케일 변수를 설정할 수 있습니다 ~/.locale. 예를 들어 영어 메시지를 받지만 독일 시간과 내가 좋아하는 것을

export LC_ALL=""
export LANG="en_GB.utf8"
export LC_CTYPE="de_DE.utf8"
export LC_NUMERIC="de_DE.utf8"
export LC_TIME="de_DE.utf8"
export LC_COLLATE="de_DE.utf8"
export LC_MONETARY="de_DE.utf8"
export LC_MESSAGES="en_GB.utf8"
export LC_PAPER="de_DE.utf8"
export LC_NAME="en_GB.utf8"
export LC_ADDRESS="de_DE.utf8"
export LC_TELEPHONE="de_DE.utf8"
export LC_MEASUREMENT="de_DE.utf8"
export LC_IDENTIFICATION="de_DE.utf8"

사용자 정의 로캘 생성도 가능합니다. 날짜는 이 안내서 를 참조하십시오 .


1
아니요, 더 낮은 수준의 사용자 지정이 필요합니다. 예 : 영어 메시지, 미터법 단위, 체코 날짜 / 시간 수정 (DMYYYY H.MM 대신 DD.MM.YYYY HH : mm), 소수점 구분 기호 (체코 어 로켈에는 쉼표가 있음) 및 € 통화로 (체코 어 로케일에는 Kč 통화가 있음).
Ivan

내가 참조. 촬영 en_US을 위해 LC_NUMERICde_DE위해 LC_MONETARYLC_MEASUREMENT다른 부작용 당신에게 제공? 개인 로케일 생성을위한 새 링크도 참조하십시오.
Carsten Thiel

1
링크 뒤에있는 지시 사항은 질문에 훌륭하게 대답하는 것 같습니다. 언젠가 링크에 도달 할 수없는 경우 여기에서 가장 중요한 비트를 복제 할 수 있습니까?
Stefano Palazzo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.