2010-11-14 7 views
1

Quelle est la meilleure façon de gérer les images i18n et texte?Comment gérer les images textuelles qui doivent afficher la version traduite?

J'ai un certain nombre d'images qui contiennent du texte qui doit être remplacé par la bonne version pour chaque langue. c'est-à-dire que j'ai un "header.gif" avec le texte en anglais, puis un autre "header.gif" avec le texte en français.

ce qui est la meilleure façon de dire

if my image exists in the current language: 
    show the image 
else 
    show the english image 

Je pense un middleware qui peut vérifier pour chaque balise img, vérifiez si l'image est disponible dans la langue courante, le cas échéant, modifier la balise img pour le montrer, sinon, ne le faites pas.

Mon autre pensée était de joindre simplement la référence de l'image dans une balise {% trans ... %} et changer l'URL dans le fichier .po

ou d'une autre façon?

Répondre

1

J'ai créé un middleware pour analyser le code HTML avant qu'il ne soit rendu pour vérifier les images dans un dossier locale dans mon dossier multimédia. Si elles existent, puis modifiez la balise src, sinon, gardez-le comme il est:

def process_response(self, request, response): 
    # check if we should try this here 
    if self.inject_media(request, response): 
     media_url = settings.MEDIA_URL 
     lang = translation.get_language_from_request(request) 
     media_root = settings.MEDIA_ROOT 
     string = smart_unicode(response.content) 
     no_case = string.lower() 
     find = "%s[a-z0-9\.\_\/]+" % media_url 
     pattern = re.compile(find) 
     matches = pattern.findall(no_case) 
     base_path = "%slocale/%s/" % (media_root, lang) 
     for m in matches: 
      p = m.replace(media_url, base_path) 
      if os.path.isfile(p): 
       url = m.replace(media_url, "%slocale/%s/" % (media_url, lang))   
       string = string.replace(m, url) 

     response.content = string 
    return response 
1

Vous pouvez essayer de résoudre en définissant certains modèles pour les images:

class ImageTitle(models.Model): 
    title = models.CharField('Title', max_length = 100) 

class Image(models.Model): 
    title = models.ForeignKey(ImageTitle) 
    image = models.ImageField('Image') 
    language = models.CharField('Language', max_length = 100) 

Définir une fonction pour le rendu de l'image en fonction du réglage de la langue.

+0

Mais je ne veux pas que toutes mes images soient stockées comme modèles - comme des en-têtes, des boutons, etc ... –

+0

Ensuite, vous pouvez suivre une procédure de nommage comme pour header, vous pouvez garder "header_lang.jpg" et ensuite L'appel de modèles frm utilise/[url]/header _ {{language}}. jpg comme source d'image. – crodjer

1

Vous pouvez également faire des sous-dossiers dans votre répertoire média

/statique/img/es_ES /statique/img/fr_FR

Et d'envoyer la bonne image en fonction de la langue demandée avec un tag de modèle personnalisé {% media_url%}.