QTranslator Class
QTranslator 클래스는 텍스트 출력에 대한 국제화 기능을 제공합니다. 더 보기...
| 헤더: | #include <QTranslator> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| 상속: | QObject |
공개 함수
| QTranslator(QObject *parent = nullptr) | |
| virtual | ~QTranslator() |
| QString | filePath() const |
| virtual bool | isEmpty() const |
| QString | language() const |
| bool | load(const QString &filename, const QString &directory = QString(), const QString &search_delimiters = QString(), const QString &suffix = QString()) |
| bool | load(const QLocale &locale, const QString &filename, const QString &prefix = QString(), const QString &directory = QString(), const QString &suffix = QString()) |
| bool | load(const uchar *data, int len, const QString &directory = QString()) |
| virtual QString | translate(const char *context, const char *sourceText, const char *disambiguation = nullptr, int n = -1) const |
상세 설명
이 클래스의 객체는 원본 언어에서 대상 언어로의 번역 집합을 포함합니다. QTranslator는 번역 파일에서 번역을 조회하는 함수를 제공합니다. 번역 파일은 다음을 사용하여 생성됩니다 Qt Linguist.
QTranslator의 가장 일반적인 용도는 번역 파일을 불러온 다음, QCoreApplication::installTranslator()를 사용하여 설치하는 것입니다.
다음은 QTranslator를 사용하는 main() 함수의 예입니다:
// Required for using the '_L1' string literal.
using namespace Qt::StringLiterals;
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QTranslator translator;
// look up e.g. :/i18n/myapp_de.qm
if (translator.load(QLocale(), "myapp"_L1, "_"_L1, ":/i18n"_L1))
QCoreApplication::installTranslator(&translator);
QPushButton hello(QCoreApplication::translate("main", "Hello world!"));
hello.resize(100, 30);
hello.show();
return app.exec();
}번역기는 애플리케이션의 위젯보다 먼저 생성되어야 한다는 점에 유의하십시오.
대부분의 애플리케이션은 이 클래스를 사용하여 다른 작업을 수행할 필요가 없습니다. 이 클래스가 제공하는 다른 함수들은 번역기 파일을 다루는 애플리케이션에 유용합니다.
번역 조회
translate()을 사용하여 번역을 조회할 수 있습니다( tr() 및 QCoreApplication::translate()이 그러하듯이). translate() 함수는 최대 세 개의 매개변수를 받습니다:
- 컨텍스트 - 일반적으로 tr()를 호출하는 클래스 이름입니다.
- 소스 텍스트 - 대개 tr()의 인자입니다.
- 동일한 문맥에서 같은 텍스트가 다르게 사용될 때 혼동을 방지하는 데 도움이 되는 선택적 문자열인 '동일성 구분자 '.
예를 들어, 프로그램이 폴란드어로 실행될 때 대화 상자의 “Cancel”은 “Anuluj”로 표시될 수 있습니다(이 경우 원본 텍스트는 “Cancel”이 됩니다). 문맥은 (일반적으로) 대화 상자의 클래스 이름이 되며, 보통 주석은 없고 번역된 텍스트는 “Anuluj”가 됩니다.
하지만 항상 이렇게 간단한 것은 아닙니다. 양면 인쇄 및 제본 설정이 포함된 프린터 대화 상자의 스페인어 버전에서는 “Enabled”의 번역으로 “Activado”와 “Activada”가 모두 필요할 가능성이 높습니다. 이 경우 두 경우 모두 원본 텍스트는 “Enabled”이고, 컨텍스트는 대화 상자의 클래스 이름이 되겠지만, 두 항목에는 하나는 “양면 인쇄”, 다른 하나는 “제본”과 같은 구분 정보가 포함될 것입니다. 이러한 구분 정보를 통해 번역가는 스페인어 버전에 적합한 성별을 선택할 수 있으며, Qt는 번역 간을 구분할 수 있게 됩니다.
여러 번역 파일 사용
애플리케이션에는 여러 번역 파일을 설치할 수 있습니다. 번역은 설치된 순서의 역순으로 검색되므로, 가장 최근에 설치된 번역 파일이 먼저 검색되고 가장 먼저 설치된 번역 파일은 마지막에 검색됩니다. 일치하는 문자열이 포함된 번역이 발견되는 즉시 검색이 중지됩니다.
이 메커니즘을 통해 특정 번역을 “선택”하거나 다른 번역보다 우선순위를 부여할 수 있습니다. QCoreApplication::removeTranslator() 함수에 번역기를 전달하여 애플리케이션에서 제거한 다음, QCoreApplication::installTranslator()를 사용하여 다시 설치하기만 하면 됩니다. 그러면 해당 번역이 일치하는 문자열을 검색할 때 가장 먼저 검색 대상이 됩니다.
보안 고려 사항
신뢰할 수 있는 출처의 번역 파일만 설치하십시오.
번역 파일은 텍스트 기반 번역 소스 파일에서 생성된 바이너리 파일입니다. 이러한 바이너리 파일의 형식은 Qt에 의해 엄격하게 정의되어 있으며, 바이너리 파일 내의 데이터를 임의로 조작할 경우 파일을 불러올 때 애플리케이션이 충돌할 수 있습니다. 또한, 형식이 올바른 번역 파일이라도 오해의 소지가 있거나 악의적인 번역이 포함되어 있을 수 있습니다.
QCoreApplication::installTranslator(), QCoreApplication::removeTranslator(), QObject::tr(), QCoreApplication::translate(), 현지화된 시계 예제, 화살표 패드 예제 및 트롤 프린트 예제도참조하십시오 .
멤버 함수 문서
[explicit] QTranslator::QTranslator(QObject *parent = nullptr)
parent 를 부모로 가지며, 어떤 파일과도 연결되지 않은 빈 메시지 파일 객체를 생성합니다.
[virtual noexcept] QTranslator::~QTranslator()
객체를 삭제하고 할당된 리소스를 모두 해제합니다.
QString QTranslator::filePath() const
로드된 번역 파일의 경로를 반환합니다.
아직 번역이 로드되지 않았거나, 로드에 실패했거나, 파일에서 번역을 로드하지 않은 경우 파일 경로는 비어 있습니다.
[virtual] bool QTranslator::isEmpty() const
이 번역기가 비어 있으면 ` true `를 반환하고, 그렇지 않으면 ` false`를 반환합니다.
QString QTranslator::language() const
번역 파일에 저장된 대상 언어를 반환합니다.
bool QTranslator::load(const QString &filename, const QString &directory = QString(), const QString &search_delimiters = QString(), const QString &suffix = QString())
filename + suffix ( suffix 가 지정되지 않은 경우 ".qm")을 불러옵니다. 이 경로는 절대 파일 이름일 수도 있고, directory 를 기준으로 한 상대 경로일 수도 있습니다. 번역이 성공적으로 불러오면 true 를 반환하고, 그렇지 않으면 false 를 반환합니다.
directory 가 지정되지 않은 경우, 현재 디렉터리가 사용됩니다(즉, currentPath()과 동일).
이 번역기 객체의 이전 내용은 삭제됩니다.
파일 이름이 존재하지 않으면, 다음 순서대로 다른 파일 이름을 시도합니다:
- suffix 가 추가되지 않은 파일 이름.
- search_delimiters 뒤에 오는 텍스트를 제거한 파일 이름("_."은 search_delimiters 가 빈 문자열인 경우의 기본값이며)과 suffix.
- suffix 가 추가되지 않은 상태에서 불필요한 부분을 제거한 파일 이름.
- 파일 이름을 더 제거한 것 등.
예를 들어, fr_CA 로케일(프랑스어를 사용하는 캐나다)에서 실행되는 애플리케이션은 load("foo.fr_ca", "/opt/foolib")를 호출할 수 있습니다. 그러면 load()는 다음 목록에서 읽기 가능한 첫 번째 파일을 열려고 시도합니다:
/opt/foolib/foo.fr_ca.qm/opt/foolib/foo.fr_ca/opt/foolib/foo.fr.qm/opt/foolib/foo.fr/opt/foolib/foo.qm/opt/foolib/foo
일반적으로 QTranslator::load(const QLocale &, const QString &, const QString &, const QString &, const QString &) 함수를 사용하는 것이 더 좋습니다. 이 함수는 단순히 로케일 이름만 사용하는 것이 아니라 QLocale::uiLanguages()를 사용하기 때문입니다. 로케일 이름은 날짜와 숫자의 서식을 나타낼 뿐, 반드시 UI 언어를 의미하는 것은 아닙니다.
bool QTranslator::load(const QLocale &locale, const QString &filename, const QString &prefix = QString(), const QString &directory = QString(), const QString &suffix = QString())
filename + prefix + ui language name + suffix ( suffix 가 지정되지 않은 경우 ".qm")을 불러옵니다. 여기서 파일명은 절대 경로이거나 directory 를 기준으로 한 상대 경로일 수 있습니다. 번역이 성공적으로 불러오면 true 를 반환하고, 그렇지 않으면 false 를 반환합니다.
이 번역기 객체의 이전 내용은 삭제됩니다.
파일 이름이 존재하지 않으면 다음 순서대로 다른 파일 이름을 시도합니다:
- suffix 가 붙지 않은 파일 이름.
- "_" 문자 뒤의 UI 언어 부분이 제거된 파일 이름에 suffix 을 추가한 것.
- suffix 가 추가되지 않은 상태에서 UI 언어 부분이 제거된 파일 이름.
- UI 언어 부분이 더 제거된 파일 이름 등.
예를 들어, 다음 ui languages - "es", "fr-CA", "de"를 가진 locale 에서 실행되는 애플리케이션은 load(QLocale(), "foo", ".", "/opt/foolib", ".qm")을 호출할 수 있습니다. load()는 UI 언어에서 '-'(대시)를 '_'(밑줄)로 대체한 다음, 다음 목록에서 읽을 수 있는 첫 번째 파일을 열려고 시도합니다:
/opt/foolib/foo.es.qm/opt/foolib/foo.es/opt/foolib/foo.fr_CA.qm/opt/foolib/foo.fr_CA/opt/foolib/foo.fr.qm/opt/foolib/foo.fr/opt/foolib/foo.de.qm/opt/foolib/foo.de/opt/foolib/foo.qm/opt/foolib/foo./opt/foolib/foo
파일 시스템이 대소문자를 구분하는 운영 체제에서는 ` QTranslator `가 로케일 이름의 소문자 버전도 로드하려고 시도합니다.
bool QTranslator::load(const uchar *data, int len, const QString &directory = QString())
길이 len 인 QM 파일 데이터 data 를 번역기에 불러옵니다.
데이터는 복사되지 않습니다. 호출자는 data 파일이 삭제되거나 수정되지 않을 것임을 보장해야 합니다.
directory 는 QM 파일의 종속성을 불러올 때 기본 디렉터리를 지정하는 데만 사용됩니다. 파일에 종속성이 없는 경우, 이 인수는 무시됩니다.
이 함수는 QTranslator::load()을 오버로드합니다.
[virtual] QString QTranslator::translate(const char *context, const char *sourceText, const char *disambiguation = nullptr, int n = -1) const
키(context, sourceText, disambiguation)에 대한 번역 결과를 반환합니다. 해당 키에 대한 번역이 없으면 (context, sourceText, "")도 차례로 시도합니다. 그래도 성공하지 못하면 빈 문자열을 반환합니다.
참고: 번역이불완전할 경우 예상치 못한 동작이 발생할 수 있습니다. (context, sourceText, "")에 대한 번역이 제공되지 않은 경우, 이 메서드는 실제로는 다른 disambiguation 에 대한 번역을 반환할 수도 있습니다.
n 가 -1이 아닌 경우, 이 값은 번역에 적합한 형식을 선택하는 데 사용됩니다(예: "%n 파일 발견됨" 대 "%n개의 파일 발견됨").
QTranslator 에 번역을 프로그래밍 방식으로 삽입해야 하는 경우, 이 함수를 재구현할 수 있습니다.
참고: 이 함수는 스레드 안전합니다.
load()도 참조하십시오 .
© 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.