嘿,我目前正在爲我的學習開發一個django應用程序,並且到了l18n的地步。本地化網站本身非常簡單,但現在我必須允許用戶翻譯應用程序的動態內容。 用戶可以將「產品」保存在數據庫中,併爲其提供名稱和說明,但由於整個網站都應該進行本地化,因此我必須提供將這些名稱和說明翻譯成用戶的方式。如何本地化一個Django應用程序的內容
django有沒有一種自然的方式來做到這一點?或者我要實現它作爲應用程序的一部分(由代表在數據模型中譯本)
感謝,賈尼奧斯奇
嘿,我目前正在爲我的學習開發一個django應用程序,並且到了l18n的地步。本地化網站本身非常簡單,但現在我必須允許用戶翻譯應用程序的動態內容。 用戶可以將「產品」保存在數據庫中,併爲其提供名稱和說明,但由於整個網站都應該進行本地化,因此我必須提供將這些名稱和說明翻譯成用戶的方式。如何本地化一個Django應用程序的內容
django有沒有一種自然的方式來做到這一點?或者我要實現它作爲應用程序的一部分(由代表在數據模型中譯本)
感謝,賈尼奧斯奇
我建議檢出django-multilingual。這是第三方應用程序,可讓您在模型上定義翻譯字段。
當然,您仍然需要鍵入實際的翻譯,但它們會透明地存儲在數據庫中(而不是靜態PO文件中),這是我相信您所問的。
這取決於誰將會提供翻譯。如果你想爲翻譯提供一個網頁界面,那麼你需要自己開發,並且也代表數據庫中的翻譯。
如果翻譯該網站的同一翻譯人員也會翻譯這些數據,則可以爲他們提供他們用於該網站的相同模型(可能爲gettext),然後您也可以使用gettext來獲取此內容。
「我必須提供將這些名稱和描述轉換爲用戶的方法。」
「django有沒有這樣做的自然方法?」
您是否問Django是否可以從語言翻譯成語言?你在問關於http://translate.google.com/的事嗎?
我不認爲Django可以將用戶輸入翻譯成另一種語言。
如果您要爲您的用戶進行翻譯,那麼這必須是您的數據模型的一部分。
Django的i18n過濾器允許你有一個翻譯字符串表。 documentation這樣說。
有對翻譯內容說明的兩個項目在Django: http://code.google.com/p/django-multilingual/ http://code.google.com/p/transdb/
我用django-multilingual的內容本地化和django-localeurl基於URL選擇語言(例如我的空間/ EN /)。
您可以看到multilingua和localeurl如何在JewishKrakow.net頁面上工作。
也在尋找內容本地化插件,或者如何編寫它。 可以添加到列表django-i18n-model
我想你應該分兩個步驟進行操作:
對於第一步,你應該告訴Django是用戶插入的字符串將被翻譯。我認爲沒有原生的方式來這樣做。也許你可以從你的數據庫中提取字符串,將它們放在特定於語言環境的文件中,在它們上運行「makemessages」,獲取django.po文件並進行翻譯。
其次,使用ugettext在Web應用程序上顯示這些字符串。
希望這可以幫助那些與你同樣的問題。
或者試試這個:
http://packages.python.org/django-easymode/i18n/index.html
它保持非常接近,你會怎麼做,通常一個Django模型,你只需要添加你的模型上面1層的裝飾。它具有對翻譯字段的管理支持,包括內聯和通用內聯。幾乎所有可以用常規模型和管理員課程所做的任何事情都可以用國際化版本來完成。
我在我的網站上有2種語言:英語和阿拉伯語 用戶可以在點擊標誌的語言之間切換。 在模型中我使用代理模式:
class Product(models.Model):
name=models.CharField(max_length=100)
name_ar=models.CharField(max_length=100, default='')
def __unicode__(self):
return self.name
class Product_ar(Product):
def __unicode__(self):
return self.name_ar
class Meta:
proxy=True
在形式我用2種形式,而不是一個:
class CollectionEditForm_en(forms.Form):
name = forms.CharField(label=_('Name'), max_length=100, widget=forms.TextInput(attrs={'size':'50'}))
product = forms.ModelChoiceField(label=_('product'), queryset=Product.objects.filter(enabled=True), empty_label=None)
class CollectionEditForm_ar(forms.Form):
name = forms.CharField(label=_('Name'), max_length=100, widget=forms.TextInput(attrs={'size':'50'}))
product = forms.ModelChoiceField(label=_('product'), queryset=Product_ar.objects.filter(enabled=True), empty_label=None)
檢查代碼的語言是這樣的:
if request.LANGUAGE_CODE=='ar':
CollectionEditForm=CollectionEditForm_ar
else:
CollectionEditForm=CollectionEditForm_en
所以模板我檢查:
{% if LANGUAGE_CODE == "ar" %}
<a href="/product/{{product.alias}}/">{{product.name_ar}}</a>
{% else %}
<a href="/product/{{product.alias}}/">{{product.name}}</a>
{% endif %}
希望此解決方案能夠幫助某人
您是否在生產環境中測試解決方案,以及它與django-multilingual-ng相比如何?我選擇了一種新的方法來本地化數據庫字段,因爲Django 1.2+和django-multilingual-ng看起來完全無法使用django-multilingual。 – stricjux 2011-02-21 14:46:49