2016-09-19 4 views
13

मैं विभिन्न देशों के लिए अनुकूलित Django में एक ही भाषा के कुछ अलग-अलग संस्करणों को देखना चाहता हूं (उदा। locale/en, locale/en_CA, locale/en_US, आदि)। यदि विशिष्ट देश के लिए कोई भाषा नहीं है तो मैं डिफ़ॉल्ट भाषा संस्करण (locale/en) का उपयोग करने की अपेक्षा करता हूं)।Django में एक ही भाषा के विभिन्न देश संस्करणों को कैसे बनाए रखें?

फिर प्रत्येक साइट के लिए सेटिंग्स फ़ाइल में मैं LANGUAGE_CODE और LANGUAGES निर्दिष्ट करता हूं।

किसी कारण से, भले ही मैं निम्न सेटिंग निर्दिष्ट, locale/en_US अनुवाद अभी भी उपयोग किया जाता है:

LANGUAGE_CODE = 'en' 
LANGUAGES = (
    ('en', ugettext('English')), 
) 

हालांकि मैं स्पष्ट रूप से निर्दिष्ट है कि भाषा कोड en (नहीं en-us) होना चाहिए।

क्या मुझे कुछ याद आ रही है? Django दस्तावेज़ सहित कई स्थानों में जवाब खोजने की कोशिश कर चुके हैं।

+0

दरअसल, यदि Django इसका समर्थन करता है, तो आप en_CA, en_US आदि में न्यूनतम प्रविष्टियां बनाए रखना चाहते हैं और मुख्य * en * अधिकांश समय पर फॉलबैक केस-बाय-केस रखना चाहते हैं, क्योंकि अधिकांश शब्द सभी स्वादों में समान होते हैं। अर्थात। विशिष्ट में से चुनें यदि आपको इसमें कोई शब्द मिलता है * पड़ोसी * बनाम * पड़ोसी * लेकिन केवल मुख्य में * घर * छोड़ दें। –

+0

यह सही है, लेकिन किसी कारण से Django समस्या "en_US" का उपयोग करती है, भले ही मैं बस "en" निर्दिष्ट करता हूं। कोई सुराग? संपादित करें: अगर मैं "en-ca" निर्दिष्ट करता हूं, तो यह ठीक से "en_CA" का उपयोग करता है। –

+0

नहीं, दुर्भाग्य से यह सलाह किसी अन्य प्रणाली पर मेरे अनुभव से आई थी और आपकी अनुवाद लागत को कम रखने के लिए सिर्फ एक सूचक था। अभी तक Django अनुवाद समर्थन का उपयोग नहीं किया है। –

उत्तर

0

इस समस्या का समाधान आपके settings.py फ़ाइल में निम्न स्निपेट जोड़ना होगा।

import locale 
locale.locale_alias.pop('en', None) 

वेनेलिन Stoykov के लिए विशेष क्रेडिट अजगर locale मॉड्यूल के व्यवहार की जांच करने में सक्षम था, जो।

0

क्या मैं आपको LocaleMiddleware क्लास में ब्रेकपॉइंट लगाने का सुझाव दे सकता हूं?

इस तरह, आपको एक सुराग मिल सकता है कि वास्तव में सही भाषा प्राप्त करने से आपका तरीका क्या हो रहा था।

लोकेल मिडलवेयर क्लास के source code और How Django discovers language preference के अनुसार बेक्यू, परिणामस्वरूप कई चीजें प्रभावित हो सकती हैं।

+0

ठीक है, मुझे इसके बारे में पता है, लेकिन ऐसा नहीं है, क्योंकि मैं 'i18n_patterns' का उपयोग कर रहा हूं और यह पहली बात है 'लोकेल मिडलवेयर' देखने की कोशिश कर रहा है। –

+0

ठीक है, मैंने अभी 'लोकेशन मिडलवेयर' के 'process_request' और 'process_response' विधियों में ब्रेकपॉइंट जोड़ने की कोशिश की है, और भाषा सही ढंग से' en' पर सेट है। हालांकि, 'en_US' लोकेल का उपयोग किया जाता है। –

3

यह पायथन (विशेष रूप से Django नहीं) और gettext मॉड्यूल का एक quirk है।

टिकट 8626 1.0 रिलीज के समय Django मुद्दे ट्रैकर पर उठाया गया था और कुछ सुझावों और बहस के बाद, Django devs इसे "ठीक नहीं करेगा" माना जाता है।

टिकट थ्रेड में डिफ़ॉल्ट रूप में 'en-en' का उपयोग करने के लिए सुझाव हैं। मेरी याददाश्त थोड़ा मोटा है, लेकिन अगर मुझे सही ढंग से याद आती है तो यह दृष्टिकोण मेरे i18n टूलिंग के अन्य हिस्सों (जैसे पॉक्स लाइब्रेरी) के साथ अच्छा नहीं खेलता है। मैंने परियोजना के लिए डिफ़ॉल्ट रूप से एन-यूएस का उपयोग करने और विकल्पों के रूप में अन्य प्रकारों (जैसे एन-एयू) को सूचीबद्ध करने के लिए छोड़ दिया और बस गए।

+1

एक दिशा देने के लिए धन्यवाद - आपको दिया गया बक्षीस! बात यह है कि मैं भाषा अनुकूलित यूआरएल रखने के लिए i18n_patterns का उपयोग कर रहा हूं। "एन-यूएस" या "एन-एन" के साथ चाल काम कर सकती है, लेकिन एप्लिकेशन की यूआरएल संरचना बदल जाएगी। इसके लिए कोई सुझाव? –

+0

क्या आप अपने सामान्य अंग्रेजी (.../en /) और यूएस (.../en-us /) URL दोनों में एन-यूएस अनुवाद रखने के लिए व्यवस्थित हो सकते हैं? ईमानदार होने के लिए मेरी प्राथमिकता भाषा/लोकेशंस को यूआरएल से बाहर रखना है, लेकिन शायद आप अपनी यूआरएल योजना को किसी अन्य प्रश्न में साझा कर सकते हैं और मैं इसे कुछ विचार दे सकता हूं। –

संबंधित मुद्दे