2017-06-01 78 views
0

我试图创建一个网站,将是法语和英语,但我的Django的语言环境并没有真正的工作:我的机器上,它工作正常(与./manage.py runserver为什么我的django locales失败了?

The site as rendered by the latest Google Chrome on the latest MacOS while the server is on my machine

但是当我把我的服务器上的代码,部署...

The site as rendered by the same Google Chrome and the same MacOS, but while on my server

这就是网页代码: 模板

<head> 
    <!-- Removed meta and useless stuff for clarity --> 
    {% load i18n %} 
    {% get_current_language as LANGUAGE_CODE %} 
    <!-- LANGUAGE_CODE is always 'en-us' on prod --> 
    <!-- Which is the default in settings.py --> 
    {% get_available_languages as LANGUAGES %} 

    {% language fav_lang %} 
    <!-- But this is empty on prod, while it is 'en' on my machine --> 
</head> 

<body> 
    <!-- Same here, removed CSS stuff and pretty spacing --> 

    BetaGames 
    <br> 
    {% trans "message" %} 
    <br> 
    {{ fav_lang }} 
</body> 

{% endlanguage %} 

,并查看:

from django.template import loader 
from django.http import HttpResponse 


def index(request): 
    template = loader.get_template("index.html") 
    context = { 
     'fav_lang': request.LANGUAGE_CODE, 
    } 
    #So yeah, request.LANGUAGE_CODE is empty on prod 
    return HttpResponse(template.render(context, request)) 

我几乎从那里,这是肯定我的服务器配置摔东西想通。但我的服务器的settings.py和我的本地测试是相同的:

import os 

from django.utils.translation import ugettext_lazy 

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 

# Just removed debug/hosts/secret key there 

INSTALLED_APPS = [ 
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'pages', 
] 

MIDDLEWARE = [ 
    'django.middleware.security.SecurityMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.locale.LocaleMiddleware', #locale should be between sessions and common 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
] 

ROOT_URLCONF = 'BetaGames.urls' #Just have/pointing to the "website in construction" view 

TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'DIRS': [ 
      os.path.join(BASE_DIR, 'templates/'), 
     ], 
     'APP_DIRS': True, 
     'OPTIONS': { 
      'context_processors': [ 
       'django.template.context_processors.debug', 
       'django.template.context_processors.request', 
       'django.template.context_processors.i18n', #Needed here, think the docs said that 
       'django.contrib.auth.context_processors.auth', 
       'django.contrib.messages.context_processors.messages', 
      ], 
     }, 
    }, 
] 

WSGI_APPLICATION = 'BetaGames.wsgi.application' 

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), #Nothing in the DB yet, so this is default stuff 
    } 
} 

AUTH_PASSWORD_VALIDATORS = [ 
    { 
     'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 
    }, 
    { 
     'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 
    }, 
    { 
     'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 
    }, 
    { 
     'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 
    }, 
    ] 

USE_TZ = True 
TIME_ZONE = 'Europe/Paris' 
USE_I18N = True 
USE_L10N = True 

STATIC_URL = '/static/' 

STATICFILES_DIRS = [ 
    os.path.join(BASE_DIR, 'static'), 
    os.path.join(BASE_DIR, 'static/spectre/docs/dist'), #CSS stuff 
] 

LANGUAGES = (
    ('fr', ugettext_lazy('French')), 
    ('en', ugettext_lazy('English')), 
) 

LOCALE_PATHS = (
    os.path.join(BASE_DIR, 'locale'), 
) 

我的.po文件和编译他们的.mo我知道TRADUCTION作品,因为当我改变郎用手在设置LANGUAGE_CODE它的.py ...

所以,我真的不知道该从何而来,我很高兴我任何人都可以照一些光。我知道由于LANGUAGE_CODE没有设置,它会默认为en-us,但这是我想要的:网站是英文的,除非有法文网页浏览器的人来。

+0

是安装在服务器上一样,你有你的开发机器上的语言环境中的语言环境? – matyas

+0

@matyas是,这两个区域/ FR和区域/ EN上的回购,并编制了服务器上 –

回答

0

调整了一下后,我得到了一些作品,但不知道如何我把它想:

我在settings.py改变了MIDDLEWARE VAR来MIDDLEWARE_CLASSES,我加入国际化模式,以我的网址:

from django.conf.urls import url 
from django.contrib import admin 

from django.conf.urls.i18n import i18n_patterns 

import pages 

urlpatterns = [] 

urlpatterns += i18n_patterns(
    url(r'^$', pages.views.index), 
    url(r'^admin/', admin.site.urls), 
) 

所以,现在我可以domain.com/fr/app访问法国翻译网站,domain.com重定向到domain.com/en

然而,这是不是真的是我想要的,因为我希望能够使所有的工作而不触及的URL。

如果有人知道的方式做到这一点,我会接受它,但我会这样的问题:现在。