Mercurial > hg > savane-forge
changeset 184:49cc271f6de8
Setup i18n framework
author | Sylvain Beucler <beuc@beuc.net> |
---|---|
date | Sat, 24 Jul 2010 20:07:57 +0200 |
parents | 845272b1916d |
children | 3d1a07772d4d |
files | savane/my/urls.py savane/my/views.py settings_default.py templates/base.html templates/my/i18n.html templates/my/index.html templates/svmain/group_list.html templates/svmain/pagination.inc.html templates/svmain/user_list.html |
diffstat | 9 files changed, 75 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/savane/my/urls.py +++ b/savane/my/urls.py @@ -49,7 +49,7 @@ url(r'^$', direct_to_template, { 'template' : 'my/index.html', 'extra_context' : { 'title' : 'My account', }, }, - name='savane.my.views.index'), + name='savane.my.index'), url('^conf/$', views.sv_conf, { 'extra_context' : {'title' : 'Contact info', } }), url('^conf/resume_skill/$', views.sv_resume_skill, @@ -57,6 +57,12 @@ url('^conf/ssh_gpg/$', views.sv_ssh_gpg, { 'extra_context' : {'title' : 'SSH & GPG', } }), url('^conf/ssh_gpg/delete/$', views.sv_ssh_delete), + url('^i18n/$', direct_to_template, + { 'template' : 'my/i18n.html', + 'extra_context' : {'title' : 'Language', } }, + name='savane.my.language'), + # TODO: set_lang only lasts for the user's session + url('^i18n/', include('django.conf.urls.i18n')), url(r'^groups/$', only_mine(object_list), { 'queryset' : auth_models.Group.objects.all(), 'extra_context' : { 'title' : "My groups", },
--- a/savane/my/views.py +++ b/savane/my/views.py @@ -169,6 +169,7 @@ else: return {} + class MailForm( forms.Form ): email = forms.EmailField(required=True) action = forms.CharField( widget=forms.HiddenInput, required=True, initial='update_mail' )
--- a/settings_default.py +++ b/settings_default.py @@ -32,6 +32,21 @@ # http://www.i18nguy.com/unicode/language-identifiers.html LANGUAGE_CODE = 'en-us' +# http://docs.djangoproject.com/en/dev/topics/i18n/deployment/#how-django-discovers-language-preference +ugettext = lambda s: s +LANGUAGES = ( + ('ca', ugettext('Catalan')), + ('de', ugettext('German')), + ('en', ugettext('English')), + ('es', ugettext('Spanish')), + ('fr', ugettext('French')), + ('it', ugettext('Italian')), + ('ja', ugettext('Japanese')), + ('pt_BR', ugettext('Portuguese (Brazil)')), + ('ru', ugettext('Russian')), + ('sv', ugettext('Swedish')), +) + SITE_ID = 1 # If you set this to False, Django will make some optimizations so as not @@ -61,6 +76,7 @@ MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.locale.LocaleMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware',
--- a/templates/base.html +++ b/templates/base.html @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="{{LANGUAGE_CODE}}" xml:lang="{{LANGUAGE_CODE}}"> <head> {% load i18n %} <title> @@ -17,7 +17,7 @@ <li><a href="/"><img src="{{STATIC_MEDIA_URL}}savane/images/floating.png" alt="Back to homepage" border="0" width="118" height="100" /></a></li> {% if user.is_authenticated %} <li class="menutitle">Connected as {{ user.username}}</li> - <li class="menuitem"><a href="{% url savane.my.views.index %}">My account</a></li> + <li class="menuitem"><a href="{% url savane.my.index %}">My account</a></li> <li class="menuitem"><a href="{% url django.contrib.auth.views.logout %}">Logout</a></li> {% else %} <li class="menutitle">Login status</li>
new file mode 100644 --- /dev/null +++ b/templates/my/i18n.html @@ -0,0 +1,27 @@ +{% extends "base.html" %} + +{% comment %} +Cf. http://docs.djangoproject.com/en/dev/topics/i18n/internationalization/#the-set-language-redirect-view +{% endcomment %} + +{% block content %} + +<form action="{% url django.views.i18n.set_language %}" method="post"> +{% csrf_token %} +<input name="next" type="hidden" value="{% url savane.my.index %}" /> +<select name="language"> +{% for lang in LANGUAGES %} +<option value="{{ lang.0 }}">{{ lang.1 }}</option> +{% endfor %} +</select> +<input type="submit" value="Go" /> +</form> + +{% endblock %} +{% comment %} +Local Variables: ** +mode: django-html ** +tab-width: 4 ** +indent-tabs-mode: nil ** +End: ** +{% endcomment %}
--- a/templates/my/index.html +++ b/templates/my/index.html @@ -12,6 +12,7 @@ <a href="{% url savane.my.group_list %}">My groups</a><br /> <a href="{% url savane.my.membership_list %}">My memberships</a><br /> <a href="{% url django.contrib.auth.views.password_change %}">Change my password</a><br /> + <a href="{% url savane.my.language %}">Set language</a> ({{LANGUAGE_CODE}})<br /> </p> </div>
--- a/templates/svmain/group_list.html +++ b/templates/svmain/group_list.html @@ -1,11 +1,12 @@ {% extends "base.html" %} +{% load i18n %} {% block content %} {% include "svmain/pagination.inc.html" %} <form action="." method="GET"> - Search: <input type="text" name="q" value="{{q}}" /> + {% trans "Search" %}: <input type="text" name="q" value="{{q}}" /> </form> {% if object_list %} @@ -15,7 +16,7 @@ {% endfor %} </ul> {% else %} - <p>No groups.</p> + <p>{% trans "No groups." %}</p> {% endif %} {% endblock %}
--- a/templates/svmain/pagination.inc.html +++ b/templates/svmain/pagination.inc.html @@ -1,11 +1,13 @@ +{% load i18n %} + {% if page_obj %} <div class="pagination"> <span class="step-links"> {% if paginator.num_pages > 1 %} {% if not page_obj.has_previous %} - préc. + {% trans "previous" %} {% else %} - <a href="?page={{ page_obj.previous_page_number }}">préc.</a> + <a href="?page={{ page_obj.previous_page_number }}">{% trans "previous" %}</a> {% endif %} < {% for number in paginator.page_range %} @@ -17,16 +19,23 @@ {% endfor %} > {% if not page_obj.has_next %} - suiv. + {% trans "next" %} {% else %} - <a href="?page={{ page_obj.next_page_number }}">suiv.</a> + <a href="?page={{ page_obj.next_page_number }}">{% trans "next" %}</a> {% endif %} <span class="current"> - - Page {{ page_obj.number }} sur {{ paginator.num_pages }} ({{paginator.count}}) + - + {% blocktrans with page_obj.number as number and paginator.num_pages as num_pages and paginator.count as count %} + Page {{ page_obj.number }} on {{ num_pages }} ({{ count }}) + {% endblocktrans %} </span> {% else %} - ({{paginator.count}} element(s)) + {% blocktrans count paginator.count as count %} + {{count}} element + {% plural %} + {{count}} elements + {% endblocktrans %} {% endif %} </span> </div>
--- a/templates/svmain/user_list.html +++ b/templates/svmain/user_list.html @@ -1,11 +1,12 @@ {% extends "base.html" %} +{% load i18n %} {% block content %} {% include "svmain/pagination.inc.html" %} <form action="." method="GET"> - Rechercher: <input type="text" name="q" value="{{q}}" /> + {% trans "Search" %}: <input type="text" name="q" value="{{q}}" /> </form> {% if object_list %} @@ -15,7 +16,7 @@ {% endfor %} </ul> {% else %} - <p>No users.</p> + <p>{% trans "No users." %}</p> {% endif %} {% endblock %}