Te damos la bienvenida a nuestro sitio, en este sitio vas a hallar la solucíon de lo que buscas.
Solución:
Así que aquí está la versión larga de su pregunta. Probado en Django 1.4 a 1.7.1:
En ajustes.py…
añadir MIDDLEWARE_CLASSES
configuración regional, permite la selección de idioma según la solicitud:
'django.middleware.locale.LocaleMiddleware',
Agregar LOCALE_PATHS
aquí es donde se almacenarán sus archivos de traducción:
LOCALE_PATHS = (
os.path.join(PROJECT_PATH, 'locale/'),
)
Habilitar i18N
USE_I18N = True
Colocar LANGUAGES
que traducirá el sitio a:
ugettext = lambda s: s
LANGUAGES = (
('en', ugettext('English')),
('pl', ugettext('Polish')),
)
Agregue el procesador de contexto de plantilla i18n, las solicitudes ahora incluirán LANGUAGES
y LANGUAGE_CODE
:
Para Django <1.8 ponlo aquí:
TEMPLATE_CONTEXT_PROCESSORS = (
....
'django.core.context_processors.i18n', # this one
)
Para Django >= 1.8 ponlo aquí:
TEMPLATES = [
'OPTIONS':
'context_processors': [
'django.template.context_processors.i18n', # this one
]
]
Anidar, en urls.py:
En url_patterns, agregue lo siguiente, habilitará la vista de redirección de idioma establecida:
url(r'^i18n/', include('django.conf.urls.i18n')),
Ver Misceláneo en Traducciones para más información sobre esto.
Agregue las siguientes importaciones y encapsule las URL que desea traducir con i18n_patterns. Así es como se ve el mío:
from django.conf.urls.i18n import i18n_patterns
from django.utils.translation import ugettext_lazy as _
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^i18n/', include('django.conf.urls.i18n')),
)
urlpatterns += i18n_patterns('',
(_(r'^dual-lang/'), include('duallang.urls')),
(r'^', include('home.urls')),
)
Nota: También puede colocar sus direcciones URL de administrador en i18n_patterns.
¡Envuelve tu texto con lazytext! importar lazytext (como arriba) y envolver cada string con él así _(‘texto’), incluso puede ir a sus otros archivos urls.py y hacer la traducción de URL así:
url(_(r'^dual_language/$'), landing, name='duallang_landing'),
Puede envolver el texto que desea traducir en sus otros archivos, como models.py, views.py, etc. Aquí hay un campo de modelo de ejemplo con traducciones para etiqueta y texto de ayuda:
name = models.CharField(_('name'), max_length=255, unique=True, help_text=_("Name of the FAQ Topic"))
¡Los documentos de traducción de Django son geniales para esto!
En tus plantillas html…
Ahora puede ingresar a sus plantillas y cargar la etiqueta de plantilla i18n y usar trans y transblock en el static cosas que quieras traducir. Aquí hay un ejemplo:
% load i18n %
% trans "This is a translation" %
title author_t='an author'
This is book_t by author_t . Block trans is powerful!
% endblocktrans %
Ahora ejecuta makemessages para cada uno de tus locales:
./manage.py makemessages -l pl
Y ahora todo lo que queda es ir a su carpeta /locales y editar cada uno de los archivos .po. Complete los datos para cada msgstr. Aquí hay un ejemplo de eso:
msgid "English"
msgstr "Angielski"
Y finalmente compilar los mensajes:
./manage.py compilemessages
Hay mucho más que aprender con las traducciones y la internacionalización está estrechamente relacionada con este tema, así que consulte también la documentación. También recomiendo revisar algunos de los paquetes de internacionalización disponibles para Django como django-rosetta y django-linguo. Ayudan a traducir el contenido del modelo, django-rosetta no crea nuevas entradas para esto en su base de datos, mientras que django-linguo sí lo hace.
También creé una demostración de traducción de django para aquellos interesados en ver una solución de trabajo completa.
Si siguió esto, debería tener un buen comienzo. Creo que esta es la forma más estandarizada de hacer que su sitio funcione en varios idiomas. ¡Salud!
Como yo lo veo, tienes dos opciones principales aquí:
(1) Puede mantener dos copias separadas del sitio como diferentes aplicaciones de Django y simplemente hacer que su urlconf apunte a esas aplicaciones, así que url(r'^/en/', include(myproject.en))
estaría en su urlconf para apuntar a su aplicación en inglés y el otro para el otro idioma. Esto implicaría mantener diferentes conjuntos de urlconfs y diferentes plantillas html, etc. para las dos aplicaciones, lo que podría ser útil si está interesado en que las URL también reflejen los diferentes idiomas (por ejemplo, español “/página/uno” vs inglés ” /página uno”).
(2) Registras la preferencia de idioma en una cookie (lo que realmente deberías hacer de todos modos) usando sesiones de Django, y luego haces que la plantilla entregue la versión apropiada del texto como quieras de esa cookie. El código para esto podría ser:
# views.py
# default to your native language
request.session['lang'] = 'tr'
# someone clicks the link to change to English
def switch_to_English_link(request):
request.session['lang'] = 'en'
Y luego, en las plantillas, para recopilar esta información, usaría:
% if request.session.lang == "en" %
This is my text in English!
% else %
Şimdi benim sitede Türk var!
% endif %
Podrías usar traducible URL patrones, que están disponibles desde 1.4.
https://docs.djangoproject.com/en/dev/topics/i18n/translation/#url-internacionalización