2011-04-28 119 views
7

我有一個用荷蘭語寫的網站。現在我必須爲法語網站提供第二種語言。Django:默認語言i18n

因此,我包圍了所有需要使用gettext函數進行翻譯的文本,創建了po文件並將其編譯爲mo文件。我還創建了一個視圖,將django_language會話設置爲適當的語言代碼。所以現在法國版本正在工作,但我不能切換回荷蘭版本。

所以我想知道是否需要爲荷蘭版本創建一個po/mo文件?正在通過gettext的文本已經在荷蘭。有沒有辦法說使用'默認文本'?

這是我使用的語言代碼添加到我的會話視圖:不存儲在PO

<a href='{% url web-language 'nl-nl' %}'>NL</a> 
<a href='{% url web-language 'fr' %}'>fr</a> 
+0

我認爲你不能切換到荷蘭回來與你的語言環境文件無關,而是用你改變語言(視圖,中間件)的方式?你能否提供一些更詳細的信息?關於您的問題:不,您不需要爲您編寫可轉換字符串的語言提供語言環境文件。 – 2011-04-28 08:57:30

+0

我正在使用django.middleware.locale.LocaleMiddleware。我將添加將會話更改爲我的問題的視圖。 – Pickels 2011-04-28 09:00:52

回答

13

默認語言字符串:

class LanguagePickerView(RedirectView): 
    url = '/' 

    def get(self,request,*args, **kwargs): 
     request.session['django_language'] = self.kwargs.get('language') 
     return super(LanguagePickerView, self).get(request, args, kwargs) 

在我的模板我用下面的網址/ mo文件,他們直接在代碼和模板中 - 似乎你有這個權利。

您可以通過將會話變量django_language設置回荷蘭來切換回它。

確保,你有你的設置中的正確方法:

LANGUAGE_CODE = 'nl' #default language 

LANGUAGES = (
    ('nl', _('Dutch')), 
    ('fr', _('French')), 
) 

不要忘記,你不必編寫代碼,你的自我語言之間進行切換。更好地使用特殊的Django視圖(引自django book):

爲方便起見,Django提供了一個視圖django.views.i18n.set_language,它設置用戶的語言首選項並重定向回到上一頁。

通過添加以下行來你的URLconf激活這一觀點:

(r'^i18n/', include('django.conf.urls.i18n')), 
+0

這使它爲我工作,非常感謝。我錯過了URLconf部分。 – DrKaoliN 2013-05-26 10:19:20

2

這個問題和答案可能是有益的 - set language within a django view

不要忘記使用translation.activate(lang_code),這是非常重要的。

您可以使用標準方式使用post方法更改語言,或者編寫自己的中間件,然後將其更改爲例如url中的內容。

乾杯, Ignas

1

如果你使用{% url web-language 'nl-nl' %}這樣'nl-nl'是你argsargs[0]),而不是在你的kwargs。對於kwargs,您應該使用類似{% url web-language language='nl-nl' %}的語法。那麼你的看法應該工作。希望你的urlconf與視圖處理方式相匹配。

+0

感謝您捕捉該錯誤。 – Pickels 2011-04-28 10:45:26