Qt를 이용한 국제화

애플리케이션의 국제화현지화는 대상 시장의 다양한 언어, 지역적 차이 및 기술적 요구 사항에 맞게 애플리케이션을 조정하는 프로세스입니다.

  • 국제화는 엔지니어링 변경 없이 다양한 언어와 지역에 적용할 수 있도록 애플리케이션을 설계하는 것을 의미합니다.
  • 로컬라이제이션은 날짜, 시간 및 숫자 형식과 같은 로캘별 구성 요소를 추가하고 텍스트를 번역하여 특정 지역 또는 언어에 맞게 국제화된 애플리케이션을 조정하는 것을 의미합니다.

국제화의 필요성은 맞춤법 변경부터 애플리케이션이 다른 언어로 작동하고 다른 입력 기술, 문자 인코딩 및 표시 규칙을 사용할 수 있도록 하는 것까지 다양합니다.

Qt의 모든 입력 컨트롤과 텍스트 그리기 메서드는 지원되는 모든 언어에 대한 기본 지원을 제공합니다. 내장된 폰트 엔진은 다양한 문자 체계의 문자를 동시에 포함하는 텍스트를 올바르게 렌더링합니다.

자세한 내용은다음을 참조하십시오.
소스 코드 국제화하기번역용 소스 코드 작성하기
번역 구성 및 배포, 기존 Qt 모듈 번역 사용하기애플리케이션 현지화하기
Qt 번역 도구 사용하기Qt Linguist 매뉴얼

다음 비디오는 간단한 예제 애플리케이션을 국제화 및 현지화하는 방법을 보여줍니다:

국제화를 위한 Qt 클래스

다음 클래스는 Qt 어플리케이션의 국제화를 지원합니다.

QCollator

현지화된 콜레이션 알고리즘에 따라 문자열을 비교합니다.

QCollatorSortKey

문자열 콜레이션 속도를 높이는 데 사용할 수 있습니다.

QLocale

다양한 언어의 숫자와 그 문자열 표현을 변환합니다.

QStringConverter

텍스트 인코딩 및 디코딩을 위한 베이스 클래스

QStringDecoder

텍스트용 상태 기반 디코더

QStringEncoder

텍스트용 상태 기반 인코더

QTextCodec

텍스트 인코딩 간 변환

QTextDecoder

상태 기반 디코더

QTextEncoder

상태 기반 인코더

QTranslator

텍스트 출력에 대한 국제화 지원

애플리케이션에서 클래스를 사용하는 방법에 대한 자세한 내용은 번역용 소스 코드 작성하기를 참조하세요.

언어와 쓰기 시스템

Qt는 현재 사용되는 대부분의 languages 을 지원합니다.

Qt Quick TextInput 타입과 QLineEdit, QTextEdit, 그리고 파생 클래스와 같은 입력 컨트롤과 Text 타입과 QLabel 클래스와 같은 표시 컨트롤은 다양한 문자 체계의 다음과 같은 특수 기능을 처리합니다:

  • 줄 바꿈

    아시아 언어 중 일부는 단어 사이에 공백 없이 작성됩니다. 줄 바꿈은 중국어, 일본어, 한국어에서와 같이 모든 문자(예외 있음) 뒤 또는 태국어에서와 같이 논리적 단어 경계 뒤에 발생할 수 있습니다.

  • 양방향 쓰기

    아랍어와 히브리어는 오른쪽에서 왼쪽으로 쓰지만 숫자 및 포함된 영어 텍스트는 왼쪽에서 오른쪽으로 씁니다. 정확한 동작은 유니코드 기술 부록 #9에 정의되어 있습니다.

  • 유럽 언어의 악센트 또는 움라우트 등 비 띄어쓰기 또는 분음 부호 표시

    베트남어와 같은 일부 언어에서는 이러한 마크를 광범위하게 사용하며 일부 문자는 발음을 명확히 하기 위해 동시에 두 개 이상의 마크를 사용할 수 있습니다.

  • 합자

    특수한 상황에서 일부 문자 쌍은 합자를 형성하는 결합 문자로 대체됩니다. 일반적인 예로는 미국 및 유럽 서적 조판에 사용되는 flfi 합자가 있습니다.

