[damned-lies] Send mail to coordinator in her language (Fixes #596943)



commit b39ec02652e2ffc056ed920d9a1ecbabfdf27ba2
Author: Claude Paroz <claude 2xlibre net>
Date:   Fri Oct 30 23:30:36 2009 +0100

    Send mail to coordinator in her language (Fixes #596943)

 people/views.py |    8 ++++----
 teams/models.py |   12 ++++++++++--
 teams/tests.py  |    6 ++++++
 3 files changed, 20 insertions(+), 6 deletions(-)
---
diff --git a/people/views.py b/people/views.py
index ca76f8a..2e90479 100644
--- a/people/views.py
+++ b/people/views.py
@@ -21,7 +21,7 @@
 from django.core import urlresolvers
 from django.http import HttpResponseRedirect
 from django.shortcuts import render_to_response, get_object_or_404
-from django.utils.translation import ugettext as _, get_date_formats
+from django.utils.translation import ugettext_lazy, ugettext as _, get_date_formats
 from django.template import RequestContext
 from django.db import transaction, IntegrityError
 from django.contrib.auth.decorators import login_required
@@ -85,9 +85,9 @@ def person_team_join(request):
             try:
                 new_role.save()
                 request.user.message_set.create(message=_("You have successfully joined the team '%s'.") % team.get_description())
-                team.send_mail_to_coordinator(subject=_("A new person joined your team"),
-                                              message=_("%(name)s has just joined your translation team on %(site)s") %
-                                                        {'name': person.name, 'site': Site.objects.get_current()})
+                team.send_mail_to_coordinator(subject=ugettext_lazy("A new person joined your team"),
+                                              message=ugettext_lazy("%(name)s has just joined your translation team on %(site)s"),
+                                              messagekw = {'name': person.name, 'site': Site.objects.get_current()})
             except IntegrityError:
                 transaction.rollback()
                 request.user.message_set.create(message=_("You are already member of this team."))
diff --git a/teams/models.py b/teams/models.py
index 98edd17..0dcd0fc 100644
--- a/teams/models.py
+++ b/teams/models.py
@@ -21,6 +21,7 @@
 
 from django.db import models
 from django.core import mail
+from django.utils import translation
 from django.utils.translation import ugettext_lazy, ugettext as _
 from django.conf import settings
 from django.contrib.sites.models import Site
@@ -184,14 +185,21 @@ class Team(models.Model):
             members = list(self.members.all())
         return members
 
-    def send_mail_to_coordinator(self, subject, message):
-        message += "\n--\n" + _(u"This is an automated message sent from %s.") % Site.objects.get_current()
+    def send_mail_to_coordinator(self, subject, message, messagekw={}):
+        """ Send a message to the coordinator, in her language if available
+            and if subject and message are lazy strings """
+        prev_lang = translation.get_language()
+        translation.activate(self.language_set.all()[0].locale)
+
+        message = u"%s\n--\n" % (message % messagekw,)
+        message += _(u"This is an automated message sent from %s.") % Site.objects.get_current()
         mail.send_mail(
             subject,
             message,
             settings.DEFAULT_FROM_EMAIL,
             [self.get_coordinator().email]
         )
+        translation.activate(prev_lang)
 
 class FakeTeam(object):
     """
diff --git a/teams/tests.py b/teams/tests.py
index 1fc4d66..597dacb 100644
--- a/teams/tests.py
+++ b/teams/tests.py
@@ -6,6 +6,7 @@ from django.core import mail
 from django.contrib.auth import login
 from people.models import Person
 from teams.models import Team, Role
+from languages.models import Language
 
 class TeamTest(TestCase):
 
@@ -35,6 +36,9 @@ class TeamTest(TestCase):
         self.t = Team(name='fr', description='French')
         self.t.save()
 
+        self.l = Language(name='French', locale='fr', team=self.t)
+        self.l.save()
+
         self.role = Role(team=self.t, person=self.pt)
         self.role.save()
 
@@ -124,6 +128,8 @@ class TeamTest(TestCase):
         # Test coordinator receives email
         self.assertEquals(len(mail.outbox), 1)
         self.assertEquals(mail.outbox[0].recipients()[0], self.pcoo.email)
+        # Mail should be sent in the target team's language (i.e. French here)
+        self.assertTrue(u"rejoindre" in mail.outbox[0].body)
 
     def test_edit_team(self):
         """ Test team edit form """



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]