2017-09-28 15 views
0

私たちはDjangoを私たちのバックエンドREST APIサーバとして使用しています。私はプッシュ通知として送信されているテキストを私たちのアプリに翻訳したいと考えています。私は翻訳の初心者です。Django翻訳 - 動的文字列の翻訳

テキストは設定ファイル内にあり、ユーザーごとに異なります。

NOTIFICATION_TEXT = { 
    'access_request': '%(user_name)s has requested to access your document %(story_name)s, please review '} 

私は、Googleが機能を翻訳し、最後の文は、user_nameとstory_nameを理解与えられたが一定であれば、それは完全に翻訳しました。 RESTコールのAccept-languageヘッダーで受け取ったロケールでユーザーに送信する前に、最終メッセージをラップすることができるDjangoで同様のマジックバンド機能を探していました。しかし、これは可能ではないようです。

私が理解しているように、翻訳する必要のあるテキストには、ugettextで事前にマークし、言語とミドルウェアの設定を定義する必要があります。その後

django-admin makemessages -l de

を使用してlocale特定のファイルを生成し、その特定のロケールの生成django.poファイルに参照するためのDjangoのために手動で翻訳されたテキストを与えます。

しかし、私のメッセージが動的で、ダイの中にあるという印をつける方法にはまっています。それとも別の方法がありますか?

編集:

データができ、この場合には、動的コンテキストを挿入する前に、メッセージに適切な変換関数を適用する必要が

data['msg'] = settings.NOTIFICATION_TEXT['access_request'] % \ 
       dict(
       user_name=get_user_name(sender), 
       story_name=story.story_name 
      ) 

答えて

3

以下のようにアクセスされる(モジュールレベル、Iは仮定)それは怠惰なものの一つのようになります。

from django.utils.translation import ugettext_lazy as _ 

NOTIFICATION_TEXT = { 
    'access_request': _('%(user_name)s has requested to access your document %(story_name)s, please review ') 
} 

makemessages -l deは、ロケールのdjango.poにエントリを作成します。

msgid "%(user_name)s has requested to access your document %(story_name)s, please review " 
msgstr "" 

翻訳された文字列は変更されずに、すべての動的プレースホルダが含まれている必要があります:あなたの翻訳機能を適用後にメッセージに(user_namestory_name)コンテキストを適用することが重要である

msgid "%(user_name)s has requested to access your document %(story_name)s, please review " 
msgstr "%(user_name)s hat Zugang zu Ihrem Dokument %(story_name)s beantragt, bitte überprüfen Sie " 

をアーキテクチャーはこの時点ですでにかなり強制されています:

message = NOTIFICATION_TEXT['access_request'] % {'user_name': 'foo', 'story_name': 'bar'} 
+0

これで、私は 'django.po'ファイルにabo "msgstr"を挿入しましたが、それでもまだ最終テキストを翻訳していません。私の 'settings.py'ファイルには' LANGUAGE_CODE = 'de''、 'USE_I18N = True'があります。ミドルウェアには、' django.middleware.locale.LocaleMiddleware'、 'Sesssionの後、Commonの前に'を追加しました。彼らが助けてくれるのかどうかは分かりません。 – garg10may

+0

私に見える。デバッグを追加して、どの言語がアクティブになっているかを確認する必要があります。あなたはdjangoシェルでそれを試し、手動でドイツ語を起動するかもしれません。 ( 'django.utils.translation.activate( 'de')')。ところで、あなたは 'compilemessages'を呼び出しましたか? – schwobaseggl

+0

Ran 'compilemessages'を実行し、手動で' de'を起動し、シェルからテストしましたが、翻訳された文字列を取得しませんでした。あなたが私のことを意味していたのですが、翻訳機能を適用した後に文脈を適用しなければなりませんでした – garg10may

関連する問題