12

App Engine で直接利用できるツールのみを使用して、Python GAE Web サイトをユーザーの言語で提供したいと考えています。そのために、GNU gettext ファイル (.po および .mo ファイル) を使用したいと考えています。

Python Google App Enginegettextファイルの組み合わせに成功した人はいますか? もしそうなら、あなたが使用した手順を教えてください。

GAE の Google グループでディスカッションを開始しましたが、どのようにやりたいかをそこから引き出すことができませんでした: Babel のような外部依存関係を追加したくありません (ディスカッションで提案されています)。プレーンなバニラの Google App Engine を使いたいので、Django の手動更新などは必要ありません。

最初はブラウザから送信された言語を使い始めるので、Cookie などを使用して手動で言語を強制する必要はありません。ただし、基本的な国際化が機能したら、後で言語変更機能を追加する可能性があります。

私がやろうとしていることの詳細を説明するためのバックグラウンド ノートとして、Launchpad でホストしているオープン ソース アプリケーションであるIssue Tracker Trackerを国際化したいと思います。Launchpad の翻訳プラットフォームを使用する予定です (.mo ファイルを使用したい理由を説明しています)。ソースコードは Bazaar ブランチで見ることができます (新しいユーザーに対するスタックオーバーフローのスパム防止制限のため、リンクがありません...)

このプロジェクトを進めるのを手伝ってくれてありがとう!

4

2 に答える 2

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.pygettext ファイルから自動的に生成される可能性があると思います。

もっと見たい場合のために、私の実際のソースはこちらです。

于 2009-12-22T13:34:35.377 に答える
4

here で説明されているように、Django 国際化ツールを使用できます。

彼らはまた、これを行う簡単な方法はないと言っています。

お役に立てば幸いです:)

于 2009-12-22T13:34:01.757 に答える