2010-07-26 12 views
0

J'utilise django-multilingual pour un site web basé sur Django. Quand je définir la fonction __unicode__ pour un modèle de revenir de cette façon:Django multilingue - comment avoir un aperçu du contenu de n'importe quelle langue?

def __unicode__(self): 
     return unicode(self.title) 

Cependant ma langue par défaut est l'anglais et j'ai quelques éléments qui sont insérés uniquement en néerlandais. Lorsque je prévisualise la liste complète, j'obtiens "None" comme titre.

Existe-t-il un moyen simple d'essayer d'obtenir le titre en anglais, puis de rechercher un titre dans une autre langue uniquement pour l'aperçu?

Répondre

0

Enumérer les toutes les traductions peuvent être facilement fait comme ceci:

>>> translations = [getattr(obj, "name_" + lang[0].replace("-","_")) for lang in 
settings.LANGUAGES] 

obj est l'objet du modèle, et lang represe nt un tuple ('bg', 'bulgare') de votre fichier de paramètres.

lang [0] .replace ("-", "_") est nécessaire, dans le cas où vous avez des langues comme "uk-gb", parce que ces valeurs sont placées dans name_uk_gb

+1

Je vais essayer d'intégrer celui-ci dans le projet et obtenir n'importe quel contenu dans toutes les langues, merci –

0

Eh bien, en supposant que votre modèle stocke la version néerlandaise dans un attribut appelé dutch_title, vous pouvez le faire.

def __unicode__(self): 
    # If we've got an English title, use that 
    if self.title: 
    return self.title 

    # Otherwise, default to the Dutch title 
    return self.dutch_title 

Sans savoir ce que vous entendez par « certains articles sont insérés uniquement en néerlandais », il est un peu difficile de répondre à votre question plus obligeamment.

+0

I avoir 4 langues avec l'anglais par défaut. Mon point est que je pourrais insérer la description dans toutes les quatre langues ou une seule d'entre elles. Existe-t-il un moyen d'essayer l'anglais et si non, d'itérer toutes les autres langues afin de montrer les données insérées et non "None" littéral? –

0

Selon l'application que vous utilisez (par exemple - django-multilingue), vous pouvez utiliser:

<td>{{ object.name_en|escape }}</td> 

(par exemple à partir de: http://code.google.com/p/django-multilingual/source/browse/trunk/testproject/templates/articles/category_list.html)

Comme je me souviens qu'il y avait d'autres fourchettes de cette application, qui permet de changer ce comportement comme celui-ci:

Objec title is: {{object.en.name}} 

Si vous utilisez autre application, vous pouvez toujours exécutez le shell manage.py et testez avec dir (MyModel), ou dir (MyModel.fields) pour vérifier quels champs sont définis ici :)

Dans le cas où il y a des getters magiques pour ces noms de champs et vous ne pouvez pas voir quelque chose d'intéressant en dir (...), vous pouvez vous référer au code de votre application preferred l18n et voir ce qui se passe sous le capot :)