2009-08-25 10 views
5

Django प्रलेखन से:का उपयोग settings.LANGUAGES

आप एक कस्टम LANGUAGES सेटिंग को परिभाषित है, यह (अनुवाद तारों के रूप में भाषाओं चिह्नित करने के लिए डिफ़ॉल्ट के रूप में ठीक है ऊपर प्रदर्शित मूल्य) - लेकिन एक "डमी" gettext() फ़ंक्शन का उपयोग करें, django.utils.translation में से एक नहीं। आप आयात करना चाहिए कभी नहीं django.utils.translation अपनी सेटिंग्स फ़ाइल के भीतर से, क्योंकि अपने आप में है कि मॉड्यूल सेटिंग्स पर निर्भर करता है, और है कि एक परिपत्र आयात का कारण होगा। समाधान एक "डमी" gettext() फ़ंक्शन का उपयोग करें। यहां एक नमूना सेटिंग्स फ़ाइल है:

gettext = lambda s: s LANGUAGES = ( ('de', gettext('German')), ('en', gettext('English')), )

इस व्यवस्था के साथ

, django-admin.py makemessages अभी भी खोजने के लिए और निशान अनुवाद के लिए इन तार, लेकिन अनुवाद रनटाइम पर नहीं होगा होगा - - LANGUAGES का उपयोग करने वाले किसी भी कोड में वास्तविक gettext() में भाषाओं को लपेटने के लिए आपको याद रखना होगा। चलने के समय पर।

असली gettext() में भाषाओं को लपेटने का क्या अर्थ है? कोड में इसे कैसे कहा जाना चाहिए?

उत्तर

3

यह वास्तव में क्या कहते हैं:() gettext फोन भाषा के नाम पर जब आप वास्तव में उन्हें इस्तेमाल करने या उन्हें उपयोगकर्ता को दिखाए:

from django.utils.translation import ugettext 

for lang_code, lang_name in settings.LANGUAGES: 
    translated_name = ugettext(lang_name) 
    ... 

(आप आम तौर पर नहीं बल्कि gettext से ugettext का उपयोग करना चाहिए के सभी पाठ के बाद से, Django यूनिकोड है)

एक टेम्पलेट में बराबर करने के लिए, बस {% blocktrans%} टैग जो कि पर्दे के पीछे ugettext कॉल का उपयोग करें:।

{% for lang in LANGUAGES %} 
    {% blocktrans %}{{ lang.1 }}{% endblocktrans %} 
{% endfor %} 
+0

इस विधि बहुत stright आगे और समझा जा सकता है। लेकिन इस मामले में, सेटिंग्स में एक डमी रैपर का उपयोग करने का क्या मतलब है। LANGUAGES? चूंकि आपको कोड में हर पंक्ति को लपेटना है, फिर भी ट्यूटोरियल द्वारा सुझाए गए रैपर फ़ंक्शन का बिंदु क्या है। –

+2

क्योंकि जब आप अपने स्रोत पेड़ (शायद ./manage.py makemessages के माध्यम से) gettext कमांडलाइन उपकरण चलाते हैं, तो आप चाहते हैं कि वे तारों को "अनुवाद की आवश्यकता" के रूप में पहचानें ताकि यह उन्हें आपकी पीओ फ़ाइल में जोड़ देगा। –

0

यह पुनः है उपरोक्त प्रश्नोत्तर & ए पर एक टिप्पणी और आगे स्पष्टीकरण। मैं अपने अनुवादों को काम करने, पढ़ने और फिर से पढ़ने, दस्तावेज़ों को ऑनलाइन पढ़ने के लिए, और इस पोस्ट को पढ़ने के बाद नहीं मिला, मुझे एहसास हुआ कि यह नीचे आया:

मैं मूल रूप से किया था:

LANGUAGES = (
    ('en', 'English'), 
    ('nl', 'Dutch'), 
    ) 

कौन सा काम नहीं होगा, तो पढ़ने के बाद यह कोशिश की

ugettext = lambda s: s 
LANGUAGES = (
    ('en', ugettext('English')), 
    ('nl', ugettext('Dutch')), 
    ) 

कौन सा सब कुछ काम किया जाता है ... और मैं सिर्फ इस बात के लिए खोज की है और यह दस्तावेज़ के पर में है https://docs.djangoproject.com/en/1.4/topics/i18n/translation/#how-django-discovers-language-preference, बोटो की तरफ इस खंड के मीटर ...

0

टेम्पलेट में आप निम्नलिखित सिर्फ कर सकता है:

{% for lang in LANGUAGES %} 
     {% trans lang.1 %} 
{% endfor %} 
2

latest docs आप परिपत्र आयात पैदा करने के बिना सेटिंग में ugettext_lazy उपयोग कर सकते हैं के अनुसार:

from django.utils.translation import ugettext_lazy as _ 

LANGUAGES = [ 
    ('de', _('German')), 
    ('en', _('English')), 
]