2012-06-28 16 views
7

मैं अपनी परियोजना के लिए अलग-अलग भाषाओं को सक्रिय करने की कोशिश कर रहा हूं। अभी अंग्रेजी और स्पेनिश।Django i18n काम नहीं करता

मैं सभी कदम मैं पालन व्याख्या करेंगे:

सबसे पहले, मैं निर्देशिका मैं अनुवाद करना चाहते हैं में अपने आप को जगह। या बेहतर कहा है, जहां सभी {% ट्रांस%} टैग हैं:

$ cd media/templates/landing/ 
$ mkdir locale 
$ django-admin.py makemessages --locale=en 

अंतिम आदेश निर्देशिका/फ़ाइल /locale/en/LC_MESSAGES/django.po

मैं django.po खोल सकते हैं और मैं आगे बढ़ना बनाता है अंग्रेजी भाषा में सभी msgstr खेतों को पूरा करने के लिए। msgstr लेबल स्पेनिश में है। मैं लंबे संदेशों के मामले के बारे में सुझावों का सम्मान करता हूं। इस फ़ाइल में भरने के बाद, मैं बनाने:

$ django-admin.py compilemessages 

इस प्रक्रिया django.po और django.mo पैदा करता है।

तो मैं settings.py को संशोधित करता हूं। महत्वपूर्ण लाइनों:

TEMPLATE_CONTEXT_PROCESSORS = (
    'ism.context_processor.user_vars', 
    'django.contrib.auth.context_processors.auth', 
    'django.core.context_processors.debug', 
    'django.core.context_processors.i18n', 
    'django.core.context_processors.media', 
    'django.core.context_processors.static', 
    'django.contrib.messages.context_processors.messages', 
    'django.core.context_processors.request', 
) 

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.locale.LocaleMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'pipeline.middleware.MinifyHTMLMiddleware', 
} 

TIME_ZONE = 'Atlantic/Canary' 

LANGUAGE_CODE = 'es' 

USE_I18N = True 

_ = lambda s: s 

LANGUAGES = (
    ('es', _('Espanol')), 
    ('en', _('English')), 
) 

USE_L10N = True 

USE_TZ = True 

अंत में, मैं URLS.py को यह पंक्ति जोड़ें:

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

मैं अपने विकास सर्वर को पुनः आरंभ, मैं पहले प्राथमिक भाषा के रूप में अंग्रेजी का चयन करने के लिए अपने फ़ायरफ़ॉक्स ब्राउज़र तथा यह नहीं है काम। सभी ग्रंथ अभी भी स्पैनिश में अंग्रेजी में दिख रहे हैं।

मुझे यकीन है कि फ़ायरफ़ॉक्स अंग्रेजी में कॉन्फ़िगर किया गया है क्योंकि Django व्यू फ़ंक्शन (जो .html प्रस्तुत करता है) में मैं अनुरोध के साथ एक प्रिंट करता हूं। LANGUAGE_CODE, जो "en" प्रिंट करता है।

मैं क्या गलत कर रहा हूं?

+0

आप django-admin.py makemessages --locale था = es? – Efazati

+0

उपयोगकर्ता और एन के बीच कैसे स्विच करते हैं? – Efazati

+0

@Efazati मेरी परियोजना की मुख्य भाषा ES है, एन नहीं। तो मैं समझता हूं कि मुझे 'django-admin.py makemessages --locale = en' बनाना होगा, है ना? इस तरह, django.po फ़ाइल बनाई गई है फ़ील्ड में फ़ील्ड और मुझे अंग्रेजी में msgstr फ़ील्ड को पूरा करना होगा। –

उत्तर

3

सभी का सबसे अच्छा, मैं खुद को उस निर्देशिका में रखता हूं जिसे मैं अनुवाद करना चाहता हूं। या बेहतर कहा है, जहां सभी {% ट्रांस%} टैग हैं:

$ सीडी मीडिया/टेम्पलेट्स/लैंडिंग/$ mkdir स्थान $ django-admin.py makemessages --locale = hi

