2013-03-30 34 views
0

我想翻譯視頻遊戲https://github.com/mdtrooper/Obb,但gettext方法_(「string」)返回一個非Unicode字符串。Pygame,gettext和unicode字符串

嗯,我做了一個簡單的例子來說明這個問題:

的文件是UTF8編碼:

# -*- coding: utf-8 -*- 

import pygame, os 

import locale 
import gettext 

gettext.textdomain('caca') 
_ = gettext.gettext 

def main(): 
    path_i18n = os.getcwd() + '/i18n/' 
    gettext.bindtextdomain('caca', path_i18n) 

    pygame.init() 
    screen = pygame.display.set_mode((640, 480), 0, 32) 
    screen.fill(pygame.Color(255, 255, 255, 255)) 

    font = pygame.font.Font("Isuckatgolf.ttf", 30) 

    text = font.render(_("caca"), True, pygame.Color(0, 0, 0, 255)) 
    screen.blit(text, (0,0)) 

    unstraslate_text = font.render(u"ñadu", True, pygame.Color(0, 0, 0, 255)) 
    screen.blit(unstraslate_text, (100, 100)) 

    pygame.display.update() 

    exit = False 

    while not exit: 
     for e in pygame.event.get(): 
      if e.type == pygame.QUIT: 
       exit = True 
      elif e.type == pygame.KEYDOWN: 
       if e.key == pygame.K_ESCAPE: 
        exit = True 

    pygame.quit() 

if __name__ == '__main__': 

這是西班牙語的PO文件:

# SOME DESCRIPTIVE TITLE. 
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 
# This file is distributed under the same license as the PACKAGE package. 
# FIRST AUTHOR <[email protected]>, YEAR. 
# 
#, fuzzy 
msgid "" 
msgstr "" 
"Project-Id-Version: PACKAGE VERSION\n" 
"Report-Msgid-Bugs-To: \n" 
"POT-Creation-Date: 2013-03-30 14:06+0100\n" 
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 
"Last-Translator: FULL NAME <[email protected]>\n" 
"Language-Team: LANGUAGE <[email protected]>\n" 
"Language: \n" 
"MIME-Version: 1.0\n" 
"Content-Type: text/plain; charset=UTF-8\n" 
"Content-Transfer-Encoding: UTF-8\n" 

#: test.py:19 
msgid "caca" 
msgstr "ñandu" 

中當然字體沒有Ñ或ñ字符,但我已修改爲添加此字符,您可以在http://depositfiles.com/files/dwwmp912m

例如,第一個字符串(翻譯的字符串)顯示不好,但第二個顯示良好。

回答

0

我找到了。

我已經寫在其他文件中的代碼(i18n.py):

# -*- coding: utf-8 -*- 

import locale 
import gettext 
import os 

path_i18n = os.getcwd() + '/i18n/' 

t = gettext.translation('Obb', path_i18n) 
_ = t.ugettext 

但問題是蟒蛇拋出錯誤:

NameError: global name '_' is not defined 

當我嘗試爲使用:

from i18n import * 

但隨着代碼:

from i18n import _ 

運行良好。

+0

任何以'_'開頭的符號都被'import *'忽略。這是設計。 –