O pacote ‘modeltranslation’ do django pode ser utilizado para traduzirmos dinâmicamente o conteúdo de um model específico.
Este é por hora o mais interessante que já instalei.
Por que?
- Para usar o mesmo, não é necessário mudar nada na estrutura dos models de suas apps.
- É fácil administrar, pois o mesmo cria abas com as línguas para cada campo.
- Você pode definir exatamente os campos e apps que deseja ter em vários idiomas.
- É um projeto BSD ativo em: http://code.google.com/p/django-modeltranslation/, sempre melhorando.
- Sua configuração é bem simples.
Bom, vamos ao que interessa.
Primeiro vejamos o resultado na imagem abaixo, que é para logo sabermos oque estaremos instalando e quem não gostar que faça seus comentários com outras soluções :d

Então? Note as abas, nesse exemplo há uma aba para a linguagem ‘pt-br’ e outra para ‘es’, português e espanhol. Na imagem deixei uma aba ‘es’ ativa apenas para ilustrar que você consegue editar da maneira desejada.
Note também que no topo da imagem, deixei a seleção de idiomas expandida apenas para mostrar que aquilo é um atalho, simplesmente para ativas todas as abas da página no idioma desejado.
Bom, se você achou interessante e quer usar em seus novos projetos segue um passo a passo de como eu consegui instalar :d usando o tutorial original como base http://code.google.com/p/django-modeltranslation/wiki/InstallationAndUsage.
Primeiramente, veja a seguir as etapas a serem seguidas. Fique tranquilo, cada etapa será explicada e exemplificada abaixo.
- Adicionar o modeltranslation em INSTALLED_APPS no arquivo settings.py de seu projeto.
- Configurar os idiomas que você deseja que o seu projeto tenha.
- Criar e setar a variável MODELTRANSLATION_TRANSLATION_REGISTRY no arquivo settings.py
- Criar um arquivo chamado ‘translation.py’ na pasta raiz de seu projeto. (Inverti a etapa 3 e 4 para entender de onde vem o nome do arquivo e que se desejarmos ter um nome diferente não tem problema, porém tem q ter esse cuidado.)
- Registrar os campos que devem ser traduzidos, executar o comando manage.py syncdb e sair para o abraço :d.
Etapa 1: No arquigo settings.py edite ou crie a variável: INSTALLED_APPS para que fique assim:
INSTALLED_APPS = (
...
'modeltranslation',
....
)
Etapa 2: Ainda no arquivo settings.py devemos setar os idiomas que você deseja em que seu site trabalhe.
Organize os idiomas de acordo com a prioridade. Ou seja, o primeiro será o padrão do sistema. (Obviamente o idioma padrão poderá ser definido em outra variável se necessário)
gettext = lambda s: s
LANGUAGES = (
('pt-br', gettext(u'Português')),
('en', gettext('Inglês')),
('es', gettext('Espanhol')),
)
Obs: Por estarmos utilizando acentuação dentro deste arquivo de configuração (‘Português’) precisamos informar ao python que nosso código tem que entender acentuação. Por isso adicione no topo do arquivo, o seguinte:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
Etapa 3: No arquivo settings.py devemos incluir a seguinte variável, inserindo o nome do seu projeto e o nome do arquivo que registrará as traduções (Para manter um certo padrão, vamos utilizar o nome do arquivo de registro como ‘tranlation.py’):
MODELTRANSLATION_TRANSLATION_REGISTRY = "nome_do_seu_projeto.translation"
Etapa 4: Agora que já registramos podemos criar o arquivo ‘tranlation.py’ na raiz do projeto com o seguinte código dentro dele:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from modeltranslation.translator import translator, TranslationOptions
Pronto, seu projeto já possui todas as configurações necessárias e já está funcionando.
Ta! Mas não tem nada traduzido ainda? Não! Vamos para a etapa final.
Etapa 5:
Nesta etapa, devemos registrar naquele arquivo ‘translation.py’ os campos que desejamos traduzir. Confira o exemplo a seguir, digamos que temos uma app de notícias e nela há uma classe Noticia:
class Noticia(models.Model):
titulo = models.CharField(max_length=255)
texto = models.TextField()
Então vamos definir que queremos ter os campos titulo e texto em vários idiomas.
Para isso devemos editarmos o arquivo translation.py para que fique dessa forma:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from modeltranslation.translator import translator, TranslationOptions
from noticias.models import Noticia
class NoticiaTranslationOptions(TranslationOptions):
fields = ('titulo', 'texto',)
translator.register(Noticia,NoticiaTranslationOptions)
E também devemos editar o arquivo ‘admin.py’ da app noticias para que fique assim:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from django.contrib import admin
from modeltranslation.admin import TranslationAdmin
from noticias.models import Noticia
class NoticiaAdmin(TranslationAdmin):
list_display = ('titulo',)
class Media:
js = (
'/static/modeltranslation/js/force_jquery.js',
'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/jquery-ui.min.js',
'/static/modeltranslation/js/tabbed_translation_fields.js',
)
css = {
'screen': ('/static/modeltranslation/css/tabbed_translation_fields.css',),
}
admin.site.register(Noticia,NoticiaAdmin)
Obs: Não esqueça de colocar a pasta modeltranlation com os arquivos estáticos (JS e CSS) dentro da pasta ‘static’ de seu projeto.
Feito isso basta você executar o comando:
python manage.py syncdb
Pronto, acesse o painel adminsitrativo de seu site e crie uma ‘notícia’ e veja o resultado.
Espero que isso posssa ajudar alguém como me ajudou. É um exemplo simples, porém já irá ajudar a iniciar a brincar com as traduções. Há também a possibilidade de traduzir campos em Inlines no admin, veja exemplos no repositório oficial. E se necessário me peçam que disponibilizo este exemplo também.
Recomendo sempre utilizar a versão mais recente do projeto em: http://code.google.com/p/djangomodeltranslation/downloads/list