2013-10-15 5 views
2

J'ai un problème d'internationalisation django (i18n). la traduction ne fonctionne pas. ma version django est: 1.5.4 Ceci est mon code:django i18n ne fonctionne pas

settings.py

ugettext = lambda s:s 
LANGUAGES = [ 
    ('en','English'), 
    ('fa','Farsi'), 
] 

LANGUAGE_CODE = 'en_us' 
USE_I18N = True 
USE_L10N = True 

TEMPLATE_DIRS = (
    os.path.join(PROJECT_PATH,'templates'), 
) 

urls.py

from django.conf.urls import patterns, include, url 
from main import * 
urlpatterns = patterns('', 
    url(r'$^',index), 
) 

main.py

from django.shortcuts import render 
from django.utils.translation import ugettext_lazy as _ 
def index(request): 
    alert = _('this is my page') 
    return render(request,'index.html',{'alert':alert}) 

index .html

{% load i18n %} 
{{alert}} 

puis:

$mkdir conf/locale -p 
$django-admin.py makemessages -l fa 
processing language fa 
$django-admin.py compilemessages 
processing file django.po in /home/mori/Desktop/salam/salam/locale/fa/LC_MESSAGES 

django.po

# SOME DESCRIPTIVE TITLE. 
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 
# This file is distributed under the same license as the PACKAGE package. 
# FIRST AUTHOR <[email protected]>, YEAR. 
# 
#, fuzzy 
msgid "" 
msgstr "" 
"Project-Id-Version: PACKAGE VERSION\n" 
"Report-Msgid-Bugs-To: \n" 
"POT-Creation-Date: 2013-10-15 13:12+0330\n" 
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 
"Last-Translator: FULL NAME <[email protected]>\n" 
"Language-Team: LANGUAGE <[email protected]>\n" 
"Language: \n" 
"MIME-Version: 1.0\n" 
"Content-Type: text/plain; charset=UTF-8\n" 
"Content-Transfer-Encoding: 8bit\n" 
"Plural-Forms: nplurals=1; plural=0;\n" 

#: main.py:4 
msgid "this is my page" 
msgstr "in safeye mane" 

J'ai 'django.middleware.locale.LocaleMiddleware' en classe middleware et 'django.core.context_processors.i18n' dans TEMPLATE_COTEXT_PROCESSORS.

sortie

this is my page 

Comment puis-je résoudre?

Répondre

2

Pour utiliser l'internationalisation:

  1. Définir les langues de votre site prend en charge.
  2. Marquez les chaînes pour la traduction.
  3. Créez les fichiers de langue.
  4. Configurez le middleware au settings.py.
  5. Définissez la langue par défaut de la demande.

Vous avez besoin de set the language for the request, sinon django utilisera par défaut la demande de langue provenant du navigateur qui dans votre cas est l'anglais.

Vous devez également fixer votre modèle, il devrait être:

{% load i18n %} 
{% trans alert %} 

Selon vous la fonction _ ne marque que votre chaîne pour la traduction; il ne le traduit pas réellement. En marquant la chaîne pour la traduction, django l'exporte dans les fichiers de langue, et django la recherche quand une langue différente est demandée par l'utilisateur.

Il ya a few ways that django detects the preferred language (il s'arrête à la première place où il trouve une préférence de langue).Ces moyens de l'ordre dans lequel ils sont cochés sont:

  1. préfixe de langue dans l'URL, par exemple /en/foo/bar/
  2. Une clé django_language à la session.
  3. Un cookie django_language.
  4. Accept-Language en-tête.
  5. LANGUAGE_CODE.

Dans votre cas, il capture # 4, parce que votre navigateur envoie une liste des langues qu'il accepte, et le premier est l'anglais.

Il y a quelques façons dont vous pouvez résoudre ceci:

  1. Vous pouvez activer la langue dans votre vue: activate('fa')
  2. Vous pouvez forcer une langue dans votre modèle, avec l'étiquette de modèle language:

    {% load i18n %} 
    {% language 'fa' %} 
    {% trans alert %} 
    
  3. vous pouvez utiliser la fonction url internationalization et paire qui avec la vue redirect set_language, définir correctement la langue et vous internationaliser r URLs.
+4

Merci beaucoup. mes problèmes étaient LOCALE_PATHS que je n'ai pas déclarés dans settings.py. – Mortezaipo