यह यह नहीं है कि आपको अनुवाद कैसे करना है।

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

इसके अलावा comamnd को आपकी प्रोजेक्ट निर्देशिका से चलाने की आवश्यकता है; टेम्पलेट निर्देशिका नहीं है।

तो, आप होना चाहिए कमान:

$ django-admin.py makemessages --locale=es

आप अपने परियोजना नहीं टेम्पलेट्स निर्देशिका के रूट निर्देशिका से इसे चलाने चाहिए। आप locale निर्देशिका भी नहीं बनाते हैं, कमांड आपके लिए बनाएगा।

अगला, आप फ़ाइल में स्पेनिश में में अपने अनुवाद जोड़ते हैं। फ़ाइल में अंग्रेजी लेबल होंगे। यह django को अंग्रेजी संस्करण के लिए स्पेनिश समकक्ष लोड करने के लिए कहता है।

एक बार जब आप गए हैं, आपको संदेश फ़ाइल (फिर से जड़ से) संकलन

$ django-admin.py compilemessages

अब अनुवाद आपके आवेदन के लिए तैयार हैं। आपको django को जो भाषा आप चाहते हैं उसे बताने की जरूरत है। चूंकि आप भाषाओं को स्विच करने के लिए अंतर्निहित दृश्य का उपयोग कर रहे हैं, इसलिए आपको उस दृश्य को अपनी इच्छित भाषा के साथ कॉल करने की आवश्यकता है। ताकि Django जानता है जो अनुवाद लोड करने के लिए

<form action="/i18n/setlang/" method="post"> 
{% csrf_token %} 
<input name="next" type="hidden" value="{{ redirect_to }}" /> 
<select name="language"> 
{% get_language_info_list for LANGUAGES as languages %} 
{% for language in languages %} 
<option value="{{ language.code }}">{{ language.name_local }} ({{ language.code }})</option> 
{% endfor %} 
</select> 
<input type="submit" value="Go" /> 
</form> 

इस फार्म से भाषा का चयन करें:

प्रलेखन है कि आप उपयोग कर सकते हैं में उपलब्ध कराई गई एक टेम्पलेट है।

आपको अपने विचारों और टेम्पलेट्स के लिए how django discovers language preference भी पढ़ना चाहिए।

+1

मुझे लगता है कि आप गलत समझ रहे हैं। परियोजना में मेरी मूल भाषा ईएस (स्पेनिश) है इसलिए मैं ईएस से एन (अंग्रेजी) में अनुवाद करना चाहता हूं। यदि आप इस लिंक पर जाते हैं (http://www.djangobook.com/en/1.0/chapter18/) तो आप उनके उदाहरण में देख सकते हैं जैसे कि वे हमें 'django-admin.py संदेश बनाने के बारे में बताते हैं-डी डी' डी वह भाषा जिसे वे अनुवाद करना चाहते हैं। अब, मैंने अपनी परियोजना की मूल निर्देशिका से सभी प्रक्रियाओं को बनाने की कोशिश की। सिद्धांत रूप में, लोकेल मिडलवेयर को किसी भी पिछले चयन के बिना स्वचालित रूप से उपयोगकर्ता के ब्राउज़र से भाषा का पता लगाना चाहिए। लेकिन ऐसा नहीं है। –

3

संपादक का नोट: यह उत्तर एक संपादन से प्रश्न में माइग्रेट किया गया था। यह मूल पोस्टर द्वारा लिखा गया था।

लोकेल पथ लेने में कोई समस्या थी। Django रूट पथ में मेरी लोकेल निर्देशिका को अनदेखा कर रहा था (या बस यह नहीं मिला) तो django.po/mo उपलब्ध नहीं था। सेटिंग्स.py में LOCALE_PATHS जोड़कर इन सभी चीजों को हल किया जा सकता है।

अधिक जानकारी ->https://docs.djangoproject.com/en/dev/topics/i18n/translation/#how-django-discovers-translations

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

  • कोई संबंधित समस्या नहीं^_^