한국어
Qt
 

어플리케이션 개발시 유니코드및 다국어 지원을 기본으로 하는 것이 바람직한 개발 방향이다.

Qt는 다국어 개발에 대한 좋은 솔루션을 제공하고있는데 여기서 다국어 사용 및 개발방법을 설명하고자 한다.

Linguist툴은 QML에서 qsTr(), C++소스코드의 tr()을 사용한 문자열을 가져와 XML구조의 ts파일을 만든다. 

 

예를 들어 QML의 문자열이 사용되는 곳에 아래 코드와 같이 사용될 것이다.

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")
}

 

언어별 ts파일이 생성되어야 하는데 프로젝트파일(.pro)에 정의해주어야한다.

.pro파일을 열고 아래처럼 언어별 정의를 해주는데 이름에 규칙이나 제한은 없지만 여기선 "_" 다음에 ISO 3166-1 alpha-2 국가부호로 해줬다.

TRANSLATIONS += lang_ko.ts

 

이제 ts파일을 생성하기위해 QtCreator에서 Tools - External - Linguist - Update Translations (lupdate)를 실행한다.

lupdate.png

 

프로젝트가 위치한 곳에 ts파일이 생성된다.

Linguist 실행하고 생성된 ts파일을 열면 컨텍스트, 문자열, 원본 코드를 볼 수 있다.

편집 - 번역파일설정을 선택해서 해당되는 언어, 국가를 설정한다.

linguist_setting.png

원본 텍스트에 해당하는 문자열을 입력하고 ctrl + 엔터를 누르거나 linguist-doneandnext.png 아이콘을 클릭해서 번역을 수행한다.

Linguist.png

 

번역을 완료하고 저장후에 파일 - 배포 클릭하면 ts파일이 위치한 곳에 qm파일이 생성된다.

이제 프로젝트의 메인 함수에서 QTranslator객체를 생성하고 생성된 qm파일을 로드하고 install하는 코드를 작성한다.
...

QGuiApplication app(argc, argv);

QTranslator translator;
translator.load("lang_ko.qm");
app.installTranslator(&translator);

QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
    return -1;

return app.exec();

...

 

아래의 코드는 QML에서 3D Studio 컴포넌트의 텍스트 요소의 속성(문자열)을 바꾸도록한 예제이다.

...

function setLanguageMenu()
{
    menuLight.setAttribute("textstring", qsTr("Light"))
    menuDrive.setAttribute("textstring", qsTr("Drive"))
    menuRotate.setAttribute("textstring", qsTr("Rotate"))
}

Studio3D{
    anchors.fill: parent

    Presentation {
        id: cluster
        source: "qrc:/presentation/3d_example.uia"

        Element{
            id: menuLight
            elementPath: "Scene.MenuLayer.Menu.Light"
        }
        Element{
            id: menuDrive
            elementPath: "Scene.MenuLayer.Menu.Drive"
        }
        Element{
            id: menuRotate
            elementPath: "Scene.MenuLayer.Menu.Rotate"
        }

        Component.onCompleted: {
            if(langKor)
                setLanguageMenu()
        }
    }
}

...

 

이제 프로젝트를 빌드하고 어플리케이션이 실행되면 번역된 문자열이 출력된다.

translation_kor.png

 

 

번호 제목 글쓴이 날짜 조회 수
공지 Qt프로그래밍(QtQuick) Beginner를 위한 글 읽는 순서 운영자 2019.01.05 86204
30 Qt Version확인 방법 makersweb 2018.03.29 3535
29 임의의 메모리 영역(QImage)에 QPainter를 이용하여 그리기 file makersweb 2017.12.19 3465
» 다국어 지원 어플리케이션 개발 file makersweb 2018.01.27 2986
27 QTextCodec클래스를 사용하여 유니코드와 EUC-KR 변환 makersweb 2019.03.25 2911
26 UI 폼(Form)작성 시 탭 순서(Tab Order) 설정 file makersweb 2020.08.24 2815
25 구글 클라우드 Speech-To-Text API를 Qt기반(C++, Qml)테스트 [7] file makersweb 2019.01.20 2624
24 QOpenVirtualkeyboard(Qt 5용 한글 및 영문, 숫자 가상키보드) file makersweb 2019.11.27 2251
23 [Qt News] Qt 6 기술 비전 (Technical vision for Qt 6) [2] j2doll 2019.08.08 2123
22 Qt Property(속성) 시스템 makersweb 2023.01.08 1906
21 소스코드에서 환경변수 가져오기와 설정하기 makersweb 2018.10.08 1809
20 VTK 를 사용해서 강력한 시각화(3D, Plotting, Chart)Qt 응용프로그램 개발하기 file makersweb 2022.10.16 1678
19 컨테이너에 적재된 객체를 편리하게 삭제하기 makersweb 2019.09.18 1672
18 타임스탬프( timestamp) 유닉스 시간 makersweb 2017.10.19 1627
17 [Qt News] Qt for Python을 위한 기술 비전 j2doll 2019.08.20 1627
16 표를 만들고 PDF문서로 출력하기 file makersweb 2018.09.30 1609
15 qInstallMessageHandler를 이용한 디버그 메세지 출력 제어하기 makersweb 2019.02.25 1363
14 Widgets(C++) 기반의 기본 스타일을 Dark 테마 및 Material 디자인 스타일로 바꾸기 file makersweb 2023.01.28 1322
13 많은 리소스를 사용하는 Qt프로젝트에서 고려해봐야 할 qmake 옵션 makersweb 2019.10.11 1237
12 QOpenGLWidget 을 투명하게 적용 file makersweb 2020.02.05 1046
11 Qt 하이브리드 애플리케이션(Hybrid App) 개발 file makersweb 2023.02.08 1042