개발
[QT, QML] Translation 사용
jmob_blog
2020. 4. 3. 02:01
728x90
반응형
# QT Version : 5.12
# QT Creatpr Version : 4.11
# Project name : project01
jungmonster/qt_study_project
Qt projects for my study. Contribute to jungmonster/qt_study_project development by creating an account on GitHub.
github.com
1. 빈 프로젝트 생성
간단하게 빈 프로젝트를 만들고 중간에 글자를 넣어 준다.
import QtQuick 2.12
import QtQuick.Window 2.12
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Text {
id: txt01
x : 300
y : 200
font.pixelSize: 40
text: qsTr("Text")
}
}
2. .ts 파일 생성
먼저 .pro 파일에 .ts 파일을 정의한다.
TRANSLATIONS += '파일이름' 형식으로 추가하는데, 보통 뒤에 국가 코드를 넣는다.
QT += quick
CONFIG += c++14
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += \
main.cpp
RESOURCES += qml.qrc
# ts file 추가
TRANSLATIONS += lang_kr.ts \
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
그런 다음
Tools - External - Linguist - Update Translations (lupdate) 순으로 실행한다.
그럼 프로젝트 폴더에 ts 파일이 생성된다.
3. 번역 적용
Linguist 를 실행하고, 생성한 lang_kr.ts 파일을 열어준다.
파일을 열면 국가를 선택하는게 뜬다. 한국어로 설정!
그럼 코드에서 번역을 적용할 수 있는 항목들이 나타난다.
Text를 '테스트'로 적용
적은 후 체크를 눌러준다.
텍스트 앞에 체크가 붙으면 저장한 뒤, 파일 - 배포 순으로 진행한다.
그럼 프로젝트에 qm 파일이 생성된다.
.pro에 qm 파일을 추가한다.
QT += quick
CONFIG += c++14
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += \
main.cpp
RESOURCES += qml.qrc
# ts file 추가
TRANSLATIONS += lang_kr.ts \
# qm file 추가
OTHER_FILES += lang_kr.qm
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
4. 소스 적용
main 함수에서 로드
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QTranslator>
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
QTranslator* translator = new QTranslator();
translator->load("D:\\Qt\\QTranslation\\lang_kr.qm");
app.installTranslator(translator);
QQmlApplicationEngine engine;
const QUrl url(QStringLiteral("qrc:/main.qml"));
QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
&app, [url](QObject *obj, const QUrl &objUrl) {
if (!obj && url == objUrl)
QCoreApplication::exit(-1);
}, Qt::QueuedConnection);
engine.load(url);
return app.exec();
}
성공~!!
728x90
반응형