django - comment faire le travail de traduction?
Je suis en train d'effectuer le rendu d'un modèle dans une autre langue à l'aide de l'i18n. J'ai fait tout ce que j'ai pu lire sur, de fixer le code de la langue, de la création et de la compilation des fichiers de traduction, y compris la traduction des balises dans le modèle et tout ça, et mon modèle encore rend en anglais, même à travers le {{ LANGUAGE_CODE }} la variable pointe vers le bon (et différente) code que j'ai prévu pour le rendu. Ce qui me manque?
modèle:
{% extends "base.html" %}
{% load i18n %}
{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}
{% get_current_language_bidi as LANGUAGE_BIDI %}
{% block title %}{% trans "translation test" %}{% endblock %}
{% block content %}
<div id="some-text">
{% trans "some translated text goes here" %}
{% blocktrans %}
<ol>
<li>here are some</li>
<li>items that should be</li>
<li>translated as well</li>
</ol>
{% endblocktrans %}
<ul>
<li>The current language is <b>{{ LANGUAGE_CODE }}</b></li>
{% if LANGUAGE_BIDI %}
<li>The current language is bidirectional</li>
{% else %}
<li>The current language is <b>not</b> bidirectional</li>
{% endif %}
<li>Available languages are:
<ul>
{% for lang in LANGUAGES %}
<li>{{ lang.1}}</li>
{% endfor %}
</ul>
</li>
</ul>
</div>
{% endblock %}
vue:
from django.shortcuts import render_to_response
from django.template import RequestContext
from pdb import set_trace as debugger
def check(request):
return render_to_response('index.html', context_instance=RequestContext(request)
ligne de commande (je l'ai fait remplir les traductions correctes dans .les fichiers po):
$ django-admin.py makemessages -l he-il -e html
$ django-admin.py compilemessages
settings.py:
# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'he-il'
gettext = lambda s: s
LANGUAGES = (
('he-il', gettext('Hebrew')),
('en-us', gettext('English')),
)
# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True
TEMPLATE_CONTEXT_PROCESSORS = (
"django.core.context_processors.auth",
"django.core.context_processors.i18n",
)
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
)
Vous devez vous connecter pour publier un commentaire.
Il suffit d'ajouter les chemins d'accès des fichiers de localisation générées à la
settings.py
fichier comme suitos.path.join(BASE_DIR, 'locale'),
. Ne pas utilisez des chemins relatifs aussi bien qu'ils travaillent dans le dev, ils risquent de ne pas fonctionner en direct en fonction sur le serveur etc.C'est une solution que j'ai été à l'aide de Django 1.4 et encore dans 1.7.1:
Dans settings.py ...
Ajouter à MIDDLEWEAR_CLASSES, locale, il permet la sélection de la langue de la demande:
Ajouter LOCALE_PATHS, c'est l'endroit où vos fichiers de traduction seront stockées:
Permettre I18N:
Définir les LANGUES que vous allez traduire le site:
Ajouter i18n modèle de contexte processeur à TEMPLATE_CONTEXT_PROCESSORS, les demandes comportent désormais des LANGUES et LANGUAGE_CODE:
Dans urls.py :
Dans url_patterns, ajouter le ci-dessous, elle permettra de définir la langue de redirection vue:
Voir Divers dans Traductions pour en savoir plus sur cette.
Ajouter les importations suivantes, et encapsuler les url que vous voulez traduire avec i18n_patterns. Voici ce que le mien ressemble:
Maintenant, n'importe où, vous utilisez du texte et que vous voulez convertir, l'importation lazytext et enveloppez chaque chaîne avec elle comme _('texte'), vous pouvez même aller à d'autres urls.py des fichiers de traduction de l'url comme ceci:
Vous pouvez placer du texte que vous voulez traduire dans d'autres fichiers, tels que models.py, views.py etc.. Voici un exemple de modèle de champ avec des traductions pour le label et la help_text:
Dans le html, templates...
Faire de même pour vos modèles et la charge de l'i18n templatetag et l'utilisation de gras trans et transblock sur la statique des choses que vous voulez traduire. Voici un exemple:
Maintenant exécuter un makemessages pour chacun de vos paramètres régionaux:
Et maintenant, tout est à gauche est d'aller dans votre /paramètres régionaux dossier, et de modifier chacun des .les fichiers po. Remplissez les données pour chaque msgstr. Voici un exemple de ce type de que:
Et enfin compiler les messages:
Pour le modèle de données de l'instance de traduction, vous pouvez utiliser certains de la réutilisables paquets disponibles comme
Il y a beaucoup plus à apprendre, avec des traductions et l'internationalisation est étroitement liée à ce sujet, afin de vérifier les docs pour elle aussi. Je conseille également de vérifier certains de l'internationalisation des paquets disponibles pour Django comme django-rosetta, et django-linguo. Ils aident à traduire le contenu du modèle, django-rosetta ne pas créer de nouvelles entrées dans votre base de données, alors que django-linguo n'.
Si vous avez suivi, vous devez être un bon début. Je crois que c'est le plus normalisé de façon à obtenir votre site en plusieurs langues. Cheers!
It should come after SessionMiddleware, because LocaleMiddleware makes use of session data. And it should come before CommonMiddleware because CommonMiddleware needs an activated language in order to resolve the requested URL.
Plus vous pouvez trouver iciJ'ai peut-être tort - que la seule fois où j'ai utilisé la traduction des trucs a sur un projet de test, il ya de nombreuses lunes - mais je pense que vous ne voulez pas que cette:
$ django-admin.py makemessages -l he-il -e html
Mais plutôt ceci:
$ django-admin.py makemessages -l he_il -e html
Avis le trait de soulignement dans
he_il
.J'ai eu des problèmes avec le pt-BR trop, jusqu'à ce que j'ai fait les messages de fichier avec pt_br à la place. Puis les choses ont commencé à travailler...
Ouais, il n'est pas évident et je n'arrivais pas à trouver de la documentation à propos de n'importe où.
Espère que ça aide.
J'ai le même problème. Mais je le résoudre en mettant "de la Langue:" pour .fichier po. Dans mon cas .fichier po ne contient pas la "Langue:" attribut, on dirait...
mais quand je mets le code de langue (dans mon cas " ru " ou "en")
il fonctionne pour moi
J'ai eu les mêmes problèmes, il semble que vos paramètres régionaux chemin ont pour fin avec une barre oblique :
LOCALE_PATHS = os.path.join(BASE_DIR, '<app-name>','locale/')
La façon dont je suis sur c'est par l'utilisation de la langue exacte code que django utilise dans ses propres fichiers de traduction (et non par le lien prévu à l'intérieur de settings.py), en supposant que cette langue est prise en charge (si ce n'est les choses se compliquent, car vous devrez fournir vos propres fichiers de traduction à django ainsi).
J'ai trouvé ce code en allant à $DJANGO_DIR/conf/locale et en regardant le nom du dossier (pour moi c'était dans /usr/local/lib/python2.6/dist-packages/django/conf/régionaux, mais elle peut différer selon le système d'exploitation et par exemple).
J'avais le même problème, j'ai essayé de passer ma langue et django dit pas d'aller. Pas d'erreur, pas d'avertissement, mais django commutation de langue à pl-pl (dans mon cas). Cependant la suppression de tous les dossiers à partir de la locale et de l'exécution de la commande:
django-admin.py makemessages -l pl_PL (trait de soulignement à la place du tableau de bord et de la majuscule pour la deuxième PL, a travaillé cette question).
J'espère que cela aide certains gars.
Oui, vous avez besoin de faire des fichiers de messages que celopes suggère et puis les compiler
Mais vous aurez toujours un problème.
Désactiver LocaleMiddleware pour un peu, c'est à dire supprimer cette
de votre middleware de la liste. Ne l'utilisez pas si vous n'avez pas besoin de changer la langue au moment de l'exécution, mais si vous n'en avez pas besoin, alors il existe un solution. J'ai eu le même problème avant et quelqu'un l'a expliqué à moi.
Aussi, j'ai eu cette étrange question avant. Makemessages commande de starter sur les chaînes enveloppé avec un backslash .py fichiers.
J'ai eu le même problème. Je vous l'ai expliqué avec détails en ce lien, en vertu d'une autre question similaire.
Brièvement, mon problème a été résolu par le rechargement du serveur avec ce code:
Maintenant, à chaque fois que je change les phrases et après la compilation des fichiers de langue, j'ai recharger le serveur pour voir les modifications.