/ opt에서 Glade로드 번역을 만드는 방법


9

Ubuntu 앱 개발자 프로세스를 통해 제출하려는 응용 프로그램을 만들었습니다 . 프로세스 요구 사항 중 하나는 설치시 모든 파일이 /opt/extras.ubuntu.com/<appname>디렉토리 로 이동해야한다는 것 입니다.

패키징 변경과 다른 사람들의 도움을 통해 그것을 달성했지만 이제는 새로운 문제에 직면하고 있습니다. /opt앱에서 번역을 실행할 때로 드되지 않습니다.

달리 지정되지 않는 한 응용 프로그램의 번역을 포함하는 이진 파일 (MO 파일)은 /usr/share/locale(또는 Ubuntu의 경우)에서 로드 /usr/share/locale-langpack되지만 /opt요구 사항 으로 인해 내 응용 프로그램 에 설치됩니다. /opt/extras.ubuntu.com/qreator/locale.

gettext를 사용하면 번역을로드 할 대체 위치를 지정할 수 있으므로 이론 상으로는 문제 bindtextdomain가되지 않습니다.

import gettext
from gettext import gettext as _
gettext.bindtextdomain('qreator', '/opt/extras.ubuntu.com/qreator/share/locale/')
gettext.textdomain('qreator')

명령 줄에 출력 된 모든 메시지가 예상대로 번역 된 것으로 나타납니다. 그러나 주요 문제를 해결하지 못합니다 : UI Glade에서 번역을로드하려면 번역 도메인을 한 번 더 지정해야 gettext.textdomain('qreator')하지만 (위 의 호출 과 동일 ) 번역을로드 할 위치를 지정하지 않습니다 (예 : Glade bindtextdomain슬프게도 존재하지 않습니다). 다음은 내가 사용하는 코드의 추출입니다.

builder = Gtk.Builder()
builder.set_translation_domain('qreator')
# There isn't a way to tell glade to load translations from
# somewhere else than /usr/share/locale here
builder.add_from_file(ui_filename)

이는 기본적으로 앱이에 설치된 경우 UI에서 번역을로드 할 수 없음을 의미합니다 /opt.

나는이 시점에서 거의 붙어 있습니다. Glade에서 /opt/extras.ubuntu.com/qreator/share/locale/대신에 번역을로드하는 방법에 대한 아이디어 가 /usr/share/locale있습니까?


Gtk.Builder에 대해 더 잘 아는 사람과 이야기를 나눈 후에 버그를 신고했습니다. bugzilla.gnome.org/show_bug.cgi?id=676543
David Planella

나는 또한 해결 방법을 지적했지만 나에게는 효과가없는 것 같습니다-여기 있습니다 : bugs.debian.org/cgi-bin/bugreport.cgi?bug=114461#12
David Planella

파이썬 코드에 최소한의 실행 가능한 예제를 모두 포함시킬 수 있습니까? 이것에 대해 자세히 설명하지만 Gtk.Builder ()를 얻기 위해 어떤 수입을 놓치고 있는지 잘 모르겠습니다.
slangasek

n / m, 분명히 그것은 'import gtk'입니다.;)
slangasek

1
맞아-포기, gettext.bindtextdomain ()을 빈번하게 잡을 수있는 건전한 방법이없는 것 같습니다 : /
slangasek

답변:


10

해결책을 찾았습니다 : gettext 대신 로케일 Python 모듈을 사용하십시오.

import locale
from locale import gettext as _
locale.bindtextdomain('qreator', '/opt/extras.ubuntu.com/qreator/share/locale/')
locale.textdomain('qreator')

설명을 제공 한 # gtk + IRC 채널의 Juha Sahakangas에게 감사드립니다.

이 특정한 경우에는 gettext 대신 로케일 모듈을 사용해야합니다 . 파이썬의 gettext 모듈은 순수한 파이썬입니다. 실제로 C 라이브러리가 읽을 수있는 방식으로 텍스트 도메인을 설정 하지 않지만 로케일 은 (libc를 호출하여) 수행합니다. 그것이 완료되는 한 GtkBuilder는 이미 요청한 방식으로 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.