환경의 현재 로케일을 가져오는 방법은 무엇입니까?
Linux에서 코드를 따르려고 했지만 항상 'C'를 다른 코드로 반환합니다.LANG
설정.
#include <iostream>
#include <locale.h>
#include <locale>
using namespace std;
int main()
{
cout<<"locale 1: "<<setlocale(LC_ALL, NULL)<<endl;
cout<<"locale 2: "<<setlocale(LC_CTYPE, NULL)<<endl;
locale l;
cout<<"locale 3: "<<l.name()<<endl;
}
$ ./a.out
locale 1: C
locale 2: C
locale 3: C
$
$ export LANG=zh_CN.UTF-8
$ ./a.out
locale 1: C
locale 2: C
locale 3: C
Linux(Ubuntu 등)에서 현재 로케일 설정을 가져오려면 어떻게 해야 합니까?
또 다른 질문은 Windows(윈도우)에서 로케일을 가져오는 방법이 동일한가 하는 것입니다.
부터man 3 setlocale
(새로운 격언: "의심스러울 때는 맨페이지 전체를 읽으십시오."):
로케일의 경우
""
, 수정해야 할 로케일의 각 부분은 환경 변수에 따라 설정됩니다.
그래서 우리는 호출을 통해 환경 변수를 읽을 수 있습니다.setlocale
다음과 같이 프로그램을 시작할 수 있습니다.
#include <iostream>
#include <locale.h>
using namespace std;
int main()
{
setlocale(LC_ALL, "");
cout << "LC_ALL: " << setlocale(LC_ALL, NULL) << endl;
cout << "LC_CTYPE: " << setlocale(LC_CTYPE, NULL) << endl;
return 0;
}
시스템이 지원하지 않습니다.zh_CN
다음 출력에서 알 수 있듯이 로케일.
$ ./a. 밖으로LC_ALL: en_US.utf8LC_CTYPE : en_US.utf8$ 내보내기 LANG=zh_CN.UTF-8$ ./a. 밖으로LC_ALL: CLC_CTYPE: C
Windows:Windows 로케일에 대해서는 전혀 모릅니다.MSDN 검색부터 시작해서 질문이 있을 경우 별도의 Stack Overflow 질문을 여는 것을 권장합니다.
방금 C++로 로케일을 가져오는 방법을 찾았습니다. std::locale을 구성하기 위해 빈 문자열 ""을 사용하면 setlocale(LC_ALL, ")과 동일한 작업을 수행합니다.
locale l("");
cout<<"Locale by C++: "<<l.name()<<endl;
이 링크에서는 C 로케일과 C++ 로케일 간의 세부 정보 차이를 설명했습니다.
Windows의 경우 다음 코드를 사용합니다.
LCID lcid = GetThreadLocale();
wchar_t name[LOCALE_NAME_MAX_LENGTH];
if (LCIDToLocaleName(lcid, name, LOCALE_NAME_MAX_LENGTH, 0) == 0)
error(GetLastError());
std::wcout << L"Locale name = " << name << std::endl;
이것은 "en-US"와 같은 것을 인쇄할 것입니다.
하위 언어 정보를 삭제하려면 다음을 사용합니다.
wchar_t parentLocateName[LOCALE_NAME_MAX_LENGTH];
if (GetLocaleInfoEx(name, LOCALE_SPARENT, parentLocateName, LOCALE_NAME_MAX_LENGTH) == 0)
error(GetLastError());
std::wcout << L"parentLocateName = " << parentLocateName << std::endl;
이렇게 하면 그냥 "en"이 나옵니다.
std:: locale는 부스트:: 보다 신뢰할 수 있는 정보를 반환할 수 있는 locale을 고려하는 것이 좋습니다 - http://www.boost.org/doc/libs/1_52_0/libs/locale/doc/html/locale_information.html 를 참조하십시오.
boost::locale::info는 다음과 같은 멤버 기능을 가지고 있습니다.
std::string name() -- the full name of the locale, for example en_US.UTF-8
std::string language() -- the ISO-639 language code of the current locale, for example "en".
std::string country() -- the ISO-3199 country code of the current locale, for example "US".
std::string variant() -- the variant of current locale, for example "euro".
std::string encoding() -- the encoding used for char based strings, for example "UTF-8"
bool utf8() -- a fast way to check whether the encoding is UTF-8.
의 기본 생성자std::locale
는 글로벌 C++ 로케일의 복사본을 만듭니다.
현재 로케일의 이름을 가져오려면:
std::cout << std::locale().name() << '\n';
언급URL : https://stackoverflow.com/questions/12170488/how-to-get-current-locale-of-my-environment
'bestsource' 카테고리의 다른 글
객체 배열에서 속성이 검색과 일치하는 객체의 인덱스를 찾는 가장 빠른 방법 (0) | 2023.10.31 |
---|---|
자바스크립트 폐쇄가 가비지 수집 방법 (0) | 2023.10.31 |
시작은 없고, 기능은 바둑에서 끝납니까? (0) | 2023.10.26 |
Google Maps V3 - 주어진 경계에 대한 줌 레벨을 계산하는 방법 (0) | 2023.10.26 |
SQL 서버 저장 프로시저에서 삭제된 행 수 계산 (0) | 2023.10.26 |