gettext를 사용하여 QML 파일을 번역 할 수있는 방법


10

Python ( PySide ) 및 QML 기반 QtQuick 앱 을 작성하고 싶습니다 .

Qt 앱에 자체 번역 기술이 있다는 것을 알고 있지만 이에 대한 gettext 를 고수하고 싶습니다 . 가능한지 알고 싶습니다.

  • gettext 도구가 .pot파일 로 추출 할 수있는 방식으로 QML 파일에서 번역 할 문자열 표시
  • 런타임시 gettext가 QML 파일을 번역하도록합니다.

이것이 C ++ 의 Unity 2D 코드 에서 수행된다는 것을 알고 있으므로 파이썬으로 어떻게 수행 할 수 있는지 궁금합니다.

참고 : gettext와 Qt Linguist 형식 간의 변환이 아니라 런타임에 독점적으로 gettext를 사용하는 것에 대해 이야기하고 있습니다.

답변:


6

라이브러리가 QTBUG-2404에 명시된대로 내부 변환 메커니즘 (Qtranslate 및 .ts 파일)을 사용하므로 일반적으로 QT에서 gettext 변환을 사용할 수있는 방법이 없습니다 .

그러나 실행 가능한 대안이 있습니다.

QT와 함께 제공 되는 .ts 파일을 .po로 변환하거나 그 반대로 변환하는 데 사용할 수있는 lconvert 라는 툴킷 이 있습니다.

따라서 다음을 사용하여 모든 번역을 추출 할 수 있습니다.

lupdate

그런 다음 lconvert 를 사용하여 po 파일을 얻으십시오.

lconvert -of po -o file.po file.ts

번역 후 po 파일을 ts로 다시 변환 할 수 있습니다.

lconvert -of ts -o file.ts file.po

그런 다음 소프트웨어에서 사용할 수 있습니다.

lupdate 는 QT와 QtQuick 모두에 사용할 수 있습니다.


1
답변 해주셔서 감사합니다!. 변환 도구를 알고 있지만 런타임에 gettext가 번역을로드하지 않습니다. Unity 2D 사용자가 C ++에서 수행하는 것처럼 Qt 변환 호출을 재정 의하여 기술적으로 가능하다는 것을 알고 있습니다.
David Planella

0

lupdate의 소스를 해킹하여 qsTr을 대체하려는 것을 사용할 수 있습니다. (쉽게) 그런 다음 해킹 된 lupdate + lconvert + 사용하여 gettext 목표를 달성하기 위해 libintl을 사용자 정의하십시오.


1
방법을 설명하십시오.
Kaz Wolfe

qdeclarative.cpp를 연다 (lupdte 소스 코드에서) "qsTr"을 원하는 것으로 대체하고 "dsTr"을 사용한다고 가정하자. 그런 다음 qml에서 dsTr ( "you string")을 사용하십시오. 수정 lupdate를 사용하여 ts 파일을 생성 한 후 lconvert를 사용하여 pot 파일을 생성하십시오. 마지막으로 dsTr을 글로벌 컨텍스트로 구현하고 내 보내야합니다.
snyh

가서 답에 넣으십시오. 일반적인 규칙과 마찬가지로 항상 방법과 출처를 알려주십시오.
Kaz Wolfe
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.