2009-12-22 49 views
12

我想僅使用App Engine中直接提供的工具以用戶自己的語言提供我的Python GAE網站。爲此,我想使用GNU gettext文件(.po和.mo文件)。如何創建國際化的Google App Engine應用程序

有人成功結合Python Google App Enginegettext文件?如果是這樣,你能否提供你使用的步驟?

我已經開始a discussion in GAE's Google group,但一直未能從中提取我想如何去做:我不想添加外部依賴,比如Babel(在討論中建議)。我想使用普通的香草Google App Engine,所以沒有手動更新Django或這種東西。

剛開始,我將開始使用瀏覽器發送的語言,所以沒有必要通過使用Cookie等,但是手動強制語言,我可能會在以後添加語言變化的特徵,一旦基本國際化工作。

作爲背景說明,爲您提供有關我正在嘗試執行的操作的更多詳細信息,我希望國際化問題跟蹤器跟蹤器,這是我在Launchpad上託管的一個開源應用程序。我打算使用Launchpad的翻譯平臺(解釋爲什麼我想要使用.mo文件)。你可以看看源代碼,它的集市分支(抱歉沒有聯繫,由於計算器爲新用戶防止垃圾郵件限制...)

感謝您幫助我推動這個項目!

回答

4

您可以使用Django的國際化工具,像解釋here

他們也說,有沒有簡單的方法來做到這一點。

我希望可以幫助你:)

+2

感謝您的鏈接,我已經嘗試在我以前的嘗試中使用它,但無法使其實際工作。我昨天晚上再次嘗試,雖然我設法擺脫了任何異常,但仍然沒有任何翻譯......我將繼續嘗試使其工作,因爲它顯然必須工作,因爲有一個示例應用程序!如果我成功了,我會告訴你。 – Emilien 2009-12-23 08:15:35

+1

我終於能夠國際化我的申請!我試着按照你發送的鏈接進行解釋,但有些東西沒有工作,所以我閱讀從文章鏈接的代碼示例,並從實際代碼複製/粘貼,它工作!再次感謝您的鏈接!如果任何人有興趣,你可以看看我的應用程序的實際變化:http://bazaar.launchpad.net/~itt-devs/issuetrackertracker/main/revision/130 – Emilien 2009-12-28 16:07:31

+0

這不是一個真正的解決方案,除非你正在使用Django。 – rbanffy 2014-01-02 00:17:09

6

由於我的需求很簡單,我用了一個簡單的黑客,而不是(不可用)的gettext。我用字符串翻譯創建了一個文件,translate.py。大約是這樣的:

en={} 
ru={} 

en['default_site_title']=u"Site title in English" 
ru['default_site_title']=u"Название сайта по-русски" 

然後在主代碼我定義的返回與翻譯字典到從列表中選擇最合適的語言的功能(具有翻譯的第一個被用來或英語):

import translate 

def get_messages(languages=[]): 
    msgs=translate.en 
    for lang in languages: 
     if hasattr(translate,lang): 
      msgs=getattr(translate,lang) 
      break 
    return msgs 

用法:

msgs = get_messages(["it","ru","en"]) 
hi = msgs['hello_message'] % 'yourname' 

我也定義了提取從Accept-Language頭的語言列表的輔助函數。

這不是最靈活的解決方案,但它不具有任何外部的依賴和對我的作品(在一個玩具項目)。我認爲translate.py可能會從gettext文件自動生成。

如果你想看到更多的,我的實際來源是here

+0

感謝您的詳細解釋。我曾考慮過使用這種方法,但我真的很想能夠利用Launchpad中所有活動的譯者的力量,所以我需要使用標準的gettext。我只會用這種解決方案作爲最後的手段,但是謝謝! – Emilien 2009-12-23 08:13:39

+0

我認爲從gettext文件編寫一個'編譯器'到這樣的python代碼會很好。 – sastanin 2009-12-24 16:15:51

+2

不正確 - App Engine只要與應用一起上傳,就可以訪問「普通」文件。如何加載模板? – 2009-12-24 19:22:01