2015-10-08 24 views
6

ファイル:Djangoの翻訳エスケープ%記号

#: .\appName\templates\appName\butterflies.html:54 
#, fuzzy, python-format 
#| msgid "" 
#| "100% butterfly" 
msgid "" 
"100%% butterfly" 
msgstr "" 
"100% shmetterling" 

コンパイルすると、テキストをドイツ語に翻訳できません。私は{% trans "100%% butterfly" %}をやってみましたが、ドイツ語と英語の両方で見ると "100 %% butterfly"と表示されます。私は同じ結果を得て、代わりにblocktransタグを使ってテキストを翻訳しようとしました。

.poファイルの余分な%を手作業で消去しますが、#, fuzzy, python-format行は動作しますが、翻訳しようとしているすべての%記号に対してこれを行う必要はありません。

これを私のHTMLでエスケープすると、Djangoは.poファイルでファジー変換の生成を停止し、いくつかのPythonの書式設定をしようとしていると思って混乱することはありません。

+3

'{%trans" 100 %バタフライ "%}"はこのトリックを行いますが、翻訳者にとって混乱を招く可能性があります。 – tayden

+0

あなたはmsgstrの.poファイルで '' 100 %% shmetterling "'を使ってみましたか? –

+0

ちょうど、はい。レンダリングされたhtml出力として "100 %% shmetterling"を得る – tayden

答えて

1

これは、Django 1.9に入っている可能性のある修正を含むDjangoの問題です。基本的に、それはあなたがあなたのトランステキストに%記号を入れたときに実行しようとしていると考えて書式設定のpythonを包含する

{% blocktrans with percent="%" %}100{{percent}} butterfly{% endblocktrans %}

を: つの回避策は行うことです。それは冗長で吸いますが、うまくいきます。

0

私はより良い方法は、htmlコードを使用することであると思う:%

それは例えばDjangoの翻訳を扱うための最もエレガントな方法です。

+0

これは開発者には当てはまりますが、htmlコードを理解していない翻訳者にとっては混乱します – tayden

+0

はい、しかし悲しいことに、djangoのjavascript翻訳ではできません。 '' '%' ''とあなたの翻訳者に警告するのが今日の最良の方法です。 –

3

DjangoのTracのthis commentによると、翻訳したい文字列の上にあるPython形式を無効にするために翻訳者のコメントを追加すると、この問題を修正/回避できます。

翻訳するテキストがあなたのPythonコード、使用中の場合:transテンプレートタグについては

# Translator: xgettext:no-python-format 
_('100% butterfly') 

、あなたが試すことができます:explained in the docとして

{# Translators: xgettext:no-python-format #} 
{% trans "100% butterfly" %} 

を。

+0

Javascriptでは、// Translators:xgettext:no-c-formatを使用しました。 –