multi - Django sitio con 2 idiomas
django multi idioma (4)
Quiero desarrollar un sitio con 2 idiomas, uno predeterminado, mi idioma nativo y un inglés opcional. Planeo tener mis dominios como tales:
www.mydomain.com/tr/
www.mydomain.com/en/
Por defecto, una vez que un usuario ingrese mydomain.com. serán redirigidos a /tr/
version y seleccionarán ir a / en / si lo desean a través de un menú superior. Y aquí está mi pregunta.
¿Cuál es la mejor manera de Django de mantener ambos idiomas? Tenga en cuenta que no quiero una traducción automática, pero quiero mantener los textos para ambos idiomas.
Gracias
Así que aquí está la versión larga de su pregunta. Probado en Django 1.4 a 1.7.1:
En settings.py ...
Agregar a MIDDLEWEAR_CLASSES
, configuración regional, permite la selección de idioma según la solicitud:
''django.middleware.locale.LocaleMiddleware'',
Agregue 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
Establezca LANGUAGES
que traducirá el sitio a:
ugettext = lambda s: s
LANGUAGES = (
(''en'', ugettext(''English'')),
(''pl'', ugettext(''Polish'')),
)
Agregue el procesador de contexto de la 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
]}
]
Nido, en urls.py:
En url_patterns, agregue lo siguiente, habilitará la vista de redireccionamiento del idioma establecido:
url(r''^i18n/'', include(''django.conf.urls.i18n'')),
Vea Misceláneo en Translations para más 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 administración en los i18n_patterns.
¡Envuelve tu texto con texto perezoso! importe lazytext (como se muestra arriba) y envuelva cada cadena con él como tal _ (''texto''), incluso puede ir a sus otros archivos urls.py y hacer la traducción de la url de este modo:
url(_(r''^dual_language/$''), landing, name=''duallang_landing''),
Puede ajustar el texto que desea traducir en sus otros archivos, como models.py, views.py, etc. Aquí tiene un ejemplo de campo de modelo con traducciones para label y help_text:
name = models.CharField(_(''name''), max_length=255, unique=True, help_text=_("Name of the FAQ Topic"))
¡Los documentos de traducción de Django son excelentes para esto!
En tus plantillas html ...
Ahora puede ingresar a sus plantillas y cargar el i18n templatetag y usar trans y transblock en las cosas estáticas que desea traducir. Aquí hay un ejemplo:
{% load i18n %}
{% trans "This is a translation" %}<br><br>
{% blocktrans with book_t=''book title''|title author_t=''an author''|title %}
This is {{ book_t }} by {{ author_t }}. Block trans is powerful!
{% endblocktrans %}
Ahora ejecute un makemessage para cada una de sus configuraciones regionales:
./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. Rellene 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 la traducción y la internationalization está estrechamente relacionada con este tema, así que consulte la documentación tambié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 que aquellos interesados puedan ver una solución de trabajo completa.
Si sigues esto deberías tener un buen comienzo. Creo que esta es la forma más estandarizada de hacer que su sitio se ejecute en varios idiomas. ¡Aclamaciones!
Como yo lo veo, tienes dos opciones principales aquí:
(1) Puede guardar dos copias separadas del sitio como aplicaciones de Django diferentes 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 de inglés, y la otra 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, "/ pagina / uno" en español, en inglés). /página uno").
(2) Registra la preferencia de idioma en una cookie (lo que realmente debería hacer de todos modos) utilizando las sesiones de Django , y luego le pide a la plantilla que entregue la versión apropiada del texto como quiera 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ías:
<!-- my_django_template.html -->
<div>
<span>
{% if request.session.lang == "en" %}
This is my text in English!
{% else %}
Şimdi benim sitede Türk var!
{% endif %}
</span>
</div>
Debería ir a la aplicación django-localeurl si necesita especificar el idioma de una página en la URL . Es decir, específicamente lo que estás haciendo en tu ejemplo. La https://docs.djangoproject.com/en/dev/topics/i18n/translation/#url-internationalization simplemente prefija sus URL, que pueden ser ineficaces en su estrategia de SEO. django-localeurl
solo corrige la parte de manejo de URL, mientras juega bien con el resto de la maquinaria de traducción Django predeterminada.
Podría usar patrones de URL traducibles, que están disponibles desde 1.4.
https://docs.djangoproject.com/en/dev/topics/i18n/translation/#url-internationalization