Django i18n string with form field

筆記一下。譬如我想要翻譯 "come home after n days" 這句,"n" 是一個 input 欄位。如果要把句子前後拆開來翻譯的話,會造成一些問題: "come home after" 要翻成 "","days" 要翻成 "天後回家",我想這不會是一個好的作法,而且會造成一些混淆,如果能用一個句子翻譯掉的話相對會比較簡單。我的作法如下,首先在 template 這樣用:

{% blocktrans with n=form.every_n_days %}come home after {{ n }} days{% endblocktrans %}

form.every_n_days 是一個 input field,n 的名稱是隨意定的。

接著用 ./manage.py makemessages -l zh_TW -e html --no-location 更新 po 檔 (這邊 makemessages 的參數要看實際需求做調整),接著在 po 檔裡補上對應的翻譯字串:

msgid "come home after %(n)s days"
msgstr "(%n)s 天後回家"

msgid 這行在 makemessages 的時候會幫你產生,所以只需要輸入對應的 msgstr 這行就好。大致是這樣~。

carlcarl

Read more posts by this author.