diff --git a/.gitignore b/.gitignore index cef7a8fddc6e2576a8114e837f2c7492b9012cf8..9667329211dfdafdc469f32466cd6cde7f5562fe 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,6 @@ ve/ venv/ .venv/ .env/ + +# Compiled locales +*.mo diff --git a/compile_pofiles.sh b/compile_pofiles.sh new file mode 100755 index 0000000000000000000000000000000000000000..7dfed343607b41b2d80b04a66c8d9ec07996067b --- /dev/null +++ b/compile_pofiles.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +set -e +set -x + +./manage.py compilemessages diff --git a/generate_pofiles.sh b/generate_pofiles.sh new file mode 100755 index 0000000000000000000000000000000000000000..b5310e9f15f48b88cadbea38295d602b1e0fa7c0 --- /dev/null +++ b/generate_pofiles.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +set -e +set -x + +IGNORE_DIRS='virtenv build' + +ignore='' + +for d in ${IGNORE_DIRS}; do + ignore="${ignore} --ignore=${d}" +done + +./manage.py makemessages -l de ${ignore} +./manage.py makemessages -l fr ${ignore} +./manage.py makemessages -l en ${ignore} diff --git a/locale/de/LC_MESSAGES/django.po b/locale/de/LC_MESSAGES/django.po new file mode 100644 index 0000000000000000000000000000000000000000..f54366a26efa6dc083fbec5bfe1960928f81f433 --- /dev/null +++ b/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,52 @@ +# 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 , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-11-23 15:35+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: picampaign/campaign/models.py:22 picampaign/campaign/models.py:34 +msgid "language" +msgstr "sprache" + +#: picampaign/campaign/models.py:38 +msgid "Argumentary in %(lang) for %(title)" +msgstr "" + +#: picampaign/campaign/models.py:50 +msgid "Contact %(ccontact) on %(title)" +msgstr "" + +#: picampaign/contact/models.py:16 +#, python-format +msgid "%(firstname) %(lastname)" +msgstr "" + +#: picampaign/feedback/models.py:14 +msgid "feedback for %(callee contact) on %(campaign title)" +msgstr "" + +#: picampaign/settings.py:78 +msgid "English" +msgstr "Englisch" + +#: picampaign/settings.py:79 +msgid "German" +msgstr "Deutsch" + +#: picampaign/settings.py:80 +msgid "French" +msgstr "Französisch" diff --git a/locale/en/LC_MESSAGES/django.po b/locale/en/LC_MESSAGES/django.po new file mode 100644 index 0000000000000000000000000000000000000000..ed7e7915f2ac6636c2b2af0f299f3ca7d080312e --- /dev/null +++ b/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,51 @@ +# 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 , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-11-23 15:35+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: picampaign/campaign/models.py:22 picampaign/campaign/models.py:34 +msgid "language" +msgstr "language" + +#: picampaign/campaign/models.py:38 +msgid "Argumentary in %(lang) for %(title)" +msgstr "" + +#: picampaign/campaign/models.py:50 +msgid "Contact %(ccontact) on %(title)" +msgstr "" + +#: picampaign/contact/models.py:16 +#, python-format +msgid "%(firstname) %(lastname)" +msgstr "" + +#: picampaign/feedback/models.py:14 +msgid "feedback for %(callee contact) on %(campaign title)" +msgstr "" + +#: picampaign/settings.py:78 +msgid "English" +msgstr "" + +#: picampaign/settings.py:79 +msgid "German" +msgstr "" + +#: picampaign/settings.py:80 +msgid "French" +msgstr "" diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 0000000000000000000000000000000000000000..0534b52b6733b921a1e77d10c92e354ed9f26e95 --- /dev/null +++ b/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,52 @@ +# 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 , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-11-23 15:35+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: picampaign/campaign/models.py:22 picampaign/campaign/models.py:34 +msgid "language" +msgstr "langue" + +#: picampaign/campaign/models.py:38 +msgid "Argumentary in %(lang) for %(title)" +msgstr "" + +#: picampaign/campaign/models.py:50 +msgid "Contact %(ccontact) on %(title)" +msgstr "" + +#: picampaign/contact/models.py:16 +#, python-format +msgid "%(firstname) %(lastname)" +msgstr "" + +#: picampaign/feedback/models.py:14 +msgid "feedback for %(callee contact) on %(campaign title)" +msgstr "" + +#: picampaign/settings.py:78 +msgid "English" +msgstr "Anglais" + +#: picampaign/settings.py:79 +msgid "German" +msgstr "Allemand" + +#: picampaign/settings.py:80 +msgid "French" +msgstr "Francais" diff --git a/picampaign/campaign/models.py b/picampaign/campaign/models.py index 2836ff85e29860b3c2cc004d0cd72996d5e71fc6..6d3240bf47e4fc1da5b6967c153a69dcb3deacd5 100644 --- a/picampaign/campaign/models.py +++ b/picampaign/campaign/models.py @@ -35,7 +35,8 @@ class Argumentary(models.Model): text = models.TextField(null=True) def __unicode__(self): - return 'Argumentary in %s for %s' % (self.lang, self.campaign.title) + return _('Argumentary in %(lang) for %(title)') % {'lang': self.lang, + 'title': self.campaign.title} class CampaignContact(models.Model): @@ -46,7 +47,8 @@ class CampaignContact(models.Model): weight = models.IntegerField(default=0) def __unicode__(self): - return 'Contact %s on %s' % (self.contact, self.campaign.title) + return _('Contact %(ccontact) on %(title)') % {'contact': self.contact, + 'title': self.campaign.title} def all_groups(self): return [x.name for x in self.contact.groups.all()] diff --git a/picampaign/contact/models.py b/picampaign/contact/models.py index 8894c1adb6ba6b693aad3910c7d14ef57f1f61f7..8a4c36983fdd5a46eb030ce8a3310eafea3e38b6 100644 --- a/picampaign/contact/models.py +++ b/picampaign/contact/models.py @@ -1,4 +1,5 @@ from django.db import models +from django.utils.translation import ugettext_lazy as _ class Contact(models.Model): @@ -12,4 +13,5 @@ class Contact(models.Model): photo = models.ImageField(upload_to='contacts/photos', blank=True) def __unicode__(self): - return '%s %s' % (self.first_name, self.last_name) + return _('%(firstname) %(lastname)') % {'firstname': self.first_name, + 'lastname': self.last_name} diff --git a/picampaign/feedback/models.py b/picampaign/feedback/models.py index 826772cdde056b1e61e93455382ceca7b0e688cf..c6692098365286e81a50ea23f52a69cb452a47cc 100644 --- a/picampaign/feedback/models.py +++ b/picampaign/feedback/models.py @@ -1,6 +1,7 @@ from django.db import models from picampaign.campaign.models import CampaignContact from picampaign.organization.models import FeedbackCategory +from django.utils.translation import ugettext_lazy as _ class Feedback(models.Model): @@ -10,5 +11,6 @@ class Feedback(models.Model): comment = models.CharField(max_length=512, blank=True) def __unicode__(self): - return 'feedback for %s on %s' % (self.callee.contact, - self.callee.campaign.title) + return _('feedback for %(callee contact) on %(campaign title)') % \ + {'callee contact': self.callee.contact, + 'campaign title': self.callee.campaign.title} diff --git a/picampaign/settings.py.sample b/picampaign/settings.py.sample index 59a68ec47b5d8996fb78f1b69dda0ad632955f59..cdf4504662d9eba0fb7dab9742b9746338d7f164 100644 --- a/picampaign/settings.py.sample +++ b/picampaign/settings.py.sample @@ -10,6 +10,7 @@ https://docs.djangoproject.com/en/1.7/ref/settings/ # Build paths inside the project like this: os.path.join(BASE_DIR, ...) import os +from django.utils.translation import ugettext_lazy as _ BASE_DIR = os.path.dirname(os.path.dirname(__file__)) @@ -45,6 +46,7 @@ INSTALLED_APPS = ( MIDDLEWARE_CLASSES = ( 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.locale.LocaleMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', @@ -71,6 +73,12 @@ DATABASES = { # Internationalization # https://docs.djangoproject.com/en/1.7/topics/i18n/ +LANGUAGES = ( + ('en', _('English')), + ('de', _('German')), + ('fr', _('French')), +) + LANGUAGE_CODE = 'fr-FR' TIME_ZONE = 'Europe/Paris' @@ -86,6 +94,7 @@ USE_TZ = True # https://docs.djangoproject.com/en/1.7/howto/static-files/ STATIC_URL = '/static/' +STATIC_ROOT = os.path.join(BASE_DIR, 'static') #REST_FRAMEWORK = { # 'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAdminUser',),