Qt의 텍스트 엔진은 렌더링용 글꼴이 설치되어 있다면 모든 플랫폼에서 작동하는 다양한 writing systems 을 지원합니다.

텍스트 입력 컨트롤을 직접 작성하려는 경우가 아니라면 특정 언어에서 사용되는 쓰기 시스템에 대해 알 필요는 없습니다. 아랍어나 인도 아대륙의 언어와 같은 일부 언어에서는 주변 문자에 따라 글리프의 너비와 모양이 달라집니다. C++ 코드에서 이를 고려하려면 QTextLayout 을 사용하세요. 입력 컨트롤을 작성하려면 해당 컨트롤이 사용될 스크립트에 대한 지식도 필요합니다. 일반적으로 가장 쉬운 방법은 QLineEdit 또는 QTextEdit 을 서브클래싱하는 것입니다.

인코딩

인코딩은 애플리케이션 소스 파일과 애플리케이션이 읽거나 쓰는 텍스트 파일 모두와 관련이 있습니다.

소스 코드 인코딩

QML 문서는 항상 UTF-8 형식으로 인코딩됩니다. Qt 6부터 8비트 UTF-8은 Qt C++에서도 주로 사용되는 인코딩입니다.

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 응용 프로그램은 플랫폼별 제한에 크게 신경 쓸 필요는 없습니다.

Unix/X11

  • Qt는 로케일 지향 글꼴과 입력 방법을 숨기고 유니코드 입력과 출력을 제공합니다.
  • 대부분의 Unix 변형은 기본적으로 UTF-8과 같은 파일 시스템 규칙을 사용합니다. 모든 Qt 파일 함수는 유니코드를 허용하지만 파일명을 로컬 8비트 인코딩으로 변환하는데, 이는 유닉스 규칙입니다.
  • 파일 I/O는 기본적으로 로컬 8비트 인코딩을 사용하며, 유니코드 옵션은 QTextStream 에서 확인할 수 있습니다.
  • 일부 구형 Unix 배포판에는 일부 로캘에 대한 부분적인 지원만 포함되어 있습니다. 예를 들어 /usr/share/locale/ja_JP.EUC 디렉터리가 있더라도 일본어 글꼴을 설치하고 디렉터리가 완전하지 않으면 일본어 텍스트를 표시할 수 없습니다. 최상의 결과를 얻으려면 시스템 공급업체의 완전한 로캘을 사용하세요.

Linux

  • Qt는 입력 방법, 글꼴, 클립보드, 드래그 앤 드롭을 포함한 완전한 유니코드 지원을 제공합니다.
  • 파일 시스템은 모든 최신 Linux 배포판에서 UTF-8로 인코딩됩니다. 파일 I/O는 기본적으로 UTF-8을 사용합니다.

Windows

  • Qt는 입력 방법, 글꼴, 클립보드, 드래그 앤 드롭 및 파일 이름을 포함한 전체 유니코드를 지원합니다.
  • 파일 I/O의 기본값은 라틴1이며, 유니코드 옵션은 QTextStream 입니다. 그러나 일부 Windows 프로그램은 상위 레벨 프로토콜이 없는 경우 유니코드 표준에서 규정하는 순서임에도 불구하고 빅 엔디안 유니코드 텍스트 파일을 이해하지 못합니다.

Localizing Applications

Qt 및 Qt Quick 앱을 여러 언어로 현지화하기.

Qt Linguist Examples

Qt Linguist 을 사용하여 Qt 애플리케이션 국제화하기

Qt Linguist Manual

Qt 번역 도구 사용: 업데이트, 릴리스 및 Qt Linguist

Text ID based translations

텍스트 ID 기반 국제화는 대상 로캘이 많고 번역할 텍스트가 많은 대규모 프로젝트를 지원합니다.

Translation Rules for Plural Forms

Qt의 번역 도구에서 생성되는 복수형에 대한 번역 규칙 요약.

Writing Source Code for Translation

애플리케이션의 현지화를 가능하게 하는 소스 코드 작성.

© 2025 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.