Qt를 활용한 국제화
애플리케이션의 국제화 및 현지화는 애플리케이션을 대상 시장의 다양한 언어, 지역적 차이 및 기술적 요구 사항에 맞게 조정하는 과정입니다.
- 국제화란 엔지니어링 변경 없이도 다양한 언어와 지역에 맞게 애플리케이션을 조정할 수 있도록 애플리케이션을 설계하는 것을 의미합니다.
- 현지화란 로케일별 구성 요소(날짜, 시간, 숫자 형식 등)를 추가하고 텍스트를 번역하여 국제화된 애플리케이션을 특정 지역이나 언어에 맞게 조정하는 것을 의미합니다.
국제화의 필요성은 철자 변경부터 애플리케이션이 다양한 언어로 작동하고, 다양한 입력 기법, 문자 인코딩 및 표시 규칙을 사용할 수 있도록 하는 것까지 다양합니다.
Qt의 모든 입력 컨트롤과 텍스트 그리기 방법은 지원되는 모든 언어에 대해 내장된 지원을 제공합니다. 내장된 글꼴 엔진은 다양한 문자 체계를 사용하는 문자가 동시에 포함된 텍스트를 정확하게 렌더링합니다.
| 자세한 내용은 | 참조 |
|---|---|
| 소스 코드의 국제화 | 번역을 위한 소스 코드 작성 |
| 번역 구성 및 배포, 그리고 기존 Qt 모듈 번역 사용 | 애플리케이션 현지화 |
| Qt 번역 도구 사용 | Qt Linguist 매뉴얼 |
다음 동영상은 간단한 예제 애플리케이션의 국제화 및 현지화 방법을 보여줍니다:
국제화를 위한 Qt 클래스
다음 클래스는 Qt 애플리케이션의 국제화를 지원합니다.
지역화된 정렬 알고리즘에 따라 문자열을 비교합니다 | |
문자열 정렬 속도를 높이는 데 사용할 수 있습니다 | |
다양한 언어에서 숫자와 해당 숫자를 나타내는 문자열 간 변환을 수행합니다 | |
텍스트 인코딩 및 디코딩을 위한 기본 클래스 | |
텍스트용 상태 기반 디코더 | |
텍스트용 상태 기반 인코더 | |
텍스트 인코딩 간 변환 | |
상태 기반 디코더 | |
상태 기반 인코더 | |
텍스트 출력을 위한 국제화 지원 |
애플리케이션에서 클래스를 사용하는 방법에 대한 자세한 내용은 ‘번역을 위한 소스 코드 작성’을 참조하십시오.
언어 및 문자 체계
Qt는 현재 사용 중인 대부분의 문자 인코딩 체계( languages )를 지원합니다.
Qt Quick TextInput 와 같은 입력 컨트롤과 QLineEdit, QTextEdit 및 파생 클래스, 그리고 Text 유형 및 QLabel 클래스와 같은 표시 컨트롤은 다양한 문자 체계의 다음과 같은 특수 기능을 처리합니다.
- 줄 바꿈
일부 아시아 언어는 단어 사이에 공백 없이 표기됩니다. 줄 바꿈은 중국어, 일본어, 한국어에서와 같이(예외 사항 제외) 임의의 문자 뒤에서 발생할 수도 있고, 태국어에서와 같이 논리적 단어 경계 뒤에서 발생할 수도 있습니다.
- 양방향 문자 표기
아랍어와 히브리어는 오른쪽에서 왼쪽으로 쓰이지만, 숫자와 삽입된 영어 텍스트는 왼쪽에서 오른쪽으로 쓰입니다. 정확한 동작은 유니코드 기술 부록 #9에 정의되어 있습니다.
- 유럽 언어의 악센트나 움라우트와 같은 비공백 기호 또는 분음 부호
베트남어와 같은 일부 언어는 이러한 부호를 광범위하게 사용하며, 발음을 명확히 하기 위해 일부 문자에 동시에 하나 이상의 부호가 붙을 수 있습니다.
- 합자
특정 상황에서 일부 문자 쌍은 합자(ligature)를 형성하는 결합된 글리프로 대체됩니다. 일반적인 예로는 미국 및 유럽 서적의 조판에 사용되는 ‘
fl’ 및 ‘fi’ 합자가 있습니다.
Qt의 텍스트 엔진은 렌더링에 필요한 글꼴이 설치되어 있다면 모든 플랫폼에서 작동하는 다양한 writing systems 를 지원합니다.
사용자 정의 텍스트 입력 컨트롤을 직접 작성하려는 경우가 아니라면, 특정 언어에서 사용되는 문자 체계를 알 필요는 없습니다. 아랍어나 인도 아대륙의 언어와 같은 일부 언어에서는 주변 문자에 따라 글리프의 너비와 모양이 달라집니다. C++ 코드에서 이를 고려하려면 QTextLayout 를 사용하십시오. 입력 컨트롤을 작성하려면 해당 컨트롤이 사용될 문자 체계에 대한 지식도 어느 정도 필요합니다. 일반적으로 가장 쉬운 방법은 QLineEdit 또는 QTextEdit 를 상속하는 것입니다.
인코딩
인코딩은 애플리케이션 소스 파일과 애플리케이션이 읽거나 쓰는 텍스트 파일 모두에 관련이 있습니다.
소스 코드 인코딩
Qt Qml 문서는 항상 UTF-8 형식으로 인코딩됩니다. Qt 6부터는 Qt C++에서도 8비트 UTF-8이 주된 인코딩 방식입니다.
lupdate 도구는 애플리케이션에서 UI 문자열을 추출합니다. 이 도구는 기본적으로 모든 소스 코드가 UTF-8로 인코딩되어 있을 것으로 가정합니다.
그러나 Visual Studio와 같은 일부 편집기는 기본적으로 다른 인코딩을 사용합니다. 인코딩 문제를 방지하는 한 가지 방법은 모든 소스 코드를 ASCII로 제한하고, 다른 문자가 포함된 번역 가능한 문자열에는 이스케이프 시퀀스를 사용하는 것입니다. 예를 들면 다음과 같습니다.
label->setText(tr("F\374r \310lise"));QString::toUtf8()는 텍스트를 UTF-8 인코딩으로 반환하며, 이는 유니코드 정보를 보존하면서도 텍스트가 완전히 ASCII로 구성되어 있을 경우 일반 ASCII처럼 보이게 합니다. 유니코드를 로컬 8비트 인코딩으로 변환하려면 QString::toLocal8Bit()를 사용하십시오. Unix 시스템에서는 이 기능이 toUtf8() 와 동일합니다. Windows에서는 시스템의 현재 코드 페이지가 사용됩니다.
UTF-8 및 로컬 8비트 인코딩을 QString 로 변환하려면 QString::fromUtf8() 및 QString::fromLocal8Bit() 편의 함수를 사용합니다.
텍스트 입력/출력 인코딩
QTextStream::setEncoding()을 사용하여 텍스트 스트림에 대한 공통 인코딩을 설정하십시오.
다른 레거시 인코딩이 필요한 경우, Qt5Compat 모듈의 QTextCodec 클래스를 사용하십시오.
애플리케이션이 시작되면, 시스템의 로케일에 따라 외부 8비트 데이터에 사용되는 8비트 인코딩이 결정됩니다. QTextCodec::codecForLocale()는 이 로케일 인코딩과 유니코드 간의 변환에 사용할 수 있는 코덱을 반환합니다.
애플리케이션에서는 때때로 기본 로캘 8비트 인코딩 이외의 인코딩이 필요할 수 있습니다. 예를 들어, 키릴 문자 KOI8-R 로캘(러시아의 사실상의 표준 로캘)을 사용하는 애플리케이션은 키릴 문자를 ISO 8859-5 인코딩으로 출력해야 할 수도 있습니다. 이에 대한 코드는 다음과 같습니다:
QString string = ...; // some Unicode text
QTextCodec *codec = QTextCodec::codecForName("ISO 8859-5");
QByteArray encodedString = codec->fromUnicode(string);다음 코드는 ISO 8859-5 키릴 문자를 유니코드로 변환하는 방법을 보여줍니다:
QByteArray encodedString = ...; // some ISO 8859-5 encoded text
QTextCodec *codec = QTextCodec::codecForName("ISO 8859-5");
QString string = codec->toUnicode(encodedString);지원되는 인코딩의 전체 목록은 QTextCodec 문서를 참조하십시오.
운영 체제 및 윈도우 시스템
Qt가 실행되는 일부 운영 체제 및 윈도우 시스템은 유니코드를 제한적으로만 지원합니다. 기본 시스템에서 제공하는 지원 수준은 해당 플랫폼에서 Qt가 제공할 수 있는 지원에 어느 정도 영향을 미치지만, 일반적으로 Qt 애플리케이션은 플랫폼별 제한 사항에 대해 크게 신경 쓸 필요는 없습니다.
유닉스/X11
- Qt는 로케일 기반 글꼴 및 입력 방식을 숨기고 유니코드 입력 및 출력을 제공합니다.
- 대부분의 유닉스 변종은 기본적으로 UTF-8과 같은 파일 시스템 규약을 사용합니다. 모든 Qt 파일 함수는 유니코드를 허용하지만, 유닉스 규약에 따라 파일 이름을 로컬 8비트 인코딩으로 변환합니다.
- 파일 I/O는 기본적으로 로컬 8비트 인코딩을 사용하며, QTextStream 에서 유니코드 옵션을 설정할 수 있습니다.
- 일부 구형 유닉스 배포판은 특정 로케일에 대해 부분적으로만 지원합니다. 예를 들어,
/usr/share/locale/ja_JP.EUC디렉터리가 있더라도 일본어 글꼴을 설치하고 해당 디렉터리가 완전히 구성되어 있지 않으면 일본어 텍스트를 표시할 수 없습니다. 최상의 결과를 얻으려면 시스템 공급업체에서 제공하는 완전한 로케일을 사용하십시오.
Linux
- Qt는 입력 방식, 글꼴, 클립보드, 드래그 앤 드롭을 포함한 완전한 유니코드 지원을 제공합니다.
- 모든 최신 리눅스 배포판에서 파일 시스템은 UTF-8로 인코딩되어 있습니다. 파일 I/O는 기본적으로 UTF-8을 사용합니다.
Windows
- Qt는 입력 방식, 글꼴, 클립보드, 드래그 앤 드롭 및 파일 이름을 포함한 완전한 유니코드 지원을 제공합니다.
- 파일 I/O는 기본적으로 Latin1을 사용하며, QTextStream 에서 유니코드 옵션을 설정할 수 있습니다. 그러나 일부 Windows 프로그램은 상위 수준 프로토콜이 없는 경우 유니코드 표준에서 규정하는 순서임에도 불구하고 빅엔디안 유니코드 텍스트 파일을 인식하지 못합니다.
관련 주제
Qt 및 Qt Quick 애플리케이션을 여러 언어로 현지화하기. | |
Qt 번역 시스템에서 사용되는 메타 문자열에 대한 참조 가이드 | |
Qt Linguist 를 사용하여 Qt 애플리케이션 국제화하기 | |
Qt 번역 도구 사용: lupdate, lrelease 및 Qt Linguist | |
텍스트 ID 기반 국제화는 대상 로케일이 많고 번역해야 할 텍스트가 방대한 대규모 프로젝트를 지원합니다 | |
Qt 번역 도구에서 생성된 복수형에 대한 번역 규칙 요약. | |
애플리케이션의 현지화를 가능하게 하는 소스 코드 작성. |
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.