Bash에서 로케일별 번역을 사용하는 방법은 무엇입니까?

Bash에서 로케일별 번역을 사용하는 방법은 무엇입니까?

Bash 매뉴얼을 탐색하면서 로케일별 번역 섹션을 찾았습니다.Bash 참조 매뉴얼 → 3.1.2.5 로케일별 번역:

3.1.2.5 로케일별 번역

달러 기호('$') 앞에 큰따옴표가 붙은 문자열을 사용하면 해당 문자열이 현재 로케일에 따라 번역됩니다. 현재 로케일이 C 또는 POSIX인 경우 달러 기호는 무시됩니다. 문자열이 번역되어 바뀌면 대체 내용이 큰따옴표로 묶입니다.

일부 시스템은 LC_MESSAGES 쉘 변수에 의해 선택된 메시지 카탈로그를 사용합니다. 다른 것들은 TEXTDOMAIN 쉘 변수의 값을 기반으로 메시지 디렉토리의 이름을 생성하며, 접미사 ".mo"를 추가할 수도 있습니다. TEXTDOMAIN 변수를 사용하는 경우 TEXTDOMAINDIR 변수를 메시지 카탈로그 파일의 위치로 설정해야 할 수도 있습니다. 다른 사람들은 TEXTDOMAINDIR/LC_MESSAGES/LC_MESSAGES/TEXTDOMAIN.mo와 같은 두 가지 변수를 사용합니다.

그래서 나는 그것을 시험해 보기로 결정했습니다.

내 컴퓨터는 미국 영어 로케일을 사용합니다.

$ echo $LANG
en_US.UTF-8

영어 단어를 작성하는 데 효과적입니다.

$ echo $"Hello"
Hello

여기에서 사용 가능한 로케일을 확인하고 꽤 많은 것을 발견했습니다.

$ locale -a
C
C.UTF-8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
...
en_ZM.utf8
en_ZW.utf8
es_ES.utf8
POSIX

그래서 저는 이 기능을 스페인어로 테스트해 보기로 결정했습니다. 그러나 로캘을 변경해도 번역이 실행되지 않았습니다.

$ LANG=es_ES.UTF8 echo $"Hello"
Hello              # Still in English. Should be "Hola", in Spanish

왜 그런 겁니까? 내가 여기서 무엇을 놓치고 있는 걸까요? 어딘가에 번역된 단어 세트가 있는 것 같은데 어디인지 찾을 수 없습니다.

이것은 내 Bash 버전입니다.

$ bash --version
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)

답변1

당신이 놓치고 있는 것은 실제 번역을 하는 것입니다. (컴퓨터는 영어나 스페인어를 이해하지 못하며 디렉토리에서 문자열을 찾는 방법만 알고 있습니다.)현지화내부에고급 Bash 스크립팅 가이드. 보다자주하는 질문해결된 예입니다. 가지다안전 경고실제로 $"..."이는 번역 파일과 스크립트 자체를 보호해야 함을 의미합니다.

관련 정보