2015-10-08 63 views
6

我試圖把這種包含像這樣一個百分號一些文字:Django的翻譯逃生%符號

{% trans "100% butterfly" %}

當我運行makemessages命令,我得到我的德國的.po以下輸出文件:

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

編譯時無法將文本翻譯爲德語。我嘗試過{% trans "100%% butterfly" %},但這會導致頁面在德語和英語中都顯示「100%蝴蝶」。我也試過使用blocktrans標籤來翻譯文本,結果相同。

手動清除.po文件中的額外%,以及#, fuzzy, python-format一行可以工作,但我寧願不必爲要翻譯的每個%符號執行此操作。

如何在我的HTML中對此進行轉義,以便Django停止在.po文件中生成模糊轉換並且不會感到困惑思考我正在嘗試執行一些python格式化?

+3

看起來像做'{%trans'100 %蝴蝶「%}」確實有效,但可能會讓翻譯人員感到困惑。 – tayden

+0

您是否嘗試在msgstr的.po文件中使用'「100 %% shmetterling」'? –

+0

剛纔,是的。我得到「100 %% shmetterling」作爲呈現的html輸出 – tayden

回答

1

原來,這是一個Django 1.9中出現的可能會出現問題的Django問題。 一個解決辦法是要做到:

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

基本上涵蓋了Python格式化它認爲你想,當你把一個象徵%在你的反式文本做。它是冗長而吮吸,但它的工作原理。

0

我認爲更好的辦法是使用HTML代碼:%

這是處理Django的翻譯例如最優雅的方式。

+0

對於開發人員來說,這是真的,但是,對於不懂html代碼的翻譯人員來說,這也是令人困惑的。 – tayden

+0

是的,但不幸的是,你不能用django javascript翻譯來做到這一點。 '''%'''並且警告你的譯員是今天最好的方式。 –

3

根據Django的Trac中的this comment,添加一個翻譯器註釋以在想要翻譯的字符串上方停用python格式可以修復/解決此問題。

如果翻譯的文本是在你的Python代碼,使用方法:

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

對於trans模板標籤,你可以嘗試:

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

explained in the doc

+0

在Javascript中,我成功地使用了// Translators:xgettext:no-c-format –