2012-07-18 17 views
5

Django web sitem var. Kullanıcının dilindeki mevcut dilleri listeleyen bir dil seçici ile çeviri ekliyorum. Açılışta yerel yazım da dahil olmak istiyorum.Django Dil Seçici yerel ve yerel dilde

Şu anda şuna benzer:
İngiliz
Hollandalı
Basitleştirilmiş Çince Çinlilere geçtiğinizde

benzediğini: Ben

荷兰语
简体 中文

英语gibi görünmeye çalışıyorum:
Türkçe/İngilizce
Dutch/Nederlands
Basitleştirilmiş Çince/简体 中文

settings.py içerir:

ugettext = lambda s: s 
LANGUAGES = (
    ('en', ugettext('English')), 
    ('nl', ugettext('Dutch')), 
    ('zh-cn', ugettext('Simplified Chinese')), 
) 

base.html:

{% load i18n %} 
    {% get_available_languages as LANGUAGES %} 
    <form action="/i18n/setlang/" method="post">{% csrf_token %} 
     <input name="next" type="hidden" value="/" /> 
     {% csrf_token %} 
     <select name="language"> 
      {% for lang in LANGUAGES %} 
      <option value="{{ lang.0 }}">{{ lang.1 }}</option> 
      {% endfor %} 
     </select> 
     <input type="submit" value="Go" /> 
    </form> 

Benim düşünce olduğunu LANGUAGES için başka bir öğe eklemek oldu gibi ana dil:

Ancak Django, LANGUAGES için 2 maddelik bir tuple beklediği görülüyor. Başka fikirlerin var mı? İskender'in yorumun başına

DÜZENLEME: Ben daha basit bir çözüm olabileceğini düşündüm, ama kod değiştirdikten sonra :

 <form action="/i18n/setlang/" method="post">{% csrf_token %} 
     <input name="next" type="hidden" value="/" /> 
     <select name="language"> 
      <option value="en">English</option> 
      <option value="nl">Dutch\Nederlands</option> 
      <option value="ru">Russian\Русский</option> 
      <option value="zh-cn">Simplified Chinese-简体中文</option> 
     </select> 
     <input type="submit" value="Go" /> 
    </form> 

Rus ve Çinli komut

soru işaretleri olarak gösteriliyorsa - Rus \ ?? ?????, Çince - ????

html içinde <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> var, diğer Rusça ve Çince metin (bu formun dışında) iyi görünüyor.

+0

Kendimizi böyle bir sorunla uğraşmadık: şablonda kodlanmış bir bölüm ve hepsi bu. –

+0

Dilleri değiştirmek/ayarlamak ve her bir dil adının olası tüm yerel çevirilerini oluşturmak için tümünü numaralandırmak zorundasınız. İstediğiniz her dil için yerel yazım ile önceden tanımlanmış bir dict ismini gömmek ve şablona aktarmak çok daha kolaydır. – astevanovic

cevap

5

bu deneyin:

LANGUAGES = (
    ('en', '{}/{}'.format(ugettext('English'), 'English')), 
    ('nl', '{}/{}'.format(ugettext('Dutch'), 'Nederlands')), 
    ('zh-cn', '{}/{}'.format(ugettext('Simplified Chinese'), '简体中文')), 
) 

Sonra şablonları kullanabilirsiniz:

{% for lang in LANGUAGES %} 
    <option value="{{ lang.0 }}">{{ lang.1 }}</option> 
{% endfor %} 
+0

Bu kodlar bana bir UnicodeDecodeError verir/ 'ascii' codec öğesi 8 konumunda bayt 0xd0 kodunu çözemez: şablon {% get_available_languages% LANGUAGES%} çağrıldığında aralıkta (128) değil. Eğer '' değiştirirseniz '' bir UnicodeEncodeError: 'ascii' codec'i 0-6 pozisyonunda karakterleri kodlayamaz: settings.py – Steve

+0

içe aktarırken menzili (128) değil Üzgünüm, bilmiyorum yorumları iyi biçimlendirmek için ... settings.py'nin utf-8 kodlamasını ve diğer bazı ayarlamaları yapmak zorunda kaldım. Bu dil kodlaması, iyi çalışmayı sağlamak için çok fazla temele sahip! – Steve

+0

, {% get_available_languages% LANGUAGES%} kullanmanıza gerek yoktur. "TEMPLATE_CONTEXT_PROCESSORS" öğesini değiştirmediyseniz, varsayılan olarak şablonlarınız için zaten {{LANGUAGES}} 'kullanılabilir. {% get_available_languages%}, UnicodeDecodeError'a neden oluyor. –

1

İskender'in öneri alarak, yukarıdaki düzgün çalışması için düzenleme içinde kodu almak başardı. Gereken 'başlık' alanı içinde <meta http-equiv="content-type" content="text/html;charset=UTF-8" /> satır yoktu ve bu bana verdi ???? Çince karakterler olmalıydı.

Eylem halinde göründükten sonra, geçerli dile çevrilen 2 dil seçiciye ve çok meşgul değilse ingilizce/yerel karakterlere sahip başka bir dilbilgisi olabilir.

Ayrıca, dil listesini bir modüle koyacağım ve LANGUAGES türüne benzer şablona geçireceğim.

İlgili konular