2012-01-07 8 views
6

... Bir şişe/jinja/babel webapp kullanıcıları için. Örneğin. "Çalışıyor", bir "etkinlik" sütununun olası bir değeridir ve Almanca kullanıcıları için "laufen" olmalıdır.ben tercüme görüntülemek istedikleri, bir veritabanında metin, sözcüklerin sınırlı bir miktarda <p></p> Muhtemelen ben bariz çözüm bakan veya yanlış şekilde düşünüyorum

Şablonlarda ve koddaki kelimeler ayıklanır ve kataloğa alınır, ancak ek sözcükleri kataloğa nasıl eklerim? Basit bir metin dosyası çıkarıcı var mı?

Düşünebildiğim tek şey, sadece bir .py dosyası oluşturmak ve bunlara çok sayıda _ ('...') satırı koymak, ama bu sadece yanlış geliyor ... değil mi?

+0

Bu kelimeler veritabanında enums olarak tanımlanmış mı? – plaes

+0

Evet, ancak kendinizi bu konuyla ilgili enumlara veya veritabanlarına sınırlama. Başka bir senaryo harici bir sistem olabilir, belki de JSON'u sistemime gönderirim, bazı kelimelerle, çevrilmeye ihtiyacım var, bu * asla * * * * * içinde görünür * ancak sadece gelen iletilerde. I * biliyorum bu sözcükler API'nin özelliklerini söylesin, ama ben onları gettext tarafından alınmak için '_ ('word')' olarak koduma koymaktan kaçınmak istiyorum. Sanırım satır başına bir kelime ile bir ağrı metin dosyası kullanacağım ve bunun için kendi ayıklama işlevimi yazacağım. – Florian

cevap

3

Ben gettext işlevi çağırır gibi benim "kelimeleri" ile bir messages.txt yarattı:

_('cycling') 
_('running') 

ve piton kaynağı olarak benim babel.cfg onu ekledi aptal ama işe yarıyor.

1

İlk olarak http://flask.pocoo.org/snippets/4/ ile başlayın.

İkincisi, veritabanındaki tamsayılar veya çeteleler olarak bu 'sınırlı' değerleri depolamak ve daha sonra kod tüm bu çeteleler için arama tablosu oluşturmak gerekir (bu yüzden Babil onlar hakkında bilir):

i18n_val = {0: _('running'), ...} 
# Or multi-level dict with different categories: 
i18n_all = { 
    'activity': { 
    0: _('running'), ... 
    'foo': { 
    0: _('bar..'), ... 
    } 
} 

Ve erişen tüm şablonlar için i18n_val ve i18n_all değişkenleri kullanılabilir hale getirmek için

{{ i18n_val[obj.activity] }} 
{{ i18n_all['activity'][obj.activity] }} 

, sadece context processors bunları kayıt: şablondan tercüme dize şimdi kadar basittir. ,

[python: messages.txt] 

ova, basit:

+0

Bu ikinci bölüm, benim bir sorunum var. Bu metni veritabanından almak ve el ile bir yere kopyalamak istemiyorum. Son olarak, çevirilerden oluşan bir "| trans" filtresi kullanarak çözdüm. – Florian

İlgili konular