language choice
This commit is contained in:
parent
c449fb65b8
commit
957c8ea119
7 changed files with 72 additions and 18 deletions
|
@ -103,7 +103,7 @@ class EssentialsProfileForm(forms.ModelForm):
|
||||||
profile.time_zone = self.cleaned_data['time_zone']
|
profile.time_zone = self.cleaned_data['time_zone']
|
||||||
profile.language = self.cleaned_data['language']
|
profile.language = self.cleaned_data['language']
|
||||||
user.save()
|
user.save()
|
||||||
return profile.save()
|
return profile
|
||||||
|
|
||||||
|
|
||||||
class PersonalProfileForm(forms.ModelForm):
|
class PersonalProfileForm(forms.ModelForm):
|
||||||
|
@ -181,7 +181,6 @@ class PrivacyProfileForm(forms.ModelForm):
|
||||||
# )
|
# )
|
||||||
#
|
#
|
||||||
# def save(self):
|
# def save(self):
|
||||||
# print self.forums
|
|
||||||
# return self.forums
|
# return self.forums
|
||||||
|
|
||||||
class UploadAvatarForm(forms.ModelForm):
|
class UploadAvatarForm(forms.ModelForm):
|
||||||
|
|
|
@ -1,7 +1,23 @@
|
||||||
from django.core.cache import cache
|
from django.core.cache import cache
|
||||||
|
from django.utils import translation
|
||||||
|
|
||||||
from apps.forum import settings as forum_settings
|
from apps.forum import settings as forum_settings
|
||||||
|
|
||||||
class LastLoginMiddleware(object):
|
class LastLoginMiddleware(object):
|
||||||
def process_request(self, request):
|
def process_request(self, request):
|
||||||
cache.set(str(request.user.id), True, forum_settings.USER_ONLINE_TIMEOUT)
|
cache.set(str(request.user.id), True, forum_settings.USER_ONLINE_TIMEOUT)
|
||||||
|
|
||||||
|
class ForumMiddleware(object):
|
||||||
|
def process_request(self, request):
|
||||||
|
if request.user.is_authenticated():
|
||||||
|
profile = request.user.forum_profile
|
||||||
|
language = translation.get_language_from_request(request)
|
||||||
|
|
||||||
|
if not profile.language:
|
||||||
|
profile.language = language
|
||||||
|
profile.save()
|
||||||
|
|
||||||
|
if profile.language and profile.language != language:
|
||||||
|
request.session['django_language'] = profile.language
|
||||||
|
translation.activate(profile.language)
|
||||||
|
request.LANGUAGE_CODE = translation.get_language()
|
||||||
|
|
|
@ -16,11 +16,6 @@ from apps.forum.fields import AutoOneToOneField, ExtendedImageField
|
||||||
from apps.forum.util import urlize, smiles
|
from apps.forum.util import urlize, smiles
|
||||||
from apps.forum import settings as forum_settings
|
from apps.forum import settings as forum_settings
|
||||||
|
|
||||||
LANGUAGE_CHOICES = (
|
|
||||||
('en', 'English'),
|
|
||||||
('ru', 'Russian'),
|
|
||||||
)
|
|
||||||
|
|
||||||
TZ_CHOICES = [(float(x[0]), x[1]) for x in (
|
TZ_CHOICES = [(float(x[0]), x[1]) for x in (
|
||||||
(-12, '-12'), (-11, '-11'), (-10, '-10'), (-9.5, '-09.5'), (-9, '-09'),
|
(-12, '-12'), (-11, '-11'), (-10, '-10'), (-9.5, '-09.5'), (-9, '-09'),
|
||||||
(-8.5, '-08.5'), (-8, '-08 PST'), (-7, '-07 MST'), (-6, '-06 CST'),
|
(-8.5, '-08.5'), (-8, '-08 PST'), (-7, '-07 MST'), (-6, '-06 CST'),
|
||||||
|
@ -262,7 +257,7 @@ class Profile(models.Model):
|
||||||
location = models.CharField(_('Location'), max_length=30, blank=True, default='')
|
location = models.CharField(_('Location'), max_length=30, blank=True, default='')
|
||||||
signature = models.TextField(_('Signature'), blank=True, default='', max_length=forum_settings.SIGNATURE_MAX_LENGTH)
|
signature = models.TextField(_('Signature'), blank=True, default='', max_length=forum_settings.SIGNATURE_MAX_LENGTH)
|
||||||
time_zone = models.FloatField(_('Time zone'), choices=TZ_CHOICES, default=float(forum_settings.DEFAULT_TIME_ZONE))
|
time_zone = models.FloatField(_('Time zone'), choices=TZ_CHOICES, default=float(forum_settings.DEFAULT_TIME_ZONE))
|
||||||
language = models.CharField(_('Language'), max_length=3, blank=True, default='en', choices=LANGUAGE_CHOICES)
|
language = models.CharField(_('Language'), max_length=3, blank=True, default='', choices=settings.LANGUAGES)
|
||||||
avatar = ExtendedImageField(_('Avatar'), blank=True, default='', upload_to=forum_settings.AVATARS_UPLOAD_TO, width=forum_settings.AVATAR_WIDTH, height=forum_settings.AVATAR_HEIGHT)
|
avatar = ExtendedImageField(_('Avatar'), blank=True, default='', upload_to=forum_settings.AVATARS_UPLOAD_TO, width=forum_settings.AVATAR_WIDTH, height=forum_settings.AVATAR_HEIGHT)
|
||||||
theme = models.CharField(_('Theme'), choices=THEME_CHOICES, max_length=80, default='')
|
theme = models.CharField(_('Theme'), choices=THEME_CHOICES, max_length=80, default='')
|
||||||
show_avatar = models.BooleanField(_('Show avatar'), blank=True, default=True)
|
show_avatar = models.BooleanField(_('Show avatar'), blank=True, default=True)
|
||||||
|
|
|
@ -3,6 +3,33 @@
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
|
<div id="content" class="flex">
|
||||||
|
|
||||||
|
<h1>Select user to change</h1>
|
||||||
|
|
||||||
|
<div id="content-main">
|
||||||
|
|
||||||
|
|
||||||
|
<ul class="object-tools"><li><a href="add/" class="addlink">Add user</a></li></ul>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="module filtered" id="changelist">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div id="toolbar"><form id="changelist-search" action="" method="get">
|
||||||
|
<div><!-- DIV needed for valid HTML -->
|
||||||
|
<label for="searchbar"><img src="/media/admin/img/admin/icon_searchbox.png" alt="Search"></label>
|
||||||
|
<input size="40" name="q" value="" id="searchbar" type="text">
|
||||||
|
<input value="Go" type="submit">
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</form></div>
|
||||||
|
<script type="text/javascript">document.getElementById("searchbar").focus();</script>
|
||||||
|
|
||||||
|
|
||||||
<div class="blockform">
|
<div class="blockform">
|
||||||
<h2><span>{% trans "User search" %}</span></h2>
|
<h2><span>{% trans "User search" %}</span></h2>
|
||||||
<div class="box">
|
<div class="box">
|
||||||
|
|
|
@ -8,14 +8,16 @@ from django.shortcuts import render_to_response
|
||||||
from django.template import RequestContext
|
from django.template import RequestContext
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
from django.utils.functional import Promise
|
from django.utils.functional import Promise
|
||||||
from django.utils.translation import force_unicode
|
from django.utils.translation import force_unicode, check_for_language
|
||||||
from django.utils.simplejson import JSONEncoder
|
from django.utils.simplejson import JSONEncoder
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.template.defaultfilters import urlize as django_urlize
|
from django.template.defaultfilters import urlize as django_urlize
|
||||||
from django.core.paginator import Paginator
|
from django.core.paginator import Paginator
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
from apps.forum import settings as forum_settings
|
from apps.forum import settings as forum_settings
|
||||||
|
|
||||||
|
|
||||||
#compile smiles regexp
|
#compile smiles regexp
|
||||||
_SMILES = [(re.compile(smile_re), path) for smile_re, path in forum_settings.SMILES]
|
_SMILES = [(re.compile(smile_re), path) for smile_re, path in forum_settings.SMILES]
|
||||||
|
|
||||||
|
|
|
@ -10,8 +10,9 @@ from django.conf import settings
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django.db import connection
|
from django.db import connection
|
||||||
from django.core.cache import cache
|
from django.core.cache import cache
|
||||||
|
from django.utils import translation
|
||||||
|
|
||||||
from apps.forum.util import render_to, paged, build_form, paginate
|
from apps.forum.util import render_to, paged, build_form, paginate, set_language
|
||||||
from apps.forum.models import Category, Forum, Topic, Post, Profile, Read, Reputation, Report, PrivateMessage
|
from apps.forum.models import Category, Forum, Topic, Post, Profile, Read, Reputation, Report, PrivateMessage
|
||||||
from apps.forum.forms import AddPostForm, EditPostForm, UserSearchForm, PostSearchForm, ReputationForm, MailToForm, EssentialsProfileForm, PersonalProfileForm, MessagingProfileForm, PersonalityProfileForm, DisplayProfileForm, PrivacyProfileForm, ReportForm, UploadAvatarForm, CreatePMForm
|
from apps.forum.forms import AddPostForm, EditPostForm, UserSearchForm, PostSearchForm, ReputationForm, MailToForm, EssentialsProfileForm, PersonalProfileForm, MessagingProfileForm, PersonalityProfileForm, DisplayProfileForm, PrivacyProfileForm, ReportForm, UploadAvatarForm, CreatePMForm
|
||||||
from apps.forum.markups import mypostmarkup
|
from apps.forum.markups import mypostmarkup
|
||||||
|
@ -367,7 +368,9 @@ def user(request, username):
|
||||||
elif section == 'essentials':
|
elif section == 'essentials':
|
||||||
form = build_form(EssentialsProfileForm, request, instance=user.forum_profile, user=user)
|
form = build_form(EssentialsProfileForm, request, instance=user.forum_profile, user=user)
|
||||||
if request.method == 'POST' and form.is_valid():
|
if request.method == 'POST' and form.is_valid():
|
||||||
form.save()
|
profile = form.save()
|
||||||
|
set_language(request, profile.language)
|
||||||
|
|
||||||
return {'active_menu':'essentials',
|
return {'active_menu':'essentials',
|
||||||
'profile': user,
|
'profile': user,
|
||||||
'form': form,
|
'form': form,
|
||||||
|
@ -393,7 +396,8 @@ def user(request, username):
|
||||||
else:
|
else:
|
||||||
form = build_form(EssentialsProfileForm, request, instance=user.forum_profile, user=user)
|
form = build_form(EssentialsProfileForm, request, instance=user.forum_profile, user=user)
|
||||||
if request.method == 'POST' and form.is_valid():
|
if request.method == 'POST' and form.is_valid():
|
||||||
form.save()
|
profile = form.save()
|
||||||
|
set_language(request, profile.language)
|
||||||
return {'active_menu':'essentials',
|
return {'active_menu':'essentials',
|
||||||
'profile': user,
|
'profile': user,
|
||||||
'form': form,
|
'form': form,
|
||||||
|
|
21
settings.py
21
settings.py
|
@ -1,7 +1,12 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import os.path
|
import os.path
|
||||||
|
import sys
|
||||||
|
|
||||||
PROJECT_ROOT = os.path.dirname(os.path.realpath(__file__))
|
PROJECT_ROOT = os.path.dirname(os.path.realpath(__file__))
|
||||||
|
DEVELOPMENT = True
|
||||||
|
|
||||||
|
if DEVELOPMENT:
|
||||||
|
sys.path.append(os.path.join(PROJECT_ROOT, 'apps'))
|
||||||
|
|
||||||
DEBUG = True
|
DEBUG = True
|
||||||
TEMPLATE_DEBUG = DEBUG
|
TEMPLATE_DEBUG = DEBUG
|
||||||
|
@ -30,6 +35,11 @@ TIME_ZONE = 'Europe/Kiev'
|
||||||
# http://www.i18nguy.com/unicode/language-identifiers.html
|
# http://www.i18nguy.com/unicode/language-identifiers.html
|
||||||
LANGUAGE_CODE = 'en-us'
|
LANGUAGE_CODE = 'en-us'
|
||||||
|
|
||||||
|
LANGUAGES = (
|
||||||
|
('en', 'English'),
|
||||||
|
('ru', 'Russian'),
|
||||||
|
)
|
||||||
|
|
||||||
SITE_ID = 1
|
SITE_ID = 1
|
||||||
|
|
||||||
# If you set this to False, Django will make some optimizations so as not
|
# If you set this to False, Django will make some optimizations so as not
|
||||||
|
@ -80,8 +90,8 @@ MIDDLEWARE_CLASSES = (
|
||||||
'django.middleware.locale.LocaleMiddleware',
|
'django.middleware.locale.LocaleMiddleware',
|
||||||
'django.middleware.common.CommonMiddleware',
|
'django.middleware.common.CommonMiddleware',
|
||||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||||
'apps.account.middleware.AuthKeyMiddleware',
|
'account.middleware.AuthKeyMiddleware',
|
||||||
'apps.forum.middleware.LastLoginMiddleware',
|
'forum.middleware.LastLoginMiddleware',
|
||||||
)
|
)
|
||||||
|
|
||||||
ROOT_URLCONF = 'urls'
|
ROOT_URLCONF = 'urls'
|
||||||
|
@ -101,9 +111,10 @@ INSTALLED_APPS = (
|
||||||
'django.contrib.sitemaps',
|
'django.contrib.sitemaps',
|
||||||
'django.contrib.admin',
|
'django.contrib.admin',
|
||||||
'django.contrib.admindocs',
|
'django.contrib.admindocs',
|
||||||
'apps.account',
|
'account',
|
||||||
'apps.captcha',
|
'captcha',
|
||||||
'apps.forum',
|
'forum',
|
||||||
|
'djapian',
|
||||||
)
|
)
|
||||||
|
|
||||||
FORCE_SCRIPT_NAME = ''
|
FORCE_SCRIPT_NAME = ''
|
||||||
|
|
Reference in a new issue