2013-11-22 3 views
0

gettext의 _ ("label") 구조를 사용하여 레이블이 지정된 축으로 matplotlib 플롯을 표시하려고합니다. 최소한의 예제를 만들려고 다음 파이썬 코드를 생각해 냈습니다. 그것은이 같은 NULLTranslations()를 통해 잘 실행 :i18n (gettext) 지원을 사용하는 gtk 윈도우의 matplotlib

파이썬 mpl_i18n_test.py

하지만 일본어로 전환 할 때, 나는 음모에 작은 사각형만을 얻을 -하지만 명령 줄, 번역에 잘 보면 : pygtk, NumPy와,하기 matplotlib :

LANG = ja_JP.utf8 파이썬 mpl_i18n_test.py 여기

은이 설치된 모나 - 사자 나미 글꼴 및 다양한 파이썬 모듈을 필요로하는 파일 mpl_i18n_test.py 주입니다 , gettext 및 polib

그럼 내 질문 : 매트 트랩이 gettext로 멋지게 놀기위한 트릭이 있습니까? 내가 여기서 뭔가 분명한 것을 놓치고 있니? 고맙습니다.

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

from __future__ import unicode_literals 

import gtk 

import numpy as np 
import matplotlib as mpl 

from matplotlib.figure import Figure 
from matplotlib.backends.backend_gtkagg import \ 
    FigureCanvasGTKAgg as FigureCanvas 
from matplotlib.backends.backend_gtkagg import \ 
    NavigationToolbar2GTKAgg as NavigationToolbar 

import locale 
import gettext 
import polib 

mpl.rcParams['font.family'] = 'mona-sazanami' 

def append(po, msg): 
    occurances = [] 
    for i,l in enumerate(open(__file__,'r')): 
     if "_('"+msg[0]+"')" in l: 
      occurances += [(__file__,str(i+1))] 
    entry = polib.POEntry(msgid=msg[0], 
          msgstr=msg[1], 
          occurrences=occurances) 
    print msg 
    print occurances 
    po.append(entry) 

def generate_ja_mo_file(): 
    po = polib.POFile() 
    msgs = [ 
     (u'hello', u'こんにちは'), 
     (u'good-bye', u'さようなら'), 
     ] 
    for msg in msgs: 
     append(po, msg) 

    po.save('mpl_i18n_test.po') 
    po.save_as_mofile('mpl_i18n_test.mo') 
    return 'mpl_i18n_test.mo' 

def initialize(): 
    '''prepare i18n/l10n''' 
    locale.setlocale(locale.LC_ALL, '') 
    loc,enc = locale.getlocale() 
    lang,country = loc.split('_') 

    l = lang.lower() 
    if l == 'ja': 
     filename = generate_ja_mo_file() 
     trans = gettext.GNUTranslations(open(filename, 'rb')) 
    else: 
     trans = gettext.NullTranslations() 
    trans.install() 

if __name__ == '__main__': 
    initialize() # provides _() method for translations 

    win = gtk.Window(gtk.WINDOW_TOPLEVEL) 
    win.connect("destroy", lambda x: gtk.main_quit()) 
    win.connect("delete_event", lambda x,y: False) 

    win.set_default_size(400,300) 
    win.set_title("Test of unicode in plot") 


    fig = Figure() 
    fig.subplots_adjust(bottom=.14) 
    ax = fig.add_subplot(1,1,1) 
    xx = np.linspace(0,10,100) 
    yy = xx*xx + np.random.normal(0,1,100) 
    ax.plot(xx,yy) 

    print 'hello --> ', _('hello') 
    print 'good-bye --> ', _('good-bye') 

    ax.set_title(u'こんにちは') 
    ax.set_xlabel(_('hello')) 
    ax.set_ylabel(_('good-bye')) 

    can = FigureCanvas(fig) 
    tbar = NavigationToolbar(can,None) 

    vbox = gtk.VBox() 
    vbox.pack_start(can, True, True, 0) 
    vbox.pack_start(tbar, False, False, 0) 

    win.add(vbox) 


    win.show_all() 
    gtk.main() 

답변

0

해결책은 번역이 "설치"되었을 때 단순히 유니 코드를 지정하는 것이 었습니다. 이 한 줄의 변화였다

trans.install(unicode=True) 

나는이 만 파이썬 2.7에서 필요하지만, 파이썬 3에서 필요하지 파이썬 2.6처럼 보이는 것을 추가하고 이전 여전히

에 문제가있을 것이다