9
votes

Django I18N Setlang ne change pas les données de session Django_Language

Je ne sais pas ce que je fais mal, mais mes données de session ne changeront pas même si je soumettez une nouvelle langue à / i18n / Setlang. Je dois traduire en langue philippin à l'aide du code 'TL' mais d'une manière ou d'une autre, cela ne semble pas fonctionner. S'il vous plaît aider. Voici quelques codes:

# the rest is above
(r'^i18n/', include('django.conf.urls.i18n')),


0 commentaires

8 Réponses :


0
votes

essayez d'ajouter Language_code = 'EN-US'


2 commentaires

Template_context_processors = ("django.core.contextextprocessors.i18n",) avez-vous ajouté ceci dans paramètres.py


Oui. Je pense que je dois le mettre à jour pour inclure tout mon fichier de paramètres



0
votes

Ce n'est pas un problème de mise en cache? Essayez de supprimer le cache pour tester ..


1 commentaires

Le problème s'est produit avant même d'ajouter le middleware cache :)



2
votes

Avez-vous créé la traduction de philippin et le mettez-le dans le bon emplacement de votre projet? Si oui, où l'avez-vous dit?

Django cherche des traductions par Suivre cet algorithme:

  • Tout d'abord, il cherche un répertoire local dans le répertoire d'applications de la vue qui est appelée. Si ça trouve une traduction pour la sélection langue, la traduction sera installé.
  • Suivant, il recherche un répertoire local dans le répertoire de projet. Si il trouve une traduction, le la traduction sera installée.
  • Enfin, il vérifie la traduction de base de Django Django / Conf / locale.

    Philippino n'est pas l'une des langues prises en charge de Django, vous devez donc l'ajouter vous-même. Voici quelque chose que j'ai eu du djangobook.com

    http://www.djangobook.com/fr/2.0/chapter19/

    Le localemidDleware ne peut sélectionner que Langues pour lesquels il y a un Traduction de la base de Django fournie. Si Vous voulez fournir des traductions pour votre application qui ne sont pas déjà Dans l'ensemble des traductions de Django arbre source, vous voudrez fournir à traductions les moins basiques de cette Langue. Par exemple, Django utilise ID de message technique à traduire les formats de date et les formats de temps - pour que vous aura besoin d'au moins ces traductions pour que le système fonctionne correctement.

    Un bon point de départ est de copier le Fichier anglais .po et traduire à moins les messages techniques - peut-être les messages de validation aussi.

    Les identifiants techniques sont facilement reconnu; ils sont tous majuscules. Vous ne traduisez pas l'identifiant de message comme avec d'autres messages, vous fournissez le corriger la variante locale sur les fournis Valeur anglaise. Par exemple, avec DateTime_Format (ou date_format ou TIME_FORMAT), ce serait le format chaîne que vous voulez utiliser dans votre Langue. Le format est identique à les chaînes de format utilisés par le maintenant Étiquette de modèle.

    Je ne suis pas sûr que cela résoudra votre problème, mais j'espère que cela vous aidera à y arriver.


1 commentaires

Merci, mais j'ai déjà une traduction philippine de chaînes de traduction que je crée avec le python manage.py Makemessages. Il est situé dans un dossier appelé locale avec le code 'tl'



0
votes

Je vérifierais s'il y a une utilisation de Django.Utils.Translation de la désactivation ou d'activer les méthodes de votre application depuis que j'ai des problèmes une fois à cause de cela!

Je vous suggère également d'avoir un look avec PDB sur ce qui se passe dans django.views.i18n Set_Language Voir la vue lorsque vous essayez de changer la langue.


0 commentaires

5
votes

J'ai déjà enquêté sur cette question et voici quelques éléments à vérifier:

1- Ajouter cette ligne dans votre / AMI / INVITE / Vue associée Pour vous assurer que la vue SET_LANG fonctionne correctement. P>

print request.LANGUAGE_CODE


0 commentaires

0
votes

Si je comprends bien, définissez Language_Code sur TL vous permet de charger votre site dans Philippino. Sinon, vous avez probablement un problème de configuration avec la configuration locale.

Pour aider à PIN POINT Le problème, je suggère de procéder aux éléments suivants:

avez le formulaire de paramètre de langue pointant sur lui-même lorsque vous changez. Langue. De cette façon, nous avons un comparateur non trivial entre les clics. Ici, je suppose que le formulaire de paramètres de langue réside dans l'URL des signets. xxx

Suivant, modifiez la balise de titre sur une chaîne par défaut Django que vous avez traduite dans votre langue. Dans ce cas "Supprimer" xxx

Vous pouvez également ajouter une autre langue, telle que FR, à vos paramètres de langues pour voir une langue de Django fournie Le travail fonctionne.

Chargement de la page de paramètres de langue directement vous permettra de modifier la langue, puis de comparer que le titre a changé (vous pouvez utiliser une autre étiquette si vous le souhaitez). Utilisation de cette méthode avec vos informations fournies, le commutateur de langue a fonctionné sur ma configuration.


0 commentaires

0
votes

Peut-être que vous utilisez ugetText lorsque vous devriez utiliser ugetText_lazy. Voir Cette réponse .


0 commentaires

18
votes
MIDDLEWARE_CLASSES = (
    'django.middleware.cache.UpdateCacheMiddleware',
+    'django.middleware.locale.LocaleMiddleware', # you need this to activate language (code)
    'django.middleware.common.CommonMiddleware',
    ...
)

2 commentaires

Je voudrais indiquer que la commande middleware pourrait être importante. J'avais besoin de mettre la sessionMiddle avant localemiddleware, ce qui semble avoir du sens: `django.contrib.sesstions.middleware.sessionsmiddleware ',' django.middleware.locale.localemiddleware ',`


@ContMP, Hmm ..., c'est à U. Mais je n'ai pas trouvé de dépendance entre SessionMiddleware et LocalemidDleware.