2010-07-28 22 views

cevap

97

Geçerli olan özel işlevler, geçerli iş parçacığında kullanılan dili döndüren django.utils.translation.get_language() şeklindedir. Bakınız documentation.

+0

Bağlantı şimdi kesildi, [bu bir] olmalıdır (https://docs.djangoproject.com/es/1.9/ref/utils/#django.utils.translation.get_language). – LostMyGlasses

+1

Uyarı: * Çeviriler geçici olarak devre dışı bırakılmışsa (deactivate_all() ile veya Geçersiz kılmak için Hiçbiri geçmediyse()) döner. Django 1.8'den önce, çeviriler devre dışı bırakıldığında get_language() her zaman LANGUAGE_CODE öğesinin başına döndü. * – Pieter

0

Dil bilgisi için sistemin locale kodunu okuyabilirsiniz.

+5

-3 'ye yönetiliyorsunuz, ama sanırım soru belirsiz - "web'in şu anki dili". Bunu tahmin etmenizin hatası, işletim sistemi anlamına gelmez. – mikemaccana

68

Ya siz de görünümlerde bu alabilirsiniz

request.LANGUAGE_CODE
+5

Buna oy verdim (herhangi bir nedenle -1'den). Aşağıdakilere dikkat edin (http://docs.djangoproject.com/en/dev/topics/i18n/deployment/#how-django-discovers-language-preference adresinden statik (middleware-less) çeviri ile, dil ayarları .LANGUAGE_CODE, dinamik (middleware) çevirisiyle birlikte, istekte bulunur.LANGUAGE_CODE. " –

+3

Bu bağlantı öldü ve yukarıda belgelenen kabul edilen çözümü kullanmama nedenim yok:" django.utils.translation.get_language() " – qris

+2

Örneğin bir dilin istenmediği durumlarda modele ulaşmak mümkün olmayacaktı. Bence "django.utils.translation.get_language()" '' her zaman daha iyi bir çözüm. – Hussam

7

Sadece o zaman django.utils.translation.get_language() kullanmak yaparsanız akılda tutulması gerektiğini eklemek için bu kodu o bölüm bir kereviz olarak örneğin (eşzamansız adı verilecek olursa Görev) o zaman bu yaklaşım farklı bir iş parçasında çalıştığı için çalışmayacaktır.

+2

Buradaki bariz yaklaşım dili görev parası olarak geç ter ve sonra dili çeviri ile ayarlayın.activate (language) – xyzman

21

dilini almak için kullandığınız yönteme dikkat edin. Hangi yönteme bağlı olarak, Django kullanmak için doğru yolu belirlemek için farklı yollar ve bilgiler kullanacaktır.

django.utils.translation.get_language() işlevini kullanırken, iş parçacığı diline bağlanır. Django 1.8'den önce, çeviriler devre dışı bırakıldığında her zaman settings.LANGUAGE_CODE döndü. el iplik dilini geçersiz kılmak isterseniz, çok açık bir şekilde adlandırılmış, ama iyi, hala yararlı değildir override() veya activate() işlevleri kullanabilirsiniz:

from django.utils import translation 

with translation.override('fr'): 
    print(_("Hello")) # <= will be translated inside the with block 

translation.activate('fr') # <= will change the language for the whole thread. 
# You then have to manually "restore" the language with another activate() 
translation.activate('en') # <= change languages manually 

Eğer yolunu kontrol etmek django istiyorsanız ve/ya da (dil çerezi, ...) talebi, yani çok daha yaygın olan örn. www.example.com/en/<somepath> vs www.example.com/fr/<somepath>, django.utils.translation.get_language_from_request(request, check_path=False) kullanın. Ayrıca, her zaman geçerli bir dil olan settings.LANGUAGES

'da döndürülür. Bu farklılıkları Google aracılığıyla bu konuyla ilgili bulmak çok kolay değildir.

+0

Bunun “django.utils.translation” olduğunu, çevirilerin olmadığını unutmayın. Verilen bağlantıda bir yazım hatası var. Snippet'te doğru. – J0ANMM

+0

@ J0ANMM: teşekkürler, düzeltildi;) django.utils.translation.get_language() 've' django.utils.translation.get_language_from_request (request, check_path) 'arasındaki fark için – achedeuzot

+1

+1. Görünüşte, ikincisini, şablonunuzun işleneceği dili almak için 'check_path = True' ile kullanmalısınız. –