मैं Django में वर्तमान भाषा कैसे प्राप्त कर सकता हूं?


92

मैं एक मॉडल में या व्यवस्थापक में वर्तमान थ्रेड में वर्तमान भाषा कैसे प्राप्त कर सकता हूं?


5
कृपया विशिष्ट रहें। 'मेरी वेब की भाषा' - क्या आप वेब अनुरोध, वेब सर्वर या क्या कहते हैं?
मिकमेकाना

जवाबों:


137

विशेष रुचि के कार्य हैं django.utils.translation.get_language()जो वर्तमान थ्रेड में उपयोग की गई भाषा को लौटाते हैं। प्रलेखन देखें ।


2
कैविएट: यदि कोई अनुवाद अस्थायी रूप से निष्क्रिय हो (निष्क्रिय
पीटर

88

या आप इसे अपने विचारों में भी प्राप्त कर सकते हैं

request.LANGUAGE_CODE

6
मैंने इसे (किसी कारण से -1 से) वोट दिया। निम्नलिखित पर ध्यान दें ( docs.djangoproject.com/en/dev/topics/i18n/deployment/… "स्थैतिक (मिडलवेयर-कम) अनुवाद के साथ, भाषा सेटिंग में है । LANGUAGE_CODE , जबकि डायनामिक (मिडलवेयर) अनुवाद से, इसमें है request.LANGUAGE_CODE। "
अलेक्जेंडर मारक्वार्ड

4
वह लिंक मृत है, और मुझे ऊपर दिए गए प्रलेखित स्वीकृत समाधान का उपयोग नहीं करने का कोई कारण नहीं django.utils.translation.get_language()
दिखता है

4
उदाहरण के लिए यदि कोई अनुरोध नहीं है तो भाषा को उदाहरण के लिए मॉडल में लाने की कोशिश करना संभव नहीं होगा। मुझे लगता है django.utils.translation.get_language()कि हमेशा एक बेहतर उपाय है।
हुसाम

एक टेम्पलेट में वर्तमान भाषा प्राप्त करने के बारे में क्या?
आजमुक

2
@azmeuk यह आपके लिए उपयोगी हो सकता है docs.djangoproject.com/en/dev/topics/i18n/translation/...
Ignas Butėnas

37

भाषा प्राप्त करने के लिए आपके द्वारा उपयोग की जाने वाली विधि से सावधान रहें । किस विधि के आधार पर, Django उपयोग करने के लिए सही भाषा निर्धारित करने के लिए विभिन्न तरीकों और informations का उपयोग करेगा।

django.utils.translation.get_language()फ़ंक्शन का उपयोग करते समय , यह थ्रेड भाषा से जुड़ा हुआ है । Django 1.8 से पहले, यह हमेशा वापस आता था settings.LANGUAGE_CODEजब अनुवाद अक्षम थे। यदि आप थ्रेड भाषा को मैन्युअल रूप से ओवरराइड करना चाहते हैं, तो आप उन फ़ंक्शन override()या activate()फ़ंक्शंस का उपयोग कर सकते हैं , जिन्हें बहुत स्पष्ट रूप से नाम नहीं दिया गया है, लेकिन अच्छी तरह से, अभी भी उपयोगी है:

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

यदि आप django को पथ और / या अनुरोध (भाषा कुकी, ...) की जांच करना चाहते हैं , जो कि बहुत अधिक आम है उदा www.example.com/en/<somepath>बनाम www.example.com/fr/<somepath>, का उपयोग करें django.utils.translation.get_language_from_request(request, check_path=False)। साथ ही, यह हमेशा एक मान्य भाषा सेट करेगाsettings.LANGUAGES

मैंने इस विषय के बारे में Google के माध्यम से इन अंतरों को खोजना बहुत आसान नहीं पाया, इसलिए यहां यह आगे के संदर्भ के लिए है।


ध्यान दें कि यह django.utils.translationअनुवाद नहीं है। प्रदान की गई लिंक में एक गलत वर्तनी है। स्निपेट में यह सही है।
J0ANMM

4
django.utils.translation.get_language()और के बीच के अंतर के लिए +1 django.utils.translation.get_language_from_request(request, check_path)। यदि आपके विचार से, आपको check_path = Trueउस भाषा का उपयोग करने के लिए उत्तरार्द्ध का उपयोग करना चाहिए, जिसमें आपका टेम्प्लेट प्रस्तुत किया जाएगा।
Ondrej Skalicka

7

बस यह जोड़ने के लिए कि यदि आप उपयोग करते हैं django.utils.translation.get_language()तो आपको यह ध्यान में रखना चाहिए कि यदि उस अनुभाग को असिंक्रोनसली कहा जाएगा (जैसे कि एक अजवाइन कार्य) तो यह दृष्टिकोण एक अलग थ्रेड में चलने के कारण काम नहीं करेगा।


2
यहाँ स्पष्ट दृष्टिकोण भाषा को कार्य पैरामीटर के रूप में पारित करना होगा, और फिर अनुवाद के साथ भाषा सेट करना होगा। भाषा (भाषा)
xyzman

1

आप इसका उपयोग कर सकते हैं

from django.utils import  translation
translation.get_language()

पहले से ही micha480 द्वारा उत्तर दिया गया। आपके उत्तर में कोई मूल्य नहीं है।
शमूएल दौज़ोन

0

आप localeभाषा की जानकारी के लिए सिस्टम पढ़ सकते हैं ।


5
आप -3 से मॉडरेट हैं, लेकिन मुझे लगता है कि सवाल अस्पष्ट है - "मेरे वेब की वर्तमान भाषा"। यह अनुमान लगाने के लिए आपकी गलती नहीं है कि ओएस।
मिकमेकाना
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.