aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--NEWS9
-rw-r--r--contrib/README.sitemapgen11
-rwxr-xr-xcontrib/sitemapgen164
-rw-r--r--templates/ar/adminsubscribeack.txt1
-rw-r--r--templates/ar/adminunsubscribeack.txt1
-rw-r--r--templates/ast/adminsubscribeack.txt1
-rw-r--r--templates/ast/adminunsubscribeack.txt1
-rw-r--r--templates/ca/adminsubscribeack.txt1
-rw-r--r--templates/ca/adminunsubscribeack.txt1
-rw-r--r--templates/cs/adminsubscribeack.txt1
-rw-r--r--templates/cs/adminunsubscribeack.txt1
-rw-r--r--templates/da/adminsubscribeack.txt1
-rw-r--r--templates/da/adminunsubscribeack.txt1
-rw-r--r--templates/de/adminsubscribeack.txt3
-rw-r--r--templates/de/adminunsubscribeack.txt1
-rwxr-xr-xtemplates/el/adminsubscribeack.txt1
-rwxr-xr-xtemplates/el/adminunsubscribeack.txt1
-rw-r--r--templates/es/adminsubscribeack.txt1
-rw-r--r--templates/es/adminunsubscribeack.txt1
-rw-r--r--templates/et/adminsubscribeack.txt1
-rw-r--r--templates/et/adminunsubscribeack.txt1
-rw-r--r--templates/eu/adminsubscribeack.txt1
-rw-r--r--templates/eu/adminunsubscribeack.txt1
-rw-r--r--templates/fa/adminsubscribeack.txt1
-rw-r--r--templates/fa/adminunsubscribeack.txt1
-rw-r--r--templates/fi/adminsubscribeack.txt1
-rw-r--r--templates/fi/adminunsubscribeack.txt1
-rw-r--r--templates/fr/adminsubscribeack.txt1
-rw-r--r--templates/fr/adminunsubscribeack.txt1
-rw-r--r--templates/gl/adminsubscribeack.txt1
-rw-r--r--templates/gl/adminunsubscribeack.txt1
-rw-r--r--templates/he/adminsubscribeack.txt1
-rw-r--r--templates/he/adminunsubscribeack.txt1
-rw-r--r--templates/hr/adminsubscribeack.txt1
-rw-r--r--templates/hr/adminunsubscribeack.txt1
-rw-r--r--templates/hu/adminsubscribeack.txt1
-rw-r--r--templates/hu/adminunsubscribeack.txt1
-rw-r--r--templates/ia/adminsubscribeack.txt1
-rw-r--r--templates/ia/adminunsubscribeack.txt1
-rw-r--r--templates/it/adminsubscribeack.txt1
-rw-r--r--templates/it/adminunsubscribeack.txt1
-rw-r--r--templates/ja/adminsubscribeack.txt1
-rw-r--r--templates/ja/adminunsubscribeack.txt1
-rw-r--r--templates/ko/adminsubscribeack.txt1
-rw-r--r--templates/ko/adminunsubscribeack.txt1
-rw-r--r--templates/lt/adminsubscribeack.txt1
-rw-r--r--templates/lt/adminunsubscribeack.txt1
-rw-r--r--templates/nl/adminsubscribeack.txt1
-rw-r--r--templates/nl/adminunsubscribeack.txt1
-rw-r--r--templates/no/adminsubscribeack.txt1
-rw-r--r--templates/no/adminunsubscribeack.txt1
-rw-r--r--templates/pl/adminsubscribeack.txt1
-rw-r--r--templates/pl/adminunsubscribeack.txt1
-rw-r--r--templates/pt/adminsubscribeack.txt1
-rw-r--r--templates/pt/adminunsubscribeack.txt1
-rw-r--r--templates/pt_BR/adminsubscribeack.txt1
-rw-r--r--templates/pt_BR/adminunsubscribeack.txt1
-rw-r--r--templates/ro/adminsubscribeack.txt1
-rw-r--r--templates/ro/adminunsubscribeack.txt1
-rw-r--r--templates/ru/adminsubscribeack.txt1
-rw-r--r--templates/ru/adminunsubscribeack.txt1
-rw-r--r--templates/sk/adminsubscribeack.txt1
-rw-r--r--templates/sk/adminunsubscribeack.txt1
-rw-r--r--templates/sl/adminsubscribeack.txt1
-rw-r--r--templates/sl/adminunsubscribeack.txt1
-rw-r--r--templates/sr/adminsubscribeack.txt1
-rw-r--r--templates/sr/adminunsubscribeack.txt1
-rw-r--r--templates/sv/adminsubscribeack.txt1
-rw-r--r--templates/sv/adminunsubscribeack.txt1
-rw-r--r--templates/tr/adminsubscribeack.txt1
-rw-r--r--templates/tr/adminunsubscribeack.txt1
-rw-r--r--templates/uk/adminsubscribeack.txt1
-rw-r--r--templates/uk/adminunsubscribeack.txt1
-rw-r--r--templates/vi/adminsubscribeack.txt1
-rw-r--r--templates/vi/adminunsubscribeack.txt1
-rw-r--r--templates/zh_CN/adminsubscribeack.txt1
-rw-r--r--templates/zh_CN/adminunsubscribeack.txt1
-rw-r--r--templates/zh_TW/adminsubscribeack.txt1
-rw-r--r--templates/zh_TW/adminunsubscribeack.txt1
79 files changed, 259 insertions, 3 deletions
diff --git a/NEWS b/NEWS
index 23cb0271..7494695a 100644
--- a/NEWS
+++ b/NEWS
@@ -41,8 +41,8 @@ Here is a history of user visible changes to Mailman.
- Thanks to Jim Popovitch, admin notices of (un)subscribes now may give
the source of the action. This consists of a %(whence)s replacement
- that can be added to the admin(un)subscribeack.txt templates. This
- has been done for the 'en' templates, but not for most others.
+ that has been added to the admin(un)subscribeack.txt templates. Thanks
+ to Yasuhito FUTATSUKI for updating the non-English templates.
- Thanks to Jim Popovitch, there is a new
BLOCK_SPAMHAUS_LISTED_DBL_SUBSCRIBE setting to enable blocking web
@@ -87,6 +87,11 @@ Here is a history of user visible changes to Mailman.
- Quoting in the mailman-config command has been changed from double to
single quotes to allow double-quoted parameters. (LP:1774986)
+ Miscellaneous
+
+ - Added to the contrib directory, a script from Jim Popovitch to generate
+ Sitemap files for a list's archive.
+
2.1.26 (04-Feb-2018)
Security
diff --git a/contrib/README.sitemapgen b/contrib/README.sitemapgen
new file mode 100644
index 00000000..d4daa401
--- /dev/null
+++ b/contrib/README.sitemapgen
@@ -0,0 +1,11 @@
+Hacked from bin/sync_members
+
+Copy mailman/contrib/sitemapgen to mailman/bin/ and execute it as so:
+
+ /path/to/mailman/bin/sitemapgen -l <listname>
+
+Alternatively add it to cron like so:
+
+5 0 * * * for l in `/path/to/mailman/bin/list_lists -apb`; do
+ /path/to/mailman/bin/sitemapgen $l; done
+
diff --git a/contrib/sitemapgen b/contrib/sitemapgen
new file mode 100755
index 00000000..21a4ffb2
--- /dev/null
+++ b/contrib/sitemapgen
@@ -0,0 +1,164 @@
+#! @PYTHON@
+
+# For a given listname, this script generates sitemap.xml.gz files
+# under archives/private/<listname>/
+#
+# Copyright (C) 1998-2018 by the Free Software Foundation, Inc.
+#
+# graciously hacked from bin/sync_members
+#
+
+"""Build Sitemap files for an archive
+
+Usage: %(program)s [options] listname
+
+Where `options' are:
+
+ --help
+ -h
+ Print this message.
+
+ listname
+ Required. This specifies the list to generate sitemaps for.
+"""
+
+import os
+import sys
+import paths
+# Import this /after/ paths so that the sys.path is properly hacked
+import email.Utils
+from Mailman import MailList
+from Mailman import Errors
+from Mailman import Utils
+from Mailman.UserDesc import UserDesc
+from Mailman import mm_cfg
+from Mailman.i18n import _
+import getopt
+import re
+import time
+from stat import *
+from datetime import datetime, timedelta
+import gzip
+
+
+# sitemap priorities in age-in-weeks/priority/changefreq tuples
+priorities = ([1, 1.0, "daily"],
+ [4, 1.0, "weekly"],
+ [30, 1.0, "monthly"],
+ [52, 0.9, "never"],
+ [100, 0.8, "never"],
+ [200, 0.7, "never"],
+ [300, 0.6, "never"],
+ [400, 0.5, "never"])
+
+
+program = sys.argv[0]
+
+def usage(code, msg=''):
+ if code:
+ fd = sys.stderr
+ else:
+ fd = sys.stdout
+ print >> fd, _(__doc__)
+ if msg:
+ print >> fd, msg
+ sys.exit(code)
+
+
+
+def main():
+ listname = None
+
+ # TBD: can't use getopt with this command line syntax, which is broken and
+ # should be changed to be getopt compatible.
+ i = 1
+ while i < len(sys.argv):
+ opt = sys.argv[i]
+ if opt in ('-h', '--help'):
+ usage(0)
+ else:
+ try:
+ listname = sys.argv[i].lower()
+ i += 1
+ except IndexError:
+ usage(1, _('No listname given'))
+ break
+
+ if listname is None:
+ usage(1, _('Must have a listname'))
+
+ # get the locked list object
+ try:
+ mlist = MailList.MailList(listname, lock=0)
+ except Errors.MMListError, e:
+ print _('No such list: %(listname)s')
+ sys.exit(1)
+
+ rootdir = mlist.archive_dir()
+ rooturl = mlist.GetBaseArchiveURL()
+
+ reArcPath = re.compile(r'^\d+')
+ reArcFile = re.compile(r'\d+\.html')
+
+ sitemaps = []
+
+ now = datetime.now()
+
+ for folder in os.listdir(rootdir):
+ path = os.path.join(rootdir,folder)
+ if not os.path.isdir(path) or not reArcPath.search(folder):
+ continue
+
+ dirtime = os.path.getmtime(path)
+
+ os.umask(0022)
+ sitemap = os.path.join(rootdir,folder,"sitemap.xml.gz")
+ f = gzip.open(sitemap, 'wb')
+
+ f.write('<?xml version="1.0" encoding="UTF-8"?>\n')
+ f.write('<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n')
+
+ for file in os.listdir(path):
+ if not reArcFile.search(file):
+ continue
+
+ # get timestamp of file
+ st = os.stat(os.path.join(rootdir,folder,file))
+ mtime = st[ST_MTIME] #modification time
+
+ ts = datetime.fromtimestamp(mtime)
+ for weeks, priority, changefreq in priorities:
+ if ts > now - timedelta(weeks = weeks):
+ break
+
+ f.write(' <url>\n <loc>' + os.path.join(rooturl,folder,file) + '</loc>\n')
+ f.write(' <lastmod>' + time.strftime("%Y-%m-%d",time.gmtime(mtime)) + '</lastmod>\n')
+ f.write(' <changefreq>' + changefreq + '</changefreq>\n')
+ f.write(' <priority>' + str(priority) + '</priority>\n')
+ f.write(' </url>\n')
+
+ f.write('</urlset>\n')
+ f.close()
+
+ sitemaps.append((os.path.join(rooturl,folder,"sitemap.xml.gz")))
+
+
+ # write out the sitemapindex file
+ sitemapindex = os.path.join(rootdir,"sitemap.xml.gz")
+ f = gzip.open(sitemapindex, 'wb')
+
+ f.write('<?xml version="1.0" encoding="UTF-8"?>\n')
+ f.write('<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n')
+
+ for sitemap in sitemaps:
+ f.write(' <sitemap>\n <loc>' + sitemap + '</loc>\n')
+ f.write(' <lastmod>' + time.strftime("%Y-%m-%d", now.timetuple()) + '</lastmod>\n')
+ f.write(' </sitemap>\n')
+
+ f.write('</sitemapindex>\n')
+ f.close()
+
+
+if __name__ == '__main__':
+ main()
+
diff --git a/templates/ar/adminsubscribeack.txt b/templates/ar/adminsubscribeack.txt
index 7e534a60..09c21244 100644
--- a/templates/ar/adminsubscribeack.txt
+++ b/templates/ar/adminsubscribeack.txt
@@ -1,3 +1,4 @@
تم اشتراك %(member)s بنجاح في القائمة %(listname)s.
+%(whence)s
diff --git a/templates/ar/adminunsubscribeack.txt b/templates/ar/adminunsubscribeack.txt
index 04501ebf..d57cd336 100644
--- a/templates/ar/adminunsubscribeack.txt
+++ b/templates/ar/adminunsubscribeack.txt
@@ -1,2 +1,3 @@
تمت إزالة %(member)s من القائمة %(listname)s.
+%(whence)s
diff --git a/templates/ast/adminsubscribeack.txt b/templates/ast/adminsubscribeack.txt
index b939f4b7..01b47cb3 100644
--- a/templates/ast/adminsubscribeack.txt
+++ b/templates/ast/adminsubscribeack.txt
@@ -1,3 +1,4 @@
%(member)s soscribise satisfactoriamente a %(listname)s.
+%(whence)s
diff --git a/templates/ast/adminunsubscribeack.txt b/templates/ast/adminunsubscribeack.txt
index 53ccddc4..dd427200 100644
--- a/templates/ast/adminunsubscribeack.txt
+++ b/templates/ast/adminunsubscribeack.txt
@@ -1,3 +1,4 @@
%(member)s encabox la to soscripcin de %(listname)s.
+%(whence)s
diff --git a/templates/ca/adminsubscribeack.txt b/templates/ca/adminsubscribeack.txt
index bb9b8aa1..34308873 100644
--- a/templates/ca/adminsubscribeack.txt
+++ b/templates/ca/adminsubscribeack.txt
@@ -1,3 +1,4 @@
%(member)s s'ha subscrit amb èxit a %(listname)s.
+%(whence)s
diff --git a/templates/ca/adminunsubscribeack.txt b/templates/ca/adminunsubscribeack.txt
index 9a1496c0..c1522ee6 100644
--- a/templates/ca/adminunsubscribeack.txt
+++ b/templates/ca/adminunsubscribeack.txt
@@ -1,2 +1,3 @@
S'ha cancel·lat la subscripció de %(member)s a la llista %(listname)s.
+%(whence)s
diff --git a/templates/cs/adminsubscribeack.txt b/templates/cs/adminsubscribeack.txt
index 5db6c9ca..07668c2e 100644
--- a/templates/cs/adminsubscribeack.txt
+++ b/templates/cs/adminsubscribeack.txt
@@ -1,3 +1,4 @@
%(member)s byl spn pihlen do konference %(listname)s.
+%(whence)s
diff --git a/templates/cs/adminunsubscribeack.txt b/templates/cs/adminunsubscribeack.txt
index fc90d833..c5582a8d 100644
--- a/templates/cs/adminunsubscribeack.txt
+++ b/templates/cs/adminunsubscribeack.txt
@@ -1,2 +1,3 @@
%(member)s byl odhlen z konference %(listname)s.
+%(whence)s
diff --git a/templates/da/adminsubscribeack.txt b/templates/da/adminsubscribeack.txt
index 7bbacb3c..07647a78 100644
--- a/templates/da/adminsubscribeack.txt
+++ b/templates/da/adminsubscribeack.txt
@@ -1 +1,2 @@
%(member)s er nu tilmeldt listen %(listname)s.
+%(whence)s
diff --git a/templates/da/adminunsubscribeack.txt b/templates/da/adminunsubscribeack.txt
index ba730425..e385dfd2 100644
--- a/templates/da/adminunsubscribeack.txt
+++ b/templates/da/adminunsubscribeack.txt
@@ -1,2 +1,3 @@
%(member)s er nu fjernet fra listen %(listname)s.
+%(whence)s
diff --git a/templates/de/adminsubscribeack.txt b/templates/de/adminsubscribeack.txt
index ea0ef08b..5d3fde89 100644
--- a/templates/de/adminsubscribeack.txt
+++ b/templates/de/adminsubscribeack.txt
@@ -1 +1,2 @@
-%(member)s hat die Liste %(listname)s erfolgreich abonniert. \ No newline at end of file
+%(member)s hat die Liste %(listname)s erfolgreich abonniert.
+%(whence)s \ No newline at end of file
diff --git a/templates/de/adminunsubscribeack.txt b/templates/de/adminunsubscribeack.txt
index 2cf00121..f552d104 100644
--- a/templates/de/adminunsubscribeack.txt
+++ b/templates/de/adminunsubscribeack.txt
@@ -1,2 +1,3 @@
%(member)s ist nicht mehr Mitglied der Liste %(listname)s.
+%(whence)s
diff --git a/templates/el/adminsubscribeack.txt b/templates/el/adminsubscribeack.txt
index 36f683c8..0d6373eb 100755
--- a/templates/el/adminsubscribeack.txt
+++ b/templates/el/adminsubscribeack.txt
@@ -1,3 +1,4 @@
%(member)s %(listname)s.
+%(whence)s
diff --git a/templates/el/adminunsubscribeack.txt b/templates/el/adminunsubscribeack.txt
index c4bbf20d..1800c814 100755
--- a/templates/el/adminunsubscribeack.txt
+++ b/templates/el/adminunsubscribeack.txt
@@ -1,2 +1,3 @@
%(member)s %(listname)s.
+%(whence)s
diff --git a/templates/es/adminsubscribeack.txt b/templates/es/adminsubscribeack.txt
index c792d49b..650f0358 100644
--- a/templates/es/adminsubscribeack.txt
+++ b/templates/es/adminsubscribeack.txt
@@ -1,3 +1,4 @@
%(member)s se ha subscrito satisfactoriamente a %(listname)s.
+%(whence)s
diff --git a/templates/es/adminunsubscribeack.txt b/templates/es/adminunsubscribeack.txt
index 0f70bf6d..0ed7fc3d 100644
--- a/templates/es/adminunsubscribeack.txt
+++ b/templates/es/adminunsubscribeack.txt
@@ -1,3 +1,4 @@
%(member)s ha anulado su subscripcin de %(listname)s.
+%(whence)s
diff --git a/templates/et/adminsubscribeack.txt b/templates/et/adminsubscribeack.txt
index 29e1b491..e3180faa 100644
--- a/templates/et/adminsubscribeack.txt
+++ b/templates/et/adminsubscribeack.txt
@@ -1,3 +1,4 @@
%(member)s liideti listiga %(listname)s.
+%(whence)s
diff --git a/templates/et/adminunsubscribeack.txt b/templates/et/adminunsubscribeack.txt
index f8bfc4a8..9c1ee485 100644
--- a/templates/et/adminunsubscribeack.txt
+++ b/templates/et/adminunsubscribeack.txt
@@ -1,2 +1,3 @@
%(member)s eemaldati listist %(listname)s.
+%(whence)s
diff --git a/templates/eu/adminsubscribeack.txt b/templates/eu/adminsubscribeack.txt
index cc2e1cf5..8461c426 100644
--- a/templates/eu/adminsubscribeack.txt
+++ b/templates/eu/adminsubscribeack.txt
@@ -1,2 +1,3 @@
%(member)s erabiltzailea %(listname)s zerrendako harpide da hemendik aurrera.
+%(whence)s
diff --git a/templates/eu/adminunsubscribeack.txt b/templates/eu/adminunsubscribeack.txt
index f659c585..78dc5f50 100644
--- a/templates/eu/adminunsubscribeack.txt
+++ b/templates/eu/adminunsubscribeack.txt
@@ -1,2 +1,3 @@
%(member)s harpideak %(listname)s zerrenda utzi egin du.
+%(whence)s
diff --git a/templates/fa/adminsubscribeack.txt b/templates/fa/adminsubscribeack.txt
index 6b0f03aa..f1ad7e78 100644
--- a/templates/fa/adminsubscribeack.txt
+++ b/templates/fa/adminsubscribeack.txt
@@ -1,3 +1,4 @@
%(member)s با موفقیت در %(listname)s مشترک شد.
+%(whence)s
diff --git a/templates/fa/adminunsubscribeack.txt b/templates/fa/adminunsubscribeack.txt
index f520e36b..6802a1a9 100644
--- a/templates/fa/adminunsubscribeack.txt
+++ b/templates/fa/adminunsubscribeack.txt
@@ -1,3 +1,4 @@
%(member)s از %(listname)s حذف شد.
+%(whence)s
diff --git a/templates/fi/adminsubscribeack.txt b/templates/fi/adminsubscribeack.txt
index 6d1e9777..1a8fd788 100644
--- a/templates/fi/adminsubscribeack.txt
+++ b/templates/fi/adminsubscribeack.txt
@@ -1,3 +1,4 @@
%(member)s on onnistuneesti liitetty listalle %(listname)s.
+%(whence)s
diff --git a/templates/fi/adminunsubscribeack.txt b/templates/fi/adminunsubscribeack.txt
index b3d58119..76f43571 100644
--- a/templates/fi/adminunsubscribeack.txt
+++ b/templates/fi/adminunsubscribeack.txt
@@ -1,2 +1,3 @@
%(member)s on eronnut listalta %(listname)s.
+%(whence)s
diff --git a/templates/fr/adminsubscribeack.txt b/templates/fr/adminsubscribeack.txt
index c92a8058..9c37a11f 100644
--- a/templates/fr/adminsubscribeack.txt
+++ b/templates/fr/adminsubscribeack.txt
@@ -1,3 +1,4 @@
%(member)s a t abonn %(listname)s avec succs.
+%(whence)s
diff --git a/templates/fr/adminunsubscribeack.txt b/templates/fr/adminunsubscribeack.txt
index 48cca8c0..ce63d55c 100644
--- a/templates/fr/adminunsubscribeack.txt
+++ b/templates/fr/adminunsubscribeack.txt
@@ -1,2 +1,3 @@
L'abonnement de %(member)s a t rsili de %(listname)s.
+%(whence)s
diff --git a/templates/gl/adminsubscribeack.txt b/templates/gl/adminsubscribeack.txt
index ba00c798..025c84d2 100644
--- a/templates/gl/adminsubscribeack.txt
+++ b/templates/gl/adminsubscribeack.txt
@@ -1,3 +1,4 @@
%(member)s subscribiuse satisfactoriamente a %(listname)s.
+%(whence)s
diff --git a/templates/gl/adminunsubscribeack.txt b/templates/gl/adminunsubscribeack.txt
index 784dcb53..6e969717 100644
--- a/templates/gl/adminunsubscribeack.txt
+++ b/templates/gl/adminunsubscribeack.txt
@@ -1,3 +1,4 @@
%(member)s anulou a súa subscrición de %(listname)s.
+%(whence)s
diff --git a/templates/he/adminsubscribeack.txt b/templates/he/adminsubscribeack.txt
index e4b74a14..8a3e49e5 100644
--- a/templates/he/adminsubscribeack.txt
+++ b/templates/he/adminsubscribeack.txt
@@ -1,3 +1,4 @@
%(member)s נרשם בהצלחה אל %(listname)s.
+%(whence)s
diff --git a/templates/he/adminunsubscribeack.txt b/templates/he/adminunsubscribeack.txt
index 1c425c81..0a3fc519 100644
--- a/templates/he/adminunsubscribeack.txt
+++ b/templates/he/adminunsubscribeack.txt
@@ -1,2 +1,3 @@
%(member)s נמחק מ- %(listname)s.
+%(whence)s
diff --git a/templates/hr/adminsubscribeack.txt b/templates/hr/adminsubscribeack.txt
index b84c5260..ff3abf5f 100644
--- a/templates/hr/adminsubscribeack.txt
+++ b/templates/hr/adminsubscribeack.txt
@@ -1,3 +1,4 @@
%(member)s je uspjesno pretplacen na %(listname)s.
+%(whence)s
diff --git a/templates/hr/adminunsubscribeack.txt b/templates/hr/adminunsubscribeack.txt
index cfb8c789..cc235ba1 100644
--- a/templates/hr/adminunsubscribeack.txt
+++ b/templates/hr/adminunsubscribeack.txt
@@ -1,2 +1,3 @@
%(member)s je odjavljen sa %(listname)s.
+%(whence)s
diff --git a/templates/hu/adminsubscribeack.txt b/templates/hu/adminsubscribeack.txt
index 1ba4eec0..7d4821f1 100644
--- a/templates/hu/adminsubscribeack.txt
+++ b/templates/hu/adminsubscribeack.txt
@@ -1 +1,2 @@
%(member)s feliratkozott a(z) %(listname)s listra.
+%(whence)s
diff --git a/templates/hu/adminunsubscribeack.txt b/templates/hu/adminunsubscribeack.txt
index c49f2dea..424e4c44 100644
--- a/templates/hu/adminunsubscribeack.txt
+++ b/templates/hu/adminunsubscribeack.txt
@@ -1 +1,2 @@
%(member)s trlve a(z) %(listname)s listrl.
+%(whence)s
diff --git a/templates/ia/adminsubscribeack.txt b/templates/ia/adminsubscribeack.txt
index 9f98a9ad..89e01be4 100644
--- a/templates/ia/adminsubscribeack.txt
+++ b/templates/ia/adminsubscribeack.txt
@@ -1 +1,2 @@
%(member)s ha essite abonate a %(listname)s con successo.
+%(whence)s
diff --git a/templates/ia/adminunsubscribeack.txt b/templates/ia/adminunsubscribeack.txt
index 48ff19f4..7896d9dd 100644
--- a/templates/ia/adminunsubscribeack.txt
+++ b/templates/ia/adminunsubscribeack.txt
@@ -1 +1,2 @@
%(member)s ha essite removite de %(listname)s.
+%(whence)s
diff --git a/templates/it/adminsubscribeack.txt b/templates/it/adminsubscribeack.txt
index 5783fd50..e537d3c1 100644
--- a/templates/it/adminsubscribeack.txt
+++ b/templates/it/adminsubscribeack.txt
@@ -1 +1,2 @@
%(member)s stato iscritto con successo a %(listname)s.
+%(whence)s
diff --git a/templates/it/adminunsubscribeack.txt b/templates/it/adminunsubscribeack.txt
index 586f4fc7..dab33933 100644
--- a/templates/it/adminunsubscribeack.txt
+++ b/templates/it/adminunsubscribeack.txt
@@ -1 +1,2 @@
%(member)s stato rimosso da %(listname)s.
+%(whence)s
diff --git a/templates/ja/adminsubscribeack.txt b/templates/ja/adminsubscribeack.txt
index be2498b8..88a07ab2 100644
--- a/templates/ja/adminsubscribeack.txt
+++ b/templates/ja/adminsubscribeack.txt
@@ -1,2 +1,3 @@
%(member)s %(listname)s 񤷤ޤ.
+%(whence)s
diff --git a/templates/ja/adminunsubscribeack.txt b/templates/ja/adminunsubscribeack.txt
index b47a801c..179d8829 100644
--- a/templates/ja/adminunsubscribeack.txt
+++ b/templates/ja/adminunsubscribeack.txt
@@ -1,2 +1,3 @@
%(member)s %(listname)s 񤷤ޤ.
+%(whence)s
diff --git a/templates/ko/adminsubscribeack.txt b/templates/ko/adminsubscribeack.txt
index 8adecb2d..7c02dfd1 100644
--- a/templates/ko/adminsubscribeack.txt
+++ b/templates/ko/adminsubscribeack.txt
@@ -1,3 +1,4 @@
%(member)s %(listname)s ϸ Ʈ ϵǾϴ.
+%(whence)s
diff --git a/templates/ko/adminunsubscribeack.txt b/templates/ko/adminunsubscribeack.txt
index fb867bbd..bf0b48aa 100644
--- a/templates/ko/adminunsubscribeack.txt
+++ b/templates/ko/adminunsubscribeack.txt
@@ -1,2 +1,3 @@
%(member)s %(listname)s ŵǾϴ.
+%(whence)s
diff --git a/templates/lt/adminsubscribeack.txt b/templates/lt/adminsubscribeack.txt
index 4528ce2e..2e661225 100644
--- a/templates/lt/adminsubscribeack.txt
+++ b/templates/lt/adminsubscribeack.txt
@@ -1,3 +1,4 @@
%(member)s skmingai prisijung prie %(listname)s.
+%(whence)s
diff --git a/templates/lt/adminunsubscribeack.txt b/templates/lt/adminunsubscribeack.txt
index 155b5296..29e7dcd5 100644
--- a/templates/lt/adminunsubscribeack.txt
+++ b/templates/lt/adminunsubscribeack.txt
@@ -1 +1,2 @@
%(member)s paalintas i %(listname)s.
+%(whence)s
diff --git a/templates/nl/adminsubscribeack.txt b/templates/nl/adminsubscribeack.txt
index 7c9bd44b..97dbfb3f 100644
--- a/templates/nl/adminsubscribeack.txt
+++ b/templates/nl/adminsubscribeack.txt
@@ -1,3 +1,4 @@
%(member)s is succesvol ingeschreven op de %(listname)s maillijst.
+%(whence)s
diff --git a/templates/nl/adminunsubscribeack.txt b/templates/nl/adminunsubscribeack.txt
index 05e67f03..91dedf54 100644
--- a/templates/nl/adminunsubscribeack.txt
+++ b/templates/nl/adminunsubscribeack.txt
@@ -1,2 +1,3 @@
%(member)s is verwijderd van de %(listname)s maillijst.
+%(whence)s
diff --git a/templates/no/adminsubscribeack.txt b/templates/no/adminsubscribeack.txt
index 3348c83e..c4227929 100644
--- a/templates/no/adminsubscribeack.txt
+++ b/templates/no/adminsubscribeack.txt
@@ -1 +1,2 @@
%(member)s er n pmeldt listen %(listname)s.
+%(whence)s
diff --git a/templates/no/adminunsubscribeack.txt b/templates/no/adminunsubscribeack.txt
index 4e848975..af2d3d04 100644
--- a/templates/no/adminunsubscribeack.txt
+++ b/templates/no/adminunsubscribeack.txt
@@ -1,2 +1,3 @@
%(member)s er n tatt ut av listen %(listname)s.
+%(whence)s
diff --git a/templates/pl/adminsubscribeack.txt b/templates/pl/adminsubscribeack.txt
index 03cb5e98..cb71599c 100644
--- a/templates/pl/adminsubscribeack.txt
+++ b/templates/pl/adminsubscribeack.txt
@@ -1,3 +1,4 @@
%(member)s zosta zapisany na list %(listname)s.
+%(whence)s
diff --git a/templates/pl/adminunsubscribeack.txt b/templates/pl/adminunsubscribeack.txt
index e876755d..992dde1f 100644
--- a/templates/pl/adminunsubscribeack.txt
+++ b/templates/pl/adminunsubscribeack.txt
@@ -1,2 +1,3 @@
%(member)s zosta wypisany z listy %(listname)s.
+%(whence)s
diff --git a/templates/pt/adminsubscribeack.txt b/templates/pt/adminsubscribeack.txt
index 64b8fc12..c30866df 100644
--- a/templates/pt/adminsubscribeack.txt
+++ b/templates/pt/adminsubscribeack.txt
@@ -1,3 +1,4 @@
%(member)s foi inscrito com sucesso em %(listname)s.
+%(whence)s
diff --git a/templates/pt/adminunsubscribeack.txt b/templates/pt/adminunsubscribeack.txt
index 39caffad..a1dde014 100644
--- a/templates/pt/adminunsubscribeack.txt
+++ b/templates/pt/adminunsubscribeack.txt
@@ -1,2 +1,3 @@
%(member)s foi removido de %(listname)s.
+%(whence)s
diff --git a/templates/pt_BR/adminsubscribeack.txt b/templates/pt_BR/adminsubscribeack.txt
index 91870e1d..34efde64 100644
--- a/templates/pt_BR/adminsubscribeack.txt
+++ b/templates/pt_BR/adminsubscribeack.txt
@@ -1,3 +1,4 @@
%(member)s foi inscrito com sucesso na lista %(listname)s.
+%(whence)s
diff --git a/templates/pt_BR/adminunsubscribeack.txt b/templates/pt_BR/adminunsubscribeack.txt
index 39236c18..d3ac3999 100644
--- a/templates/pt_BR/adminunsubscribeack.txt
+++ b/templates/pt_BR/adminunsubscribeack.txt
@@ -1,2 +1,3 @@
%(member)s foi removido da lista %(listname)s.
+%(whence)s
diff --git a/templates/ro/adminsubscribeack.txt b/templates/ro/adminsubscribeack.txt
index 162ec1dd..219de3cc 100644
--- a/templates/ro/adminsubscribeack.txt
+++ b/templates/ro/adminsubscribeack.txt
@@ -1 +1,2 @@
%(member)s a fost abonat cu succes la %(listname)s.
+%(whence)s
diff --git a/templates/ro/adminunsubscribeack.txt b/templates/ro/adminunsubscribeack.txt
index 74e6cec8..8ad4bda4 100644
--- a/templates/ro/adminunsubscribeack.txt
+++ b/templates/ro/adminunsubscribeack.txt
@@ -1 +1,2 @@
%(member)s a fost şters din lista %(listname)s.
+%(whence)s
diff --git a/templates/ru/adminsubscribeack.txt b/templates/ru/adminsubscribeack.txt
index 22b1720a..734acdb1 100644
--- a/templates/ru/adminsubscribeack.txt
+++ b/templates/ru/adminsubscribeack.txt
@@ -1,2 +1,3 @@
%(member)s был успешно подписан на список рассылки %(listname)s.
+%(whence)s
diff --git a/templates/ru/adminunsubscribeack.txt b/templates/ru/adminunsubscribeack.txt
index d87177dd..f027782d 100644
--- a/templates/ru/adminunsubscribeack.txt
+++ b/templates/ru/adminunsubscribeack.txt
@@ -1,2 +1,3 @@
%(member)s был удален из подписчиков списка рассылки %(listname)s.
+%(whence)s
diff --git a/templates/sk/adminsubscribeack.txt b/templates/sk/adminsubscribeack.txt
index 053b6298..266582f4 100644
--- a/templates/sk/adminsubscribeack.txt
+++ b/templates/sk/adminsubscribeack.txt
@@ -1,2 +1,3 @@
%(member)s bol úspešne prihlásený do konferencie %(listname)s.
+%(whence)s
diff --git a/templates/sk/adminunsubscribeack.txt b/templates/sk/adminunsubscribeack.txt
index 6cea883b..94d75d6b 100644
--- a/templates/sk/adminunsubscribeack.txt
+++ b/templates/sk/adminunsubscribeack.txt
@@ -1 +1,2 @@
%(member)s bol odhlásený z konferencie %(listname)s.
+%(whence)s
diff --git a/templates/sl/adminsubscribeack.txt b/templates/sl/adminsubscribeack.txt
index 35294e27..c1f62b09 100644
--- a/templates/sl/adminsubscribeack.txt
+++ b/templates/sl/adminsubscribeack.txt
@@ -1,3 +1,4 @@
%(member)s je bilo uspeno prijavljenih na %(listname)s.
+%(whence)s
diff --git a/templates/sl/adminunsubscribeack.txt b/templates/sl/adminunsubscribeack.txt
index 3598efca..996234a2 100644
--- a/templates/sl/adminunsubscribeack.txt
+++ b/templates/sl/adminunsubscribeack.txt
@@ -1 +1,2 @@
%(member)s je bilo odjavljenih z %(listname)s.
+%(whence)s
diff --git a/templates/sr/adminsubscribeack.txt b/templates/sr/adminsubscribeack.txt
index e90285ae..8fa9befd 100644
--- a/templates/sr/adminsubscribeack.txt
+++ b/templates/sr/adminsubscribeack.txt
@@ -1,3 +1,4 @@
%(member)s је успјешно уписан-а на листу %(listname)s.
+%(whence)s
diff --git a/templates/sr/adminunsubscribeack.txt b/templates/sr/adminunsubscribeack.txt
index 865b5f07..226b5287 100644
--- a/templates/sr/adminunsubscribeack.txt
+++ b/templates/sr/adminunsubscribeack.txt
@@ -1,2 +1,3 @@
%(member)s је искључен-а са листе %(listname)s.
+%(whence)s
diff --git a/templates/sv/adminsubscribeack.txt b/templates/sv/adminsubscribeack.txt
index 35b500df..8013737b 100644
--- a/templates/sv/adminsubscribeack.txt
+++ b/templates/sv/adminsubscribeack.txt
@@ -1 +1,2 @@
%(member)s r nu anmlda till listan %(listname)s.
+%(whence)s
diff --git a/templates/sv/adminunsubscribeack.txt b/templates/sv/adminunsubscribeack.txt
index f931171b..ca3e2d13 100644
--- a/templates/sv/adminunsubscribeack.txt
+++ b/templates/sv/adminunsubscribeack.txt
@@ -1,2 +1,3 @@
%(member)s r nu borttagna frn listan %(listname)s.
+%(whence)s
diff --git a/templates/tr/adminsubscribeack.txt b/templates/tr/adminsubscribeack.txt
index b074f729..13cb15ad 100644
--- a/templates/tr/adminsubscribeack.txt
+++ b/templates/tr/adminsubscribeack.txt
@@ -1,4 +1,5 @@
%(member)s, baaryla %(listname)s listesine ye oldu.
+%(whence)s
diff --git a/templates/tr/adminunsubscribeack.txt b/templates/tr/adminunsubscribeack.txt
index 380351f2..b91fe119 100644
--- a/templates/tr/adminunsubscribeack.txt
+++ b/templates/tr/adminunsubscribeack.txt
@@ -1,3 +1,4 @@
%(member)s, %(listname)s listesinden karld.
+%(whence)s
diff --git a/templates/uk/adminsubscribeack.txt b/templates/uk/adminsubscribeack.txt
index cf61089c..8b5bf1c2 100644
--- a/templates/uk/adminsubscribeack.txt
+++ b/templates/uk/adminsubscribeack.txt
@@ -1,3 +1,4 @@
%(member)s було успішно підписано до списку %(listname)s.
+%(whence)s
diff --git a/templates/uk/adminunsubscribeack.txt b/templates/uk/adminunsubscribeack.txt
index b6f44d59..2e66b4be 100644
--- a/templates/uk/adminunsubscribeack.txt
+++ b/templates/uk/adminunsubscribeack.txt
@@ -1,2 +1,3 @@
%(member)s було видалено зі списку %(listname)s.
+%(whence)s
diff --git a/templates/vi/adminsubscribeack.txt b/templates/vi/adminsubscribeack.txt
index e105f072..606c6d20 100644
--- a/templates/vi/adminsubscribeack.txt
+++ b/templates/vi/adminsubscribeack.txt
@@ -1,3 +1,4 @@
%(member)s đã được đăng ký với hộp thư chung %(listname)s.
+%(whence)s
diff --git a/templates/vi/adminunsubscribeack.txt b/templates/vi/adminunsubscribeack.txt
index dd98f42c..9c768aec 100644
--- a/templates/vi/adminunsubscribeack.txt
+++ b/templates/vi/adminunsubscribeack.txt
@@ -1,2 +1,3 @@
%(member)s đã bị gỡ bỏ ra hộp thư chung %(listname)s.
+%(whence)s
diff --git a/templates/zh_CN/adminsubscribeack.txt b/templates/zh_CN/adminsubscribeack.txt
index 0d0e3f3b..4d9a8d4b 100644
--- a/templates/zh_CN/adminsubscribeack.txt
+++ b/templates/zh_CN/adminsubscribeack.txt
@@ -1,3 +1,4 @@
%(member)s 已成功地添加到 %(listname)s 中。
+%(whence)s
diff --git a/templates/zh_CN/adminunsubscribeack.txt b/templates/zh_CN/adminunsubscribeack.txt
index 30f924fc..28a69564 100644
--- a/templates/zh_CN/adminunsubscribeack.txt
+++ b/templates/zh_CN/adminunsubscribeack.txt
@@ -1,2 +1,3 @@
%(member)s 已从 %(listname)s 中移除。
+%(whence)s
diff --git a/templates/zh_TW/adminsubscribeack.txt b/templates/zh_TW/adminsubscribeack.txt
index d17de5b0..7a57daeb 100644
--- a/templates/zh_TW/adminsubscribeack.txt
+++ b/templates/zh_TW/adminsubscribeack.txt
@@ -1,2 +1,3 @@
%(member)s 已經訂閱 %(listname)s 成功了.
+%(whence)s
diff --git a/templates/zh_TW/adminunsubscribeack.txt b/templates/zh_TW/adminunsubscribeack.txt
index 12ec7d4e..01c15762 100644
--- a/templates/zh_TW/adminunsubscribeack.txt
+++ b/templates/zh_TW/adminunsubscribeack.txt
@@ -1,3 +1,4 @@
%(member)s 已經取消訂閱 %(listname)s 了.
+%(whence)s