changeset 4252:c2ee4633b9e8

Merged with 1.8
author zenhase <zh@punyco.de>
date Mon, 28 Jul 2008 12:04:00 +0200
parents 3c6e893424f6 (current diff) a452a1dab1f7 (diff)
children f8615334d5ab
files MoinMoin/action/_tests/test_sendcached.py MoinMoin/action/cache.py MoinMoin/action/newaccount.py MoinMoin/action/revert.py MoinMoin/action/sendcached.py MoinMoin/auth/openidrp.py MoinMoin/config/multiconfig.py MoinMoin/macro/AdvancedSearch.py MoinMoin/macro/MonthCalendar.py MoinMoin/request/__init__.py MoinMoin/script/server/standalone.py MoinMoin/user.py MoinMoin/web/utils.py MoinMoin/wikiutil.py MoinMoin/xmlrpc/__init__.py
diffstat 62 files changed, 5565 insertions(+), 5308 deletions(-) [+]
line wrap: on
line diff
--- a/MoinMoin/__init__.py	Sun Jul 27 17:40:11 2008 +0200
+++ b/MoinMoin/__init__.py	Mon Jul 28 12:04:00 2008 +0200
@@ -1,6 +1,6 @@
 # -*- coding: iso-8859-1 -*-
 """
-MoinMoin Version 1.7.0alpha
+MoinMoin Version 1.8.0alpha
 
 @copyright: 2000-2006 by Juergen Hermann <jh@web.de>,
             2002-2008 MoinMoin:ThomasWaldmann
--- a/MoinMoin/_tests/test_caching.py	Sun Jul 27 17:40:11 2008 +0200
+++ b/MoinMoin/_tests/test_caching.py	Mon Jul 28 12:04:00 2008 +0200
@@ -76,6 +76,24 @@
         page._write_file(test_data2)
         assert cache.needsUpdate(page._text_filename())
 
+    def test_filelike_readwrite(self):
+        request = self.request
+        key = 'nooneknowsit'
+        arena = 'somethingfunny'
+        data = "dontcare"
+        cacheentry = caching.CacheEntry(request, arena, key, scope='wiki', do_locking=True,
+                 use_pickle=False, use_encode=True)
+        cacheentry.open(mode='w')
+        cacheentry.write(data)
+        cacheentry.close()
+
+        assert cacheentry.exists()
+
+        cacheentry.open(mode='r')
+        rdata = cacheentry.read()
+        cacheentry.close()
+
+        assert data == rdata
 
 coverage_modules = ['MoinMoin.caching']
 
--- a/MoinMoin/_tests/test_packages.py	Sun Jul 27 17:40:11 2008 +0200
+++ b/MoinMoin/_tests/test_packages.py	Mon Jul 28 12:04:00 2008 +0200
@@ -84,11 +84,9 @@
 
 class TestRealCreation:
 
-    def testSearchCreate(self):
+    def testSearch(self):
         package = PackagePages(self.request.rootpage.page_name, self.request)
-        temp = tempfile.NamedTemporaryFile(suffix='.zip')
-        package.collectpackage(package.searchpackage(self.request, "Category"), temp)
-        assert zipfile.is_zipfile(temp.name)
+        assert package.searchpackage(self.request, "Bad") == [u'BadContent']
 
     def testListCreate(self):
         package = PackagePages(self.request.rootpage.page_name, self.request)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MoinMoin/action/_tests/test_cache.py	Mon Jul 28 12:04:00 2008 +0200
@@ -0,0 +1,184 @@
+# -*- coding: iso-8859-1 -*-
+"""
+    MoinMoin - tests of cache action functions
+
+    @copyright: 2008 MoinMoin:ThomasWaldmann
+    @license: GNU GPL, see COPYING for details.
+"""
+
+import os, StringIO
+
+from MoinMoin import caching
+from MoinMoin.action import AttachFile, cache
+
+from MoinMoin._tests import become_trusted, create_page, nuke_page
+
+class TestSendCached:
+    """ testing action cache """
+    pagename = u"AutoCreatedSillyPageToTestAttachments"
+
+    def test_cache_key_content(self):
+        request = self.request
+        result1 = cache.key(request, content='foo', secret='bar')
+        result2 = cache.key(request, content='foo', secret='baz')
+        assert result1  # not empty
+        assert result1 != result2  # different for different secret
+        result3 = cache.key(request, content='foofoo', secret='baz')
+        assert result3 != result2  # different for different content
+        result4 = cache.key(request, content='foo'*1000, secret='baz')
+        assert len(result4) == len(result3)  # same length of key for different input lengths
+
+    def test_cache_key_attachment(self):
+        request = self.request
+        pagename = self.pagename
+        attachname = 'foo.txt'
+
+        become_trusted(request)
+        create_page(request, pagename, u"Foo!")
+
+        AttachFile.add_attachment(request, pagename, attachname, "Test content1", True)
+
+        result1 = cache.key(request, itemname=pagename, attachname=attachname, secret='bar')
+        result2 = cache.key(request, itemname=pagename, attachname=attachname, secret='baz')
+        assert result1  # not empty
+        assert result1 != result2  # different for different secret
+
+        # test below does not work, because mtime is often same, inode can be same due to how add_attachment
+        # works, file size is same, attachment name is same, wikiname/pagename is same.
+        # In practice, this should rather rarely cause problems:
+        #AttachFile.add_attachment(request, pagename, attachname, "Test content2", True)
+        #result3 = cache.key(request, itemname=pagename, attachname=attachname, secret='baz')
+        #assert result3 != result2  # different for different content
+
+        AttachFile.add_attachment(request, pagename, attachname, "Test content33333", True)
+        result4 = cache.key(request, itemname=pagename, attachname=attachname, secret='baz')
+        assert len(result4) == len(result2)  # same length of key for different input lengths
+        nuke_page(request, pagename)
+
+    def test_put_cache_minimal(self):
+        """Test if put_cache() works"""
+        request = self.request
+        key = 'nooneknowsit'
+        data = "dontcare"
+        cache.put(request, key, data)
+        url = cache.url(request, key)
+
+        assert key in url
+        meta_cache = caching.CacheEntry(request,
+                                        arena=cache.cache_arena,
+                                        scope=cache.cache_scope,
+                                        key=key+'.meta', use_pickle=True)
+        meta = meta_cache.content()
+        assert meta['httpdate_last_modified'].endswith(' GMT') # only a very rough check, it has used cache mtime as last_modified
+        assert "Content-Type: application/octet-stream" in meta['headers']
+        assert "Content-Length: %d" % len(data) in meta['headers']
+
+    def test_put_cache_guess_ct_give_lm(self):
+        """Test if put_cache() works, when we give filename (so it guesses content_type) and last_modified"""
+        request = self.request
+        key = 'nooneknowsit'
+        filename = "test.png"
+        data = "dontcare"
+        cache.put(request, key, data, filename=filename, last_modified=1)
+        url = cache.url(request, key)
+        assert key in url
+
+        meta_cache = caching.CacheEntry(request,
+                                        arena=cache.cache_arena,
+                                        scope=cache.cache_scope,
+                                        key=key+'.meta', use_pickle=True)
+        meta = meta_cache.content()
+        assert meta['httpdate_last_modified'] == 'Thu, 01 Jan 1970 00:00:01 GMT'
+        assert "Content-Type: image/png" in meta['headers']
+        assert "Content-Length: %d" % len(data) in meta['headers']
+
+    def test_put_cache_file_like_data(self):
+        """Test if put_cache() works when we give it a file like object for the content"""
+        request = self.request
+        key = 'nooneknowsit'
+        filename = "test.png"
+        data = "dontcareatall"
+        data_file = StringIO.StringIO(data)
+        cache.put(request, key, data_file)
+        url = cache.url(request, key)
+
+        assert key in url
+        meta_cache = caching.CacheEntry(request,
+                                        arena=cache.cache_arena,
+                                        scope=cache.cache_scope,
+                                        key=key+'.meta', use_pickle=True)
+        meta = meta_cache.content()
+        assert meta['httpdate_last_modified'].endswith(' GMT') # only a very rough check, it has used cache mtime as last_modified
+        assert "Content-Type: application/octet-stream" in meta['headers']
+        assert "Content-Length: %d" % len(data) in meta['headers']
+
+        data_cache = caching.CacheEntry(request,
+                                        arena=cache.cache_arena,
+                                        scope=cache.cache_scope,
+                                        key=key+'.data')
+        cached = data_cache.content()
+        assert data == cached
+
+    def test_put_cache_complex(self):
+        """Test if put_cache() works for a more complex, practical scenario:
+
+           As 'source' we just use some random integer as count value.
+
+           The 'rendered representation' of it is just the word "spam" repeated
+           count times, which we cache.
+
+           The cache key calculation (for the 'non-guessable' keys) is also
+           rather simple.
+
+           In real world, source would be likely some big image, rendered
+           representation of it a thumbnail / preview of it. Or some LaTeX
+           source and its rendered representation as png image.
+           Key calculation could be some MAC or some other hard to guess and
+           unique string.
+        """
+        import random
+        request = self.request
+        render = lambda data: "spam" * data
+        secret = 4223
+        keycalc = lambda data: str(data * secret)
+
+        source = random.randint(1, 100)
+        rendered1 = render(source)
+        key1 = keycalc(source)
+
+        cache.put(request, key1, rendered1)
+        url1 = cache.url(request, key1)
+        assert 'key=%s' % key1 in url1
+
+        data_cache = caching.CacheEntry(request,
+                                        arena=cache.cache_arena,
+                                        scope=cache.cache_scope,
+                                        key=key1+'.data')
+        cached1 = data_cache.content()
+
+        assert render(source) == cached1
+        # if that succeeds, we have stored the rendered representation of source in the cache under key1
+
+        # now we use some different source, render it and store it in the cache
+        source = source * 2
+        rendered2 = render(source)
+        key2 = keycalc(source)
+
+        cache.put(request, key2, rendered2)
+        url2 = cache.url(request, key2)
+        assert 'key=%s' % key2 in url2
+
+        data_cache = caching.CacheEntry(request,
+                                        arena=cache.cache_arena,
+                                        scope=cache.cache_scope,
+                                        key=key2+'.data')
+        cached2 = data_cache.content()
+
+        assert render(source) == cached2
+        # if that succeeds, we have stored the rendered representation of updated source in the cache under key2
+
+        assert url2 != url1  # URLs must be different for different source (implies different keys)
+
+
+coverage_modules = ['MoinMoin.action.cache']
+
--- a/MoinMoin/action/_tests/test_sendcached.py	Sun Jul 27 17:40:11 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,142 +0,0 @@
-# -*- coding: iso-8859-1 -*-
-"""
-    MoinMoin - tests of sendcached functions
-
-    @copyright: 2008 MoinMoin:ThomasWaldmann
-    @license: GNU GPL, see COPYING for details.
-"""
-
-import os, StringIO
-
-from MoinMoin import caching
-from MoinMoin.action import sendcached
-
-from MoinMoin._tests import become_trusted, create_page, nuke_page
-
-class TestSendCached:
-    """ testing action sendcached """
-    pagename = u"AutoCreatedSillyPageToTestAttachments"
-
-    def test_put_cache_minimal(self):
-        """Test if put_cache() works"""
-        request = self.request
-        key = 'nooneknowsit'
-        data = "dontcare"
-        url = sendcached.put_cache(request, key, data)
-
-        assert key in url
-        meta_cache = caching.CacheEntry(request,
-                                        arena=sendcached.sendcached_arena,
-                                        scope=sendcached.sendcached_scope,
-                                        key=key+'.meta', use_pickle=True)
-        last_modified, headers = meta_cache.content()
-        assert last_modified.endswith(' GMT') # only a very rough check, it has used cache mtime as last_modified
-        assert "Content-Type: application/octet-stream" in headers
-        assert "Content-Length: %d" % len(data) in headers
-
-    def test_put_cache_guess_ct_give_lm(self):
-        """Test if put_cache() works, when we give filename (so it guesses content_type) and last_modified"""
-        request = self.request
-        key = 'nooneknowsit'
-        filename = "test.png"
-        data = "dontcare"
-        url = sendcached.put_cache(request, key, data,
-                                   filename=filename, last_modified=1)
-        assert key in url
-
-        meta_cache = caching.CacheEntry(request,
-                                        arena=sendcached.sendcached_arena,
-                                        scope=sendcached.sendcached_scope,
-                                        key=key+'.meta', use_pickle=True)
-        last_modified, headers = meta_cache.content()
-        assert last_modified == 'Thu, 01 Jan 1970 00:00:01 GMT'
-        assert "Content-Type: image/png" in headers
-        assert "Content-Length: %d" % len(data) in headers
-
-    def test_put_cache_file_like_data(self):
-        """Test if put_cache() works when we give it a file like object for the content"""
-        request = self.request
-        key = 'nooneknowsit'
-        filename = "test.png"
-        data = "dontcareatall"
-        data_file = StringIO.StringIO(data)
-        url = sendcached.put_cache(request, key, data_file)
-
-        assert key in url
-        meta_cache = caching.CacheEntry(request,
-                                        arena=sendcached.sendcached_arena,
-                                        scope=sendcached.sendcached_scope,
-                                        key=key+'.meta', use_pickle=True)
-        last_modified, headers = meta_cache.content()
-        assert last_modified.endswith(' GMT') # only a very rough check, it has used cache mtime as last_modified
-        assert "Content-Type: application/octet-stream" in headers
-        assert "Content-Length: %d" % len(data) in headers
-
-        data_cache = caching.CacheEntry(request,
-                                        arena=sendcached.sendcached_arena,
-                                        scope=sendcached.sendcached_scope,
-                                        key=key+'.data')
-        cached = data_cache.content()
-        assert data == cached
-
-    def test_put_cache_complex(self):
-        """Test if put_cache() works for a more complex, practical scenario:
-
-           As 'source' we just use some random integer as count value.
-
-           The 'rendered representation' of it is just the word "spam" repeated
-           count times, which we cache.
-
-           The cache key calculation (for the 'non-guessable' keys) is also
-           rather simple.
-
-           In real world, source would be likely some big image, rendered
-           representation of it a thumbnail / preview of it. Or some LaTeX
-           source and its rendered representation as png image.
-           Key calculation could be some MAC or some other hard to guess and
-           unique string.
-        """
-        import random
-        request = self.request
-        render = lambda data: "spam" * data
-        secret = 4223
-        keycalc = lambda data: str(data * secret)
-
-        source = random.randint(1, 100)
-        rendered1 = render(source)
-        key1 = keycalc(source)
-
-        url1 = sendcached.put_cache(request, key1, rendered1)
-        assert 'key=%s' % key1 in url1
-
-        data_cache = caching.CacheEntry(request,
-                                        arena=sendcached.sendcached_arena,
-                                        scope=sendcached.sendcached_scope,
-                                        key=key1+'.data')
-        cached1 = data_cache.content()
-
-        assert render(source) == cached1
-        # if that succeeds, we have stored the rendered representation of source in the cache under key1
-
-        # now we use some different source, render it and store it in the cache
-        source = source * 2
-        rendered2 = render(source)
-        key2 = keycalc(source)
-
-        url2 = sendcached.put_cache(request, key2, rendered2)
-        assert 'key=%s' % key2 in url2
-
-        data_cache = caching.CacheEntry(request,
-                                        arena=sendcached.sendcached_arena,
-                                        scope=sendcached.sendcached_scope,
-                                        key=key2+'.data')
-        cached2 = data_cache.content()
-
-        assert render(source) == cached2
-        # if that succeeds, we have stored the rendered representation of updated source in the cache under key2
-
-        assert url2 != url1  # URLs must be different for different source (implies different keys)
-
-
-coverage_modules = ['MoinMoin.action.sendcached']
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MoinMoin/action/cache.py	Mon Jul 28 12:04:00 2008 +0200
@@ -0,0 +1,246 @@
+# -*- coding: iso-8859-1 -*-
+"""
+    MoinMoin - Send a raw object from the caching system (and offer utility
+    functions to put data into cache, calculate cache key, etc.).
+
+    Sample usage
+    ------------
+    Assume we have a big picture (bigpic) and we want to efficiently show some
+    thumbnail (thumbpic) for it:
+
+    # first calculate a (hard to guess) cache key (this key will change if the
+    # original data (bigpic) changes):
+    key = cache.key(..., attachname=bigpic, ...)
+
+    # check if we don't have it in cache yet
+    if not cache.exists(..., key):
+        # if we don't have it in cache, we need to render it - this is an
+        # expensive operation that we want to avoid by caching:
+        thumbpic = render_thumb(bigpic)
+        # put expensive operation's results into cache:
+        cache.put(..., key, thumbpic, ...)
+
+    url = cache.url(..., key)
+    html = '<img src="%s">' % url
+
+    @copyright: 2008 MoinMoin:ThomasWaldmann
+    @license: GNU GPL, see COPYING for details.
+"""
+
+import hmac, sha
+
+from MoinMoin import log
+logging = log.getLogger(__name__)
+
+# keep both imports below as they are, order is important:
+from MoinMoin import wikiutil
+import mimetypes
+
+from MoinMoin import config, caching
+from MoinMoin.util import filesys
+from MoinMoin.action import AttachFile
+
+action_name = __name__.split('.')[-1]
+
+# Do NOT get this directly from request.form or user would be able to read any cache!
+cache_arena = 'sendcache'  # just using action_name is maybe rather confusing
+
+# We maybe could use page local caching (not 'wiki' global) to have less directory entries.
+# Local is easier to automatically cleanup if an item changes. Global is easier to manually cleanup.
+# Local makes data_dir much larger, harder to backup.
+cache_scope = 'wiki'
+
+do_locking = False
+
+def key(request, wikiname=None, itemname=None, attachname=None, content=None, secret=None):
+    """
+    Calculate a (hard-to-guess) cache key.
+
+    Important key properties:
+    * The key must be hard to guess (this is because do=get does no ACL checks,
+      so whoever got the key [e.g. from html rendering of an ACL protected wiki
+      page], will be able to see the cached content.
+    * The key must change if the (original) content changes. This is because
+      ACLs on some item may change and even if somebody was allowed to see some
+      revision of some item, it does not implicate that he is allowed to see
+      any other revision also. There will be no harm if he can see exactly the
+      same content again, but there could be harm if he could access a revision
+      with different content.
+
+    If content is supplied, we will calculate and return a hMAC of the content.
+
+    If wikiname, itemname, attachname is given, we don't touch the content (nor do
+    we read it ourselves from the attachment file), but we just calculate a key
+    from the given metadata values and some metadata we get from the filesystem.
+
+    Hint: if you need multiple cache objects for the same source content (e.g.
+          thumbnails of different sizes for the same image), calculate the key
+          only once and then add some different prefixes to it to get the final
+          cache keys.
+
+    @param request: the request object
+    @param wikiname: the name of the wiki (if not given, will be read from cfg)
+    @param itemname: the name of the page
+    @param attachname: the filename of the attachment
+    @param content: content data as unicode object (e.g. for page content or
+                    parser section content)
+    @param secret: secret for hMAC calculation (default: use secret from cfg)
+    """
+    if secret is None:
+        secret = request.cfg.secrets['action/cache']
+    if content:
+        hmac_data = content
+    elif itemname is not None and attachname is not None:
+        wikiname = wikiname or request.cfg.interwikiname or request.cfg.siteid
+        fuid = filesys.fuid(AttachFile.getFilename(request, itemname, attachname))
+        hmac_data = u''.join([wikiname, itemname, attachname, repr(fuid)])
+    else:
+        raise AssertionError('cache_key called with unsupported parameters')
+
+    hmac_data = hmac_data.encode('utf-8')
+    key = hmac.new(secret, hmac_data, sha).hexdigest()
+    return key
+
+
+def put(request, key, data,
+        filename=None,
+        content_type=None,
+        content_disposition=None,
+        content_length=None,
+        last_modified=None,
+        original=None):
+    """
+    Put an object into the cache to send it with cache action later.
+
+    @param request: the request object
+    @param key: non-guessable key into cache (str)
+    @param data: content data (str or open file-like obj)
+    @param filename: filename for content-disposition header and for autodetecting
+                     content_type (unicode, default: None)
+    @param content_type: content-type header value (str, default: autodetect from filename)
+    @param content_disposition: type for content-disposition header (str, default: None)
+    @param content_length: data length for content-length header (int, default: autodetect)
+    @param last_modified: last modified timestamp (int, default: autodetect)
+    @param original: location of original object (default: None) - this is just written to
+                     the metadata cache "as is" and could be used for cache cleanup,
+                     use (wikiname, itemname, attachname or None))
+    """
+    import os.path
+    from MoinMoin.util import timefuncs
+
+    if filename:
+        # make sure we just have a simple filename (without path)
+        filename = os.path.basename(filename)
+
+        if content_type is None:
+            # try autodetect
+            mt, enc = mimetypes.guess_type(filename)
+            if mt:
+                content_type = mt
+
+    if content_type is None:
+        content_type = 'application/octet-stream'
+
+    data_cache = caching.CacheEntry(request, cache_arena, key+'.data', cache_scope, do_locking=do_locking)
+    data_cache.update(data)
+    content_length = content_length or data_cache.size()
+    last_modified = last_modified or data_cache.mtime()
+
+    httpdate_last_modified = timefuncs.formathttpdate(int(last_modified))
+    headers = ['Content-Type: %s' % content_type,
+               'Last-Modified: %s' % httpdate_last_modified,
+               'Content-Length: %s' % content_length,
+              ]
+    if content_disposition and filename:
+        # TODO: fix the encoding here, plain 8 bit is not allowed according to the RFCs
+        # There is no solution that is compatible to IE except stripping non-ascii chars
+        filename = filename.encode(config.charset)
+        headers.append('Content-Disposition: %s; filename="%s"' % (content_disposition, filename))
+
+    meta_cache = caching.CacheEntry(request, cache_arena, key+'.meta', cache_scope, do_locking=do_locking, use_pickle=True)
+    meta_cache.update({
+        'httpdate_last_modified': httpdate_last_modified,
+        'last_modified': last_modified,
+        'headers': headers,
+        'original': original,
+    })
+
+
+def exists(request, key, strict=False):
+    """
+    Check if a cached object for this key exists.
+
+    @param request: the request object
+    @param key: non-guessable key into cache (str)
+    @param strict: if True, also check the data cache, not only meta (bool, default: False)
+    @return: is object cached? (bool)
+    """
+    if strict:
+        data_cache = caching.CacheEntry(request, cache_arena, key+'.data', cache_scope, do_locking=do_locking)
+        data_cached = data_cache.exists()
+    else:
+        data_cached = True  # we assume data will be there if meta is there
+
+    meta_cache = caching.CacheEntry(request, cache_arena, key+'.meta', cache_scope, do_locking=do_locking, use_pickle=True)
+    meta_cached = meta_cache.exists()
+
+    return meta_cached and data_cached
+
+
+def remove(request, key):
+    """ delete headers/data cache for key """
+    meta_cache = caching.CacheEntry(request, cache_arena, key+'.meta', cache_scope, do_locking=do_locking, use_pickle=True)
+    meta_cache.remove()
+    data_cache = caching.CacheEntry(request, cache_arena, key+'.data', cache_scope, do_locking=do_locking)
+    data_cache.remove()
+
+
+def url(request, key, do='get'):
+    """ return URL for the object cached for key """
+    return request.href(action=action_name, do=do, key=key)
+
+def _get_headers(request, key):
+    """ get last_modified and headers cached for key """
+    meta_cache = caching.CacheEntry(request, cache_arena, key+'.meta', cache_scope, do_locking=do_locking, use_pickle=True)
+    meta = meta_cache.content()
+    return meta['httpdate_last_modified'], meta['headers']
+
+
+def _get_datafile(request, key):
+    """ get an open data file for the data cached for key """
+    data_cache = caching.CacheEntry(request, cache_arena, key+'.data', cache_scope, do_locking=do_locking)
+    data_cache.open(mode='r')
+    return data_cache
+
+
+def _do_get(request, key):
+    """ send a complete http response with headers/data cached for key """
+    try:
+        last_modified, headers = _get_headers(request, key)
+        if request.if_modified_since == last_modified:
+            request.emit_http_headers(["Status: 304 Not modified"])
+        else:
+            data_file = _get_datafile(request, key)
+            request.emit_http_headers(headers)
+            request.send_file(data_file)
+    except caching.CacheError:
+        request.emit_http_headers(["Status: 404 Not found"])
+
+
+def _do_remove(request, key):
+    """ delete headers/data cache for key """
+    remove(request, key)
+    request.emit_http_headers(["Status: 200 OK"])
+
+
+def _do(request, do, key):
+    if do == 'get':
+        _do_get(request, key)
+    elif do == 'remove':
+        _do_remove(request, key)
+
+def execute(pagename, request):
+    do = request.form.get('do')
+    key = request.form.get('key')
+    _do(request, do, key)
+
--- a/MoinMoin/action/newaccount.py	Sun Jul 27 17:40:11 2008 +0200
+++ b/MoinMoin/action/newaccount.py	Mon Jul 28 12:04:00 2008 +0200
@@ -83,9 +83,6 @@
     # save data
     theuser.save()
 
-    if 'create_and_mail' in form:
-        theuser.mailAccountData()
-
     result = _("User account created! You can use this account to login now...")
     if _debug:
         result = result + util.dumpFormData(form)
@@ -148,13 +145,8 @@
     row.append(html.TD())
     td = html.TD()
     row.append(td)
-    td.append(html.INPUT(type="submit", name="create_only",
+    td.append(html.INPUT(type="submit", name="create",
                          value=_('Create Profile')))
-    if request.cfg.mail_enabled:
-        td.append(html.Text(' '))
-        td.append(html.INPUT(type="submit", name="create_and_mail",
-                             value="%s + %s" % (_('Create Profile'),
-                                                _('Email'))))
 
     return unicode(ret)
 
@@ -174,7 +166,7 @@
     _ = request.getText
     form = request.form
 
-    submitted = 'create_only' in form or 'create_and_mail' in form
+    submitted = form.has_key('create')
 
     if submitted: # user pressed create button
         request.theme.add_msg(_create_user(request), "dialog")
--- a/MoinMoin/action/revert.py	Sun Jul 27 17:40:11 2008 +0200
+++ b/MoinMoin/action/revert.py	Mon Jul 28 12:04:00 2008 +0200
@@ -3,7 +3,7 @@
     MoinMoin - revert a page to a previous revision
 
     @copyright: 2000-2004 Juergen Hermann <jh@web.de>,
-                2006 MoinMoin:ThomasWaldmann,
+                2006-2008 MoinMoin:ThomasWaldmann,
                 2007 MoinMoin:ReimarBauer,
                 2008 MoinMoin:JohannesBerg
     @license: GNU GPL, see COPYING for details.
@@ -30,7 +30,7 @@
         # as well
         _ = self._
         may = self.request.user.may
-        allowed = may.write(self.pagename) and may.delete(self.pagename)
+        allowed = may.write(self.pagename) and may.revert(self.pagename)
         return allowed, _('You are not allowed to revert this page!')
 
     def check_condition(self):
@@ -42,9 +42,6 @@
                      'If you want to revert to an older revision, first view that older revision and '
                      'then call revert to this (older) revision again.')
             return note
-
-        if not self.page.exists():
-            return _('This page is already deleted or was never created!')
         else:
             return None
 
--- a/MoinMoin/action/sendcached.py	Sun Jul 27 17:40:11 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,170 +0,0 @@
-# -*- coding: iso-8859-1 -*-
-"""
-    MoinMoin - Send a raw object from the caching system
-
-    This can be used e.g. for all image generating extensions:
-    E.g. a thumbnail generating extension just uses sendcached.put_cache to
-    write the thumbnails into the cache and emits <img src="sendcached_url">
-    to display them. sendcached_url is returned by put_cache or get_url.
-
-    IMPORTANT: use some non-guessable key derived from your source content.
-
-    TODO:
-    * add error handling
-    * maybe use page local caching, not global:
-      + smaller directories
-      - but harder to clean
-      - harder to backup data_dir
-    * move file-like code to caching module
-    * add auto-key generation?
-
-    @copyright: 2008 MoinMoin:ThomasWaldmann
-    @license: GNU GPL, see COPYING for details.
-"""
-
-from MoinMoin import log
-logging = log.getLogger(__name__)
-
-from MoinMoin import config, caching
-
-# keep both imports below as they are, order is important:
-from MoinMoin import wikiutil
-import mimetypes
-
-action_name = 'sendcached'
-
-# Do NOT get this directly from request.form or user would be able to read any cache!
-sendcached_arena = action_name
-sendcached_scope = 'wiki'
-do_locking = False
-
-def put_cache(request, key, data,
-              filename=None,
-              content_type=None,
-              content_disposition=None,
-              content_length=None,
-              last_modified=None,
-              bufsize=8192):
-    """
-    Cache an object to send with sendcached action later.
-
-    @param request: the request object
-    @param key: non-guessable key into sendcached cache (str)
-    @param data: content data (str or open file-like obj)
-    @param filename: filename for content-disposition header and for autodetecting
-                     content_type (unicode, default: None)
-    @param content_disposition: type for content-disposition header (str, default: None)
-    @param content_type: content-type header value (str, default: autodetect from filename)
-    @param last_modified: last modified timestamp (int, default: autodetect)
-    @param content_length: data length for content-length header (int, default: autodetect)
-    @return: URL of cached object
-    """
-    import os.path
-    from MoinMoin.util import timefuncs
-
-    if filename:
-        # make sure we just have a simple filename (without path)
-        filename = os.path.basename(filename)
-
-        if content_type is None:
-            # try autodetect
-            mt, enc = mimetypes.guess_type(filename)
-            if mt:
-                content_type = mt
-
-    if content_type is None:
-        content_type = 'application/octet-stream'
-
-    data_cache = caching.CacheEntry(request, sendcached_arena, key+'.data',
-                                    sendcached_scope, do_locking=do_locking)
-    data_cache_fname = data_cache._filename()
-
-    if hasattr(data, 'read'):
-        import shutil
-        data_cache_file = open(data_cache_fname, 'wb')
-        shutil.copyfileobj(data, data_cache_file)
-        data_cache_file.close()
-    else:
-        data_cache.update(data)
-
-    content_length = content_length or os.path.getsize(data_cache_fname)
-    last_modified = last_modified or os.path.getmtime(data_cache_fname)
-
-    last_modified = timefuncs.formathttpdate(int(last_modified))
-    headers = ['Content-Type: %s' % content_type,
-               'Last-Modified: %s' % last_modified,
-               'Content-Length: %s' % content_length,
-              ]
-    if content_disposition and filename:
-        # TODO: fix the encoding here, plain 8 bit is not allowed according to the RFCs
-        # There is no solution that is compatible to IE except stripping non-ascii chars
-        filename = filename.encode(config.charset)
-
-        headers.append(
-               'Content-Disposition: %s; filename="%s"' % (content_disposition, filename)
-        )
-
-    meta_cache = caching.CacheEntry(request, sendcached_arena, key+'.meta',
-                                    sendcached_scope, do_locking=do_locking, use_pickle=True)
-    meta_cache.update((last_modified, headers))
-
-    return get_url(request, key)
-
-
-def is_cached(request, key, strict=False):
-    """
-    Check if we have already cached an object for this key.
-
-    @param request: the request object
-    @param key: non-guessable key into sendcached cache (str)
-    @param strict: if True, also check the data cache, not only meta (bool, default: False)
-    @return: is object cached? (bool)
-    """
-    if strict:
-        data_cache = caching.CacheEntry(request, sendcached_arena, key+'.data',
-                                        sendcached_scope, do_locking=do_locking)
-        data_cached = data_cache.exists()
-    else:
-        data_cached = True  # we assume data will be there if meta is there
-
-    meta_cache = caching.CacheEntry(request, sendcached_arena, key+'.meta',
-                                    sendcached_scope, do_locking=do_locking, use_pickle=True)
-    meta_cached = meta_cache.exists()
-
-    return meta_cached and data_cached
-
-
-def get_url(request, key):
-    """ get URL for the object cached for key """
-    return request.href(action=action_name, key=key)
-
-def get_cache_headers(request, key):
-    """ get last_modified and headers cached for key """
-    meta_cache = caching.CacheEntry(request, sendcached_arena, key+'.meta',
-                                    sendcached_scope, do_locking=do_locking, use_pickle=True)
-    last_modified, headers = meta_cache.content()
-    return last_modified, headers
-
-
-def get_cache_datafile(request, key):
-    """ get an open data file for the data cached for key """
-    data_cache = caching.CacheEntry(request, sendcached_arena, key+'.data',
-                                    sendcached_scope, do_locking=do_locking)
-    data_file = open(data_cache._filename(), 'rb')
-    return data_file
-
-
-def send_cached(request, key):
-    """ send a complete http response with headers/data cached for key """
-    last_modified, headers = get_cache_headers(request, key)
-    if request.if_modified_since == last_modified:
-        request.emit_http_headers(["Status: 304 Not modified"])
-    else:
-        request.emit_http_headers(headers)
-        request.send_file(get_cache_datafile(request, key))
-
-
-def execute(pagename, request):
-    key = request.form.get('key', [None])[0]
-    send_cached(request, key)
-
--- a/MoinMoin/auth/openidrp.py	Sun Jul 27 17:40:11 2008 +0200
+++ b/MoinMoin/auth/openidrp.py	Mon Jul 28 12:04:00 2008 +0200
@@ -25,12 +25,14 @@
     def __init__(self, modify_request=None,
                        update_user=None,
                        create_user=None,
-                       forced_service=None):
+                       forced_service=None,
+                       idselector_com=None):
         BaseAuth.__init__(self)
         self._modify_request = modify_request or (lambda x: None)
         self._update_user = update_user or (lambda i, u: None)
         self._create_user = create_user or (lambda i, u: None)
         self._forced_service = forced_service
+        self._idselector_com = idselector_com
         if forced_service:
             self.login_inputs = ['special_no_input']
 
@@ -294,5 +296,9 @@
 
     def login_hint(self, request):
         _ = request.getText
-        return _("If you do not have an account yet, you can still log in "
+        msg = u''
+        if self._idselector_com:
+            msg = self._idselector_com
+        msg += _("If you do not have an account yet, you can still log in "
                  "with your OpenID and create one during login.")
+        return msg
--- a/MoinMoin/caching.py	Sun Jul 27 17:40:11 2008 +0200
+++ b/MoinMoin/caching.py	Mon Jul 28 12:04:00 2008 +0200
@@ -3,11 +3,13 @@
     MoinMoin caching module
 
     @copyright: 2001-2004 by Juergen Hermann <jh@web.de>,
-                2006-2008 MoinMoin:ThomasWaldmann
+                2006-2008 MoinMoin:ThomasWaldmann,
+                2008 MoinMoin:ThomasPfaff
     @license: GNU GPL, see COPYING for details.
 """
 
 import os
+import shutil
 import tempfile
 
 from MoinMoin import log
@@ -21,6 +23,7 @@
     """ raised if we have trouble reading or writing to the cache """
     pass
 
+
 def get_arena_dir(request, arena, scope):
     if scope == 'page_or_wiki': # XXX DEPRECATED, remove later
         if isinstance(arena, str):
@@ -69,22 +72,38 @@
         self.arena_dir = get_arena_dir(request, arena, scope)
         if not os.path.exists(self.arena_dir):
             os.makedirs(self.arena_dir)
+        self._fname = os.path.join(self.arena_dir, key)
+
         if self.locking:
             self.lock_dir = os.path.join(self.arena_dir, '__lock__')
             self.rlock = lock.LazyReadLock(self.lock_dir, 60.0)
             self.wlock = lock.LazyWriteLock(self.lock_dir, 60.0)
 
+        # used by file-like api:
+        self._lock = None  # either self.rlock or self.wlock
+        self._fileobj = None  # open cache file object
+        self._tmp_fname = None  # name of temporary file (used for write)
+        self._mode = None  # mode of open file object
+
+
     def _filename(self):
-        return os.path.join(self.arena_dir, self.key)
+        # DEPRECATED - please use file-like api
+        return self._fname
 
     def exists(self):
-        return os.path.exists(self._filename())
+        return os.path.exists(self._fname)
 
     def mtime(self):
         # DEPRECATED for checking a changed on-disk cache, please use
         # self.uid() for this, see below
         try:
-            return os.path.getmtime(self._filename())
+            return os.path.getmtime(self._fname)
+        except (IOError, OSError):
+            return 0
+
+    def size(self):
+        try:
+            return os.path.getsize(self._fname)
         except (IOError, OSError):
             return 0
 
@@ -93,7 +112,7 @@
 
             See docstring of MoinMoin.util.filesys.fuid for details.
         """
-        return filesys.fuid(self._filename())
+        return filesys.fuid(self._fname)
 
     def needsUpdate(self, filename, attachdir=None):
         # following code is not necessary. will trigger exception and give same result
@@ -101,7 +120,7 @@
         #    return 1
 
         try:
-            ctime = os.path.getmtime(self._filename())
+            ctime = os.path.getmtime(self._fname)
             ftime = os.path.getmtime(filename)
         except os.error:
             return 1
@@ -118,53 +137,137 @@
 
         return needsupdate
 
-#    def copyto(self, filename):
-#        # currently unused function
-#        import shutil
-#        tmpfname = self._tmpfilename()
-#        fname = self._filename()
-#        if not self.locking or self.locking and self.wlock.acquire(1.0):
-#            try:
-#                shutil.copyfile(filename, tmpfname)
-#                # this is either atomic or happening with real locks set:
-#                filesys.rename(tmpfname, fname)
-#            finally:
-#                if self.locking:
-#                    self.wlock.release()
-#        else:
-#            logging.error("Can't acquire write lock in %s" % self.lock_dir)
+    def _determine_locktype(self, mode):
+        """ return the correct lock object for a specific file access mode """
+        if self.locking:
+            if 'r' in mode:
+                lock = self.rlock
+            if 'w' in mode or 'a' in mode:
+                lock = self.wlock
+        else:
+            lock = None
+        return lock
+
+    # file-like interface ----------------------------------------------------
+
+    def open(self, filename=None, mode='r', bufsize=-1):
+        """ open the cache for reading/writing
+
+        @param filename: must be None (default - automatically determine filename)
+        @param mode: 'r' (read, default), 'w' (write)
+                     Note: if mode does not include 'b' (binary), it will be
+                           automatically changed to include 'b'.
+        @param bufsize: size of read/write buffer (default: -1 meaning automatic)
+        @return: None (the opened file object is kept in self._fileobj and used
+                 implicitely by read/write/close functions of CacheEntry object.
+        """
+        assert self._fileobj is None, 'caching: trying to open an already opened cache'
+        assert filename is None, 'caching: giving a filename is not supported (yet?)'
+
+        self._lock = self._determine_locktype(mode)
+
+        if 'b' not in mode:
+            mode += 'b'  # we want to use binary mode, ever!
+        self._mode = mode  # for self.close()
+
+        if not self.locking or self.locking and self._lock.acquire(1.0):
+            try:
+                if 'r' in mode:
+                    self._fileobj = open(self._fname, mode, bufsize)
+                elif 'w' in mode:
+                    # we do not write content to old inode, but to a new file
+                    # so we don't need to lock when we just want to read the file
+                    # (at least on POSIX, this works)
+                    fd, self._tmp_fname = tempfile.mkstemp('.tmp', self.key, self.arena_dir)
+                    self._fileobj = os.fdopen(fd, mode, bufsize)
+                else:
+                    raise ValueError("caching: mode does not contain 'r' or 'w'")
+            finally:
+                if self.locking:
+                    self._lock.release()
+                    self._lock = None
+        else:
+            logging.error("Can't acquire read/write lock in %s" % self.lock_dir)
+
+
+    def read(self, size=-1):
+        """ read data from cache file
+
+        @param size: how many bytes to read (default: -1 == everything)
+        @return: read data (str)
+        """
+        return self._fileobj.read(size)
+
+    def write(self, data):
+        """ write data to cache file
+
+        @param data: write data (str)
+        """
+        self._fileobj.write(data)
+
+    def close(self):
+        """ close cache file (and release lock, if any) """
+        if self._fileobj:
+            self._fileobj.close()
+            self._fileobj = None
+            if 'w' in self._mode:
+                filesys.chmod(self._tmp_fname, 0666 & config.umask) # fix mode that mkstemp chose
+                # this is either atomic or happening with real locks set:
+                filesys.rename(self._tmp_fname, self._fname)
+
+        if self._lock:
+            if self.locking:
+                self._lock.release()
+            self._lock = None
+
+    # ------------------------------------------------------------------------
 
     def update(self, content):
         try:
-            fname = self._filename()
-            if self.use_pickle:
-                content = pickle.dumps(content, PICKLE_PROTOCOL)
-            elif self.use_encode:
-                content = content.encode(config.charset)
-            if not self.locking or self.locking and self.wlock.acquire(1.0):
+            if hasattr(content, 'read'):
+                # content is file-like
+                assert not (self.use_pickle or self.use_encode), 'caching: use_pickle and use_encode not supported with file-like api'
                 try:
-                    # we do not write content to old inode, but to a new file
-                    # so we don't need to lock when we just want to read the file
-                    # (at least on POSIX, this works)
-                    tmp_handle, tmp_fname = tempfile.mkstemp('.tmp', self.key, self.arena_dir)
-                    os.write(tmp_handle, content)
-                    os.close(tmp_handle)
-                    # this is either atomic or happening with real locks set:
-                    filesys.rename(tmp_fname, fname)
-                    filesys.chmod(fname, 0666 & config.umask) # fix mode that mkstemp chose
+                    self.open(mode='w')
+                    shutil.copyfileobj(content, self)
                 finally:
-                    if self.locking:
-                        self.wlock.release()
+                    self.close()
             else:
-                logging.error("Can't acquire write lock in %s" % self.lock_dir)
+                # content is a string
+                if self.use_pickle:
+                    content = pickle.dumps(content, PICKLE_PROTOCOL)
+                elif self.use_encode:
+                    content = content.encode(config.charset)
+
+                try:
+                    self.open(mode='w')
+                    self.write(content)
+                finally:
+                    self.close()
         except (pickle.PicklingError, OSError, IOError, ValueError), err:
             raise CacheError(str(err))
 
+    def content(self):
+        # no file-like api yet, we implement it when we need it
+        try:
+            try:
+                self.open(mode='r')
+                data = self.read()
+            finally:
+                self.close()
+            if self.use_pickle:
+                data = pickle.loads(data)
+            elif self.use_encode:
+                data = data.decode(config.charset)
+            return data
+        except (pickle.UnpicklingError, IOError, EOFError, ValueError), err:
+            raise CacheError(str(err))
+
     def remove(self):
         if not self.locking or self.locking and self.wlock.acquire(1.0):
             try:
                 try:
-                    os.remove(self._filename())
+                    os.remove(self._fname)
                 except OSError:
                     pass
             finally:
@@ -173,23 +276,4 @@
         else:
             logging.error("Can't acquire write lock in %s" % self.lock_dir)
 
-    def content(self):
-        try:
-            if not self.locking or self.locking and self.rlock.acquire(1.0):
-                try:
-                    f = open(self._filename(), 'rb')
-                    data = f.read()
-                    f.close()
-                finally:
-                    if self.locking:
-                        self.rlock.release()
-            else:
-                logging.error("Can't acquire read lock in %s" % self.lock_dir)
-            if self.use_pickle:
-                data = pickle.loads(data)
-            elif self.use_encode:
-                data = data.decode(config.charset)
-            return data
-        except (pickle.UnpicklingError, IOError, EOFError, ValueError), err:
-            raise CacheError(str(err))
 
--- a/MoinMoin/config/_tests/test_configs.py	Sun Jul 27 17:40:11 2008 +0200
+++ b/MoinMoin/config/_tests/test_configs.py	Mon Jul 28 12:04:00 2008 +0200
@@ -9,5 +9,6 @@
     def testConfigs(self):
         for cls in _tests:
             cls.data_dir = self.request.cfg.data_dir
+            cls.secrets = self.request.cfg.secrets
             # quite a bad hack to make _importPlugin succeed
             cls('MoinMoin')
--- a/MoinMoin/config/multiconfig.py	Sun Jul 27 17:40:11 2008 +0200
+++ b/MoinMoin/config/multiconfig.py	Mon Jul 28 12:04:00 2008 +0200
@@ -347,14 +347,6 @@
 
         # if we are to use the jabber bot, instantiate a server object for future use
         if self.jabber_enabled:
-
-            errmsg = "You must set a (long) secret string to send notifications!"
-            try:
-                if not self.secret:
-                    raise error.ConfigurationError(errmsg)
-            except AttributeError, err:
-                raise error.ConfigurationError(errmsg)
-
             from xmlrpclib import Server
             self.notification_server = Server(self.notification_bot_uri, )
 
@@ -372,6 +364,47 @@
         if self.url_prefix_local is None:
             self.url_prefix_local = self.url_prefix_static
 
+        if self.secrets is None:  # admin did not setup a real secret, so make up something
+            self.secrets = self.calc_secrets()
+
+        secret_key_names = ['action/cache', 'wikiutil/tickets', 'xmlrpc/ProcessMail', 'xmlrpc/RemoteScript', ]
+        if self.jabber_enabled:
+            secret_key_names.append('jabberbot')
+
+        secret_min_length = 10
+        if isinstance(self.secrets, str):
+            if len(self.secrets) < secret_min_length:
+                raise error.ConfigurationError("The secrets = '...' wiki config setting is a way too short string (minimum length is %d chars)!" % (
+                    secret_min_length))
+            # for lazy people: set all required secrets to same value
+            secrets = {}
+            for key in secret_key_names:
+                secrets[key] = self.secrets
+            self.secrets = secrets
+
+        # we check if we have all secrets we need and that they have minimum length
+        for secret_key_name in secret_key_names:
+            try:
+                secret = self.secrets[secret_key_name]
+                if len(secret) < secret_min_length:
+                    raise ValueError
+            except (KeyError, ValueError):
+                raise error.ConfigurationError("You must set a (at least %d chars long) secret string for secrets['%s']!" % (
+                    secret_min_length, secret_key_name))
+
+    def calc_secrets(self):
+        """ make up some 'secret' using some config values """
+        varnames = ['data_dir', 'data_underlay_dir', 'language_default',
+                    'mail_smarthost', 'mail_from', 'page_front_page',
+                    'theme_default', 'sitename', 'logo_string',
+                    'interwikiname', 'user_homewiki', 'acl_rights_before', ]
+        secret = ''
+        for varname in varnames:
+            var = getattr(self, varname, None)
+            if isinstance(var, (str, unicode)):
+                secret += repr(var)
+        return secret
+
     _meta_dict = None
     def load_meta_dict(self):
         """ The meta_dict contains meta data about the wiki instance. """
@@ -528,46 +561,54 @@
                 raise error.ConfigurationError(msg)
 
     def _loadPluginModule(self):
-        """ import plugin module under configname.plugin
+        """
+        import all plugin modules
 
         To be able to import plugin from arbitrary path, we have to load
         the base package once using imp.load_module. Later, we can use
         standard __import__ call to load plugins in this package.
 
-        Since each wiki has unique plugins, we load the plugin package
-        under the wiki configuration module, named self.siteid.
+        Since each configured plugin path has unique plugins, we load the
+        plugin packages as "moin_plugin_<sha1(path)>.plugin".
         """
-        import imp
+        import imp, sha
 
-        name = self.siteid + '.plugin'
+        plugin_dirs = [self.plugin_dir] + self.plugin_dirs
+        self._plugin_modules = []
+
         try:
             # Lock other threads while we check and import
             imp.acquire_lock()
             try:
-                # If the module is not loaded, try to load it
-                if not name in sys.modules:
-                    # Find module on disk and try to load - slow!
-                    plugin_parent_dir = os.path.abspath(os.path.join(self.plugin_dir, '..'))
-                    fp, path, info = imp.find_module('plugin', [plugin_parent_dir])
-                    try:
-                        # Load the module and set in sys.modules
-                        module = imp.load_module(name, fp, path, info)
-                        sys.modules[self.siteid].plugin = module
-                    finally:
-                        # Make sure fp is closed properly
-                        if fp:
-                            fp.close()
+                for pdir in plugin_dirs:
+                    csum = 'p_%s' % sha.new(pdir).hexdigest()
+                    modname = '%s.%s' % (self.siteid, csum)
+                    # If the module is not loaded, try to load it
+                    if not modname in sys.modules:
+                        # Find module on disk and try to load - slow!
+                        abspath = os.path.abspath(pdir)
+                        parent_dir, pname = os.path.split(abspath)
+                        fp, path, info = imp.find_module(pname, [parent_dir])
+                        try:
+                            # Load the module and set in sys.modules
+                            module = imp.load_module(modname, fp, path, info)
+                            setattr(sys.modules[self.siteid], 'csum', module)
+                            self._plugin_modules.append(modname)
+                        finally:
+                            # Make sure fp is closed properly
+                            if fp:
+                                fp.close()
             finally:
                 imp.release_lock()
         except ImportError, err:
             msg = """
-Could not import plugin package "%(path)s/plugin" because of ImportError:
+Could not import plugin package "%(path)s" because of ImportError:
 %(err)s.
 
 Make sure your data directory path is correct, check permissions, and
 that the data/plugin directory has an __init__.py file.
 """ % {
-    'path': self.data_dir,
+    'path': pdir,
     'err': str(err),
 }
             raise error.ConfigurationError(msg)
@@ -673,6 +714,7 @@
      "list of auth objects, to be called in this order (see HelpOnAuthentication)"),
     ('auth_methods_trusted', ['http', 'xmlrpc_applytoken'],
      'authentication methods for which users should be included in the special "Trusted" ACL group.'),
+    ('secrets', None, """Either a long shared secret string used for multiple purposes or a dict {"purpose": "longsecretstring", ...} for setting up different shared secrets for different purposes. If you don't setup own secret(s), a secret string will be auto-generated from other config settings."""),
     ('DesktopEdition',
      False,
      "if True, give all local users special powers - ''only use this for a local desktop wiki!''"),
@@ -696,20 +738,22 @@
   # ==========================================================================
   'spam_leech_dos': ('Anti-Spam/Leech/DOS', None, (
     ('hosts_deny', [], "List of denied IPs; if an IP ends with a dot, it denies a whole subnet (class A, B or C)"),
-
     ('surge_action_limits',
      {# allow max. <count> <action> requests per <dt> secs
         # action: (count, dt)
-        'all': (30, 30),
+        'all': (30, 30), # all requests (except cache/AttachFile action) count for this limit
+        'default': (30, 60), # default limit for actions without a specific limit
         'show': (30, 60),
         'recall': (10, 120),
         'raw': (20, 40),  # some people use this for css
-        'AttachFile': (90, 60),
         'diff': (30, 60),
         'fullsearch': (10, 120),
         'edit': (30, 300), # can be lowered after making preview different from edit
         'rss_rc': (1, 60),
-        'default': (30, 60),
+        # The following actions are often used for images - to avoid pages with lots of images
+        # (like photo galleries) triggering surge protection, we assign rather high limits:
+        'AttachFile': (90, 60),
+        'cache': (600, 30), # cache action is very cheap/efficient
      },
      "Surge protection tries to deny clients causing too much load/traffic, see /SurgeProtection."),
     ('surge_lockout_time', 3600, "time [s] someone gets locked out when ignoring the warnings"),
@@ -848,7 +892,8 @@
     ('data_underlay_dir', './underlay/', "Path to the underlay directory containing distribution system and help pages."),
     ('cache_dir', None, "Directory for caching, by default computed from `data_dir`/cache."),
     ('user_dir', None, "Directory for user storage, by default computed to be `data_dir`/user."),
-    ('plugin_dir', None, "Plugin directory, by default computed to be `data_dir`/user."),
+    ('plugin_dir', None, "Plugin directory, by default computed to be `data_dir`/plugin."),
+    ('plugin_dirs', [], "Additional plugin directories."),
 
     ('docbook_html_dir', r"/usr/share/xml/docbook/stylesheet/nwalsh/html/",
      'Path to the directory with the Docbook to HTML XSLT files (optional, used by the docbook parser). The default value is correct for Debian Etch.'),
@@ -883,7 +928,7 @@
     # the group 'all' shall match all, while the group 'key' shall match the key only
     # e.g. CategoryFoo -> group 'all' ==  CategoryFoo, group 'key' == Foo
     # moin's code will add ^ / $ at beginning / end when needed
-    ('page_category_regex', ur'(?P<all>Category(?P<key>\S+))',
+    ('page_category_regex', ur'(?P<all>Category(?P<key>(?!Template)\S+))',
      'Pagenames exactly matching this regex are regarded as Wiki categories [Unicode]'),
     ('page_dict_regex', ur'(?P<all>(?P<key>\S+)Dict)',
      'Pagenames exactly matching this regex are regarded as pages containing variable dictionary definitions [Unicode]'),
@@ -1140,7 +1185,6 @@
       ('smarthost', None, "Address of SMTP server to use for sending mail (None = don't use SMTP server)."),
       ('sendmail', None, "sendmail command to use for sending mail (None = don't use sendmail)"),
 
-      ('import_secret', "", "Shared secret for mail importing"),
       ('import_subpage_template', u"$from-$date-$subject", "Create subpages using this template when importing mail."),
       ('import_pagename_search', ['subject', 'to', ], "Where to look for target pagename specification."),
       ('import_pagename_envelope', u"%s", "Use this to add some fixed prefix/postfix to the generated target pagename."),
--- a/MoinMoin/events/_tests/test_events.py	Sun Jul 27 17:40:11 2008 +0200
+++ b/MoinMoin/events/_tests/test_events.py	Mon Jul 28 12:04:00 2008 +0200
@@ -59,7 +59,7 @@
 
     event = events.UserCreatedEvent(request, User(request))
     request.cfg.notification_server = server_dummy()
-    request.cfg.secret = "dummy"
+    request.cfg.secrets = "thisisnotsecret"
 
     jabbernotify.handle_user_created(event)
     assert request.cfg.notification_server.sent is True
--- a/MoinMoin/events/jabbernotify.py	Sun Jul 27 17:40:11 2008 +0200
+++ b/MoinMoin/events/jabbernotify.py	Mon Jul 28 12:04:00 2008 +0200
@@ -50,11 +50,12 @@
 
     request = event.request
     server = request.cfg.notification_server
+    secret = request.cfg.secrets['jabberbot']
     try:
         if isinstance(event, ev.JabberIDSetEvent):
-            server.addJIDToRoster(request.cfg.secret, event.jid)
+            server.addJIDToRoster(secret, event.jid)
         else:
-            server.removeJIDFromRoster(request.cfg.secret, event.jid)
+            server.removeJIDFromRoster(secret, event.jid)
     except xmlrpclib.Error, err:
         logging.error("XML RPC error: %s" % str(err))
     except Exception, err:
@@ -197,7 +198,7 @@
         raise ValueError("url_list must be of type list!")
 
     try:
-        server.send_notification(request.cfg.secret, jids, notification)
+        server.send_notification(request.cfg.secrets['jabberbot'], jids, notification)
         return True
     except xmlrpclib.Error, err:
         logging.error("XML RPC error: %s" % str(err))
--- a/MoinMoin/i18n/MoinMoin.pot	Sun Jul 27 17:40:11 2008 +0200
+++ b/MoinMoin/i18n/MoinMoin.pot	Mon Jul 28 12:04:00 2008 +0200
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-06-21 22:47+0200\n"
+"POT-Creation-Date: 2008-07-20 14:15+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,28 +16,93 @@
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-msgid "<unknown>"
+#, python-format
+msgid "Invalid highlighting regular expression \"%(regex)s\": %(error)s"
+msgstr ""
+
+msgid ""
+"The backed up content of this page is deprecated and will not be included in "
+"search results!"
 msgstr ""
 
 #, python-format
-msgid ""
-"Login Name: %s\n"
-"\n"
-"Password recovery token: %s\n"
-"\n"
-"Password reset URL: %s/?action=recoverpass&name=%s&token=%s\n"
-msgstr ""
-
-msgid ""
-"Somebody has requested to email you a password recovery token.\n"
-"\n"
-"If you lost your password, please go to the password reset URL below or\n"
-"go to the password recovery page again and enter your username and the\n"
-"recovery token.\n"
+msgid "Revision %(rev)d as of %(date)s"
 msgstr ""
 
 #, python-format
-msgid "[%(sitename)s] Your wiki account data"
+msgid "Redirected from page \"%(page)s\""
+msgstr ""
+
+#, python-format
+msgid "This page redirects to page \"%(page)s\""
+msgstr ""
+
+msgid "Create New Page"
+msgstr ""
+
+msgid "You are not allowed to view this page."
+msgstr ""
+
+#, python-format
+msgid "Argument \"%s\" must be a boolean value, not \"%s\""
+msgstr ""
+
+#, python-format
+msgid "Argument must be a boolean value, not \"%s\""
+msgstr ""
+
+#, python-format
+msgid "Argument \"%s\" must be an integer value, not \"%s\""
+msgstr ""
+
+#, python-format
+msgid "Argument must be an integer value, not \"%s\""
+msgstr ""
+
+#, python-format
+msgid "Argument \"%s\" must be a floating point value, not \"%s\""
+msgstr ""
+
+#, python-format
+msgid "Argument must be a floating point value, not \"%s\""
+msgstr ""
+
+#, python-format
+msgid "Argument \"%s\" must be a complex value, not \"%s\""
+msgstr ""
+
+#, python-format
+msgid "Argument must be a complex value, not \"%s\""
+msgstr ""
+
+#, python-format
+msgid "Argument \"%s\" must be one of \"%s\", not \"%s\""
+msgstr ""
+
+#, python-format
+msgid "Argument must be one of \"%s\", not \"%s\""
+msgstr ""
+
+msgid "Too many arguments"
+msgstr ""
+
+msgid "Cannot have arguments without name following named arguments"
+msgstr ""
+
+#, python-format
+msgid "Argument \"%s\" is required"
+msgstr ""
+
+#, python-format
+msgid "No argument named \"%s\""
+msgstr ""
+
+#, python-format
+msgid "Expected \"=\" to follow \"%(token)s\""
+msgstr ""
+
+#, python-format
+msgid "Expected a value for key \"%(token)s\""
 msgstr ""
 
 msgid "You are not allowed to edit this page."
@@ -158,65 +223,63 @@
 msgstr ""
 
 #, python-format
-msgid "Argument \"%s\" must be a boolean value, not \"%s\""
-msgstr ""
-
-#, python-format
-msgid "Argument must be a boolean value, not \"%s\""
-msgstr ""
-
-#, python-format
-msgid "Argument \"%s\" must be an integer value, not \"%s\""
-msgstr ""
-
-#, python-format
-msgid "Argument must be an integer value, not \"%s\""
-msgstr ""
-
-#, python-format
-msgid "Argument \"%s\" must be a floating point value, not \"%s\""
-msgstr ""
-
-#, python-format
-msgid "Argument must be a floating point value, not \"%s\""
-msgstr ""
-
-#, python-format
-msgid "Argument \"%s\" must be a complex value, not \"%s\""
+msgid "The package needs a newer version of MoinMoin (at least %s)."
+msgstr ""
+
+msgid "The theme name is not set."
+msgstr ""
+
+msgid "Installing theme files is only supported for standalone type servers."
 msgstr ""
 
 #, python-format
-msgid "Argument must be a complex value, not \"%s\""
-msgstr ""
-
-#, python-format
-msgid "Argument \"%s\" must be one of \"%s\", not \"%s\""
+msgid "Installation of '%(filename)s' failed."
 msgstr ""
 
 #, python-format
-msgid "Argument must be one of \"%s\", not \"%s\""
-msgstr ""
-
-msgid "Too many arguments"
-msgstr ""
-
-msgid "Cannot have arguments without name following named arguments"
+msgid "The file %s is not a MoinMoin package file."
 msgstr ""
 
 #, python-format
-msgid "Argument \"%s\" is required"
+msgid "The page %s does not exist."
+msgstr ""
+
+msgid "Invalid package file header."
+msgstr ""
+
+msgid "Package file format unsupported."
 msgstr ""
 
 #, python-format
-msgid "No argument named \"%s\""
+msgid "Unknown function %(func)s in line %(lineno)i."
 msgstr ""
 
 #, python-format
-msgid "Expected \"=\" to follow \"%(token)s\""
+msgid "The file %s was not found in the package."
+msgstr ""
+
+msgid "<unknown>"
 msgstr ""
 
 #, python-format
-msgid "Expected a value for key \"%(token)s\""
+msgid ""
+"Login Name: %s\n"
+"\n"
+"Password recovery token: %s\n"
+"\n"
+"Password reset URL: %s/?action=recoverpass&name=%s&token=%s\n"
+msgstr ""
+
+msgid ""
+"Somebody has requested to email you a password recovery token.\n"
+"\n"
+"If you lost your password, please go to the password reset URL below or\n"
+"go to the password recovery page again and enter your username and the\n"
+"recovery token.\n"
+msgstr ""
+
+#, python-format
+msgid "[%(sitename)s] Your wiki account data"
 msgstr ""
 
 msgid "Your changes are not saved!"
@@ -360,84 +423,6 @@
 msgstr ""
 
 #, python-format
-msgid "The package needs a newer version of MoinMoin (at least %s)."
-msgstr ""
-
-msgid "The theme name is not set."
-msgstr ""
-
-msgid "Installing theme files is only supported for standalone type servers."
-msgstr ""
-
-#, python-format
-msgid "Installation of '%(filename)s' failed."
-msgstr ""
-
-#, python-format
-msgid "The file %s is not a MoinMoin package file."
-msgstr ""
-
-#, python-format
-msgid "The page %s does not exist."
-msgstr ""
-
-msgid "Invalid package file header."
-msgstr ""
-
-msgid "Package file format unsupported."
-msgstr ""
-
-#, python-format
-msgid "Unknown function %(func)s in line %(lineno)i."
-msgstr ""
-
-#, python-format
-msgid "The file %s was not found in the package."
-msgstr ""
-
-#, python-format
-msgid "Invalid highlighting regular expression \"%(regex)s\": %(error)s"
-msgstr ""
-
-msgid ""
-"The backed up content of this page is deprecated and will not be included in "
-"search results!"
-msgstr ""
-
-#, python-format
-msgid "Revision %(rev)d as of %(date)s"
-msgstr ""
-
-#, python-format
-msgid "Redirected from page \"%(page)s\""
-msgstr ""
-
-#, python-format
-msgid "This page redirects to page \"%(page)s\""
-msgstr ""
-
-msgid "Create New Page"
-msgstr ""
-
-msgid "You are not allowed to view this page."
-msgstr ""
-
-msgid "[all]"
-msgstr ""
-
-msgid "[not empty]"
-msgstr ""
-
-msgid "[empty]"
-msgstr ""
-
-msgid "filter"
-msgstr ""
-
-msgid "about"
-msgstr ""
-
-#, python-format
 msgid ""
 "Results %(bs)s%(hitsFrom)d - %(hitsTo)d%(be)s of %(aboutHits)s %(bs)s%(hits)d"
 "%(be)s results out of about %(pages)d pages."
@@ -468,503 +453,19 @@
 msgid "matches"
 msgstr ""
 
-msgid "Line"
-msgstr ""
-
-msgid "No differences found!"
-msgstr ""
-
-msgid "Deletions are marked like this."
-msgstr ""
-
-msgid "Additions are marked like this."
-msgstr ""
-
-msgid "Name"
-msgstr ""
-
-msgid "Password"
-msgstr ""
-
-msgid "OpenID"
-msgstr ""
-
-msgid "Login"
-msgstr ""
-
-msgid "Username"
-msgstr ""
-
-msgid "Member of Groups"
-msgstr ""
-
-msgid "Email"
-msgstr ""
-
-msgid "Jabber"
-msgstr ""
-
-msgid "Action"
-msgstr ""
-
-msgid "Enable user"
-msgstr ""
-
-msgid "disabled"
-msgstr ""
-
-msgid "Disable user"
-msgstr ""
-
-msgid "Mail account data"
-msgstr ""
-
-msgid "Missing password. Please enter user name and password."
-msgstr ""
-
-#, python-format
-msgid "LDAP server %(server)s failed."
-msgstr ""
-
-msgid "You need to log in."
-msgstr ""
-
-#, python-format
-msgid ""
-"If you do not have an account, <a href=\"%(userprefslink)s\">you can create "
-"one now</a>. <a href=\"%(sendmypasswordlink)s\">Forgot your password?</a>"
-msgstr ""
-
-msgid ""
-"Please choose an account name now.\n"
-"If you choose an existing account name you will be asked for the\n"
-"password and be able to associate the account with your OpenID."
-msgstr ""
-
-msgid "Choose this name"
-msgstr ""
-
-msgid "This is not a valid username, choose a different one."
-msgstr ""
-
-msgid ""
-"The username you have chosen is already\n"
-"taken. If it is your username, enter your password below to associate\n"
-"the username with your OpenID. Otherwise, please choose a different\n"
-"username and leave the password field blank."
-msgstr ""
-
-msgid "Associate this name"
-msgstr ""
-
-#, python-format
-msgid "OpenID error: %s."
-msgstr ""
-
-msgid "Verification canceled."
-msgstr ""
-
-msgid "OpenID failure."
-msgstr ""
-
-msgid "Your account is now associated to your OpenID."
-msgstr ""
-
-msgid "The password you entered is not valid."
-msgstr ""
-
-msgid "OpenID verification requires that you click this button:"
-msgstr ""
-
-msgid "Anonymous sessions need to be enabled for OpenID login."
-msgstr ""
-
-msgid "Failed to resolve OpenID."
-msgstr ""
-
-msgid "OpenID discovery failure, not a valid OpenID."
-msgstr ""
-
-msgid "No OpenID."
-msgstr ""
-
-msgid ""
-"If you do not have an account yet, you can still log in with your OpenID and "
-"create one during login."
-msgstr ""
-
-msgid "Failed to connect to database."
-msgstr ""
-
-msgid "Could not contact botbouncer.com."
-msgstr ""
-
-msgid "Wiki"
-msgstr ""
-
-msgid "Page"
-msgstr ""
-
-msgid "User"
-msgstr ""
-
-msgid "Diffs"
-msgstr ""
-
-msgid "Info"
-msgstr ""
-
-msgid "Edit"
-msgstr ""
-
-msgid "Unsubscribe"
-msgstr ""
-
-msgid "Subscribe"
-msgstr ""
-
-msgid "Raw"
-msgstr ""
-
-msgid "XML"
-msgstr ""
-
-msgid "Print"
-msgstr ""
-
-msgid "View"
-msgstr ""
-
-msgid "Home"
-msgstr ""
-
-msgid "Up"
-msgstr ""
-
-msgid "[RSS]"
-msgstr ""
-
-msgid "[DELETED]"
-msgstr ""
-
-msgid "[UPDATED]"
-msgstr ""
-
-msgid "[RENAMED]"
-msgstr ""
-
-msgid "[CONFLICT]"
-msgstr ""
-
-msgid "[NEW]"
-msgstr ""
-
-msgid "[DIFF]"
-msgstr ""
-
-msgid "[BOTTOM]"
-msgstr ""
-
-msgid "[TOP]"
-msgstr ""
-
-msgid "Click to do a full-text search for this title"
-msgstr ""
-
-msgid "Settings"
-msgstr ""
-
-msgid "Logout"
-msgstr ""
-
-msgid "Clear message"
-msgstr ""
-
-#, python-format
-msgid "last edited %(time)s by %(editor)s"
-msgstr ""
-
-#, python-format
-msgid "last modified %(time)s"
-msgstr ""
-
-msgid "Search:"
-msgstr ""
-
-msgid "Text"
-msgstr ""
-
-msgid "Titles"
-msgstr ""
-
-msgid "Search"
-msgstr ""
-
-msgid "More Actions:"
-msgstr ""
-
-msgid "------------------------"
-msgstr ""
-
-msgid "Raw Text"
-msgstr ""
-
-msgid "Print View"
-msgstr ""
-
-msgid "Delete Cache"
-msgstr ""
-
-msgid "Rename Page"
-msgstr ""
-
-msgid "Copy Page"
-msgstr ""
-
-msgid "Delete Page"
-msgstr ""
-
-msgid "Like Pages"
-msgstr ""
-
-msgid "Local Site Map"
-msgstr ""
-
-msgid "My Pages"
-msgstr ""
-
-msgid "Subscribe User"
-msgstr ""
-
-msgid "Remove Spam"
-msgstr ""
-
-msgid "Revert to this revision"
-msgstr ""
-
-msgid "Package Pages"
-msgstr ""
-
-msgid "Render as Docbook"
-msgstr ""
-
-msgid "Sync Pages"
-msgstr ""
-
-msgid "Do"
-msgstr ""
-
-msgid "Comments"
-msgstr ""
-
-msgid "Edit (Text)"
-msgstr ""
-
-msgid "Edit (GUI)"
-msgstr ""
-
-msgid "Immutable Page"
-msgstr ""
-
-msgid "Remove Link"
-msgstr ""
-
-msgid "Add Link"
-msgstr ""
-
-msgid "Attachments"
-msgstr ""
-
-#, python-format
-msgid "Show %s days."
-msgstr ""
-
-msgid "Wiki Markup"
-msgstr ""
-
-msgid "DeleteCache"
-msgstr ""
-
-#, python-format
-msgid "(cached %s)"
-msgstr ""
-
-msgid "Or try one of these actions:"
-msgstr ""
-
-msgid "Date"
-msgstr ""
-
-msgid "From"
-msgstr ""
-
-msgid "To"
-msgstr ""
-
-msgid "Content"
-msgstr ""
-
-#, python-format
-msgid "Connection to mailserver '%(server)s' failed: %(reason)s"
-msgstr ""
-
-msgid "Mail not sent"
-msgstr ""
-
-msgid "Mail sent OK"
-msgstr ""
-
-msgid ""
-"Rendering of reStructured text is not possible, please install Docutils."
-msgstr ""
-
-msgid "**Maximum number of allowed includes exceeded**"
-msgstr ""
-
-#, python-format
-msgid "**You are not allowed to read the page: %s**"
-msgstr ""
-
-#, python-format
-msgid "**Could not find the referenced page: %s**"
-msgstr ""
-
-msgid "XSLT option disabled, please look at HelpOnConfiguration."
-msgstr ""
-
-msgid "XSLT processing is not available, please install 4suite 1.x."
-msgstr ""
-
-#, python-format
-msgid "%(errortype)s processing error"
-msgstr ""
-
-#, python-format
-msgid "Expected \"%(wanted)s\" after \"%(key)s\", got \"%(token)s\""
-msgstr ""
-
-#, python-format
-msgid "Expected an integer \"%(key)s\" before \"%(token)s\""
-msgstr ""
-
-#, python-format
-msgid "Expected an integer \"%(arg)s\" after \"%(key)s\""
-msgstr ""
-
-#, python-format
-msgid "Expected a color value \"%(arg)s\" after \"%(key)s\""
-msgstr ""
-
-msgid "FrontPage"
-msgstr ""
-
-msgid "RecentChanges"
-msgstr ""
-
-msgid "TitleIndex"
-msgstr ""
-
-msgid "WordIndex"
-msgstr ""
-
-msgid "FindPage"
-msgstr ""
-
-msgid "SiteNavigation"
-msgstr ""
-
-msgid "HelpContents"
-msgstr ""
-
-msgid "HelpOnFormatting"
-msgstr ""
-
-msgid "WikiLicense"
-msgstr ""
-
-msgid "MissingPage"
-msgstr ""
-
-msgid "MissingHomePage"
-msgstr ""
-
-msgid "Mon"
-msgstr ""
-
-msgid "Tue"
-msgstr ""
-
-msgid "Wed"
-msgstr ""
-
-msgid "Thu"
-msgstr ""
-
-msgid "Fri"
-msgstr ""
-
-msgid "Sat"
-msgstr ""
-
-msgid "Sun"
-msgstr ""
-
-msgid "AttachFile"
-msgstr ""
-
-msgid "DeletePage"
-msgstr ""
-
-msgid "LikePages"
-msgstr ""
-
-msgid "LocalSiteMap"
-msgstr ""
-
-msgid "RenamePage"
-msgstr ""
-
-msgid "SpellCheck"
-msgstr ""
-
-msgid "Discussion"
-msgstr ""
-
-#, python-format
-msgid ""
-"Sorry, can not save page because \"%(content)s\" is not allowed in this wiki."
-msgstr ""
-
-msgid "Notification"
-msgstr ""
-
-msgid "Notification settings saved!"
-msgstr ""
-
-msgid "'''Email'''"
-msgstr ""
-
-msgid "'''Jabber'''"
-msgstr ""
-
-msgid "'''Event type'''"
-msgstr ""
-
-msgid "Select the events you want to be notified about."
-msgstr ""
-
-msgid ""
-"Before you can be notified, you need to provide a way to contact you in the "
-"general preferences."
-msgstr ""
-
-msgid "Subscribed events"
-msgstr ""
-
-msgid "Subscribed wiki pages<<BR>>(one regex per line)"
-msgstr ""
-
-msgid "Save"
+msgid "about"
+msgstr ""
+
+msgid "[all]"
+msgstr ""
+
+msgid "[not empty]"
+msgstr ""
+
+msgid "[empty]"
+msgstr ""
+
+msgid "filter"
 msgstr ""
 
 msgid "Change password"
@@ -986,60 +487,12 @@
 msgid "To change your password, enter a new password twice."
 msgstr ""
 
+msgid "Password"
+msgstr ""
+
 msgid "Password repeat"
 msgstr ""
 
-msgid "Switch user"
-msgstr ""
-
-msgid "No user selected"
-msgstr ""
-
-msgid ""
-"You can now change the settings of the selected user account; log out to get "
-"back to your account."
-msgstr ""
-
-msgid "You are the only user."
-msgstr ""
-
-msgid ""
-"As a superuser, you can temporarily assume the identity of another user."
-msgstr ""
-
-msgid "Select User"
-msgstr ""
-
-msgid "OpenID settings"
-msgstr ""
-
-msgid "Cannot remove all OpenIDs."
-msgstr ""
-
-msgid "The selected OpenIDs have been removed."
-msgstr ""
-
-msgid "No OpenID given."
-msgstr ""
-
-msgid "OpenID is already present."
-msgstr ""
-
-msgid "This OpenID is already used for another account."
-msgstr ""
-
-msgid "OpenID added successfully."
-msgstr ""
-
-msgid "Current OpenIDs"
-msgstr ""
-
-msgid "Remove selected"
-msgstr ""
-
-msgid "Add OpenID"
-msgstr ""
-
 msgid "Preferences"
 msgstr ""
 
@@ -1086,6 +539,9 @@
 msgid "free choice"
 msgstr ""
 
+msgid "Save"
+msgstr ""
+
 msgid "Preferred theme"
 msgstr ""
 
@@ -1116,6 +572,56 @@
 msgid "Quick links"
 msgstr ""
 
+msgid "Notification"
+msgstr ""
+
+msgid "Notification settings saved!"
+msgstr ""
+
+msgid "'''Email'''"
+msgstr ""
+
+msgid "'''Jabber'''"
+msgstr ""
+
+msgid "'''Event type'''"
+msgstr ""
+
+msgid "Select the events you want to be notified about."
+msgstr ""
+
+msgid ""
+"Before you can be notified, you need to provide a way to contact you in the "
+"general preferences."
+msgstr ""
+
+msgid "Subscribed events"
+msgstr ""
+
+msgid "Subscribed wiki pages<<BR>>(one regex per line)"
+msgstr ""
+
+msgid "Switch user"
+msgstr ""
+
+msgid "No user selected"
+msgstr ""
+
+msgid ""
+"You can now change the settings of the selected user account; log out to get "
+"back to your account."
+msgstr ""
+
+msgid "You are the only user."
+msgstr ""
+
+msgid ""
+"As a superuser, you can temporarily assume the identity of another user."
+msgstr ""
+
+msgid "Select User"
+msgstr ""
+
 msgid "OpenID server"
 msgstr ""
 
@@ -1125,182 +631,130 @@
 msgid "Trusted websites"
 msgstr ""
 
-#, python-format
-msgid ""
-"Dear Wiki user,\n"
-"\n"
-"You have subscribed to a wiki page or wiki category on \"%(sitename)s\" for "
-"change notification.\n"
-"\n"
-"The \"%(pagename)s\" page has been changed by %(editor)s:\n"
-msgstr ""
-
-msgid "New page:\n"
-msgstr ""
-
-msgid "No differences found!\n"
-msgstr ""
-
-#, python-format
-msgid ""
-"Dear wiki user,\n"
-"\n"
-"You have subscribed to a wiki page \"%(sitename)s\" for change "
-"notification.\n"
-"\n"
-"The page \"%(pagename)s\" has been deleted by %(editor)s:\n"
-"\n"
-msgstr ""
-
-#, python-format
-msgid ""
-"Dear wiki user,\n"
-"\n"
-"You have subscribed to a wiki page \"%(sitename)s\" for change "
-"notification.\n"
-"\n"
-"The page \"%(pagename)s\" has been renamed from \"%(oldname)s\" by %(editor)"
-"s:\n"
-msgstr ""
-
-#, python-format
-msgid "New user account created on %(sitename)s"
-msgstr ""
-
-#, python-format
-msgid ""
-"Dear Superuser, a new user has just been created. Details follow:\n"
-"\n"
-"    User name: %(username)s\n"
-"    Email address: %(useremail)s"
-msgstr ""
-
-#, python-format
-msgid "New attachment added to page %(pagename)s on %(sitename)s"
+msgid "Remove selected"
+msgstr ""
+
+msgid "OpenID settings"
+msgstr ""
+
+msgid "Cannot remove all OpenIDs."
+msgstr ""
+
+msgid "The selected OpenIDs have been removed."
+msgstr ""
+
+msgid "No OpenID given."
+msgstr ""
+
+msgid "OpenID is already present."
+msgstr ""
+
+msgid "Failed to resolve OpenID."
+msgstr ""
+
+msgid "OpenID discovery failure, not a valid OpenID."
 msgstr ""
 
 #, python-format
+msgid "OpenID error: %s."
+msgstr ""
+
+msgid "Verification canceled."
+msgstr ""
+
+msgid "This OpenID is already used for another account."
+msgstr ""
+
+msgid "OpenID added successfully."
+msgstr ""
+
+msgid "OpenID failure."
+msgstr ""
+
+msgid "Current OpenIDs"
+msgstr ""
+
+msgid "Add OpenID"
+msgstr ""
+
+msgid "OpenID verification requires that you click this button:"
+msgstr ""
+
+msgid "Username"
+msgstr ""
+
+msgid "Member of Groups"
+msgstr ""
+
+msgid "Email"
+msgstr ""
+
+msgid "Jabber"
+msgstr ""
+
+msgid "Action"
+msgstr ""
+
+msgid "Enable user"
+msgstr ""
+
+msgid "disabled"
+msgstr ""
+
+msgid "Disable user"
+msgstr ""
+
+msgid "Mail account data"
+msgstr ""
+
+msgid "Name"
+msgstr ""
+
+msgid "OpenID"
+msgstr ""
+
+msgid "Login"
+msgstr ""
+
 msgid ""
-"Dear Wiki user,\n"
-"\n"
-"You have subscribed to a wiki page \"%(page_name)s\" for change "
-"notification. An attachment has been added to that page by %(editor)s. "
-"Following detailed information is available:\n"
-"\n"
-"Attachment name: %(attach_name)s\n"
-"Attachment size: %(attach_size)s\n"
-msgstr ""
-
-msgid "Page has been modified"
-msgstr ""
-
-msgid "Page has been modified in a trivial fashion"
-msgstr ""
-
-msgid "Page has been renamed"
-msgstr ""
-
-msgid "Page has been deleted"
-msgstr ""
-
-msgid "Page has been copied"
-msgstr ""
-
-msgid "A new attachment has been added"
-msgstr ""
-
-msgid "A page has been reverted to a previous state"
-msgstr ""
-
-msgid "A user has subscribed to a page"
-msgstr ""
-
-msgid "A new account has been created"
-msgstr ""
-
-#, python-format
-msgid "[%(sitename)s] %(trivial)sUpdate of \"%(pagename)s\" by %(username)s"
-msgstr ""
-
-msgid "Trivial "
+"Rendering of reStructured text is not possible, please install Docutils."
+msgstr ""
+
+msgid "**Maximum number of allowed includes exceeded**"
 msgstr ""
 
 #, python-format
-msgid ""
-"Attachment link: %(attach)s\n"
-"Page link: %(page)s\n"
-msgstr ""
-
-msgid "Attachment link"
-msgstr ""
-
-msgid "Page link"
-msgstr ""
-
-msgid "Changed page"
-msgstr ""
-
-msgid "Page changed"
-msgstr ""
-
-msgid "Options --pages and --search are mutually exclusive!"
-msgstr ""
-
-msgid "You must specify an output file!"
-msgstr ""
-
-msgid "No pages specified using --pages or --search, assuming full package."
-msgstr ""
-
-msgid "Output file already exists! Cowardly refusing to continue!"
-msgstr ""
-
-msgid "Language"
-msgstr ""
-
-msgid "Others"
-msgstr ""
-
-msgid "Charts are not available!"
-msgstr ""
-
-msgid "Page Size Distribution"
-msgstr ""
-
-msgid "page size upper bound [bytes]"
-msgstr ""
-
-msgid "# of pages of this size"
-msgstr ""
-
-msgid "Views/day"
-msgstr ""
-
-msgid "Edits/day"
-msgstr ""
-
-msgid "Page hits and edits"
+msgid "**You are not allowed to read the page: %s**"
 msgstr ""
 
 #, python-format
-msgid "%(chart_title)s for %(filterpage)s"
-msgstr ""
-
-msgid ""
-"green=view\n"
-"red=edit"
-msgstr ""
-
-msgid "date"
-msgstr ""
-
-msgid "# of hits"
-msgstr ""
-
-msgid "User agent"
-msgstr ""
-
-msgid "Distribution of User-Agent Types"
+msgid "**Could not find the referenced page: %s**"
+msgstr ""
+
+msgid "XSLT option disabled, please look at HelpOnConfiguration."
+msgstr ""
+
+msgid "XSLT processing is not available, please install 4suite 1.x."
+msgstr ""
+
+#, python-format
+msgid "%(errortype)s processing error"
+msgstr ""
+
+#, python-format
+msgid "Expected \"%(wanted)s\" after \"%(key)s\", got \"%(token)s\""
+msgstr ""
+
+#, python-format
+msgid "Expected an integer \"%(key)s\" before \"%(token)s\""
+msgstr ""
+
+#, python-format
+msgid "Expected an integer \"%(arg)s\" after \"%(key)s\""
+msgstr ""
+
+#, python-format
+msgid "Expected a color value \"%(arg)s\" after \"%(key)s\""
 msgstr ""
 
 msgid ""
@@ -1358,9 +812,36 @@
 "(!) For more help, see HelpOnEditing or HelpOnCreoleSyntax.\n"
 msgstr ""
 
+msgid "Diffs"
+msgstr ""
+
+msgid "Info"
+msgstr ""
+
+msgid "Edit"
+msgstr ""
+
 msgid "UnSubscribe"
 msgstr ""
 
+msgid "Subscribe"
+msgstr ""
+
+msgid "Raw"
+msgstr ""
+
+msgid "XML"
+msgstr ""
+
+msgid "Print"
+msgstr ""
+
+msgid "View"
+msgstr ""
+
+msgid "Up"
+msgstr ""
+
 msgid "Publish my email (not my wiki homepage) in author info"
 msgstr ""
 
@@ -1415,33 +896,27 @@
 msgid "Editor size"
 msgstr ""
 
-msgid "File attachment browser"
-msgstr ""
-
-msgid "User account browser"
-msgstr ""
-
 #, python-format
-msgid "Invalid include arguments \"%s\"!"
+msgid "Upload new attachment \"%(filename)s\""
 msgstr ""
 
 #, python-format
-msgid "Nothing found for \"%s\"!"
-msgstr ""
-
-msgid "edit"
+msgid "Inlined image: %(url)s"
 msgstr ""
 
 #, python-format
-msgid "Upload of attachment '%(filename)s'."
+msgid "Create new drawing \"%(filename)s (opens in new window)\""
 msgstr ""
 
 #, python-format
-msgid "Attachment '%(filename)s' deleted."
+msgid "Edit drawing %(filename)s (opens in new window)"
 msgstr ""
 
 #, python-format
-msgid "Drawing '%(filename)s' saved."
+msgid "Clickable drawing: %(filename)s"
+msgstr ""
+
+msgid "Toggle line numbers"
 msgstr ""
 
 #, python-format
@@ -1452,184 +927,475 @@
 msgid "Renamed from '%(oldpagename)s'."
 msgstr ""
 
-#, python-format
-msgid "%(mins)dm ago"
-msgstr ""
-
-msgid "(no bookmark set)"
-msgstr ""
-
-#, python-format
-msgid "(currently set to %s)"
-msgstr ""
-
-msgid "Delete bookmark"
-msgstr ""
-
-msgid "Set bookmark"
-msgstr ""
-
-msgid "[Bookmark reached]"
-msgstr ""
-
-msgid "Contents"
-msgstr ""
-
-msgid "Include system pages"
-msgstr ""
-
-msgid "Exclude system pages"
-msgstr ""
-
-msgid "Go To Page"
-msgstr ""
-
-msgid "No orphaned pages in this wiki."
-msgstr ""
-
-msgid "Python Version"
-msgstr ""
-
-msgid "MoinMoin Version"
-msgstr ""
-
-#, python-format
-msgid "Release %s [Revision %s]"
-msgstr ""
-
-msgid "4Suite Version"
-msgstr ""
-
-msgid "Number of pages"
-msgstr ""
-
-msgid "Number of system pages"
-msgstr ""
-
-msgid "Accumulated page sizes"
-msgstr ""
-
-#, python-format
-msgid "Disk usage of %(data_dir)s/pages/"
+msgid "You are now logged out."
+msgstr ""
+
+msgid "You are not allowed to use this action."
+msgstr ""
+
+msgid "Delete"
+msgstr ""
+
+msgid "This page is already deleted or was never created!"
+msgstr ""
+
+msgid "Delete all /subpages too?"
+msgstr ""
+
+msgid "Optional reason for the deletion"
+msgstr ""
+
+msgid "Really delete this page?"
 msgstr ""
 
 #, python-format
-msgid "Disk usage of %(data_dir)s/"
-msgstr ""
-
-msgid "Entries in edit log"
-msgstr ""
-
-msgid "NONE"
-msgstr ""
-
-msgid "Global extension macros"
-msgstr ""
-
-msgid "Local extension macros"
-msgstr ""
-
-msgid "Global extension actions"
-msgstr ""
-
-msgid "Local extension actions"
-msgstr ""
-
-msgid "Global parsers"
-msgstr ""
-
-msgid "Local extension parsers"
-msgstr ""
-
-msgid "Disabled"
-msgstr ""
-
-msgid "Enabled"
-msgstr ""
-
-msgid "index available"
-msgstr ""
-
-msgid "index unavailable"
-msgstr ""
-
-msgid "Xapian and/or Python Xapian bindings not installed"
-msgstr ""
-
-msgid "N/A"
-msgstr ""
-
-msgid "Xapian search"
-msgstr ""
-
-msgid "Stemming for Xapian"
-msgstr ""
-
-msgid "Active threads"
-msgstr ""
-
-msgid "Search for items"
-msgstr ""
-
-msgid "containing all the following terms"
-msgstr ""
-
-msgid "containing one or more of the following terms"
-msgstr ""
-
-msgid "not containing the following terms"
-msgstr ""
-
-msgid "last modified since (e.g. last 2 weeks)"
-msgstr ""
-
-msgid "any category"
-msgstr ""
-
-msgid "any language"
-msgstr ""
-
-msgid "any mimetype"
-msgstr ""
-
-msgid "Categories"
-msgstr ""
-
-msgid "File Type"
-msgstr ""
-
-msgid "Search only in titles"
-msgstr ""
-
-msgid "Case-sensitive search"
-msgstr ""
-
-msgid "Exclude underlay"
-msgstr ""
-
-msgid "No system items"
-msgstr ""
-
-msgid "Search in all page revisions"
-msgstr ""
-
-msgid "Go get it!"
+msgid "[%d attachments]"
 msgstr ""
 
 #, python-format
-msgid "No quotes on %(pagename)s."
-msgstr ""
-
-msgid "Search Titles"
-msgstr ""
-
-msgid "Display context of search results"
-msgstr ""
-
-msgid "Case-sensitive searching"
-msgstr ""
-
-msgid "Search Text"
+msgid ""
+"There are <a href=\"%(link)s\">%(count)s attachment(s)</a> stored for this "
+"page."
+msgstr ""
+
+msgid "Filename of attachment not specified!"
+msgstr ""
+
+#, python-format
+msgid "Attachment '%(filename)s' does not exist!"
+msgstr ""
+
+msgid ""
+"To refer to attachments on a page, use '''{{{attachment:filename}}}''', \n"
+"as shown below in the list of files. \n"
+"Do '''NOT''' use the URL of the {{{[get]}}} link, \n"
+"since this is subject to change and can break easily."
+msgstr ""
+
+msgid "del"
+msgstr ""
+
+msgid "move"
+msgstr ""
+
+msgid "get"
+msgstr ""
+
+msgid "edit"
+msgstr ""
+
+msgid "view"
+msgstr ""
+
+msgid "unzip"
+msgstr ""
+
+msgid "install"
+msgstr ""
+
+#, python-format
+msgid "No attachments stored for %(pagename)s"
+msgstr ""
+
+msgid "Edit drawing"
+msgstr ""
+
+msgid "New Attachment"
+msgstr ""
+
+msgid "File to upload"
+msgstr ""
+
+msgid "Rename to"
+msgstr ""
+
+msgid "Overwrite existing attachment of same name"
+msgstr ""
+
+msgid "Upload"
+msgstr ""
+
+msgid "Attached Files"
+msgstr ""
+
+msgid "You are not allowed to attach a file to this page."
+msgstr ""
+
+#, python-format
+msgid "Unsupported AttachFile sub-action: %s"
+msgstr ""
+
+#, python-format
+msgid "Attachments for \"%(pagename)s\""
+msgstr ""
+
+msgid "TextCha: Wrong answer! Go back and try again..."
+msgstr ""
+
+msgid "You are not allowed to overwrite a file attachment of this page."
+msgstr ""
+
+msgid ""
+"No file content. Delete non ASCII characters from the file name and try "
+"again."
+msgstr ""
+
+#, python-format
+msgid ""
+"Attachment '%(target)s' (remote name '%(filename)s') with %(bytes)d bytes "
+"saved."
+msgstr ""
+
+#, python-format
+msgid "Attachment '%(target)s' (remote name '%(filename)s') already exists."
+msgstr ""
+
+msgid "You are not allowed to save a drawing on this page."
+msgstr ""
+
+msgid "You are not allowed to delete attachments on this page."
+msgstr ""
+
+#, python-format
+msgid "Attachment '%(filename)s' deleted."
+msgstr ""
+
+#, python-format
+msgid "Attachment '%(new_pagename)s/%(new_filename)s' already exists."
+msgstr ""
+
+#, python-format
+msgid ""
+"Attachment '%(pagename)s/%(filename)s' moved to '%(new_pagename)s/%"
+"(new_filename)s'."
+msgstr ""
+
+msgid "Nothing changed"
+msgstr ""
+
+#, python-format
+msgid "Page '%(new_pagename)s' does not exist or you don't have enough rights."
+msgstr ""
+
+msgid "Move aborted!"
+msgstr ""
+
+msgid "Please use the interactive user interface to move attachments!"
+msgstr ""
+
+msgid "You are not allowed to move attachments from this page."
+msgstr ""
+
+msgid "Move aborted because new page name is empty."
+msgstr ""
+
+#, python-format
+msgid "Please use a valid filename for attachment '%(filename)s'."
+msgstr ""
+
+msgid "Move aborted because new attachment name is empty."
+msgstr ""
+
+msgid "Move"
+msgstr ""
+
+msgid "New page name"
+msgstr ""
+
+msgid "New attachment name"
+msgstr ""
+
+msgid "You are not allowed to get attachments from this page."
+msgstr ""
+
+msgid "You are not allowed to install files."
+msgstr ""
+
+#, python-format
+msgid "Attachment '%(filename)s' installed."
+msgstr ""
+
+msgid "You are not allowed to unzip attachments of this page."
+msgstr ""
+
+#, python-format
+msgid "The file %(filename)s is not a .zip file."
+msgstr ""
+
+#, python-format
+msgid ""
+"Attachment '%(filename)s' not unzipped because some files in the zip are "
+"either not in the same directory or exceeded the single file size limit (%"
+"(maxsize_file)d kB)."
+msgstr ""
+
+#, python-format
+msgid ""
+"Attachment '%(filename)s' not unzipped because it would have exceeded the "
+"per page attachment storage size limit (%(size)d kB)."
+msgstr ""
+
+#, python-format
+msgid ""
+"Attachment '%(filename)s' not unzipped because it would have exceeded the "
+"per page attachment count limit (%(count)d)."
+msgstr ""
+
+#, python-format
+msgid ""
+"Attachment '%(filename)s' partially unzipped (did not overwrite: %(filelist)"
+"s)."
+msgstr ""
+
+#, python-format
+msgid "Attachment '%(filename)s' unzipped."
+msgstr ""
+
+msgid "A severe error occurred:"
+msgstr ""
+
+#, python-format
+msgid "Attachment '%(filename)s'"
+msgstr ""
+
+msgid "Download"
+msgstr ""
+
+msgid "Package script:"
+msgstr ""
+
+msgid "File Name"
+msgstr ""
+
+msgid "Modified"
+msgstr ""
+
+msgid "Size"
+msgstr ""
+
+msgid "Unknown file type, cannot display this attachment inline."
+msgstr ""
+
+msgid "You are not allowed to view attachments of this page."
+msgstr ""
+
+#, python-format
+msgid "attachment:%(filename)s of %(pagename)s"
+msgstr ""
+
+msgid ""
+"Cannot create a new page without a page name.  Please specify a page name."
+msgstr ""
+
+#, python-format
+msgid "Full Link List for \"%s\""
+msgstr ""
+
+#, python-format
+msgid "No pages like \"%s\"!"
+msgstr ""
+
+#, python-format
+msgid "Exactly one page like \"%s\" found, redirecting to page."
+msgstr ""
+
+#, python-format
+msgid "Pages like \"%s\""
+msgstr ""
+
+#, python-format
+msgid "%(matchcount)d %(matches)s for \"%(title)s\""
+msgstr ""
+
+msgid ""
+"You need to manually go to your OpenID provider wiki\n"
+"and log in before you can use your OpenID. MoinMoin will\n"
+"never allow you to enter your password here.\n"
+"\n"
+"Once you have logged in, simply reload this page."
+msgstr ""
+
+msgid "OpenID Trust verification"
+msgstr ""
+
+#, python-format
+msgid "The site %s has asked for your identity."
+msgstr ""
+
+#, python-format
+msgid ""
+"\n"
+"If you approve, the site represented by the trust root below will be\n"
+"told that you control the identity URL %s. (If you are using a delegated\n"
+"identity, the site will take care of reversing the\n"
+"delegation on its own.)"
+msgstr ""
+
+msgid "Trust root"
+msgstr ""
+
+msgid "Identity URL"
+msgstr ""
+
+msgid "Remember decision"
+msgstr ""
+
+msgid "Remember this trust decision and don't ask again"
+msgstr ""
+
+msgid "Approve"
+msgstr ""
+
+msgid "Don't approve"
+msgstr ""
+
+msgid "OpenID not served"
+msgstr ""
+
+msgid ""
+"\n"
+"Unfortunately you have not created your homepage yet. Therefore,\n"
+"we cannot serve an OpenID for you. Please create your homepage first\n"
+"and then reload this page or click the button below to cancel this\n"
+"verification."
+msgstr ""
+
+#, python-format
+msgid "You must login to use this action: %(action)s."
+msgstr ""
+
+msgid "Your subscription to this page has been removed."
+msgstr ""
+
+msgid "Can't remove regular expression subscription!"
+msgstr ""
+
+msgid "Edit the subscription regular expressions in your settings."
+msgstr ""
+
+msgid "You need to be subscribed to unsubscribe."
+msgstr ""
+
+#, python-format
+msgid ""
+"Restored Backup: %(filename)s to target dir: %(targetdir)s.\n"
+"Files: %(filecount)d, Directories: %(dircount)d"
+msgstr ""
+
+#, python-format
+msgid "Restoring backup: %(filename)s to target dir: %(targetdir)s failed."
+msgstr ""
+
+msgid "Wiki Backup / Restore"
+msgstr ""
+
+msgid ""
+"Some hints:\n"
+" * To restore a backup:\n"
+"  * Restoring a backup will overwrite existing data, so be careful.\n"
+"  * Rename it to <siteid>.tar.<compression> (remove the --date--time--UTC "
+"stuff).\n"
+"  * Put the backup file into the backup_storage_dir (use scp, ftp, ...).\n"
+"  * Hit the <<GetText(Restore)>> button below.\n"
+"\n"
+" * To make a backup, just hit the <<GetText(Backup)>> button and save the "
+"file\n"
+"   you get to a secure place.\n"
+"\n"
+"Please make sure your wiki configuration backup_* values are correct and "
+"complete.\n"
+"\n"
+msgstr ""
+
+msgid "Backup"
+msgstr ""
+
+msgid "Restore"
+msgstr ""
+
+msgid "You are not allowed to do remote backup."
+msgstr ""
+
+#, python-format
+msgid "Unknown backup subaction: %s."
+msgstr ""
+
+#, python-format
+msgid "Subscribe users to the page %s"
+msgstr ""
+
+msgid "Enter user names (comma separated):"
+msgstr ""
+
+#, python-format
+msgid "Subscribed for %s:"
+msgstr ""
+
+msgid "Not a user:"
+msgstr ""
+
+msgid "You are not allowed to perform this action."
+msgstr ""
+
+msgid "Rename Page"
+msgstr ""
+
+msgid "Rename all /subpages too?"
+msgstr ""
+
+msgid "New name"
+msgstr ""
+
+msgid "Optional reason for the renaming"
+msgstr ""
+
+msgid "Really rename this page?"
+msgstr ""
+
+msgid "No older revisions available!"
+msgstr ""
+
+#, python-format
+msgid "Diff for \"%s\""
+msgstr ""
+
+#, python-format
+msgid "Differences between revisions %d and %d"
+msgstr ""
+
+#, python-format
+msgid "(spanning %d versions)"
+msgstr ""
+
+msgid "Revert to this revision"
+msgstr ""
+
+msgid "Previous change"
+msgstr ""
+
+msgid "Next change"
+msgstr ""
+
+msgid "No differences found!"
+msgstr ""
+
+#, python-format
+msgid "The page was saved %(count)d times, though!"
+msgstr ""
+
+msgid "(ignoring whitespace)"
+msgstr ""
+
+msgid "Ignore changes in the amount of whitespace"
+msgstr ""
+
+#, python-format
+msgid "(!) Only pages changed since '''%s''' are being displayed!"
+msgstr ""
+
+msgid ""
+"/!\\ The modification date you entered was not recognized and is therefore "
+"not considered for the search results!"
 msgstr ""
 
 #, python-format
@@ -1637,67 +1403,144 @@
 msgstr ""
 
 #, python-format
+msgid "Title Search: \"%s\""
+msgstr ""
+
+#, python-format
+msgid "Advanced Search: \"%s\""
+msgstr ""
+
+#, python-format
+msgid "Full Text Search: \"%s\""
+msgstr ""
+
+#, python-format
 msgid ""
 "Your search query {{{\"%s\"}}} is invalid. Please refer to HelpOnSearching "
 "for more information."
 msgstr ""
 
 #, python-format
-msgid "Upload new attachment \"%(filename)s\""
+msgid ""
+"Your search query {{{\"%s\"}}} didn't return any results. Please change some "
+"terms and refer to HelpOnSearching for more information.%s"
+msgstr ""
+
+msgid "(!) Consider performing a"
+msgstr ""
+
+msgid "full-text search with your search terms"
+msgstr ""
+
+msgid ""
+"(!) You're performing a title search that might not include all related "
+"results of your search query in this wiki. <<BR>>"
+msgstr ""
+
+msgid "Click here to perform a full-text search with your search terms!"
 msgstr ""
 
 #, python-format
-msgid ""
-"%(extension_name)s %(extension_type)s: Required argument %(argument_name)s "
-"missing."
-msgstr ""
-
-#, python-format
-msgid ""
-"%(extension_name)s %(extension_type)s: Invalid %(argument_name)s=%"
-"(argument_value)s!"
+msgid "(including %(localwords)d %(pagelink)s)"
 msgstr ""
 
 #, python-format
 msgid ""
-"Current configuration does not allow embedding of the file %(file)s because "
-"of its mimetype %(mimetype)s."
-msgstr ""
-
-msgid "Embedded"
+"The following %(badwords)d words could not be found in the dictionary of %"
+"(totalwords)d words%(localwords)s and are highlighted below:"
+msgstr ""
+
+msgid "Add checked words to dictionary"
+msgstr ""
+
+msgid "No spelling errors found!"
+msgstr ""
+
+msgid "You can't save spelling words."
+msgstr ""
+
+msgid "You can't check spelling on a page you can't read."
+msgstr ""
+
+msgid "You are not allowed to create the supplementation page."
+msgstr ""
+
+msgid "General Information"
 msgstr ""
 
 #, python-format
-msgid "Unsupported navigation scheme '%(scheme)s'!"
-msgstr ""
-
-msgid "No parent page found!"
-msgstr ""
-
-msgid "Slideshow"
-msgstr ""
-
-msgid "Start"
+msgid "Page size: %d"
+msgstr ""
+
+msgid "SHA digest of this page's content is:"
+msgstr ""
+
+msgid "The following users subscribed to this page:"
+msgstr ""
+
+msgid "This page links to the following pages:"
+msgstr ""
+
+msgid "Date"
+msgstr ""
+
+msgid "Diff"
+msgstr ""
+
+msgid "Editor"
+msgstr ""
+
+msgid "Comment"
+msgstr ""
+
+msgid "to previous"
+msgstr ""
+
+msgid "N/A"
+msgstr ""
+
+msgid "Revision History"
+msgstr ""
+
+msgid "No log entries found."
 msgstr ""
 
 #, python-format
-msgid "Slide %(pos)d of %(size)d"
-msgstr ""
-
-msgid "Markup"
-msgstr ""
-
-msgid "Display"
-msgstr ""
-
-msgid "No wanted pages in this wiki."
-msgstr ""
-
-msgid "You need to provide a chart type!"
+msgid "Info for \"%s\""
 msgstr ""
 
 #, python-format
-msgid "Bad chart type \"%s\"!"
+msgid "Show \"%(title)s\""
+msgstr ""
+
+msgid "General Page Infos"
+msgstr ""
+
+msgid "Page hits and edits"
+msgstr ""
+
+msgid "User account created! You can use this account to login now..."
+msgstr ""
+
+msgid "TextCha (required)"
+msgstr ""
+
+msgid "Create Profile"
+msgstr ""
+
+msgid "Create Account"
+msgstr ""
+
+msgid "Copy Page"
+msgstr ""
+
+msgid "Copy all /subpages too?"
+msgstr ""
+
+msgid "Optional reason for the copying"
+msgstr ""
+
+msgid "Really copy this page?"
 msgstr ""
 
 msgid "Revert"
@@ -1712,15 +1555,246 @@
 "older revision and then call revert to this (older) revision again."
 msgstr ""
 
-msgid "This page is already deleted or was never created!"
-msgstr ""
-
 msgid "Optional reason for reverting this page"
 msgstr ""
 
 msgid "Really revert this page?"
 msgstr ""
 
+msgid "You must login to add a quicklink."
+msgstr ""
+
+msgid "A quicklink to this page has been added for you."
+msgstr ""
+
+msgid "A quicklink to this page could not be added for you."
+msgstr ""
+
+msgid "You already have a quicklink to this page."
+msgstr ""
+
+msgid "Please choose:"
+msgstr ""
+
+msgid "Settings"
+msgstr ""
+
+msgid "Charts are not available!"
+msgstr ""
+
+msgid "You need to provide a chart type!"
+msgstr ""
+
+#, python-format
+msgid "Bad chart type \"%s\"!"
+msgstr ""
+
+#, python-format
+msgid "Local Site Map for \"%s\""
+msgstr ""
+
+msgid "You must login to remove a quicklink."
+msgstr ""
+
+msgid "Your quicklink to this page has been removed."
+msgstr ""
+
+msgid "Your quicklink to this page could not be removed."
+msgstr ""
+
+msgid "You need to have a quicklink to this page to remove it."
+msgstr ""
+
+msgid "Load"
+msgstr ""
+
+msgid "Pagename not specified!"
+msgstr ""
+
+msgid "Upload page content"
+msgstr ""
+
+msgid ""
+"You can upload content for the page named below. If you change the page "
+"name, you can also upload content for another page. If the page name is "
+"empty, we derive the page name from the file name."
+msgstr ""
+
+msgid "File to load page content from"
+msgstr ""
+
+msgid "Page Name"
+msgstr ""
+
+#, python-format
+msgid "Invalid filename \"%s\"!"
+msgstr ""
+
+#, python-format
+msgid "Created the package %s containing the pages %s."
+msgstr ""
+
+msgid "Package pages"
+msgstr ""
+
+msgid "Package name"
+msgstr ""
+
+msgid "List of page names - separated by a comma"
+msgstr ""
+
+msgid "Do it."
+msgstr ""
+
+#, python-format
+msgid "Execute action %(actionname)s?"
+msgstr ""
+
+#, python-format
+msgid "Action %(actionname)s is excluded in this wiki!"
+msgstr ""
+
+#, python-format
+msgid "You are not allowed to use action %(actionname)s on this page!"
+msgstr ""
+
+#, python-format
+msgid "Please use the interactive user interface to use action %(actionname)s!"
+msgstr ""
+
+msgid "Please log in first."
+msgstr ""
+
+msgid "Please first create a homepage before creating additional pages."
+msgstr ""
+
+#, python-format
+msgid ""
+"You can add some additional sub pages to your already existing homepage "
+"here.\n"
+"\n"
+"You can choose how open to other readers or writers those pages shall be,\n"
+"access is controlled by group membership of the corresponding group page.\n"
+"\n"
+"Just enter the sub page's name and click on the button to create a new "
+"page.\n"
+"\n"
+"Before creating access protected pages, make sure the corresponding group "
+"page\n"
+"exists and has the appropriate members in it. Use HomepageGroupsTemplate for "
+"creating\n"
+"the group pages.\n"
+"\n"
+"||'''Add a new personal page:'''||'''Related access control list "
+"group:'''||\n"
+"||<<NewPage(HomepageReadWritePageTemplate,read-write page,%(username)s)>>||"
+"[[%(username)s/ReadWriteGroup]]||\n"
+"||<<NewPage(HomepageReadPageTemplate,read-only page,%(username)s)>>||[[%"
+"(username)s/ReadGroup]]||\n"
+"||<<NewPage(HomepagePrivatePageTemplate,private page,%(username)s)>>||%"
+"(username)s only||\n"
+"\n"
+msgstr ""
+
+msgid "MyPages management"
+msgstr ""
+
+msgid "Pages"
+msgstr ""
+
+msgid "Select Author"
+msgstr ""
+
+msgid "Revert all!"
+msgstr ""
+
+msgid "Only superuser is allowed to use this action."
+msgstr ""
+
+msgid "You are not allowed to subscribe to a page you can't read."
+msgstr ""
+
+msgid "This wiki is not enabled for mail/Jabber processing."
+msgstr ""
+
+msgid "You must log in to use subscriptions."
+msgstr ""
+
+msgid ""
+"Add your email address or Jabber ID in your user settings to use "
+"subscriptions."
+msgstr ""
+
+msgid "You are already subscribed to this page."
+msgstr ""
+
+msgid "You have been subscribed to this page."
+msgstr ""
+
+msgid "You could not get subscribed to this page."
+msgstr ""
+
+msgid "If this account exists an email was sent."
+msgstr ""
+
+msgid ""
+"This wiki is not enabled for mail processing.\n"
+"Contact the owner of the wiki, who can enable email."
+msgstr ""
+
+msgid "Please provide a valid email address or a username!"
+msgstr ""
+
+msgid "Mail me my account data"
+msgstr ""
+
+msgid "Recovery token"
+msgstr ""
+
+msgid "New password"
+msgstr ""
+
+msgid "New password (repeat)"
+msgstr ""
+
+msgid "Reset my password"
+msgstr ""
+
+msgid "Your password has been changed, you can log in now."
+msgstr ""
+
+msgid "Your token is invalid!"
+msgstr ""
+
+msgid "Password reset"
+msgstr ""
+
+msgid ""
+"\n"
+"== Password reset ==\n"
+"Enter a new password below."
+msgstr ""
+
+msgid "Lost password"
+msgstr ""
+
+msgid ""
+"\n"
+"== Recovering a lost password ==\n"
+"If you have forgotten your password, provide your email address or\n"
+"username and click on '''Mail me my account data'''.\n"
+"You will receive an email containing a recovery token that can be\n"
+"used to change your password. The email will also contain further\n"
+"instructions."
+msgstr ""
+
+msgid ""
+"\n"
+"=== Password reset ===\n"
+"If you already have received the email with the recovery token, enter your\n"
+"username, the recovery token and a new password (twice) below."
+msgstr ""
+
 #, python-format
 msgid "Rolled back changes to the page %s."
 msgstr ""
@@ -1753,9 +1827,6 @@
 msgid "The ''remoteWiki'' is unknown."
 msgstr ""
 
-msgid "A severe error occurred:"
-msgstr ""
-
 msgid "Synchronisation finished. Look below for the status messages."
 msgstr ""
 
@@ -1852,816 +1923,592 @@
 msgid "Page %s merged with conflicts."
 msgstr ""
 
-msgid ""
-"You need to manually go to your OpenID provider wiki\n"
-"and log in before you can use your OpenID. MoinMoin will\n"
-"never allow you to enter your password here.\n"
-"\n"
-"Once you have logged in, simply reload this page."
-msgstr ""
-
-msgid "OpenID Trust verification"
-msgstr ""
-
-#, python-format
-msgid "The site %s has asked for your identity."
-msgstr ""
-
-#, python-format
-msgid ""
-"\n"
-"If you approve, the site represented by the trust root below will be\n"
-"told that you control the identity URL %s. (If you are using a delegated\n"
-"identity, the site will take care of reversing the\n"
-"delegation on its own.)"
-msgstr ""
-
-msgid "Trust root"
-msgstr ""
-
-msgid "Identity URL"
-msgstr ""
-
-msgid "Remember decision"
-msgstr ""
-
-msgid "Remember this trust decision and don't ask again"
-msgstr ""
-
-msgid "Approve"
-msgstr ""
-
-msgid "Don't approve"
-msgstr ""
-
-msgid "OpenID not served"
-msgstr ""
-
-msgid ""
-"\n"
-"Unfortunately you have not created your homepage yet. Therefore,\n"
-"we cannot serve an OpenID for you. Please create your homepage first\n"
-"and then reload this page or click the button below to cancel this\n"
-"verification."
-msgstr ""
-
-#, python-format
-msgid "Invalid filename \"%s\"!"
-msgstr ""
-
-#, python-format
-msgid "Attachment '%(target)s' (remote name '%(filename)s') already exists."
-msgstr ""
-
-#, python-format
-msgid "Created the package %s containing the pages %s."
-msgstr ""
-
-msgid "Package pages"
-msgstr ""
-
-msgid "Package name"
-msgstr ""
-
-msgid "List of page names - separated by a comma"
-msgstr ""
-
-#, python-format
-msgid "No pages like \"%s\"!"
-msgstr ""
-
-msgid "Please choose:"
-msgstr ""
-
 #, python-format
-msgid "You must login to use this action: %(action)s."
-msgstr ""
-
-msgid "You must login to remove a quicklink."
-msgstr ""
-
-msgid "Your quicklink to this page has been removed."
-msgstr ""
-
-msgid "Your quicklink to this page could not be removed."
-msgstr ""
-
-msgid "You need to have a quicklink to this page to remove it."
-msgstr ""
-
-#, python-format
-msgid ""
-"Restored Backup: %(filename)s to target dir: %(targetdir)s.\n"
-"Files: %(filecount)d, Directories: %(dircount)d"
-msgstr ""
-
-#, python-format
-msgid "Restoring backup: %(filename)s to target dir: %(targetdir)s failed."
-msgstr ""
-
-msgid "Wiki Backup / Restore"
-msgstr ""
-
-msgid ""
-"Some hints:\n"
-" * To restore a backup:\n"
-"  * Restoring a backup will overwrite existing data, so be careful.\n"
-"  * Rename it to <siteid>.tar.<compression> (remove the --date--time--UTC "
-"stuff).\n"
-"  * Put the backup file into the backup_storage_dir (use scp, ftp, ...).\n"
-"  * Hit the <<GetText(Restore)>> button below.\n"
-"\n"
-" * To make a backup, just hit the <<GetText(Backup)>> button and save the "
-"file\n"
-"   you get to a secure place.\n"
-"\n"
-"Please make sure your wiki configuration backup_* values are correct and "
-"complete.\n"
-"\n"
-msgstr ""
-
-msgid "Backup"
-msgstr ""
-
-msgid "Restore"
-msgstr ""
-
-msgid "You are not allowed to do remote backup."
-msgstr ""
-
-#, python-format
-msgid "Unknown backup subaction: %s."
-msgstr ""
-
-msgid "Do it."
-msgstr ""
-
-#, python-format
-msgid "Execute action %(actionname)s?"
-msgstr ""
-
-#, python-format
-msgid "Action %(actionname)s is excluded in this wiki!"
-msgstr ""
-
-#, python-format
-msgid "You are not allowed to use action %(actionname)s on this page!"
-msgstr ""
-
-#, python-format
-msgid "Please use the interactive user interface to use action %(actionname)s!"
-msgstr ""
-
-msgid "Please log in first."
-msgstr ""
-
-msgid "Please first create a homepage before creating additional pages."
+msgid "Connection to mailserver '%(server)s' failed: %(reason)s"
+msgstr ""
+
+msgid "Mail not sent"
+msgstr ""
+
+msgid "Mail sent OK"
+msgstr ""
+
+msgid "From"
+msgstr ""
+
+msgid "To"
+msgstr ""
+
+msgid "Content"
+msgstr ""
+
+msgid "Attachments"
+msgstr ""
+
+msgid "Line"
+msgstr ""
+
+msgid "Deletions are marked like this."
+msgstr ""
+
+msgid "Additions are marked like this."
+msgstr ""
+
+msgid "Attachment link"
+msgstr ""
+
+msgid "Page link"
+msgstr ""
+
+msgid "Changed page"
+msgstr ""
+
+msgid "Page changed"
+msgstr ""
+
+msgid "Page has been modified"
+msgstr ""
+
+msgid "Page has been modified in a trivial fashion"
+msgstr ""
+
+msgid "Page has been renamed"
+msgstr ""
+
+msgid "Page has been deleted"
+msgstr ""
+
+msgid "Page has been copied"
+msgstr ""
+
+msgid "A new attachment has been added"
+msgstr ""
+
+msgid "A page has been reverted to a previous state"
+msgstr ""
+
+msgid "A user has subscribed to a page"
+msgstr ""
+
+msgid "A new account has been created"
 msgstr ""
 
 #, python-format
 msgid ""
-"You can add some additional sub pages to your already existing homepage "
-"here.\n"
-"\n"
-"You can choose how open to other readers or writers those pages shall be,\n"
-"access is controlled by group membership of the corresponding group page.\n"
-"\n"
-"Just enter the sub page's name and click on the button to create a new "
-"page.\n"
-"\n"
-"Before creating access protected pages, make sure the corresponding group "
-"page\n"
-"exists and has the appropriate members in it. Use HomepageGroupsTemplate for "
-"creating\n"
-"the group pages.\n"
-"\n"
-"||'''Add a new personal page:'''||'''Related access control list "
-"group:'''||\n"
-"||<<NewPage(HomepageReadWritePageTemplate,read-write page,%(username)s)>>||"
-"[[%(username)s/ReadWriteGroup]]||\n"
-"||<<NewPage(HomepageReadPageTemplate,read-only page,%(username)s)>>||[[%"
-"(username)s/ReadGroup]]||\n"
-"||<<NewPage(HomepagePrivatePageTemplate,private page,%(username)s)>>||%"
-"(username)s only||\n"
+"Dear Wiki user,\n"
 "\n"
-msgstr ""
-
-msgid "MyPages management"
-msgstr ""
-
-msgid "Rename all /subpages too?"
-msgstr ""
-
-msgid "New name"
-msgstr ""
-
-msgid "Optional reason for the renaming"
-msgstr ""
-
-msgid "Really rename this page?"
-msgstr ""
-
-msgid "Your subscription to this page has been removed."
-msgstr ""
-
-msgid "Can't remove regular expression subscription!"
-msgstr ""
-
-msgid "Edit the subscription regular expressions in your settings."
-msgstr ""
-
-msgid "You need to be subscribed to unsubscribe."
-msgstr ""
-
-msgid "TextCha: Wrong answer! Go back and try again..."
-msgstr ""
-
-msgid "Copy all /subpages too?"
-msgstr ""
-
-msgid "Optional reason for the copying"
-msgstr ""
-
-msgid "Really copy this page?"
-msgstr ""
-
-msgid "No older revisions available!"
-msgstr ""
-
-#, python-format
-msgid "Diff for \"%s\""
-msgstr ""
-
-#, python-format
-msgid "Differences between revisions %d and %d"
-msgstr ""
-
-#, python-format
-msgid "(spanning %d versions)"
-msgstr ""
-
-msgid "Previous change"
-msgstr ""
-
-msgid "Next change"
-msgstr ""
-
-#, python-format
-msgid "The page was saved %(count)d times, though!"
-msgstr ""
-
-msgid "(ignoring whitespace)"
-msgstr ""
-
-msgid "Ignore changes in the amount of whitespace"
-msgstr ""
-
-msgid "Load"
-msgstr ""
-
-msgid "Pagename not specified!"
-msgstr ""
-
-msgid "Upload page content"
-msgstr ""
-
-msgid ""
-"You can upload content for the page named below. If you change the page "
-"name, you can also upload content for another page. If the page name is "
-"empty, we derive the page name from the file name."
-msgstr ""
-
-msgid "File to load page content from"
-msgstr ""
-
-msgid "Comment"
-msgstr ""
-
-msgid "Page Name"
-msgstr ""
-
-msgid "You are not allowed to subscribe to a page you can't read."
-msgstr ""
-
-msgid "This wiki is not enabled for mail/Jabber processing."
-msgstr ""
-
-msgid "You must log in to use subscriptions."
-msgstr ""
-
-msgid ""
-"Add your email address or Jabber ID in your user settings to use "
-"subscriptions."
-msgstr ""
-
-msgid "You are already subscribed to this page."
-msgstr ""
-
-msgid "You have been subscribed to this page."
-msgstr ""
-
-msgid "You could not get subscribed to this page."
-msgstr ""
-
-msgid "General Information"
-msgstr ""
-
-#, python-format
-msgid "Page size: %d"
-msgstr ""
-
-msgid "SHA digest of this page's content is:"
-msgstr ""
-
-msgid "The following users subscribed to this page:"
-msgstr ""
-
-msgid "This page links to the following pages:"
-msgstr ""
-
-msgid "Size"
-msgstr ""
-
-msgid "Diff"
-msgstr ""
-
-msgid "Editor"
-msgstr ""
-
-msgid "view"
-msgstr ""
-
-msgid "to previous"
-msgstr ""
-
-msgid "get"
-msgstr ""
-
-msgid "del"
-msgstr ""
-
-msgid "Revision History"
-msgstr ""
-
-msgid "No log entries found."
-msgstr ""
-
-#, python-format
-msgid "Info for \"%s\""
-msgstr ""
-
-#, python-format
-msgid "Show \"%(title)s\""
-msgstr ""
-
-msgid "General Page Infos"
-msgstr ""
-
-msgid ""
-"Cannot create a new page without a page name.  Please specify a page name."
-msgstr ""
-
-msgid "Delete"
-msgstr ""
-
-msgid "Delete all /subpages too?"
-msgstr ""
-
-msgid "Optional reason for the deletion"
-msgstr ""
-
-msgid "Really delete this page?"
-msgstr ""
-
-msgid "You are not allowed to create the supplementation page."
-msgstr ""
-
-msgid "Only superuser is allowed to use this action."
-msgstr ""
-
-#, python-format
-msgid "Subscribe users to the page %s"
-msgstr ""
-
-msgid "Enter user names (comma separated):"
-msgstr ""
-
-#, python-format
-msgid "Subscribed for %s:"
-msgstr ""
-
-msgid "Not a user:"
-msgstr ""
-
-msgid "You are not allowed to perform this action."
-msgstr ""
-
-#, python-format
-msgid "(!) Only pages changed since '''%s''' are being displayed!"
-msgstr ""
-
-msgid ""
-"/!\\ The modification date you entered was not recognized and is therefore "
-"not considered for the search results!"
-msgstr ""
-
-#, python-format
-msgid "Title Search: \"%s\""
-msgstr ""
-
-#, python-format
-msgid "Advanced Search: \"%s\""
-msgstr ""
-
-#, python-format
-msgid "Full Text Search: \"%s\""
-msgstr ""
-
-#, python-format
-msgid ""
-"Your search query {{{\"%s\"}}} didn't return any results. Please change some "
-"terms and refer to HelpOnSearching for more information.%s"
-msgstr ""
-
-msgid "(!) Consider performing a"
-msgstr ""
-
-msgid "full-text search with your search terms"
-msgstr ""
-
-msgid ""
-"(!) You're performing a title search that might not include all related "
-"results of your search query in this wiki. <<BR>>"
-msgstr ""
-
-msgid "Click here to perform a full-text search with your search terms!"
-msgstr ""
-
-msgid "User account created! You can use this account to login now..."
-msgstr ""
-
-msgid "TextCha (required)"
-msgstr ""
-
-msgid "Create Profile"
-msgstr ""
-
-msgid "Create Account"
-msgstr ""
-
-msgid "You must login to add a quicklink."
-msgstr ""
-
-msgid "A quicklink to this page has been added for you."
-msgstr ""
-
-msgid "A quicklink to this page could not be added for you."
-msgstr ""
-
-msgid "You already have a quicklink to this page."
-msgstr ""
-
-msgid "You are not allowed to use this action."
-msgstr ""
-
-#, python-format
-msgid "(including %(localwords)d %(pagelink)s)"
+"You have subscribed to a wiki page or wiki category on \"%(sitename)s\" for "
+"change notification.\n"
+"\n"
+"The \"%(pagename)s\" page has been changed by %(editor)s:\n"
+msgstr ""
+
+msgid "New page:\n"
+msgstr ""
+
+msgid "No differences found!\n"
 msgstr ""
 
 #, python-format
 msgid ""
-"The following %(badwords)d words could not be found in the dictionary of %"
-"(totalwords)d words%(localwords)s and are highlighted below:"
-msgstr ""
-
-msgid "Add checked words to dictionary"
-msgstr ""
-
-msgid "No spelling errors found!"
-msgstr ""
-
-msgid "You can't save spelling words."
-msgstr ""
-
-msgid "You can't check spelling on a page you can't read."
-msgstr ""
-
-msgid "You are now logged out."
-msgstr ""
-
-msgid "If this account exists an email was sent."
-msgstr ""
-
-msgid ""
-"This wiki is not enabled for mail processing.\n"
-"Contact the owner of the wiki, who can enable email."
-msgstr ""
-
-msgid "Please provide a valid email address or a username!"
-msgstr ""
-
-msgid "Mail me my account data"
-msgstr ""
-
-msgid "Recovery token"
-msgstr ""
-
-msgid "New password"
-msgstr ""
-
-msgid "New password (repeat)"
-msgstr ""
-
-msgid "Reset my password"
-msgstr ""
-
-msgid "Your password has been changed, you can log in now."
-msgstr ""
-
-msgid "Your token is invalid!"
-msgstr ""
-
-msgid "Password reset"
-msgstr ""
-
-msgid ""
+"Dear wiki user,\n"
 "\n"
-"== Password reset ==\n"
-"Enter a new password below."
-msgstr ""
-
-msgid "Lost password"
-msgstr ""
-
-msgid ""
-"\n"
-"== Recovering a lost password ==\n"
-"If you have forgotten your password, provide your email address or\n"
-"username and click on '''Mail me my account data'''.\n"
-"You will receive an email containing a recovery token that can be\n"
-"used to change your password. The email will also contain further\n"
-"instructions."
-msgstr ""
-
-msgid ""
+"You have subscribed to a wiki page \"%(sitename)s\" for change "
+"notification.\n"
 "\n"
-"=== Password reset ===\n"
-"If you already have received the email with the recovery token, enter your\n"
-"username, the recovery token and a new password (twice) below."
-msgstr ""
-
-#, python-format
-msgid "Local Site Map for \"%s\""
-msgstr ""
-
-msgid "Pages"
-msgstr ""
-
-msgid "Select Author"
-msgstr ""
-
-msgid "Revert all!"
-msgstr ""
-
-#, python-format
-msgid "[%d attachments]"
+"The page \"%(pagename)s\" has been deleted by %(editor)s:\n"
+"\n"
 msgstr ""
 
 #, python-format
 msgid ""
-"There are <a href=\"%(link)s\">%(count)s attachment(s)</a> stored for this "
-"page."
-msgstr ""
-
-msgid "Filename of attachment not specified!"
-msgstr ""
-
-#, python-format
-msgid "Attachment '%(filename)s' does not exist!"
-msgstr ""
-
-msgid ""
-"To refer to attachments on a page, use '''{{{attachment:filename}}}''', \n"
-"as shown below in the list of files. \n"
-"Do '''NOT''' use the URL of the {{{[get]}}} link, \n"
-"since this is subject to change and can break easily."
-msgstr ""
-
-msgid "move"
-msgstr ""
-
-msgid "unzip"
-msgstr ""
-
-msgid "install"
+"Dear wiki user,\n"
+"\n"
+"You have subscribed to a wiki page \"%(sitename)s\" for change "
+"notification.\n"
+"\n"
+"The page \"%(pagename)s\" has been renamed from \"%(oldname)s\" by %(editor)"
+"s:\n"
 msgstr ""
 
 #, python-format
-msgid "No attachments stored for %(pagename)s"
-msgstr ""
-
-msgid "Edit drawing"
-msgstr ""
-
-msgid "New Attachment"
-msgstr ""
-
-msgid "File to upload"
-msgstr ""
-
-msgid "Rename to"
-msgstr ""
-
-msgid "Overwrite existing attachment of same name"
-msgstr ""
-
-msgid "Upload"
-msgstr ""
-
-msgid "Attached Files"
-msgstr ""
-
-msgid "You are not allowed to attach a file to this page."
-msgstr ""
-
-#, python-format
-msgid "Unsupported AttachFile sub-action: %s"
-msgstr ""
-
-#, python-format
-msgid "Attachments for \"%(pagename)s\""
-msgstr ""
-
-msgid "You are not allowed to overwrite a file attachment of this page."
-msgstr ""
-
-msgid ""
-"No file content. Delete non ASCII characters from the file name and try "
-"again."
-msgstr ""
-
-#, python-format
-msgid ""
-"Attachment '%(target)s' (remote name '%(filename)s') with %(bytes)d bytes "
-"saved."
-msgstr ""
-
-msgid "You are not allowed to save a drawing on this page."
-msgstr ""
-
-msgid "You are not allowed to delete attachments on this page."
-msgstr ""
-
-#, python-format
-msgid "Attachment '%(new_pagename)s/%(new_filename)s' already exists."
+msgid "New user account created on %(sitename)s"
 msgstr ""
 
 #, python-format
 msgid ""
-"Attachment '%(pagename)s/%(filename)s' moved to '%(new_pagename)s/%"
-"(new_filename)s'."
-msgstr ""
-
-msgid "Nothing changed"
-msgstr ""
-
-#, python-format
-msgid "Page '%(new_pagename)s' does not exist or you don't have enough rights."
-msgstr ""
-
-msgid "Move aborted!"
-msgstr ""
-
-msgid "Please use the interactive user interface to move attachments!"
-msgstr ""
-
-msgid "You are not allowed to move attachments from this page."
-msgstr ""
-
-msgid "Move aborted because new page name is empty."
+"Dear Superuser, a new user has just been created. Details follow:\n"
+"\n"
+"    User name: %(username)s\n"
+"    Email address: %(useremail)s"
 msgstr ""
 
 #, python-format
-msgid "Please use a valid filename for attachment '%(filename)s'."
-msgstr ""
-
-msgid "Move aborted because new attachment name is empty."
-msgstr ""
-
-msgid "Move"
-msgstr ""
-
-msgid "New page name"
-msgstr ""
-
-msgid "New attachment name"
-msgstr ""
-
-msgid "You are not allowed to get attachments from this page."
-msgstr ""
-
-msgid "You are not allowed to install files."
-msgstr ""
-
-#, python-format
-msgid "Attachment '%(filename)s' installed."
-msgstr ""
-
-msgid "You are not allowed to unzip attachments of this page."
-msgstr ""
-
-#, python-format
-msgid "The file %(filename)s is not a .zip file."
-msgstr ""
-
-#, python-format
-msgid ""
-"Attachment '%(filename)s' not unzipped because some files in the zip are "
-"either not in the same directory or exceeded the single file size limit (%"
-"(maxsize_file)d kB)."
-msgstr ""
-
-#, python-format
-msgid ""
-"Attachment '%(filename)s' not unzipped because it would have exceeded the "
-"per page attachment storage size limit (%(size)d kB)."
+msgid "New attachment added to page %(pagename)s on %(sitename)s"
 msgstr ""
 
 #, python-format
 msgid ""
-"Attachment '%(filename)s' not unzipped because it would have exceeded the "
-"per page attachment count limit (%(count)d)."
+"Dear Wiki user,\n"
+"\n"
+"You have subscribed to a wiki page \"%(page_name)s\" for change "
+"notification. An attachment has been added to that page by %(editor)s. "
+"Following detailed information is available:\n"
+"\n"
+"Attachment name: %(attach_name)s\n"
+"Attachment size: %(attach_size)s\n"
+msgstr ""
+
+#, python-format
+msgid "[%(sitename)s] %(trivial)sUpdate of \"%(pagename)s\" by %(username)s"
+msgstr ""
+
+msgid "Trivial "
 msgstr ""
 
 #, python-format
 msgid ""
-"Attachment '%(filename)s' partially unzipped (did not overwrite: %(filelist)"
-"s)."
-msgstr ""
-
-#, python-format
-msgid "Attachment '%(filename)s' unzipped."
-msgstr ""
-
-#, python-format
-msgid "Attachment '%(filename)s'"
-msgstr ""
-
-msgid "Download"
-msgstr ""
-
-msgid "Package script:"
-msgstr ""
-
-msgid "File Name"
-msgstr ""
-
-msgid "Modified"
-msgstr ""
-
-msgid "Unknown file type, cannot display this attachment inline."
-msgstr ""
-
-msgid "You are not allowed to view attachments of this page."
+"Attachment link: %(attach)s\n"
+"Page link: %(page)s\n"
+msgstr ""
+
+msgid "FrontPage"
+msgstr ""
+
+msgid "RecentChanges"
+msgstr ""
+
+msgid "TitleIndex"
+msgstr ""
+
+msgid "WordIndex"
+msgstr ""
+
+msgid "FindPage"
+msgstr ""
+
+msgid "SiteNavigation"
+msgstr ""
+
+msgid "HelpContents"
+msgstr ""
+
+msgid "HelpOnFormatting"
+msgstr ""
+
+msgid "WikiLicense"
+msgstr ""
+
+msgid "MissingPage"
+msgstr ""
+
+msgid "MissingHomePage"
+msgstr ""
+
+msgid "Mon"
+msgstr ""
+
+msgid "Tue"
+msgstr ""
+
+msgid "Wed"
+msgstr ""
+
+msgid "Thu"
+msgstr ""
+
+msgid "Fri"
+msgstr ""
+
+msgid "Sat"
+msgstr ""
+
+msgid "Sun"
+msgstr ""
+
+msgid "AttachFile"
+msgstr ""
+
+msgid "DeletePage"
+msgstr ""
+
+msgid "LikePages"
+msgstr ""
+
+msgid "LocalSiteMap"
+msgstr ""
+
+msgid "RenamePage"
+msgstr ""
+
+msgid "SpellCheck"
+msgstr ""
+
+msgid "Discussion"
 msgstr ""
 
 #, python-format
-msgid "attachment:%(filename)s of %(pagename)s"
-msgstr ""
-
-#, python-format
-msgid "Full Link List for \"%s\""
-msgstr ""
-
-#, python-format
-msgid "Exactly one page like \"%s\" found, redirecting to page."
-msgstr ""
-
-#, python-format
-msgid "Pages like \"%s\""
+msgid "Invalid include arguments \"%s\"!"
 msgstr ""
 
 #, python-format
-msgid "%(matchcount)d %(matches)s for \"%(title)s\""
-msgstr ""
-
-#, python-format
-msgid "Inlined image: %(url)s"
+msgid "Nothing found for \"%s\"!"
 msgstr ""
 
 #, python-format
-msgid "Create new drawing \"%(filename)s (opens in new window)\""
+msgid "Upload of attachment '%(filename)s'."
 msgstr ""
 
 #, python-format
-msgid "Edit drawing %(filename)s (opens in new window)"
+msgid "Drawing '%(filename)s' saved."
 msgstr ""
 
 #, python-format
-msgid "Clickable drawing: %(filename)s"
-msgstr ""
-
-msgid "Toggle line numbers"
+msgid "%(mins)dm ago"
+msgstr ""
+
+msgid "(no bookmark set)"
+msgstr ""
+
+#, python-format
+msgid "(currently set to %s)"
+msgstr ""
+
+msgid "Delete bookmark"
+msgstr ""
+
+msgid "Set bookmark"
+msgstr ""
+
+msgid "[Bookmark reached]"
+msgstr ""
+
+msgid "Python Version"
+msgstr ""
+
+msgid "MoinMoin Version"
+msgstr ""
+
+#, python-format
+msgid "Release %s [Revision %s]"
+msgstr ""
+
+msgid "4Suite Version"
+msgstr ""
+
+msgid "Number of pages"
+msgstr ""
+
+msgid "Number of system pages"
+msgstr ""
+
+msgid "Accumulated page sizes"
+msgstr ""
+
+#, python-format
+msgid "Disk usage of %(data_dir)s/pages/"
+msgstr ""
+
+#, python-format
+msgid "Disk usage of %(data_dir)s/"
+msgstr ""
+
+msgid "Entries in edit log"
+msgstr ""
+
+msgid "NONE"
+msgstr ""
+
+msgid "Global extension macros"
+msgstr ""
+
+msgid "Local extension macros"
+msgstr ""
+
+msgid "Global extension actions"
+msgstr ""
+
+msgid "Local extension actions"
+msgstr ""
+
+msgid "Global parsers"
+msgstr ""
+
+msgid "Local extension parsers"
+msgstr ""
+
+msgid "Disabled"
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
+msgid "index available"
+msgstr ""
+
+msgid "index unavailable"
+msgstr ""
+
+msgid "Xapian and/or Python Xapian bindings not installed"
+msgstr ""
+
+msgid "Xapian search"
+msgstr ""
+
+msgid "Stemming for Xapian"
+msgstr ""
+
+msgid "Active threads"
+msgstr ""
+
+msgid "Include system pages"
+msgstr ""
+
+msgid "Exclude system pages"
+msgstr ""
+
+msgid "No wanted pages in this wiki."
+msgstr ""
+
+#, python-format
+msgid "No quotes on %(pagename)s."
+msgstr ""
+
+msgid "Markup"
+msgstr ""
+
+msgid "Display"
+msgstr ""
+
+msgid "Search Titles"
+msgstr ""
+
+msgid "Display context of search results"
+msgstr ""
+
+msgid "Case-sensitive searching"
+msgstr ""
+
+msgid "Search Text"
+msgstr ""
+
+msgid "No orphaned pages in this wiki."
+msgstr ""
+
+msgid "Search for items"
+msgstr ""
+
+msgid "containing all the following terms"
+msgstr ""
+
+msgid "containing one or more of the following terms"
+msgstr ""
+
+msgid "not containing the following terms"
+msgstr ""
+
+msgid "last modified since (e.g. last 2 weeks)"
+msgstr ""
+
+msgid "any category"
+msgstr ""
+
+msgid "any language"
+msgstr ""
+
+msgid "any mimetype"
+msgstr ""
+
+msgid "Categories"
+msgstr ""
+
+msgid "Language"
+msgstr ""
+
+msgid "File Type"
+msgstr ""
+
+msgid "Search only in titles"
+msgstr ""
+
+msgid "Case-sensitive search"
+msgstr ""
+
+msgid "Exclude underlay"
+msgstr ""
+
+msgid "No system items"
+msgstr ""
+
+msgid "Search in all page revisions"
+msgstr ""
+
+msgid "Go get it!"
+msgstr ""
+
+msgid "Contents"
+msgstr ""
+
+#, python-format
+msgid "Unsupported navigation scheme '%(scheme)s'!"
+msgstr ""
+
+msgid "No parent page found!"
+msgstr ""
+
+msgid "Wiki"
+msgstr ""
+
+msgid "Slideshow"
+msgstr ""
+
+msgid "Start"
+msgstr ""
+
+#, python-format
+msgid "Slide %(pos)d of %(size)d"
+msgstr ""
+
+msgid "Go To Page"
+msgstr ""
+
+msgid "File attachment browser"
+msgstr ""
+
+msgid "User account browser"
+msgstr ""
+
+#, python-format
+msgid ""
+"%(extension_name)s %(extension_type)s: Required argument %(argument_name)s "
+"missing."
+msgstr ""
+
+#, python-format
+msgid ""
+"%(extension_name)s %(extension_type)s: Invalid %(argument_name)s=%"
+"(argument_value)s!"
+msgstr ""
+
+#, python-format
+msgid ""
+"Current configuration does not allow embedding of the file %(file)s because "
+"of its mimetype %(mimetype)s."
+msgstr ""
+
+msgid "Embedded"
+msgstr ""
+
+msgid "Missing password. Please enter user name and password."
+msgstr ""
+
+#, python-format
+msgid "LDAP server %(server)s failed."
+msgstr ""
+
+msgid "Failed to connect to database."
+msgstr ""
+
+msgid "You need to log in."
+msgstr ""
+
+msgid ""
+"Please choose an account name now.\n"
+"If you choose an existing account name you will be asked for the\n"
+"password and be able to associate the account with your OpenID."
+msgstr ""
+
+msgid "Choose this name"
+msgstr ""
+
+msgid "This is not a valid username, choose a different one."
+msgstr ""
+
+msgid ""
+"The username you have chosen is already\n"
+"taken. If it is your username, enter your password below to associate\n"
+"the username with your OpenID. Otherwise, please choose a different\n"
+"username and leave the password field blank."
+msgstr ""
+
+msgid "Associate this name"
+msgstr ""
+
+msgid "Your account is now associated to your OpenID."
+msgstr ""
+
+msgid "The password you entered is not valid."
+msgstr ""
+
+msgid "Anonymous sessions need to be enabled for OpenID login."
+msgstr ""
+
+msgid "No OpenID."
+msgstr ""
+
+msgid ""
+"If you do not have an account yet, you can still log in with your OpenID and "
+"create one during login."
+msgstr ""
+
+#, python-format
+msgid ""
+"If you do not have an account, <a href=\"%(userprefslink)s\">you can create "
+"one now</a>. <a href=\"%(sendmypasswordlink)s\">Forgot your password?</a>"
+msgstr ""
+
+msgid "Could not contact botbouncer.com."
+msgstr ""
+
+msgid "User agent"
+msgstr ""
+
+msgid "Others"
+msgstr ""
+
+msgid "Distribution of User-Agent Types"
+msgstr ""
+
+msgid "Views/day"
+msgstr ""
+
+msgid "Edits/day"
+msgstr ""
+
+#, python-format
+msgid "%(chart_title)s for %(filterpage)s"
+msgstr ""
+
+msgid ""
+"green=view\n"
+"red=edit"
+msgstr ""
+
+msgid "date"
+msgstr ""
+
+msgid "# of hits"
+msgstr ""
+
+msgid "Page Size Distribution"
+msgstr ""
+
+msgid "page size upper bound [bytes]"
+msgstr ""
+
+msgid "# of pages of this size"
+msgstr ""
+
+msgid "Options --pages and --search are mutually exclusive!"
+msgstr ""
+
+msgid "You must specify an output file!"
+msgstr ""
+
+msgid "No pages specified using --pages or --search, assuming full package."
+msgstr ""
+
+msgid "Output file already exists! Cowardly refusing to continue!"
 msgstr ""
 
 #, python-format
@@ -2674,3 +2521,156 @@
 
 msgid "Login and try again."
 msgstr ""
+
+#, python-format
+msgid ""
+"Sorry, can not save page because \"%(content)s\" is not allowed in this wiki."
+msgstr ""
+
+msgid "DeleteCache"
+msgstr ""
+
+#, python-format
+msgid "(cached %s)"
+msgstr ""
+
+msgid "Or try one of these actions:"
+msgstr ""
+
+msgid "Unsubscribe"
+msgstr ""
+
+msgid "Home"
+msgstr ""
+
+msgid "[RSS]"
+msgstr ""
+
+msgid "[DELETED]"
+msgstr ""
+
+msgid "[UPDATED]"
+msgstr ""
+
+msgid "[RENAMED]"
+msgstr ""
+
+msgid "[CONFLICT]"
+msgstr ""
+
+msgid "[NEW]"
+msgstr ""
+
+msgid "[DIFF]"
+msgstr ""
+
+msgid "[BOTTOM]"
+msgstr ""
+
+msgid "[TOP]"
+msgstr ""
+
+msgid "Click to do a full-text search for this title"
+msgstr ""
+
+msgid "Logout"
+msgstr ""
+
+msgid "Clear message"
+msgstr ""
+
+#, python-format
+msgid "last edited %(time)s by %(editor)s"
+msgstr ""
+
+#, python-format
+msgid "last modified %(time)s"
+msgstr ""
+
+msgid "Search:"
+msgstr ""
+
+msgid "Text"
+msgstr ""
+
+msgid "Titles"
+msgstr ""
+
+msgid "Search"
+msgstr ""
+
+msgid "More Actions:"
+msgstr ""
+
+msgid "------------------------"
+msgstr ""
+
+msgid "Raw Text"
+msgstr ""
+
+msgid "Print View"
+msgstr ""
+
+msgid "Delete Cache"
+msgstr ""
+
+msgid "Delete Page"
+msgstr ""
+
+msgid "Like Pages"
+msgstr ""
+
+msgid "Local Site Map"
+msgstr ""
+
+msgid "My Pages"
+msgstr ""
+
+msgid "Subscribe User"
+msgstr ""
+
+msgid "Remove Spam"
+msgstr ""
+
+msgid "Package Pages"
+msgstr ""
+
+msgid "Render as Docbook"
+msgstr ""
+
+msgid "Sync Pages"
+msgstr ""
+
+msgid "Do"
+msgstr ""
+
+msgid "Comments"
+msgstr ""
+
+msgid "Edit (Text)"
+msgstr ""
+
+msgid "Edit (GUI)"
+msgstr ""
+
+msgid "Immutable Page"
+msgstr ""
+
+msgid "Remove Link"
+msgstr ""
+
+msgid "Add Link"
+msgstr ""
+
+#, python-format
+msgid "Show %s days."
+msgstr ""
+
+msgid "Wiki Markup"
+msgstr ""
+
+msgid "Page"
+msgstr ""
+
+msgid "User"
+msgstr ""
--- a/MoinMoin/i18n/en.MoinMoin.po	Sun Jul 27 17:40:11 2008 +0200
+++ b/MoinMoin/i18n/en.MoinMoin.po	Mon Jul 28 12:04:00 2008 +0200
@@ -11,7 +11,7 @@
 msgstr ""
 "Project-Id-Version: MoinMoin 1.5\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-06-21 22:47+0200\n"
+"POT-Creation-Date: 2008-07-20 14:15+0200\n"
 "PO-Revision-Date: 2005-01-8 00:00+0100\n"
 "Last-Translator: Thomas Waldmann <tw-public@gmx.de>\n"
 "Language-Team: German <moin-devel@lists.sourceforge.net>\n"
@@ -23,28 +23,93 @@
 "X-HasWikiMarkup: True\n"
 "X-Direction: ltr\n"
 
-msgid "<unknown>"
+#, python-format
+msgid "Invalid highlighting regular expression \"%(regex)s\": %(error)s"
+msgstr ""
+
+msgid ""
+"The backed up content of this page is deprecated and will not be included in "
+"search results!"
 msgstr ""
 
 #, python-format
-msgid ""
-"Login Name: %s\n"
-"\n"
-"Password recovery token: %s\n"
-"\n"
-"Password reset URL: %s/?action=recoverpass&name=%s&token=%s\n"
-msgstr ""
-
-msgid ""
-"Somebody has requested to email you a password recovery token.\n"
-"\n"
-"If you lost your password, please go to the password reset URL below or\n"
-"go to the password recovery page again and enter your username and the\n"
-"recovery token.\n"
+msgid "Revision %(rev)d as of %(date)s"
 msgstr ""
 
 #, python-format
-msgid "[%(sitename)s] Your wiki account data"
+msgid "Redirected from page \"%(page)s\""
+msgstr ""
+
+#, python-format
+msgid "This page redirects to page \"%(page)s\""
+msgstr ""
+
+msgid "Create New Page"
+msgstr ""
+
+msgid "You are not allowed to view this page."
+msgstr ""
+
+#, python-format
+msgid "Argument \"%s\" must be a boolean value, not \"%s\""
+msgstr ""
+
+#, python-format
+msgid "Argument must be a boolean value, not \"%s\""
+msgstr ""
+
+#, python-format
+msgid "Argument \"%s\" must be an integer value, not \"%s\""
+msgstr ""
+
+#, python-format
+msgid "Argument must be an integer value, not \"%s\""
+msgstr ""
+
+#, python-format
+msgid "Argument \"%s\" must be a floating point value, not \"%s\""
+msgstr ""
+
+#, python-format
+msgid "Argument must be a floating point value, not \"%s\""
+msgstr ""
+
+#, python-format
+msgid "Argument \"%s\" must be a complex value, not \"%s\""
+msgstr ""
+
+#, python-format
+msgid "Argument must be a complex value, not \"%s\""
+msgstr ""
+
+#, python-format
+msgid "Argument \"%s\" must be one of \"%s\", not \"%s\""
+msgstr ""
+
+#, python-format
+msgid "Argument must be one of \"%s\", not \"%s\""
+msgstr ""
+
+msgid "Too many arguments"
+msgstr ""
+
+msgid "Cannot have arguments without name following named arguments"
+msgstr ""
+
+#, python-format
+msgid "Argument \"%s\" is required"
+msgstr ""
+
+#, python-format
+msgid "No argument named \"%s\""
+msgstr ""
+
+#, python-format
+msgid "Expected \"=\" to follow \"%(token)s\""
+msgstr ""
+
+#, python-format
+msgid "Expected a value for key \"%(token)s\""
 msgstr ""
 
 msgid "You are not allowed to edit this page."
@@ -165,65 +230,63 @@
 msgstr ""
 
 #, python-format
-msgid "Argument \"%s\" must be a boolean value, not \"%s\""
-msgstr ""
-
-#, python-format
-msgid "Argument must be a boolean value, not \"%s\""
-msgstr ""
-
-#, python-format
-msgid "Argument \"%s\" must be an integer value, not \"%s\""
-msgstr ""
-
-#, python-format
-msgid "Argument must be an integer value, not \"%s\""
-msgstr ""
-
-#, python-format
-msgid "Argument \"%s\" must be a floating point value, not \"%s\""
-msgstr ""
-
-#, python-format
-msgid "Argument must be a floating point value, not \"%s\""
-msgstr ""
-
-#, python-format
-msgid "Argument \"%s\" must be a complex value, not \"%s\""
+msgid "The package needs a newer version of MoinMoin (at least %s)."
+msgstr ""
+
+msgid "The theme name is not set."
+msgstr ""
+
+msgid "Installing theme files is only supported for standalone type servers."
 msgstr ""
 
 #, python-format
-msgid "Argument must be a complex value, not \"%s\""
-msgstr ""
-
-#, python-format
-msgid "Argument \"%s\" must be one of \"%s\", not \"%s\""
+msgid "Installation of '%(filename)s' failed."
 msgstr ""
 
 #, python-format
-msgid "Argument must be one of \"%s\", not \"%s\""
-msgstr ""
-
-msgid "Too many arguments"
-msgstr ""
-
-msgid "Cannot have arguments without name following named arguments"
+msgid "The file %s is not a MoinMoin package file."
 msgstr ""
 
 #, python-format
-msgid "Argument \"%s\" is required"
+msgid "The page %s does not exist."
+msgstr ""
+
+msgid "Invalid package file header."
+msgstr ""
+
+msgid "Package file format unsupported."
 msgstr ""
 
 #, python-format
-msgid "No argument named \"%s\""
+msgid "Unknown function %(func)s in line %(lineno)i."
 msgstr ""
 
 #, python-format
-msgid "Expected \"=\" to follow \"%(token)s\""
+msgid "The file %s was not found in the package."
+msgstr ""
+
+msgid "<unknown>"
 msgstr ""
 
 #, python-format
-msgid "Expected a value for key \"%(token)s\""
+msgid ""
+"Login Name: %s\n"
+"\n"
+"Password recovery token: %s\n"
+"\n"
+"Password reset URL: %s/?action=recoverpass&name=%s&token=%s\n"
+msgstr ""
+
+msgid ""
+"Somebody has requested to email you a password recovery token.\n"
+"\n"
+"If you lost your password, please go to the password reset URL below or\n"
+"go to the password recovery page again and enter your username and the\n"
+"recovery token.\n"
+msgstr ""
+
+#, python-format
+msgid "[%(sitename)s] Your wiki account data"
 msgstr ""
 
 msgid "Your changes are not saved!"
@@ -367,84 +430,6 @@
 msgstr ""
 
 #, python-format
-msgid "The package needs a newer version of MoinMoin (at least %s)."
-msgstr ""
-
-msgid "The theme name is not set."
-msgstr ""
-
-msgid "Installing theme files is only supported for standalone type servers."
-msgstr ""
-
-#, python-format
-msgid "Installation of '%(filename)s' failed."
-msgstr ""
-
-#, python-format
-msgid "The file %s is not a MoinMoin package file."
-msgstr ""
-
-#, python-format
-msgid "The page %s does not exist."
-msgstr ""
-
-msgid "Invalid package file header."
-msgstr ""
-
-msgid "Package file format unsupported."
-msgstr ""
-
-#, python-format
-msgid "Unknown function %(func)s in line %(lineno)i."
-msgstr ""
-
-#, python-format
-msgid "The file %s was not found in the package."
-msgstr ""
-
-#, python-format
-msgid "Invalid highlighting regular expression \"%(regex)s\": %(error)s"
-msgstr ""
-
-msgid ""
-"The backed up content of this page is deprecated and will not be included in "
-"search results!"
-msgstr ""
-
-#, python-format
-msgid "Revision %(rev)d as of %(date)s"
-msgstr ""
-
-#, python-format
-msgid "Redirected from page \"%(page)s\""
-msgstr ""
-
-#, python-format
-msgid "This page redirects to page \"%(page)s\""
-msgstr ""
-
-msgid "Create New Page"
-msgstr ""
-
-msgid "You are not allowed to view this page."
-msgstr ""
-
-msgid "[all]"
-msgstr ""
-
-msgid "[not empty]"
-msgstr ""
-
-msgid "[empty]"
-msgstr ""
-
-msgid "filter"
-msgstr ""
-
-msgid "about"
-msgstr ""
-
-#, python-format
 msgid ""
 "Results %(bs)s%(hitsFrom)d - %(hitsTo)d%(be)s of %(aboutHits)s %(bs)s%(hits)d"
 "%(be)s results out of about %(pages)d pages."
@@ -475,503 +460,19 @@
 msgid "matches"
 msgstr ""
 
-msgid "Line"
-msgstr ""
-
-msgid "No differences found!"
-msgstr ""
-
-msgid "Deletions are marked like this."
-msgstr ""
-
-msgid "Additions are marked like this."
-msgstr ""
-
-msgid "Name"
-msgstr ""
-
-msgid "Password"
-msgstr ""
-
-msgid "OpenID"
-msgstr ""
-
-msgid "Login"
-msgstr ""
-
-msgid "Username"
-msgstr ""
-
-msgid "Member of Groups"
-msgstr ""
-
-msgid "Email"
-msgstr ""
-
-msgid "Jabber"
-msgstr ""
-
-msgid "Action"
-msgstr ""
-
-msgid "Enable user"
-msgstr ""
-
-msgid "disabled"
-msgstr ""
-
-msgid "Disable user"
-msgstr ""
-
-msgid "Mail account data"
-msgstr ""
-
-msgid "Missing password. Please enter user name and password."
-msgstr ""
-
-#, python-format
-msgid "LDAP server %(server)s failed."
-msgstr ""
-
-msgid "You need to log in."
-msgstr ""
-
-#, python-format
-msgid ""
-"If you do not have an account, <a href=\"%(userprefslink)s\">you can create "
-"one now</a>. <a href=\"%(sendmypasswordlink)s\">Forgot your password?</a>"
-msgstr ""
-
-msgid ""
-"Please choose an account name now.\n"
-"If you choose an existing account name you will be asked for the\n"
-"password and be able to associate the account with your OpenID."
-msgstr ""
-
-msgid "Choose this name"
-msgstr ""
-
-msgid "This is not a valid username, choose a different one."
-msgstr ""
-
-msgid ""
-"The username you have chosen is already\n"
-"taken. If it is your username, enter your password below to associate\n"
-"the username with your OpenID. Otherwise, please choose a different\n"
-"username and leave the password field blank."
-msgstr ""
-
-msgid "Associate this name"
-msgstr ""
-
-#, python-format
-msgid "OpenID error: %s."
-msgstr ""
-
-msgid "Verification canceled."
-msgstr ""
-
-msgid "OpenID failure."
-msgstr ""
-
-msgid "Your account is now associated to your OpenID."
-msgstr ""
-
-msgid "The password you entered is not valid."
-msgstr ""
-
-msgid "OpenID verification requires that you click this button:"
-msgstr ""
-
-msgid "Anonymous sessions need to be enabled for OpenID login."
-msgstr ""
-
-msgid "Failed to resolve OpenID."
-msgstr ""
-
-msgid "OpenID discovery failure, not a valid OpenID."
-msgstr ""
-
-msgid "No OpenID."
-msgstr ""
-
-msgid ""
-"If you do not have an account yet, you can still log in with your OpenID and "
-"create one during login."
-msgstr ""
-
-msgid "Failed to connect to database."
-msgstr ""
-
-msgid "Could not contact botbouncer.com."
-msgstr ""
-
-msgid "Wiki"
-msgstr ""
-
-msgid "Page"
-msgstr ""
-
-msgid "User"
-msgstr ""
-
-msgid "Diffs"
-msgstr ""
-
-msgid "Info"
-msgstr ""
-
-msgid "Edit"
-msgstr ""
-
-msgid "Unsubscribe"
-msgstr ""
-
-msgid "Subscribe"
-msgstr ""
-
-msgid "Raw"
-msgstr ""
-
-msgid "XML"
-msgstr ""
-
-msgid "Print"
-msgstr ""
-
-msgid "View"
-msgstr ""
-
-msgid "Home"
-msgstr ""
-
-msgid "Up"
-msgstr ""
-
-msgid "[RSS]"
-msgstr ""
-
-msgid "[DELETED]"
-msgstr ""
-
-msgid "[UPDATED]"
-msgstr ""
-
-msgid "[RENAMED]"
-msgstr ""
-
-msgid "[CONFLICT]"
-msgstr ""
-
-msgid "[NEW]"
-msgstr ""
-
-msgid "[DIFF]"
-msgstr ""
-
-msgid "[BOTTOM]"
-msgstr ""
-
-msgid "[TOP]"
-msgstr ""
-
-msgid "Click to do a full-text search for this title"
-msgstr ""
-
-msgid "Settings"
-msgstr ""
-
-msgid "Logout"
-msgstr ""
-
-msgid "Clear message"
-msgstr ""
-
-#, python-format
-msgid "last edited %(time)s by %(editor)s"
-msgstr ""
-
-#, python-format
-msgid "last modified %(time)s"
-msgstr ""
-
-msgid "Search:"
-msgstr ""
-
-msgid "Text"
-msgstr ""
-
-msgid "Titles"
-msgstr ""
-
-msgid "Search"
-msgstr ""
-
-msgid "More Actions:"
-msgstr ""
-
-msgid "------------------------"
-msgstr ""
-
-msgid "Raw Text"
-msgstr ""
-
-msgid "Print View"
-msgstr ""
-
-msgid "Delete Cache"
-msgstr ""
-
-msgid "Rename Page"
-msgstr ""
-
-msgid "Copy Page"
-msgstr ""
-
-msgid "Delete Page"
-msgstr ""
-
-msgid "Like Pages"
-msgstr ""
-
-msgid "Local Site Map"
-msgstr ""
-
-msgid "My Pages"
-msgstr ""
-
-msgid "Subscribe User"
-msgstr ""
-
-msgid "Remove Spam"
-msgstr ""
-
-msgid "Revert to this revision"
-msgstr ""
-
-msgid "Package Pages"
-msgstr ""
-
-msgid "Render as Docbook"
-msgstr ""
-
-msgid "Sync Pages"
-msgstr ""
-
-msgid "Do"
-msgstr ""
-
-msgid "Comments"
-msgstr ""
-
-msgid "Edit (Text)"
-msgstr ""
-
-msgid "Edit (GUI)"
-msgstr ""
-
-msgid "Immutable Page"
-msgstr ""
-
-msgid "Remove Link"
-msgstr ""
-
-msgid "Add Link"
-msgstr ""
-
-msgid "Attachments"
-msgstr ""
-
-#, python-format
-msgid "Show %s days."
-msgstr ""
-
-msgid "Wiki Markup"
-msgstr ""
-
-msgid "DeleteCache"
-msgstr ""
-
-#, python-format
-msgid "(cached %s)"
-msgstr ""
-
-msgid "Or try one of these actions:"
-msgstr ""
-
-msgid "Date"
-msgstr ""
-
-msgid "From"
-msgstr ""
-
-msgid "To"
-msgstr ""
-
-msgid "Content"
-msgstr ""
-
-#, python-format
-msgid "Connection to mailserver '%(server)s' failed: %(reason)s"
-msgstr ""
-
-msgid "Mail not sent"
-msgstr ""
-
-msgid "Mail sent OK"
-msgstr ""
-
-msgid ""
-"Rendering of reStructured text is not possible, please install Docutils."
-msgstr ""
-
-msgid "**Maximum number of allowed includes exceeded**"
-msgstr ""
-
-#, python-format
-msgid "**You are not allowed to read the page: %s**"
-msgstr ""
-
-#, python-format
-msgid "**Could not find the referenced page: %s**"
-msgstr ""
-
-msgid "XSLT option disabled, please look at HelpOnConfiguration."
-msgstr ""
-
-msgid "XSLT processing is not available, please install 4suite 1.x."
-msgstr ""
-
-#, python-format
-msgid "%(errortype)s processing error"
-msgstr ""
-
-#, python-format
-msgid "Expected \"%(wanted)s\" after \"%(key)s\", got \"%(token)s\""
-msgstr ""
-
-#, python-format
-msgid "Expected an integer \"%(key)s\" before \"%(token)s\""
-msgstr ""
-
-#, python-format
-msgid "Expected an integer \"%(arg)s\" after \"%(key)s\""
-msgstr ""
-
-#, python-format
-msgid "Expected a color value \"%(arg)s\" after \"%(key)s\""
-msgstr ""
-
-msgid "FrontPage"
-msgstr ""
-
-msgid "RecentChanges"
-msgstr ""
-
-msgid "TitleIndex"
-msgstr ""
-
-msgid "WordIndex"
-msgstr ""
-
-msgid "FindPage"
-msgstr ""
-
-msgid "SiteNavigation"
-msgstr ""
-
-msgid "HelpContents"
-msgstr ""
-
-msgid "HelpOnFormatting"
-msgstr ""
-
-msgid "WikiLicense"
-msgstr ""
-
-msgid "MissingPage"
-msgstr ""
-
-msgid "MissingHomePage"
-msgstr ""
-
-msgid "Mon"
-msgstr ""
-
-msgid "Tue"
-msgstr ""
-
-msgid "Wed"
-msgstr ""
-
-msgid "Thu"
-msgstr ""
-
-msgid "Fri"
-msgstr ""
-
-msgid "Sat"
-msgstr ""
-
-msgid "Sun"
-msgstr ""
-
-msgid "AttachFile"
-msgstr ""
-
-msgid "DeletePage"
-msgstr ""
-
-msgid "LikePages"
-msgstr ""
-
-msgid "LocalSiteMap"
-msgstr ""
-
-msgid "RenamePage"
-msgstr ""
-
-msgid "SpellCheck"
-msgstr ""
-
-msgid "Discussion"
-msgstr ""
-
-#, python-format
-msgid ""
-"Sorry, can not save page because \"%(content)s\" is not allowed in this wiki."
-msgstr ""
-
-msgid "Notification"
-msgstr ""
-
-msgid "Notification settings saved!"
-msgstr ""
-
-msgid "'''Email'''"
-msgstr ""
-
-msgid "'''Jabber'''"
-msgstr ""
-
-msgid "'''Event type'''"
-msgstr ""
-
-msgid "Select the events you want to be notified about."
-msgstr ""
-
-msgid ""
-"Before you can be notified, you need to provide a way to contact you in the "
-"general preferences."
-msgstr ""
-
-msgid "Subscribed events"
-msgstr ""
-
-msgid "Subscribed wiki pages<<BR>>(one regex per line)"
-msgstr ""
-
-msgid "Save"
+msgid "about"
+msgstr ""
+
+msgid "[all]"
+msgstr ""
+
+msgid "[not empty]"
+msgstr ""
+
+msgid "[empty]"
+msgstr ""
+
+msgid "filter"
 msgstr ""
 
 msgid "Change password"
@@ -993,60 +494,12 @@
 msgid "To change your password, enter a new password twice."
 msgstr ""
 
+msgid "Password"
+msgstr ""
+
 msgid "Password repeat"
 msgstr ""
 
-msgid "Switch user"
-msgstr ""
-
-msgid "No user selected"
-msgstr ""
-
-msgid ""
-"You can now change the settings of the selected user account; log out to get "
-"back to your account."
-msgstr ""
-
-msgid "You are the only user."
-msgstr ""
-
-msgid ""
-"As a superuser, you can temporarily assume the identity of another user."
-msgstr ""
-
-msgid "Select User"
-msgstr ""
-
-msgid "OpenID settings"
-msgstr ""
-
-msgid "Cannot remove all OpenIDs."
-msgstr ""
-
-msgid "The selected OpenIDs have been removed."
-msgstr ""
-
-msgid "No OpenID given."
-msgstr ""
-
-msgid "OpenID is already present."
-msgstr ""
-
-msgid "This OpenID is already used for another account."
-msgstr ""
-
-msgid "OpenID added successfully."
-msgstr ""
-
-msgid "Current OpenIDs"
-msgstr ""
-
-msgid "Remove selected"
-msgstr ""
-
-msgid "Add OpenID"
-msgstr ""
-
 msgid "Preferences"
 msgstr ""
 
@@ -1093,6 +546,9 @@
 msgid "free choice"
 msgstr ""
 
+msgid "Save"
+msgstr ""
+
 msgid "Preferred theme"
 msgstr ""
 
@@ -1123,6 +579,56 @@
 msgid "Quick links"
 msgstr ""
 
+msgid "Notification"
+msgstr ""
+
+msgid "Notification settings saved!"
+msgstr ""
+
+msgid "'''Email'''"
+msgstr ""
+
+msgid "'''Jabber'''"
+msgstr ""
+
+msgid "'''Event type'''"
+msgstr ""
+
+msgid "Select the events you want to be notified about."
+msgstr ""
+
+msgid ""
+"Before you can be notified, you need to provide a way to contact you in the "
+"general preferences."
+msgstr ""
+
+msgid "Subscribed events"
+msgstr ""
+
+msgid "Subscribed wiki pages<<BR>>(one regex per line)"
+msgstr ""
+
+msgid "Switch user"
+msgstr ""
+
+msgid "No user selected"
+msgstr ""
+
+msgid ""
+"You can now change the settings of the selected user account; log out to get "
+"back to your account."
+msgstr ""
+
+msgid "You are the only user."
+msgstr ""
+
+msgid ""
+"As a superuser, you can temporarily assume the identity of another user."
+msgstr ""
+
+msgid "Select User"
+msgstr ""
+
 msgid "OpenID server"
 msgstr ""
 
@@ -1132,182 +638,130 @@
 msgid "Trusted websites"
 msgstr ""
 
-#, python-format
-msgid ""
-"Dear Wiki user,\n"
-"\n"
-"You have subscribed to a wiki page or wiki category on \"%(sitename)s\" for "
-"change notification.\n"
-"\n"
-"The \"%(pagename)s\" page has been changed by %(editor)s:\n"
-msgstr ""
-
-msgid "New page:\n"
-msgstr ""
-
-msgid "No differences found!\n"
-msgstr ""
-
-#, python-format
-msgid ""
-"Dear wiki user,\n"
-"\n"
-"You have subscribed to a wiki page \"%(sitename)s\" for change "
-"notification.\n"
-"\n"
-"The page \"%(pagename)s\" has been deleted by %(editor)s:\n"
-"\n"
-msgstr ""
-
-#, python-format
-msgid ""
-"Dear wiki user,\n"
-"\n"
-"You have subscribed to a wiki page \"%(sitename)s\" for change "
-"notification.\n"
-"\n"
-"The page \"%(pagename)s\" has been renamed from \"%(oldname)s\" by %(editor)"
-"s:\n"
-msgstr ""
-
-#, python-format
-msgid "New user account created on %(sitename)s"
-msgstr ""
-
-#, python-format
-msgid ""
-"Dear Superuser, a new user has just been created. Details follow:\n"
-"\n"
-"    User name: %(username)s\n"
-"    Email address: %(useremail)s"
-msgstr ""
-
-#, python-format
-msgid "New attachment added to page %(pagename)s on %(sitename)s"
+msgid "Remove selected"
+msgstr ""
+
+msgid "OpenID settings"
+msgstr ""
+
+msgid "Cannot remove all OpenIDs."
+msgstr ""
+
+msgid "The selected OpenIDs have been removed."
+msgstr ""
+
+msgid "No OpenID given."
+msgstr ""
+
+msgid "OpenID is already present."
+msgstr ""
+
+msgid "Failed to resolve OpenID."
+msgstr ""
+
+msgid "OpenID discovery failure, not a valid OpenID."
 msgstr ""
 
 #, python-format
+msgid "OpenID error: %s."
+msgstr ""
+
+msgid "Verification canceled."
+msgstr ""
+
+msgid "This OpenID is already used for another account."
+msgstr ""
+
+msgid "OpenID added successfully."
+msgstr ""
+
+msgid "OpenID failure."
+msgstr ""
+
+msgid "Current OpenIDs"
+msgstr ""
+
+msgid "Add OpenID"
+msgstr ""
+
+msgid "OpenID verification requires that you click this button:"
+msgstr ""
+
+msgid "Username"
+msgstr ""
+
+msgid "Member of Groups"
+msgstr ""
+
+msgid "Email"
+msgstr ""
+
+msgid "Jabber"
+msgstr ""
+
+msgid "Action"
+msgstr ""
+
+msgid "Enable user"
+msgstr ""
+
+msgid "disabled"
+msgstr ""
+
+msgid "Disable user"
+msgstr ""
+
+msgid "Mail account data"
+msgstr ""
+
+msgid "Name"
+msgstr ""
+
+msgid "OpenID"
+msgstr ""
+
+msgid "Login"
+msgstr ""
+
 msgid ""
-"Dear Wiki user,\n"
-"\n"
-"You have subscribed to a wiki page \"%(page_name)s\" for change "
-"notification. An attachment has been added to that page by %(editor)s. "
-"Following detailed information is available:\n"
-"\n"
-"Attachment name: %(attach_name)s\n"
-"Attachment size: %(attach_size)s\n"
-msgstr ""
-
-msgid "Page has been modified"
-msgstr ""
-
-msgid "Page has been modified in a trivial fashion"
-msgstr ""
-
-msgid "Page has been renamed"
-msgstr ""
-
-msgid "Page has been deleted"
-msgstr ""
-
-msgid "Page has been copied"
-msgstr ""
-
-msgid "A new attachment has been added"
-msgstr ""
-
-msgid "A page has been reverted to a previous state"
-msgstr ""
-
-msgid "A user has subscribed to a page"
-msgstr ""
-
-msgid "A new account has been created"
-msgstr ""
-
-#, python-format
-msgid "[%(sitename)s] %(trivial)sUpdate of \"%(pagename)s\" by %(username)s"
-msgstr ""
-
-msgid "Trivial "
+"Rendering of reStructured text is not possible, please install Docutils."
+msgstr ""
+
+msgid "**Maximum number of allowed includes exceeded**"
 msgstr ""
 
 #, python-format
-msgid ""
-"Attachment link: %(attach)s\n"
-"Page link: %(page)s\n"
-msgstr ""
-
-msgid "Attachment link"
-msgstr ""
-
-msgid "Page link"
-msgstr ""
-
-msgid "Changed page"
-msgstr ""
-
-msgid "Page changed"
-msgstr ""
-
-msgid "Options --pages and --search are mutually exclusive!"
-msgstr ""
-
-msgid "You must specify an output file!"
-msgstr ""
-
-msgid "No pages specified using --pages or --search, assuming full package."
-msgstr ""
-
-msgid "Output file already exists! Cowardly refusing to continue!"
-msgstr ""
-
-msgid "Language"
-msgstr ""
-
-msgid "Others"
-msgstr ""
-
-msgid "Charts are not available!"
-msgstr ""
-
-msgid "Page Size Distribution"
-msgstr ""
-
-msgid "page size upper bound [bytes]"
-msgstr ""
-
-msgid "# of pages of this size"
-msgstr ""
-
-msgid "Views/day"
-msgstr ""
-
-msgid "Edits/day"
-msgstr ""
-
-msgid "Page hits and edits"
+msgid "**You are not allowed to read the page: %s**"
 msgstr ""
 
 #, python-format
-msgid "%(chart_title)s for %(filterpage)s"
-msgstr ""
-
-msgid ""
-"green=view\n"
-"red=edit"
-msgstr ""
-
-msgid "date"
-msgstr ""
-
-msgid "# of hits"
-msgstr ""
-
-msgid "User agent"
-msgstr ""
-
-msgid "Distribution of User-Agent Types"
+msgid "**Could not find the referenced page: %s**"
+msgstr ""
+
+msgid "XSLT option disabled, please look at HelpOnConfiguration."
+msgstr ""
+
+msgid "XSLT processing is not available, please install 4suite 1.x."
+msgstr ""
+
+#, python-format
+msgid "%(errortype)s processing error"
+msgstr ""
+
+#, python-format
+msgid "Expected \"%(wanted)s\" after \"%(key)s\", got \"%(token)s\""
+msgstr ""
+
+#, python-format
+msgid "Expected an integer \"%(key)s\" before \"%(token)s\""
+msgstr ""
+
+#, python-format
+msgid "Expected an integer \"%(arg)s\" after \"%(key)s\""
+msgstr ""
+
+#, python-format
+msgid "Expected a color value \"%(arg)s\" after \"%(key)s\""
 msgstr ""
 
 msgid ""
@@ -1365,9 +819,36 @@
 "(!) For more help, see HelpOnEditing or HelpOnCreoleSyntax.\n"
 msgstr ""
 
+msgid "Diffs"
+msgstr ""
+
+msgid "Info"
+msgstr ""
+
+msgid "Edit"
+msgstr ""
+
 msgid "UnSubscribe"
 msgstr ""
 
+msgid "Subscribe"
+msgstr ""
+
+msgid "Raw"
+msgstr ""
+
+msgid "XML"
+msgstr ""
+
+msgid "Print"
+msgstr ""
+
+msgid "View"
+msgstr ""
+
+msgid "Up"
+msgstr ""
+
 msgid "Publish my email (not my wiki homepage) in author info"
 msgstr ""
 
@@ -1422,33 +903,27 @@
 msgid "Editor size"
 msgstr ""
 
-msgid "File attachment browser"
-msgstr ""
-
-msgid "User account browser"
-msgstr ""
-
 #, python-format
-msgid "Invalid include arguments \"%s\"!"
+msgid "Upload new attachment \"%(filename)s\""
 msgstr ""
 
 #, python-format
-msgid "Nothing found for \"%s\"!"
-msgstr ""
-
-msgid "edit"
+msgid "Inlined image: %(url)s"
 msgstr ""
 
 #, python-format
-msgid "Upload of attachment '%(filename)s'."
+msgid "Create new drawing \"%(filename)s (opens in new window)\""
 msgstr ""
 
 #, python-format
-msgid "Attachment '%(filename)s' deleted."
+msgid "Edit drawing %(filename)s (opens in new window)"
 msgstr ""
 
 #, python-format
-msgid "Drawing '%(filename)s' saved."
+msgid "Clickable drawing: %(filename)s"
+msgstr ""
+
+msgid "Toggle line numbers"
 msgstr ""
 
 #, python-format
@@ -1459,184 +934,475 @@
 msgid "Renamed from '%(oldpagename)s'."
 msgstr ""
 
-#, python-format
-msgid "%(mins)dm ago"
-msgstr ""
-
-msgid "(no bookmark set)"
-msgstr ""
-
-#, python-format
-msgid "(currently set to %s)"
-msgstr ""
-
-msgid "Delete bookmark"
-msgstr ""
-
-msgid "Set bookmark"
-msgstr ""
-
-msgid "[Bookmark reached]"
-msgstr ""
-
-msgid "Contents"
-msgstr ""
-
-msgid "Include system pages"
-msgstr ""
-
-msgid "Exclude system pages"
-msgstr ""
-
-msgid "Go To Page"
-msgstr ""
-
-msgid "No orphaned pages in this wiki."
-msgstr ""
-
-msgid "Python Version"
-msgstr ""
-
-msgid "MoinMoin Version"
-msgstr ""
-
-#, python-format
-msgid "Release %s [Revision %s]"
-msgstr ""
-
-msgid "4Suite Version"
-msgstr ""
-
-msgid "Number of pages"
-msgstr ""
-
-msgid "Number of system pages"
-msgstr ""
-
-msgid "Accumulated page sizes"
-msgstr ""
-
-#, python-format
-msgid "Disk usage of %(data_dir)s/pages/"
+msgid "You are now logged out."
+msgstr ""
+
+msgid "You are not allowed to use this action."
+msgstr ""
+
+msgid "Delete"
+msgstr ""
+
+msgid "This page is already deleted or was never created!"
+msgstr ""
+
+msgid "Delete all /subpages too?"
+msgstr ""
+
+msgid "Optional reason for the deletion"
+msgstr ""
+
+msgid "Really delete this page?"
 msgstr ""
 
 #, python-format
-msgid "Disk usage of %(data_dir)s/"
-msgstr ""
-
-msgid "Entries in edit log"
-msgstr ""
-
-msgid "NONE"
-msgstr ""
-
-msgid "Global extension macros"
-msgstr ""
-
-msgid "Local extension macros"
-msgstr ""
-
-msgid "Global extension actions"
-msgstr ""
-
-msgid "Local extension actions"
-msgstr ""
-
-msgid "Global parsers"
-msgstr ""
-
-msgid "Local extension parsers"
-msgstr ""
-
-msgid "Disabled"
-msgstr ""
-
-msgid "Enabled"
-msgstr ""
-
-msgid "index available"
-msgstr ""
-
-msgid "index unavailable"
-msgstr ""
-
-msgid "Xapian and/or Python Xapian bindings not installed"
-msgstr ""
-
-msgid "N/A"
-msgstr ""
-
-msgid "Xapian search"
-msgstr ""
-
-msgid "Stemming for Xapian"
-msgstr ""
-
-msgid "Active threads"
-msgstr ""
-
-msgid "Search for items"
-msgstr ""
-
-msgid "containing all the following terms"
-msgstr ""
-
-msgid "containing one or more of the following terms"
-msgstr ""
-
-msgid "not containing the following terms"
-msgstr ""
-
-msgid "last modified since (e.g. last 2 weeks)"
-msgstr ""
-
-msgid "any category"
-msgstr ""
-
-msgid "any language"
-msgstr ""
-
-msgid "any mimetype"
-msgstr ""
-
-msgid "Categories"
-msgstr ""
-
-msgid "File Type"
-msgstr ""
-
-msgid "Search only in titles"
-msgstr ""
-
-msgid "Case-sensitive search"
-msgstr ""
-
-msgid "Exclude underlay"
-msgstr ""
-
-msgid "No system items"
-msgstr ""
-
-msgid "Search in all page revisions"
-msgstr ""
-
-msgid "Go get it!"
+msgid "[%d attachments]"
 msgstr ""
 
 #, python-format
-msgid "No quotes on %(pagename)s."
-msgstr ""
-
-msgid "Search Titles"
-msgstr ""
-
-msgid "Display context of search results"
-msgstr ""
-
-msgid "Case-sensitive searching"
-msgstr ""
-
-msgid "Search Text"
+msgid ""
+"There are <a href=\"%(link)s\">%(count)s attachment(s)</a> stored for this "
+"page."
+msgstr ""
+
+msgid "Filename of attachment not specified!"
+msgstr ""
+
+#, python-format
+msgid "Attachment '%(filename)s' does not exist!"
+msgstr ""
+
+msgid ""
+"To refer to attachments on a page, use '''{{{attachment:filename}}}''', \n"
+"as shown below in the list of files. \n"
+"Do '''NOT''' use the URL of the {{{[get]}}} link, \n"
+"since this is subject to change and can break easily."
+msgstr ""
+
+msgid "del"
+msgstr ""
+
+msgid "move"
+msgstr ""
+
+msgid "get"
+msgstr ""
+
+msgid "edit"
+msgstr ""
+
+msgid "view"
+msgstr ""
+
+msgid "unzip"
+msgstr ""
+
+msgid "install"
+msgstr ""
+
+#, python-format
+msgid "No attachments stored for %(pagename)s"
+msgstr ""
+
+msgid "Edit drawing"
+msgstr ""
+
+msgid "New Attachment"
+msgstr ""
+
+msgid "File to upload"
+msgstr ""
+
+msgid "Rename to"
+msgstr ""
+
+msgid "Overwrite existing attachment of same name"
+msgstr ""
+
+msgid "Upload"
+msgstr ""
+
+msgid "Attached Files"
+msgstr ""
+
+msgid "You are not allowed to attach a file to this page."
+msgstr ""
+
+#, python-format
+msgid "Unsupported AttachFile sub-action: %s"
+msgstr ""
+
+#, python-format
+msgid "Attachments for \"%(pagename)s\""
+msgstr ""
+
+msgid "TextCha: Wrong answer! Go back and try again..."
+msgstr ""
+
+msgid "You are not allowed to overwrite a file attachment of this page."
+msgstr ""
+
+msgid ""
+"No file content. Delete non ASCII characters from the file name and try "
+"again."
+msgstr ""
+
+#, python-format
+msgid ""
+"Attachment '%(target)s' (remote name '%(filename)s') with %(bytes)d bytes "
+"saved."
+msgstr ""
+
+#, python-format
+msgid "Attachment '%(target)s' (remote name '%(filename)s') already exists."
+msgstr ""
+
+msgid "You are not allowed to save a drawing on this page."
+msgstr ""
+
+msgid "You are not allowed to delete attachments on this page."
+msgstr ""
+
+#, python-format
+msgid "Attachment '%(filename)s' deleted."
+msgstr ""
+
+#, python-format
+msgid "Attachment '%(new_pagename)s/%(new_filename)s' already exists."
+msgstr ""
+
+#, python-format
+msgid ""
+"Attachment '%(pagename)s/%(filename)s' moved to '%(new_pagename)s/%"
+"(new_filename)s'."
+msgstr ""
+
+msgid "Nothing changed"
+msgstr ""
+
+#, python-format
+msgid "Page '%(new_pagename)s' does not exist or you don't have enough rights."
+msgstr ""
+
+msgid "Move aborted!"
+msgstr ""
+
+msgid "Please use the interactive user interface to move attachments!"
+msgstr ""
+
+msgid "You are not allowed to move attachments from this page."
+msgstr ""
+
+msgid "Move aborted because new page name is empty."
+msgstr ""
+
+#, python-format
+msgid "Please use a valid filename for attachment '%(filename)s'."
+msgstr ""
+
+msgid "Move aborted because new attachment name is empty."
+msgstr ""
+
+msgid "Move"
+msgstr ""
+
+msgid "New page name"
+msgstr ""
+
+msgid "New attachment name"
+msgstr ""
+
+msgid "You are not allowed to get attachments from this page."
+msgstr ""
+
+msgid "You are not allowed to install files."
+msgstr ""
+
+#, python-format
+msgid "Attachment '%(filename)s' installed."
+msgstr ""
+
+msgid "You are not allowed to unzip attachments of this page."
+msgstr ""
+
+#, python-format
+msgid "The file %(filename)s is not a .zip file."
+msgstr ""
+
+#, python-format
+msgid ""
+"Attachment '%(filename)s' not unzipped because some files in the zip are "
+"either not in the same directory or exceeded the single file size limit (%"
+"(maxsize_file)d kB)."
+msgstr ""
+
+#, python-format
+msgid ""
+"Attachment '%(filename)s' not unzipped because it would have exceeded the "
+"per page attachment storage size limit (%(size)d kB)."
+msgstr ""
+
+#, python-format
+msgid ""
+"Attachment '%(filename)s' not unzipped because it would have exceeded the "
+"per page attachment count limit (%(count)d)."
+msgstr ""
+
+#, python-format
+msgid ""
+"Attachment '%(filename)s' partially unzipped (did not overwrite: %(filelist)"
+"s)."
+msgstr ""
+
+#, python-format
+msgid "Attachment '%(filename)s' unzipped."
+msgstr ""
+
+msgid "A severe error occurred:"
+msgstr ""
+
+#, python-format
+msgid "Attachment '%(filename)s'"
+msgstr ""
+
+msgid "Download"
+msgstr ""
+
+msgid "Package script:"
+msgstr ""
+
+msgid "File Name"
+msgstr ""
+
+msgid "Modified"
+msgstr ""
+
+msgid "Size"
+msgstr ""
+
+msgid "Unknown file type, cannot display this attachment inline."
+msgstr ""
+
+msgid "You are not allowed to view attachments of this page."
+msgstr ""
+
+#, python-format
+msgid "attachment:%(filename)s of %(pagename)s"
+msgstr ""
+
+msgid ""
+"Cannot create a new page without a page name.  Please specify a page name."
+msgstr ""
+
+#, python-format
+msgid "Full Link List for \"%s\""
+msgstr ""
+
+#, python-format
+msgid "No pages like \"%s\"!"
+msgstr ""
+
+#, python-format
+msgid "Exactly one page like \"%s\" found, redirecting to page."
+msgstr ""
+
+#, python-format
+msgid "Pages like \"%s\""
+msgstr ""
+
+#, python-format
+msgid "%(matchcount)d %(matches)s for \"%(title)s\""
+msgstr ""
+
+msgid ""
+"You need to manually go to your OpenID provider wiki\n"
+"and log in before you can use your OpenID. MoinMoin will\n"
+"never allow you to enter your password here.\n"
+"\n"
+"Once you have logged in, simply reload this page."
+msgstr ""
+
+msgid "OpenID Trust verification"
+msgstr ""
+
+#, python-format
+msgid "The site %s has asked for your identity."
+msgstr ""
+
+#, python-format
+msgid ""
+"\n"
+"If you approve, the site represented by the trust root below will be\n"
+"told that you control the identity URL %s. (If you are using a delegated\n"
+"identity, the site will take care of reversing the\n"
+"delegation on its own.)"
+msgstr ""
+
+msgid "Trust root"
+msgstr ""
+
+msgid "Identity URL"
+msgstr ""
+
+msgid "Remember decision"
+msgstr ""
+
+msgid "Remember this trust decision and don't ask again"
+msgstr ""
+
+msgid "Approve"
+msgstr ""
+
+msgid "Don't approve"
+msgstr ""
+
+msgid "OpenID not served"
+msgstr ""
+
+msgid ""
+"\n"
+"Unfortunately you have not created your homepage yet. Therefore,\n"
+"we cannot serve an OpenID for you. Please create your homepage first\n"
+"and then reload this page or click the button below to cancel this\n"
+"verification."
+msgstr ""
+
+#, python-format
+msgid "You must login to use this action: %(action)s."
+msgstr ""
+
+msgid "Your subscription to this page has been removed."
+msgstr ""
+
+msgid "Can't remove regular expression subscription!"
+msgstr ""
+
+msgid "Edit the subscription regular expressions in your settings."
+msgstr ""
+
+msgid "You need to be subscribed to unsubscribe."
+msgstr ""
+
+#, python-format
+msgid ""
+"Restored Backup: %(filename)s to target dir: %(targetdir)s.\n"
+"Files: %(filecount)d, Directories: %(dircount)d"
+msgstr ""
+
+#, python-format
+msgid "Restoring backup: %(filename)s to target dir: %(targetdir)s failed."
+msgstr ""
+
+msgid "Wiki Backup / Restore"
+msgstr ""
+
+msgid ""
+"Some hints:\n"
+" * To restore a backup:\n"
+"  * Restoring a backup will overwrite existing data, so be careful.\n"
+"  * Rename it to <siteid>.tar.<compression> (remove the --date--time--UTC "
+"stuff).\n"
+"  * Put the backup file into the backup_storage_dir (use scp, ftp, ...).\n"
+"  * Hit the <<GetText(Restore)>> button below.\n"
+"\n"
+" * To make a backup, just hit the <<GetText(Backup)>> button and save the "
+"file\n"
+"   you get to a secure place.\n"
+"\n"
+"Please make sure your wiki configuration backup_* values are correct and "
+"complete.\n"
+"\n"
+msgstr ""
+
+msgid "Backup"
+msgstr ""
+
+msgid "Restore"
+msgstr ""
+
+msgid "You are not allowed to do remote backup."
+msgstr ""
+
+#, python-format
+msgid "Unknown backup subaction: %s."
+msgstr ""
+
+#, python-format
+msgid "Subscribe users to the page %s"
+msgstr ""
+
+msgid "Enter user names (comma separated):"
+msgstr ""
+
+#, python-format
+msgid "Subscribed for %s:"
+msgstr ""
+
+msgid "Not a user:"
+msgstr ""
+
+msgid "You are not allowed to perform this action."
+msgstr ""
+
+msgid "Rename Page"
+msgstr ""
+
+msgid "Rename all /subpages too?"
+msgstr ""
+
+msgid "New name"
+msgstr ""
+
+msgid "Optional reason for the renaming"
+msgstr ""
+
+msgid "Really rename this page?"
+msgstr ""
+
+msgid "No older revisions available!"
+msgstr ""
+
+#, python-format
+msgid "Diff for \"%s\""
+msgstr ""
+
+#, python-format
+msgid "Differences between revisions %d and %d"
+msgstr ""
+
+#, python-format
+msgid "(spanning %d versions)"
+msgstr ""
+
+msgid "Revert to this revision"
+msgstr ""
+
+msgid "Previous change"
+msgstr ""
+
+msgid "Next change"
+msgstr ""
+
+msgid "No differences found!"
+msgstr ""
+
+#, python-format
+msgid "The page was saved %(count)d times, though!"
+msgstr ""
+
+msgid "(ignoring whitespace)"
+msgstr ""
+
+msgid "Ignore changes in the amount of whitespace"
+msgstr ""
+
+#, python-format
+msgid "(!) Only pages changed since '''%s''' are being displayed!"
+msgstr ""
+
+msgid ""
+"/!\\ The modification date you entered was not recognized and is therefore "
+"not considered for the search results!"
 msgstr ""
 
 #, python-format
@@ -1644,67 +1410,144 @@
 msgstr ""
 
 #, python-format
+msgid "Title Search: \"%s\""
+msgstr ""
+
+#, python-format
+msgid "Advanced Search: \"%s\""
+msgstr ""
+
+#, python-format
+msgid "Full Text Search: \"%s\""
+msgstr ""
+
+#, python-format
 msgid ""
 "Your search query {{{\"%s\"}}} is invalid. Please refer to HelpOnSearching "
 "for more information."
 msgstr ""
 
 #, python-format
-msgid "Upload new attachment \"%(filename)s\""
+msgid ""
+"Your search query {{{\"%s\"}}} didn't return any results. Please change some "
+"terms and refer to HelpOnSearching for more information.%s"
+msgstr ""
+
+msgid "(!) Consider performing a"
+msgstr ""
+
+msgid "full-text search with your search terms"
+msgstr ""
+
+msgid ""
+"(!) You're performing a title search that might not include all related "
+"results of your search query in this wiki. <<BR>>"
+msgstr ""
+
+msgid "Click here to perform a full-text search with your search terms!"
 msgstr ""
 
 #, python-format
-msgid ""
-"%(extension_name)s %(extension_type)s: Required argument %(argument_name)s "
-"missing."
-msgstr ""
-
-#, python-format
-msgid ""
-"%(extension_name)s %(extension_type)s: Invalid %(argument_name)s=%"
-"(argument_value)s!"
+msgid "(including %(localwords)d %(pagelink)s)"
 msgstr ""
 
 #, python-format
 msgid ""
-"Current configuration does not allow embedding of the file %(file)s because "
-"of its mimetype %(mimetype)s."
-msgstr ""
-
-msgid "Embedded"
+"The following %(badwords)d words could not be found in the dictionary of %"
+"(totalwords)d words%(localwords)s and are highlighted below:"
+msgstr ""
+
+msgid "Add checked words to dictionary"
+msgstr ""
+
+msgid "No spelling errors found!"
+msgstr ""
+
+msgid "You can't save spelling words."
+msgstr ""
+
+msgid "You can't check spelling on a page you can't read."
+msgstr ""
+
+msgid "You are not allowed to create the supplementation page."
+msgstr ""
+
+msgid "General Information"
 msgstr ""
 
 #, python-format
-msgid "Unsupported navigation scheme '%(scheme)s'!"
-msgstr ""
-
-msgid "No parent page found!"
-msgstr ""
-
-msgid "Slideshow"
-msgstr ""
-
-msgid "Start"
+msgid "Page size: %d"
+msgstr ""
+
+msgid "SHA digest of this page's content is:"
+msgstr ""
+
+msgid "The following users subscribed to this page:"
+msgstr ""
+
+msgid "This page links to the following pages:"
+msgstr ""
+
+msgid "Date"
+msgstr ""
+
+msgid "Diff"
+msgstr ""
+
+msgid "Editor"
+msgstr ""
+
+msgid "Comment"
+msgstr ""
+
+msgid "to previous"
+msgstr ""
+
+msgid "N/A"
+msgstr ""
+
+msgid "Revision History"
+msgstr ""
+
+msgid "No log entries found."
 msgstr ""
 
 #, python-format
-msgid "Slide %(pos)d of %(size)d"
-msgstr ""
-
-msgid "Markup"
-msgstr ""
-
-msgid "Display"
-msgstr ""
-
-msgid "No wanted pages in this wiki."
-msgstr ""
-
-msgid "You need to provide a chart type!"
+msgid "Info for \"%s\""
 msgstr ""
 
 #, python-format
-msgid "Bad chart type \"%s\"!"
+msgid "Show \"%(title)s\""
+msgstr ""
+
+msgid "General Page Infos"
+msgstr ""
+
+msgid "Page hits and edits"
+msgstr ""
+
+msgid "User account created! You can use this account to login now..."
+msgstr ""
+
+msgid "TextCha (required)"
+msgstr ""
+
+msgid "Create Profile"
+msgstr ""
+
+msgid "Create Account"
+msgstr ""
+
+msgid "Copy Page"
+msgstr ""
+
+msgid "Copy all /subpages too?"
+msgstr ""
+
+msgid "Optional reason for the copying"
+msgstr ""
+
+msgid "Really copy this page?"
 msgstr ""
 
 msgid "Revert"
@@ -1719,15 +1562,246 @@
 "older revision and then call revert to this (older) revision again."
 msgstr ""
 
-msgid "This page is already deleted or was never created!"
-msgstr ""
-
 msgid "Optional reason for reverting this page"
 msgstr ""
 
 msgid "Really revert this page?"
 msgstr ""
 
+msgid "You must login to add a quicklink."
+msgstr ""
+
+msgid "A quicklink to this page has been added for you."
+msgstr ""
+
+msgid "A quicklink to this page could not be added for you."
+msgstr ""
+
+msgid "You already have a quicklink to this page."
+msgstr ""
+
+msgid "Please choose:"
+msgstr ""
+
+msgid "Settings"
+msgstr ""
+
+msgid "Charts are not available!"
+msgstr ""
+
+msgid "You need to provide a chart type!"
+msgstr ""
+
+#, python-format
+msgid "Bad chart type \"%s\"!"
+msgstr ""
+
+#, python-format
+msgid "Local Site Map for \"%s\""
+msgstr ""
+
+msgid "You must login to remove a quicklink."
+msgstr ""
+
+msgid "Your quicklink to this page has been removed."
+msgstr ""
+
+msgid "Your quicklink to this page could not be removed."
+msgstr ""
+
+msgid "You need to have a quicklink to this page to remove it."
+msgstr ""
+
+msgid "Load"
+msgstr ""
+
+msgid "Pagename not specified!"
+msgstr ""
+
+msgid "Upload page content"
+msgstr ""
+
+msgid ""
+"You can upload content for the page named below. If you change the page "
+"name, you can also upload content for another page. If the page name is "
+"empty, we derive the page name from the file name."
+msgstr ""
+
+msgid "File to load page content from"
+msgstr ""
+
+msgid "Page Name"
+msgstr ""
+
+#, python-format
+msgid "Invalid filename \"%s\"!"
+msgstr ""
+
+#, python-format
+msgid "Created the package %s containing the pages %s."
+msgstr ""
+
+msgid "Package pages"
+msgstr ""
+
+msgid "Package name"
+msgstr ""
+
+msgid "List of page names - separated by a comma"
+msgstr ""
+
+msgid "Do it."
+msgstr ""
+
+#, python-format
+msgid "Execute action %(actionname)s?"
+msgstr ""
+
+#, python-format
+msgid "Action %(actionname)s is excluded in this wiki!"
+msgstr ""
+
+#, python-format
+msgid "You are not allowed to use action %(actionname)s on this page!"
+msgstr ""
+
+#, python-format
+msgid "Please use the interactive user interface to use action %(actionname)s!"
+msgstr ""
+
+msgid "Please log in first."
+msgstr ""
+
+msgid "Please first create a homepage before creating additional pages."
+msgstr ""
+
+#, python-format
+msgid ""
+"You can add some additional sub pages to your already existing homepage "
+"here.\n"
+"\n"
+"You can choose how open to other readers or writers those pages shall be,\n"
+"access is controlled by group membership of the corresponding group page.\n"
+"\n"
+"Just enter the sub page's name and click on the button to create a new "
+"page.\n"
+"\n"
+"Before creating access protected pages, make sure the corresponding group "
+"page\n"
+"exists and has the appropriate members in it. Use HomepageGroupsTemplate for "
+"creating\n"
+"the group pages.\n"
+"\n"
+"||'''Add a new personal page:'''||'''Related access control list "
+"group:'''||\n"
+"||<<NewPage(HomepageReadWritePageTemplate,read-write page,%(username)s)>>||"
+"[[%(username)s/ReadWriteGroup]]||\n"
+"||<<NewPage(HomepageReadPageTemplate,read-only page,%(username)s)>>||[[%"
+"(username)s/ReadGroup]]||\n"
+"||<<NewPage(HomepagePrivatePageTemplate,private page,%(username)s)>>||%"
+"(username)s only||\n"
+"\n"
+msgstr ""
+
+msgid "MyPages management"
+msgstr ""
+
+msgid "Pages"
+msgstr ""
+
+msgid "Select Author"
+msgstr ""
+
+msgid "Revert all!"
+msgstr ""
+
+msgid "Only superuser is allowed to use this action."
+msgstr ""
+
+msgid "You are not allowed to subscribe to a page you can't read."
+msgstr ""
+
+msgid "This wiki is not enabled for mail/Jabber processing."
+msgstr ""
+
+msgid "You must log in to use subscriptions."
+msgstr ""
+
+msgid ""
+"Add your email address or Jabber ID in your user settings to use "
+"subscriptions."
+msgstr ""
+
+msgid "You are already subscribed to this page."
+msgstr ""
+
+msgid "You have been subscribed to this page."
+msgstr ""
+
+msgid "You could not get subscribed to this page."
+msgstr ""
+
+msgid "If this account exists an email was sent."
+msgstr ""
+
+msgid ""
+"This wiki is not enabled for mail processing.\n"
+"Contact the owner of the wiki, who can enable email."
+msgstr ""
+
+msgid "Please provide a valid email address or a username!"
+msgstr ""
+
+msgid "Mail me my account data"
+msgstr ""
+
+msgid "Recovery token"
+msgstr ""
+
+msgid "New password"
+msgstr ""
+
+msgid "New password (repeat)"
+msgstr ""
+
+msgid "Reset my password"
+msgstr ""
+
+msgid "Your password has been changed, you can log in now."
+msgstr ""
+
+msgid "Your token is invalid!"
+msgstr ""
+
+msgid "Password reset"
+msgstr ""
+
+msgid ""
+"\n"
+"== Password reset ==\n"
+"Enter a new password below."
+msgstr ""
+
+msgid "Lost password"
+msgstr ""
+
+msgid ""
+"\n"
+"== Recovering a lost password ==\n"
+"If you have forgotten your password, provide your email address or\n"
+"username and click on '''Mail me my account data'''.\n"
+"You will receive an email containing a recovery token that can be\n"
+"used to change your password. The email will also contain further\n"
+"instructions."
+msgstr ""
+
+msgid ""
+"\n"
+"=== Password reset ===\n"
+"If you already have received the email with the recovery token, enter your\n"
+"username, the recovery token and a new password (twice) below."
+msgstr ""
+
 #, python-format
 msgid "Rolled back changes to the page %s."
 msgstr ""
@@ -1760,9 +1834,6 @@
 msgid "The ''remoteWiki'' is unknown."
 msgstr ""
 
-msgid "A severe error occurred:"
-msgstr ""
-
 msgid "Synchronisation finished. Look below for the status messages."
 msgstr ""
 
@@ -1859,816 +1930,592 @@
 msgid "Page %s merged with conflicts."
 msgstr ""
 
-msgid ""
-"You need to manually go to your OpenID provider wiki\n"
-"and log in before you can use your OpenID. MoinMoin will\n"
-"never allow you to enter your password here.\n"
-"\n"
-"Once you have logged in, simply reload this page."
-msgstr ""
-
-msgid "OpenID Trust verification"
-msgstr ""
-
-#, python-format
-msgid "The site %s has asked for your identity."
-msgstr ""
-
-#, python-format
-msgid ""
-"\n"
-"If you approve, the site represented by the trust root below will be\n"
-"told that you control the identity URL %s. (If you are using a delegated\n"
-"identity, the site will take care of reversing the\n"
-"delegation on its own.)"
-msgstr ""
-
-msgid "Trust root"
-msgstr ""
-
-msgid "Identity URL"
-msgstr ""
-
-msgid "Remember decision"
-msgstr ""
-
-msgid "Remember this trust decision and don't ask again"
-msgstr ""
-
-msgid "Approve"
-msgstr ""
-
-msgid "Don't approve"
-msgstr ""
-
-msgid "OpenID not served"
-msgstr ""
-
-msgid ""
-"\n"
-"Unfortunately you have not created your homepage yet. Therefore,\n"
-"we cannot serve an OpenID for you. Please create your homepage first\n"
-"and then reload this page or click the button below to cancel this\n"
-"verification."
-msgstr ""
-
-#, python-format
-msgid "Invalid filename \"%s\"!"
-msgstr ""
-
-#, python-format
-msgid "Attachment '%(target)s' (remote name '%(filename)s') already exists."
-msgstr ""
-
-#, python-format
-msgid "Created the package %s containing the pages %s."
-msgstr ""
-
-msgid "Package pages"
-msgstr ""
-
-msgid "Package name"
-msgstr ""
-
-msgid "List of page names - separated by a comma"
-msgstr ""
-
-#, python-format
-msgid "No pages like \"%s\"!"
-msgstr ""
-
-msgid "Please choose:"
-msgstr ""
-
 #, python-format
-msgid "You must login to use this action: %(action)s."
-msgstr ""
-
-msgid "You must login to remove a quicklink."
-msgstr ""
-
-msgid "Your quicklink to this page has been removed."
-msgstr ""
-
-msgid "Your quicklink to this page could not be removed."
-msgstr ""
-
-msgid "You need to have a quicklink to this page to remove it."
-msgstr ""
-
-#, python-format
-msgid ""
-"Restored Backup: %(filename)s to target dir: %(targetdir)s.\n"
-"Files: %(filecount)d, Directories: %(dircount)d"
-msgstr ""
-
-#, python-format
-msgid "Restoring backup: %(filename)s to target dir: %(targetdir)s failed."
-msgstr ""
-
-msgid "Wiki Backup / Restore"
-msgstr ""
-
-msgid ""
-"Some hints:\n"
-" * To restore a backup:\n"
-"  * Restoring a backup will overwrite existing data, so be careful.\n"
-"  * Rename it to <siteid>.tar.<compression> (remove the --date--time--UTC "
-"stuff).\n"
-"  * Put the backup file into the backup_storage_dir (use scp, ftp, ...).\n"
-"  * Hit the <<GetText(Restore)>> button below.\n"
-"\n"
-" * To make a backup, just hit the <<GetText(Backup)>> button and save the "
-"file\n"
-"   you get to a secure place.\n"
-"\n"
-"Please make sure your wiki configuration backup_* values are correct and "
-"complete.\n"
-"\n"
-msgstr ""
-
-msgid "Backup"
-msgstr ""
-
-msgid "Restore"
-msgstr ""
-
-msgid "You are not allowed to do remote backup."
-msgstr ""
-
-#, python-format
-msgid "Unknown backup subaction: %s."
-msgstr ""
-
-msgid "Do it."
-msgstr ""
-
-#, python-format
-msgid "Execute action %(actionname)s?"
-msgstr ""
-
-#, python-format
-msgid "Action %(actionname)s is excluded in this wiki!"
-msgstr ""
-
-#, python-format
-msgid "You are not allowed to use action %(actionname)s on this page!"
-msgstr ""
-
-#, python-format
-msgid "Please use the interactive user interface to use action %(actionname)s!"
-msgstr ""
-
-msgid "Please log in first."
-msgstr ""
-
-msgid "Please first create a homepage before creating additional pages."
+msgid "Connection to mailserver '%(server)s' failed: %(reason)s"
+msgstr ""
+
+msgid "Mail not sent"
+msgstr ""
+
+msgid "Mail sent OK"
+msgstr ""
+
+msgid "From"
+msgstr ""
+
+msgid "To"
+msgstr ""
+
+msgid "Content"
+msgstr ""
+
+msgid "Attachments"
+msgstr ""
+
+msgid "Line"
+msgstr ""
+
+msgid "Deletions are marked like this."
+msgstr ""
+
+msgid "Additions are marked like this."
+msgstr ""
+
+msgid "Attachment link"
+msgstr ""
+
+msgid "Page link"
+msgstr ""
+
+msgid "Changed page"
+msgstr ""
+
+msgid "Page changed"
+msgstr ""
+
+msgid "Page has been modified"
+msgstr ""
+
+msgid "Page has been modified in a trivial fashion"
+msgstr ""
+
+msgid "Page has been renamed"
+msgstr ""
+
+msgid "Page has been deleted"
+msgstr ""
+
+msgid "Page has been copied"
+msgstr ""
+
+msgid "A new attachment has been added"
+msgstr ""
+
+msgid "A page has been reverted to a previous state"
+msgstr ""
+
+msgid "A user has subscribed to a page"
+msgstr ""
+
+msgid "A new account has been created"
 msgstr ""
 
 #, python-format
 msgid ""
-"You can add some additional sub pages to your already existing homepage "
-"here.\n"
-"\n"
-"You can choose how open to other readers or writers those pages shall be,\n"
-"access is controlled by group membership of the corresponding group page.\n"
-"\n"
-"Just enter the sub page's name and click on the button to create a new "
-"page.\n"
-"\n"
-"Before creating access protected pages, make sure the corresponding group "
-"page\n"
-"exists and has the appropriate members in it. Use HomepageGroupsTemplate for "
-"creating\n"
-"the group pages.\n"
-"\n"
-"||'''Add a new personal page:'''||'''Related access control list "
-"group:'''||\n"
-"||<<NewPage(HomepageReadWritePageTemplate,read-write page,%(username)s)>>||"
-"[[%(username)s/ReadWriteGroup]]||\n"
-"||<<NewPage(HomepageReadPageTemplate,read-only page,%(username)s)>>||[[%"
-"(username)s/ReadGroup]]||\n"
-"||<<NewPage(HomepagePrivatePageTemplate,private page,%(username)s)>>||%"
-"(username)s only||\n"
+"Dear Wiki user,\n"
 "\n"
-msgstr ""
-
-msgid "MyPages management"
-msgstr ""
-
-msgid "Rename all /subpages too?"
-msgstr ""
-
-msgid "New name"
-msgstr ""
-
-msgid "Optional reason for the renaming"
-msgstr ""
-
-msgid "Really rename this page?"
-msgstr ""
-
-msgid "Your subscription to this page has been removed."
-msgstr ""
-
-msgid "Can't remove regular expression subscription!"
-msgstr ""
-
-msgid "Edit the subscription regular expressions in your settings."
-msgstr ""
-
-msgid "You need to be subscribed to unsubscribe."
-msgstr ""
-
-msgid "TextCha: Wrong answer! Go back and try again..."
-msgstr ""
-
-msgid "Copy all /subpages too?"
-msgstr ""
-
-msgid "Optional reason for the copying"
-msgstr ""
-
-msgid "Really copy this page?"
-msgstr ""
-
-msgid "No older revisions available!"
-msgstr ""
-
-#, python-format
-msgid "Diff for \"%s\""
-msgstr ""
-
-#, python-format
-msgid "Differences between revisions %d and %d"
-msgstr ""
-
-#, python-format
-msgid "(spanning %d versions)"
-msgstr ""
-
-msgid "Previous change"
-msgstr ""
-
-msgid "Next change"
-msgstr ""
-
-#, python-format
-msgid "The page was saved %(count)d times, though!"
-msgstr ""
-
-msgid "(ignoring whitespace)"
-msgstr ""
-
-msgid "Ignore changes in the amount of whitespace"
-msgstr ""
-
-msgid "Load"
-msgstr ""
-
-msgid "Pagename not specified!"
-msgstr ""
-
-msgid "Upload page content"
-msgstr ""
-
-msgid ""
-"You can upload content for the page named below. If you change the page "
-"name, you can also upload content for another page. If the page name is "
-"empty, we derive the page name from the file name."
-msgstr ""
-
-msgid "File to load page content from"
-msgstr ""
-
-msgid "Comment"
-msgstr ""
-
-msgid "Page Name"
-msgstr ""
-
-msgid "You are not allowed to subscribe to a page you can't read."
-msgstr ""
-
-msgid "This wiki is not enabled for mail/Jabber processing."
-msgstr ""
-
-msgid "You must log in to use subscriptions."
-msgstr ""
-
-msgid ""
-"Add your email address or Jabber ID in your user settings to use "
-"subscriptions."
-msgstr ""
-
-msgid "You are already subscribed to this page."
-msgstr ""
-
-msgid "You have been subscribed to this page."
-msgstr ""
-
-msgid "You could not get subscribed to this page."
-msgstr ""
-
-msgid "General Information"
-msgstr ""
-
-#, python-format
-msgid "Page size: %d"
-msgstr ""
-
-msgid "SHA digest of this page's content is:"
-msgstr ""
-
-msgid "The following users subscribed to this page:"
-msgstr ""
-
-msgid "This page links to the following pages:"
-msgstr ""
-
-msgid "Size"
-msgstr ""
-
-msgid "Diff"
-msgstr ""
-
-msgid "Editor"
-msgstr ""
-
-msgid "view"
-msgstr ""
-
-msgid "to previous"
-msgstr ""
-
-msgid "get"
-msgstr ""
-
-msgid "del"
-msgstr ""
-
-msgid "Revision History"
-msgstr ""
-
-msgid "No log entries found."
-msgstr ""
-
-#, python-format
-msgid "Info for \"%s\""
-msgstr ""
-
-#, python-format
-msgid "Show \"%(title)s\""
-msgstr ""
-
-msgid "General Page Infos"
-msgstr ""
-
-msgid ""
-"Cannot create a new page without a page name.  Please specify a page name."
-msgstr ""
-
-msgid "Delete"
-msgstr ""
-
-msgid "Delete all /subpages too?"
-msgstr ""
-
-msgid "Optional reason for the deletion"
-msgstr ""
-
-msgid "Really delete this page?"
-msgstr ""
-
-msgid "You are not allowed to create the supplementation page."
-msgstr ""
-
-msgid "Only superuser is allowed to use this action."
-msgstr ""
-
-#, python-format
-msgid "Subscribe users to the page %s"
-msgstr ""
-
-msgid "Enter user names (comma separated):"
-msgstr ""
-
-#, python-format
-msgid "Subscribed for %s:"
-msgstr ""
-
-msgid "Not a user:"
-msgstr ""
-
-msgid "You are not allowed to perform this action."
-msgstr ""
-
-#, python-format
-msgid "(!) Only pages changed since '''%s''' are being displayed!"
-msgstr ""
-
-msgid ""
-"/!\\ The modification date you entered was not recognized and is therefore "
-"not considered for the search results!"
-msgstr ""
-
-#, python-format
-msgid "Title Search: \"%s\""
-msgstr ""
-
-#, python-format
-msgid "Advanced Search: \"%s\""
-msgstr ""
-
-#, python-format
-msgid "Full Text Search: \"%s\""
-msgstr ""
-
-#, python-format
-msgid ""
-"Your search query {{{\"%s\"}}} didn't return any results. Please change some "
-"terms and refer to HelpOnSearching for more information.%s"
-msgstr ""
-
-msgid "(!) Consider performing a"
-msgstr ""
-
-msgid "full-text search with your search terms"
-msgstr ""
-
-msgid ""
-"(!) You're performing a title search that might not include all related "
-"results of your search query in this wiki. <<BR>>"
-msgstr ""
-
-msgid "Click here to perform a full-text search with your search terms!"
-msgstr ""
-
-msgid "User account created! You can use this account to login now..."
-msgstr ""
-
-msgid "TextCha (required)"
-msgstr ""
-
-msgid "Create Profile"
-msgstr ""
-
-msgid "Create Account"
-msgstr ""
-
-msgid "You must login to add a quicklink."
-msgstr ""
-
-msgid "A quicklink to this page has been added for you."
-msgstr ""
-
-msgid "A quicklink to this page could not be added for you."
-msgstr ""
-
-msgid "You already have a quicklink to this page."
-msgstr ""
-
-msgid "You are not allowed to use this action."
-msgstr ""
-
-#, python-format
-msgid "(including %(localwords)d %(pagelink)s)"
+"You have subscribed to a wiki page or wiki category on \"%(sitename)s\" for "
+"change notification.\n"
+"\n"
+"The \"%(pagename)s\" page has been changed by %(editor)s:\n"
+msgstr ""
+
+msgid "New page:\n"
+msgstr ""
+
+msgid "No differences found!\n"
 msgstr ""
 
 #, python-format
 msgid ""
-"The following %(badwords)d words could not be found in the dictionary of %"
-"(totalwords)d words%(localwords)s and are highlighted below:"
-msgstr ""
-
-msgid "Add checked words to dictionary"
-msgstr ""
-
-msgid "No spelling errors found!"
-msgstr ""
-
-msgid "You can't save spelling words."
-msgstr ""
-
-msgid "You can't check spelling on a page you can't read."
-msgstr ""
-
-msgid "You are now logged out."
-msgstr ""
-
-msgid "If this account exists an email was sent."
-msgstr ""
-
-msgid ""
-"This wiki is not enabled for mail processing.\n"
-"Contact the owner of the wiki, who can enable email."
-msgstr ""
-
-msgid "Please provide a valid email address or a username!"
-msgstr ""
-
-msgid "Mail me my account data"
-msgstr ""
-
-msgid "Recovery token"
-msgstr ""
-
-msgid "New password"
-msgstr ""
-
-msgid "New password (repeat)"
-msgstr ""
-
-msgid "Reset my password"
-msgstr ""
-
-msgid "Your password has been changed, you can log in now."
-msgstr ""
-
-msgid "Your token is invalid!"
-msgstr ""
-
-msgid "Password reset"
-msgstr ""
-
-msgid ""
+"Dear wiki user,\n"
 "\n"
-"== Password reset ==\n"
-"Enter a new password below."
-msgstr ""
-
-msgid "Lost password"
-msgstr ""
-
-msgid ""
-"\n"
-"== Recovering a lost password ==\n"
-"If you have forgotten your password, provide your email address or\n"
-"username and click on '''Mail me my account data'''.\n"
-"You will receive an email containing a recovery token that can be\n"
-"used to change your password. The email will also contain further\n"
-"instructions."
-msgstr ""
-
-msgid ""
+"You have subscribed to a wiki page \"%(sitename)s\" for change "
+"notification.\n"
 "\n"
-"=== Password reset ===\n"
-"If you already have received the email with the recovery token, enter your\n"
-"username, the recovery token and a new password (twice) below."
-msgstr ""
-
-#, python-format
-msgid "Local Site Map for \"%s\""
-msgstr ""
-
-msgid "Pages"
-msgstr ""
-
-msgid "Select Author"
-msgstr ""
-
-msgid "Revert all!"
-msgstr ""
-
-#, python-format
-msgid "[%d attachments]"
+"The page \"%(pagename)s\" has been deleted by %(editor)s:\n"
+"\n"
 msgstr ""
 
 #, python-format
 msgid ""
-"There are <a href=\"%(link)s\">%(count)s attachment(s)</a> stored for this "
-"page."
-msgstr ""
-
-msgid "Filename of attachment not specified!"
-msgstr ""
-
-#, python-format
-msgid "Attachment '%(filename)s' does not exist!"
-msgstr ""
-
-msgid ""
-"To refer to attachments on a page, use '''{{{attachment:filename}}}''', \n"
-"as shown below in the list of files. \n"
-"Do '''NOT''' use the URL of the {{{[get]}}} link, \n"
-"since this is subject to change and can break easily."
-msgstr ""
-
-msgid "move"
-msgstr ""
-
-msgid "unzip"
-msgstr ""
-
-msgid "install"
+"Dear wiki user,\n"
+"\n"
+"You have subscribed to a wiki page \"%(sitename)s\" for change "
+"notification.\n"
+"\n"
+"The page \"%(pagename)s\" has been renamed from \"%(oldname)s\" by %(editor)"
+"s:\n"
 msgstr ""
 
 #, python-format
-msgid "No attachments stored for %(pagename)s"
-msgstr ""
-
-msgid "Edit drawing"
-msgstr ""
-
-msgid "New Attachment"
-msgstr ""
-
-msgid "File to upload"
-msgstr ""
-
-msgid "Rename to"
-msgstr ""
-
-msgid "Overwrite existing attachment of same name"
-msgstr ""
-
-msgid "Upload"
-msgstr ""
-
-msgid "Attached Files"
-msgstr ""
-
-msgid "You are not allowed to attach a file to this page."
-msgstr ""
-
-#, python-format
-msgid "Unsupported AttachFile sub-action: %s"
-msgstr ""
-
-#, python-format
-msgid "Attachments for \"%(pagename)s\""
-msgstr ""
-
-msgid "You are not allowed to overwrite a file attachment of this page."
-msgstr ""
-
-msgid ""
-"No file content. Delete non ASCII characters from the file name and try "
-"again."
-msgstr ""
-
-#, python-format
-msgid ""
-"Attachment '%(target)s' (remote name '%(filename)s') with %(bytes)d bytes "
-"saved."
-msgstr ""
-
-msgid "You are not allowed to save a drawing on this page."
-msgstr ""
-
-msgid "You are not allowed to delete attachments on this page."
-msgstr ""
-
-#, python-format
-msgid "Attachment '%(new_pagename)s/%(new_filename)s' already exists."
+msgid "New user account created on %(sitename)s"
 msgstr ""
 
 #, python-format
 msgid ""
-"Attachment '%(pagename)s/%(filename)s' moved to '%(new_pagename)s/%"
-"(new_filename)s'."
-msgstr ""
-
-msgid "Nothing changed"
-msgstr ""
-
-#, python-format
-msgid "Page '%(new_pagename)s' does not exist or you don't have enough rights."
-msgstr ""
-
-msgid "Move aborted!"
-msgstr ""
-
-msgid "Please use the interactive user interface to move attachments!"
-msgstr ""
-
-msgid "You are not allowed to move attachments from this page."
-msgstr ""
-
-msgid "Move aborted because new page name is empty."
+"Dear Superuser, a new user has just been created. Details follow:\n"
+"\n"
+"    User name: %(username)s\n"
+"    Email address: %(useremail)s"
 msgstr ""
 
 #, python-format
-msgid "Please use a valid filename for attachment '%(filename)s'."
-msgstr ""
-
-msgid "Move aborted because new attachment name is empty."
-msgstr ""
-
-msgid "Move"
-msgstr ""
-
-msgid "New page name"
-msgstr ""
-
-msgid "New attachment name"
-msgstr ""
-
-msgid "You are not allowed to get attachments from this page."
-msgstr ""
-
-msgid "You are not allowed to install files."
-msgstr ""
-
-#, python-format
-msgid "Attachment '%(filename)s' installed."
-msgstr ""
-
-msgid "You are not allowed to unzip attachments of this page."
-msgstr ""
-
-#, python-format
-msgid "The file %(filename)s is not a .zip file."
-msgstr ""
-
-#, python-format
-msgid ""
-"Attachment '%(filename)s' not unzipped because some files in the zip are "
-"either not in the same directory or exceeded the single file size limit (%"
-"(maxsize_file)d kB)."
-msgstr ""
-
-#, python-format
-msgid ""
-"Attachment '%(filename)s' not unzipped because it would have exceeded the "
-"per page attachment storage size limit (%(size)d kB)."
+msgid "New attachment added to page %(pagename)s on %(sitename)s"
 msgstr ""
 
 #, python-format
 msgid ""
-"Attachment '%(filename)s' not unzipped because it would have exceeded the "
-"per page attachment count limit (%(count)d)."
+"Dear Wiki user,\n"
+"\n"
+"You have subscribed to a wiki page \"%(page_name)s\" for change "
+"notification. An attachment has been added to that page by %(editor)s. "
+"Following detailed information is available:\n"
+"\n"
+"Attachment name: %(attach_name)s\n"
+"Attachment size: %(attach_size)s\n"
+msgstr ""
+
+#, python-format
+msgid "[%(sitename)s] %(trivial)sUpdate of \"%(pagename)s\" by %(username)s"
+msgstr ""
+
+msgid "Trivial "
 msgstr ""
 
 #, python-format
 msgid ""
-"Attachment '%(filename)s' partially unzipped (did not overwrite: %(filelist)"
-"s)."
-msgstr ""
-
-#, python-format
-msgid "Attachment '%(filename)s' unzipped."
-msgstr ""
-
-#, python-format
-msgid "Attachment '%(filename)s'"
-msgstr ""
-
-msgid "Download"
-msgstr ""
-
-msgid "Package script:"
-msgstr ""
-
-msgid "File Name"
-msgstr ""
-
-msgid "Modified"
-msgstr ""
-
-msgid "Unknown file type, cannot display this attachment inline."
-msgstr ""
-
-msgid "You are not allowed to view attachments of this page."
+"Attachment link: %(attach)s\n"
+"Page link: %(page)s\n"
+msgstr ""
+
+msgid "FrontPage"
+msgstr ""
+
+msgid "RecentChanges"
+msgstr ""
+
+msgid "TitleIndex"
+msgstr ""
+
+msgid "WordIndex"
+msgstr ""
+
+msgid "FindPage"
+msgstr ""
+
+msgid "SiteNavigation"
+msgstr ""
+
+msgid "HelpContents"
+msgstr ""
+
+msgid "HelpOnFormatting"
+msgstr ""
+
+msgid "WikiLicense"
+msgstr ""
+
+msgid "MissingPage"
+msgstr ""
+
+msgid "MissingHomePage"
+msgstr ""
+
+msgid "Mon"
+msgstr ""
+
+msgid "Tue"
+msgstr ""
+
+msgid "Wed"
+msgstr ""
+
+msgid "Thu"
+msgstr ""
+
+msgid "Fri"
+msgstr ""
+
+msgid "Sat"
+msgstr ""
+
+msgid "Sun"
+msgstr ""
+
+msgid "AttachFile"
+msgstr ""
+
+msgid "DeletePage"
+msgstr ""
+
+msgid "LikePages"
+msgstr ""
+
+msgid "LocalSiteMap"
+msgstr ""
+
+msgid "RenamePage"
+msgstr ""
+
+msgid "SpellCheck"
+msgstr ""
+
+msgid "Discussion"
 msgstr ""
 
 #, python-format
-msgid "attachment:%(filename)s of %(pagename)s"
-msgstr ""
-
-#, python-format
-msgid "Full Link List for \"%s\""
-msgstr ""
-
-#, python-format
-msgid "Exactly one page like \"%s\" found, redirecting to page."
-msgstr ""
-
-#, python-format
-msgid "Pages like \"%s\""
+msgid "Invalid include arguments \"%s\"!"
 msgstr ""
 
 #, python-format
-msgid "%(matchcount)d %(matches)s for \"%(title)s\""
-msgstr ""
-
-#, python-format
-msgid "Inlined image: %(url)s"
+msgid "Nothing found for \"%s\"!"
 msgstr ""
 
 #, python-format
-msgid "Create new drawing \"%(filename)s (opens in new window)\""
+msgid "Upload of attachment '%(filename)s'."
 msgstr ""
 
 #, python-format
-msgid "Edit drawing %(filename)s (opens in new window)"
+msgid "Drawing '%(filename)s' saved."
 msgstr ""
 
 #, python-format
-msgid "Clickable drawing: %(filename)s"
-msgstr ""
-
-msgid "Toggle line numbers"
+msgid "%(mins)dm ago"
+msgstr ""
+
+msgid "(no bookmark set)"
+msgstr ""
+
+#, python-format
+msgid "(currently set to %s)"
+msgstr ""
+
+msgid "Delete bookmark"
+msgstr ""
+
+msgid "Set bookmark"
+msgstr ""
+
+msgid "[Bookmark reached]"
+msgstr ""
+
+msgid "Python Version"
+msgstr ""
+
+msgid "MoinMoin Version"
+msgstr ""
+
+#, python-format
+msgid "Release %s [Revision %s]"
+msgstr ""
+
+msgid "4Suite Version"
+msgstr ""
+
+msgid "Number of pages"
+msgstr ""
+
+msgid "Number of system pages"
+msgstr ""
+
+msgid "Accumulated page sizes"
+msgstr ""
+
+#, python-format
+msgid "Disk usage of %(data_dir)s/pages/"
+msgstr ""
+
+#, python-format
+msgid "Disk usage of %(data_dir)s/"
+msgstr ""
+
+msgid "Entries in edit log"
+msgstr ""
+
+msgid "NONE"
+msgstr ""
+
+msgid "Global extension macros"
+msgstr ""
+
+msgid "Local extension macros"
+msgstr ""
+
+msgid "Global extension actions"
+msgstr ""
+
+msgid "Local extension actions"
+msgstr ""
+
+msgid "Global parsers"
+msgstr ""
+
+msgid "Local extension parsers"
+msgstr ""
+
+msgid "Disabled"
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
+msgid "index available"
+msgstr ""
+
+msgid "index unavailable"
+msgstr ""
+
+msgid "Xapian and/or Python Xapian bindings not installed"
+msgstr ""
+
+msgid "Xapian search"
+msgstr ""
+
+msgid "Stemming for Xapian"
+msgstr ""
+
+msgid "Active threads"
+msgstr ""
+
+msgid "Include system pages"
+msgstr ""
+
+msgid "Exclude system pages"
+msgstr ""
+
+msgid "No wanted pages in this wiki."
+msgstr ""
+
+#, python-format
+msgid "No quotes on %(pagename)s."
+msgstr ""
+
+msgid "Markup"
+msgstr ""
+
+msgid "Display"
+msgstr ""
+
+msgid "Search Titles"
+msgstr ""
+
+msgid "Display context of search results"
+msgstr ""
+
+msgid "Case-sensitive searching"
+msgstr ""
+
+msgid "Search Text"
+msgstr ""
+
+msgid "No orphaned pages in this wiki."
+msgstr ""
+
+msgid "Search for items"
+msgstr ""
+
+msgid "containing all the following terms"
+msgstr ""
+
+msgid "containing one or more of the following terms"
+msgstr ""
+
+msgid "not containing the following terms"
+msgstr ""
+
+msgid "last modified since (e.g. last 2 weeks)"
+msgstr ""
+
+msgid "any category"
+msgstr ""
+
+msgid "any language"
+msgstr ""
+
+msgid "any mimetype"
+msgstr ""
+
+msgid "Categories"
+msgstr ""
+
+msgid "Language"
+msgstr ""
+
+msgid "File Type"
+msgstr ""
+
+msgid "Search only in titles"
+msgstr ""
+
+msgid "Case-sensitive search"
+msgstr ""
+
+msgid "Exclude underlay"
+msgstr ""
+
+msgid "No system items"
+msgstr ""
+
+msgid "Search in all page revisions"
+msgstr ""
+
+msgid "Go get it!"
+msgstr ""
+
+msgid "Contents"
+msgstr ""
+
+#, python-format
+msgid "Unsupported navigation scheme '%(scheme)s'!"
+msgstr ""
+
+msgid "No parent page found!"
+msgstr ""
+
+msgid "Wiki"
+msgstr ""
+
+msgid "Slideshow"
+msgstr ""
+
+msgid "Start"
+msgstr ""
+
+#, python-format
+msgid "Slide %(pos)d of %(size)d"
+msgstr ""
+
+msgid "Go To Page"
+msgstr ""
+
+msgid "File attachment browser"
+msgstr ""
+
+msgid "User account browser"
+msgstr ""
+
+#, python-format
+msgid ""
+"%(extension_name)s %(extension_type)s: Required argument %(argument_name)s "
+"missing."
+msgstr ""
+
+#, python-format
+msgid ""
+"%(extension_name)s %(extension_type)s: Invalid %(argument_name)s=%"
+"(argument_value)s!"
+msgstr ""
+
+#, python-format
+msgid ""
+"Current configuration does not allow embedding of the file %(file)s because "
+"of its mimetype %(mimetype)s."
+msgstr ""
+
+msgid "Embedded"
+msgstr ""
+
+msgid "Missing password. Please enter user name and password."
+msgstr ""
+
+#, python-format
+msgid "LDAP server %(server)s failed."
+msgstr ""
+
+msgid "Failed to connect to database."
+msgstr ""
+
+msgid "You need to log in."
+msgstr ""
+
+msgid ""
+"Please choose an account name now.\n"
+"If you choose an existing account name you will be asked for the\n"
+"password and be able to associate the account with your OpenID."
+msgstr ""
+
+msgid "Choose this name"
+msgstr ""
+
+msgid "This is not a valid username, choose a different one."
+msgstr ""
+
+msgid ""
+"The username you have chosen is already\n"
+"taken. If it is your username, enter your password below to associate\n"
+"the username with your OpenID. Otherwise, please choose a different\n"
+"username and leave the password field blank."
+msgstr ""
+
+msgid "Associate this name"
+msgstr ""
+
+msgid "Your account is now associated to your OpenID."
+msgstr ""
+
+msgid "The password you entered is not valid."
+msgstr ""
+
+msgid "Anonymous sessions need to be enabled for OpenID login."
+msgstr ""
+
+msgid "No OpenID."
+msgstr ""
+
+msgid ""
+"If you do not have an account yet, you can still log in with your OpenID and "
+"create one during login."
+msgstr ""
+
+#, python-format
+msgid ""
+"If you do not have an account, <a href=\"%(userprefslink)s\">you can create "
+"one now</a>. <a href=\"%(sendmypasswordlink)s\">Forgot your password?</a>"
+msgstr ""
+
+msgid "Could not contact botbouncer.com."
+msgstr ""
+
+msgid "User agent"
+msgstr ""
+
+msgid "Others"
+msgstr ""
+
+msgid "Distribution of User-Agent Types"
+msgstr ""
+
+msgid "Views/day"
+msgstr ""
+
+msgid "Edits/day"
+msgstr ""
+
+#, python-format
+msgid "%(chart_title)s for %(filterpage)s"
+msgstr ""
+
+msgid ""
+"green=view\n"
+"red=edit"
+msgstr ""
+
+msgid "date"
+msgstr ""
+
+msgid "# of hits"
+msgstr ""
+
+msgid "Page Size Distribution"
+msgstr ""
+
+msgid "page size upper bound [bytes]"
+msgstr ""
+
+msgid "# of pages of this size"
+msgstr ""
+
+msgid "Options --pages and --search are mutually exclusive!"
+msgstr ""
+
+msgid "You must specify an output file!"
+msgstr ""
+
+msgid "No pages specified using --pages or --search, assuming full package."
+msgstr ""
+
+msgid "Output file already exists! Cowardly refusing to continue!"
 msgstr ""
 
 #, python-format
@@ -2681,3 +2528,156 @@
 
 msgid "Login and try again."
 msgstr ""
+
+#, python-format
+msgid ""
+"Sorry, can not save page because \"%(content)s\" is not allowed in this wiki."
+msgstr ""
+
+msgid "DeleteCache"
+msgstr ""
+
+#, python-format
+msgid "(cached %s)"
+msgstr ""
+
+msgid "Or try one of these actions:"
+msgstr ""
+
+msgid "Unsubscribe"
+msgstr ""
+
+msgid "Home"
+msgstr ""
+
+msgid "[RSS]"
+msgstr ""
+
+msgid "[DELETED]"
+msgstr ""
+
+msgid "[UPDATED]"
+msgstr ""
+
+msgid "[RENAMED]"
+msgstr ""
+
+msgid "[CONFLICT]"
+msgstr ""
+
+msgid "[NEW]"
+msgstr ""
+
+msgid "[DIFF]"
+msgstr ""
+
+msgid "[BOTTOM]"
+msgstr ""
+
+msgid "[TOP]"
+msgstr ""
+
+msgid "Click to do a full-text search for this title"
+msgstr ""
+
+msgid "Logout"
+msgstr ""
+
+msgid "Clear message"
+msgstr ""
+
+#, python-format
+msgid "last edited %(time)s by %(editor)s"
+msgstr ""
+
+#, python-format
+msgid "last modified %(time)s"
+msgstr ""
+
+msgid "Search:"
+msgstr ""
+
+msgid "Text"
+msgstr ""
+
+msgid "Titles"
+msgstr ""
+
+msgid "Search"
+msgstr ""
+
+msgid "More Actions:"
+msgstr ""
+
+msgid "------------------------"
+msgstr ""
+
+msgid "Raw Text"
+msgstr ""
+
+msgid "Print View"
+msgstr ""
+
+msgid "Delete Cache"
+msgstr ""
+
+msgid "Delete Page"
+msgstr ""
+
+msgid "Like Pages"
+msgstr ""
+
+msgid "Local Site Map"
+msgstr ""
+
+msgid "My Pages"
+msgstr ""
+
+msgid "Subscribe User"
+msgstr ""
+
+msgid "Remove Spam"
+msgstr ""
+
+msgid "Package Pages"
+msgstr ""
+
+msgid "Render as Docbook"
+msgstr ""
+
+msgid "Sync Pages"
+msgstr ""
+
+msgid "Do"
+msgstr ""
+
+msgid "Comments"
+msgstr ""
+
+msgid "Edit (Text)"
+msgstr ""
+
+msgid "Edit (GUI)"
+msgstr ""
+
+msgid "Immutable Page"
+msgstr ""
+
+msgid "Remove Link"
+msgstr ""
+
+msgid "Add Link"
+msgstr ""
+
+#, python-format
+msgid "Show %s days."
+msgstr ""
+
+msgid "Wiki Markup"
+msgstr ""
+
+msgid "Page"
+msgstr ""
+
+msgid "User"
+msgstr ""
--- a/MoinMoin/i18n/fi.MoinMoin.po	Sun Jul 27 17:40:11 2008 +0200
+++ b/MoinMoin/i18n/fi.MoinMoin.po	Mon Jul 28 12:04:00 2008 +0200
@@ -1207,16 +1207,14 @@
 msgid "Quick links"
 msgstr "Pikalinkit"
 
-#, fuzzy
 msgid "OpenID server"
-msgstr "OpenID:tä ei palveltu"
-
-#, fuzzy
+msgstr "OpenID-palvelin"
+
 msgid "The selected websites have been removed."
-msgstr "Valitut OpenID:t on poistettu."
+msgstr "Valitut verkkosivustot on poistettu."
 
 msgid "Trusted websites"
-msgstr ""
+msgstr "Luotetut sivustot"
 
 #, python-format
 msgid ""
@@ -2300,16 +2298,16 @@
 "(username)s only||\n"
 "\n"
 msgstr ""
-"Voit lisätä olemassaolevalle omalle kotisivullesi alasivuja.\n"
-"\n"
+"Voit lisätä omalle kotisivullesi alasivuja\n"
+"tästä. \n"
 "Voit valita kuinka avoimia sivuja haluat muiden lukijoiden ja\n"
-"kirjoittajien suhteen. Pääsy riippuu kuulumisesta vastaavalle ryhmäsivulle.\n"
+"kirjoittajien suhteen. Oikeudet riippuvat kuulumisesta vastaavalle ryhmäsivulle.\n"
 "\n"
-"Kirjoita vain alasivun nimi ja napsauta painiketta luodaksesi sivun.\n"
+"Kirjoita vain alasivun nimi ja napsauta painiketta luodaksesi sivu.\n"
 "\n"
-"Ennen kuin teet pääsyltään rajoitettuja sivuja, katso että vastaava\n"
-"ryhmäsivu on olemassa ja sillä on oikeat henkilöt. Käytä ryhmäsivujen\n"
-"luonnissa sivupohjaa HomepageGroupsTemplate.\n"
+"Ennen kuin teet pääsyltään rajoitettuja sivuja, varmista että vastaava\n"
+"ryhmäsivu on olemassa ja että kyseisellä sivulla on haluttujen käyttäjien tunnukset. Käytä ryhmäsivun\n"
+"luomiseksi sivupohjaa HomepageGroupsTemplate.\n"
 "\n"
 "||'''Lisää uusi oma sivu:'''||'''Vastaava pääsyrajoituksen ryhmä:'''||\n"
 "||<<NewPage(HomepageReadWritePageTemplate,luettavissa ja kirjoitettavissa,%"
--- a/MoinMoin/i18n/fr.MoinMoin.po	Sun Jul 27 17:40:11 2008 +0200
+++ b/MoinMoin/i18n/fr.MoinMoin.po	Mon Jul 28 12:04:00 2008 +0200
@@ -503,7 +503,7 @@
 msgstr "Créer une page"
 
 msgid "You are not allowed to view this page."
-msgstr "Vous n'êtes pas autorisé à voir cette page."
+msgstr "Vous n'êtes pas autorisé à lire cette page."
 
 msgid "[all]"
 msgstr "[tout]"
@@ -1247,16 +1247,14 @@
 msgid "Quick links"
 msgstr "Liens rapides"
 
-#, fuzzy
 msgid "OpenID server"
-msgstr "OpenID n'est pas proposé"
-
-#, fuzzy
+msgstr "Serveur OpenID"
+
 msgid "The selected websites have been removed."
-msgstr "Les identifiants OpenID sélectionnés ont été enlevés."
+msgstr "Les sites web sélectionnés ont été supprimés."
 
 msgid "Trusted websites"
-msgstr ""
+msgstr "Sites web de confiance."
 
 #, python-format
 msgid ""
@@ -1749,22 +1747,22 @@
 msgstr "RIEN"
 
 msgid "Global extension macros"
-msgstr "Macros d'extension globales"
+msgstr "Macros globales"
 
 msgid "Local extension macros"
-msgstr "Macros d'extension locales"
+msgstr "Macros locales"
 
 msgid "Global extension actions"
-msgstr "Actions d'extension globales "
+msgstr "Actions globales "
 
 msgid "Local extension actions"
-msgstr "Actions d'extension locales"
+msgstr "Actions locales"
 
 msgid "Global parsers"
-msgstr "Analyseurs généraux"
+msgstr "Analyseurs globaux"
 
 msgid "Local extension parsers"
-msgstr "Analyseurs d'extension locaux"
+msgstr "Analyseurs locaux"
 
 msgid "Disabled"
 msgstr "Désactivée"
@@ -2334,7 +2332,7 @@
 msgid "Please first create a homepage before creating additional pages."
 msgstr "Veuillez créer une page personnelle avant de créer d'autres pages."
 
-#, fuzzy, python-format
+#, python-format
 msgid ""
 "You can add some additional sub pages to your already existing homepage "
 "here.\n"
@@ -2380,9 +2378,9 @@
 "||'''Ajout d'une nouvelle page personnelle :'''||'''Groupes utilisés pour "
 "les listes de contrôle d'accès :'''||\n"
 "||<<NewPage(HomepageReadWritePageTemplate,page ouverte en écriture,%"
-"(username)s)>>||[\"%(username)s/GroupeDesRédacteurs\"]||\n"
+"(username)s)>>||[%(username)s/GroupeDesRédacteurs]||\n"
 "||<<NewPage(HomepageReadPageTemplate,page en lecture seule,%(username)s)>>||"
-"[\"%(username)s/GroupeDesLecteurs\"]||\n"
+"[%(username)s/GroupeDesLecteurs]||\n"
 "||<<NewPage(HomepagePrivatePageTemplate,page privée,%(username)s)>>||"
 "Uniquement (username)s||\n"
 "\n"
--- a/MoinMoin/i18n/hr.MoinMoin.po	Sun Jul 27 17:40:11 2008 +0200
+++ b/MoinMoin/i18n/hr.MoinMoin.po	Mon Jul 28 12:04:00 2008 +0200
@@ -11,7 +11,7 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: MoinMoin 1.6\n"
+"Project-Id-Version: MoinMoin 1.7\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2008-06-21 22:47+0200\n"
 "PO-Revision-Date: 2006-08-17 20:50+0100\n"
@@ -29,7 +29,6 @@
 msgstr "<nepoznato>"
 
 # python-format
-#, fuzzy, python-format
 msgid ""
 "Login Name: %s\n"
 "\n"
@@ -39,9 +38,9 @@
 msgstr ""
 "Korisničko ime: %s\n"
 "\n"
-"Korisnička lozinka: %s\n"
+"Šifra za zahtjev lozinke: %s\n"
 "\n"
-"URL za prijavu: %s/%s?action=login\n"
+"URL za prijavu: %s/?action=recoverpass&name=%s&token=%s\n"
 
 msgid ""
 "Somebody has requested to email you a password recovery token.\n"
@@ -49,7 +48,12 @@
 "If you lost your password, please go to the password reset URL below or\n"
 "go to the password recovery page again and enter your username and the\n"
 "recovery token.\n"
-msgstr ""
+msgstr "Netko je na ovaj email zatražio šifru za promjenu lozinke.\n"
+"\n"
+"Ako ste izgubili svoju lozinku, posjetite URL za reset logine ili\n"
+"ili na stranici za zahtijevanje lozinke upišite svoje korisničko\n"
+"ime i šifru koju ste dobili u ovoj poruci.\n"
+
 
 #, python-format
 msgid "[%(sitename)s] Your wiki account data"
@@ -345,7 +349,7 @@
 "prava!"
 
 msgid "Notifications sent to:"
-msgstr ""
+msgstr "Obavijesti poslane:"
 
 #, python-format
 msgid ""
@@ -487,7 +491,7 @@
 msgstr "filter"
 
 msgid "about"
-msgstr ""
+msgstr "opis"
 
 #, python-format
 msgid ""
@@ -541,24 +545,22 @@
 msgstr "Lozinka"
 
 msgid "OpenID"
-msgstr ""
+msgstr "OpenID"
 
 msgid "Login"
 msgstr "Prijava"
 
-#, fuzzy
 msgid "Username"
-msgstr "Korisnik"
-
-#, fuzzy
+msgstr "Korisničko ime"
+
 msgid "Member of Groups"
-msgstr "Broj stranica"
+msgstr "Član Grupa"
 
 msgid "Email"
 msgstr "Adresa elektroničke pošte"
 
 msgid "Jabber"
-msgstr ""
+msgstr "Jabber"
 
 msgid "Action"
 msgstr "Akcija"
@@ -582,9 +584,8 @@
 msgid "LDAP server %(server)s failed."
 msgstr ""
 
-#, fuzzy
 msgid "You need to log in."
-msgstr "Uspješno ste se odjavili."
+msgstr "Morate se prijaviti."
 
 #, python-format
 msgid ""
@@ -599,10 +600,10 @@
 msgstr ""
 
 msgid "Choose this name"
-msgstr ""
+msgstr "Odaberite ovo ime"
 
 msgid "This is not a valid username, choose a different one."
-msgstr ""
+msgstr "To nije važeće korisničko ime, obaberite drugo."
 
 msgid ""
 "The username you have chosen is already\n"
@@ -616,20 +617,19 @@
 
 #, python-format
 msgid "OpenID error: %s."
-msgstr ""
-
-#, fuzzy
+msgstr "OpenID pogreška: %s."
+
 msgid "Verification canceled."
 msgstr "Operacija je prekinuta."
 
 msgid "OpenID failure."
-msgstr ""
+msgstr "OpenID pogreška"
 
 msgid "Your account is now associated to your OpenID."
 msgstr ""
 
 msgid "The password you entered is not valid."
-msgstr ""
+msgstr "Lozinka koju ste upisali je pogrešna"
 
 msgid "OpenID verification requires that you click this button:"
 msgstr ""
--- a/MoinMoin/i18n/it.MoinMoin.po	Sun Jul 27 17:40:11 2008 +0200
+++ b/MoinMoin/i18n/it.MoinMoin.po	Mon Jul 28 12:04:00 2008 +0200
@@ -2327,14 +2327,19 @@
 "\n"
 "Digita il nome della sotto-pagina e fai clic sul pulsante per crearla.\n"
 "\n"
-"Prima di creare una pagina ad accesso limitato, assicurati che una corrispondente pagina\n"
+"Prima di creare una pagina ad accesso limitato, assicurati che una "
+"corrispondente pagina\n"
 "di gruppo esista e che ci siano elencati gli utenti desiderati.\n"
 "Usa la PaginaPersonaleGruppiModello per creare le pagine di gruppo.\n"
 "\n"
-"||'''Aggiungi una nuova pagina personale:'''||'''Lista di controllo dell'accesso (ACL):'''||\n"
-"||<<NewPage(PaginaPersonaleLetturaScritturaModello,Pagina lettura-scrittura,%(username)s)>>||[[%(username)s/GruppoLetturaScrittura]]||\n"
-"||<<NewPage(PaginaPersonaleLetturaModello,Pagina sola lettura,%(username)s)>>||[[%(username)s/GruppoLettura]]||\n"
-"||<<NewPage(PaginaPersonalePrivataModello,Pagina privata,%(username)s)>>||Solo %(username)s||\n"
+"||'''Aggiungi una nuova pagina personale:'''||'''Lista di controllo "
+"dell'accesso (ACL):'''||\n"
+"||<<NewPage(PaginaPersonaleLetturaScritturaModello,Pagina lettura-scrittura,%"
+"(username)s)>>||[[%(username)s/GruppoLetturaScrittura]]||\n"
+"||<<NewPage(PaginaPersonaleLetturaModello,Pagina sola lettura,%(username)s)"
+">>||[[%(username)s/GruppoLettura]]||\n"
+"||<<NewPage(PaginaPersonalePrivataModello,Pagina privata,%(username)s)>>||"
+"Solo %(username)s||\n"
 "\n"
 
 msgid "MyPages management"
--- a/MoinMoin/i18n/lt.MoinMoin.po	Sun Jul 27 17:40:11 2008 +0200
+++ b/MoinMoin/i18n/lt.MoinMoin.po	Mon Jul 28 12:04:00 2008 +0200
@@ -11,10 +11,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: MoinMoin 1.6\n"
+"Project-Id-Version: MoinMoin 1.7\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2008-06-21 22:47+0200\n"
-"PO-Revision-Date: 2007-12-01 00:00+0200\n"
+"PO-Revision-Date: 2008-06-29 13:35+0200\n"
 "Last-Translator: Aurelijus Sudzius <ruledbyfate@gmail.com>\n"
 "Language-Team: Lithuanian <ruledbyfate@gmail.com>\n"
 "MIME-Version: 1.0\n"
@@ -28,7 +28,7 @@
 msgid "<unknown>"
 msgstr "<nežinomas>"
 
-#, fuzzy, python-format
+#, python-format
 msgid ""
 "Login Name: %s\n"
 "\n"
@@ -38,9 +38,9 @@
 msgstr ""
 "Prisijungimo vardas: %s\n"
 "\n"
-"Prisijungimo slaptažodis: %s\n"
+"Slaptažodžio atkūrimo raktas: %s\n"
 "\n"
-"Prisijungimo URL: %s/%s?action=login\n"
+"Slaptažodžio atkūrimo adresas: %s/?action=recoverpass&name=%s&token=%s\n"
 
 msgid ""
 "Somebody has requested to email you a password recovery token.\n"
@@ -49,10 +49,15 @@
 "go to the password recovery page again and enter your username and the\n"
 "recovery token.\n"
 msgstr ""
+"Kažkas pareikalavo el. paštu išsiųsti jums slaptažodžio atkūrimo raktą.\n"
+"\n"
+"Jeigu pamiršote savo slaptažodį, apsilankykite žemiau nurodytu slaptažodžio\n"
+"atkūrimo adresu arba grįžkite į slaptažodžio atkūrimo puslapį ir ten\n"
+"įveskite savo naudotojo vardą bei atkūrimo raktą.\n"
 
 #, python-format
 msgid "[%(sitename)s] Your wiki account data"
-msgstr "[%(sitename)s] Jūsų wiki vartotojo duomenys"
+msgstr "[%(sitename)s] Jūsų wiki paskyros duomenys"
 
 msgid "You are not allowed to edit this page."
 msgstr "Jums neleidžiama redaguoti šio puslapio"
@@ -65,37 +70,37 @@
 
 msgid "The lock you held timed out. Be prepared for editing conflicts!"
 msgstr ""
-"Užrakinimas, kuris jums buvo suteiktas, jau baigėsi. Pasiruoškite galimiems "
-"redagavimo konfliktams!"
+"Jums suteikto užrakinimo laikas baigėsi. Pasiruoškite galimiems redagavimo "
+"konfliktams!"
 
 #, python-format
 msgid "Draft of \"%(pagename)s\""
-msgstr "Juodraštis puslapio \"%(pagename)s\""
+msgstr "Puslapio „%(pagename)s“ juodraštis"
 
 #, python-format
 msgid "Edit \"%(pagename)s\""
-msgstr "Redaguoti \"%(pagename)s\""
+msgstr "Redaguoti „%(pagename)s“"
 
 #, python-format
 msgid "Preview of \"%(pagename)s\""
-msgstr "Peržiūra puslapio \"%(pagename)s\""
+msgstr "Puslapio „%(pagename)s“ peržiūra"
 
 #, python-format
 msgid "Your edit lock on %(lock_page)s has expired!"
-msgstr "Jūsų redagavimo užrakinimas puslapio %(lock_page)s jau baigėsi!"
+msgstr "Jūsų redagavimo užrakinimas puslapiui %(lock_page)s jau baigėsi!"
 
 #, python-format
 msgid "Your edit lock on %(lock_page)s will expire in # minutes."
 msgstr ""
-"Jūsų redagavimo užrakinimas puslapio %(lock_page)s baigsis po # minučių."
+"Jūsų redagavimo užrakinimas puslapiui %(lock_page)s baigsis po # minučių."
 
 #, python-format
 msgid "Your edit lock on %(lock_page)s will expire in # seconds."
 msgstr ""
-"Jūsų redagavimo užrakinimas puslapio %(lock_page)s baigsis po # sekundžių."
+"Jūsų redagavimo užrakinimas puslapiui %(lock_page)s baigsis po # sekundžių."
 
 msgid "Someone else deleted this page while you were editing!"
-msgstr "Kažkas jau ištrynė šį puslapį, kol jūs redagavote!"
+msgstr "Kažkas ištrynė šį puslapį, kol jūs redagavote!"
 
 msgid "Someone else changed this page while you were editing!"
 msgstr "Kažkas pakeitė šį puslapį, kol jūs redagavote!"
@@ -104,7 +109,7 @@
 "Someone else saved this page while you were editing!\n"
 "Please review the page and save then. Do not save this page as it is!"
 msgstr ""
-"Kažkas jau išsaugojo puslapį, kol jūs redagavote!\n"
+"Kažkas išsaugojo šį puslapį, kol jūs redagavote!\n"
 "Prašome peržiūrėti puslapį ir tada jį išsaugoti. Neišsaugokite šio puslapio "
 "tokio, koks jis yra dabar!"
 
@@ -131,12 +136,12 @@
 "somehow without saving it.''' A draft gets saved for you when you do a "
 "preview, cancel an edit or unsuccessfully save."
 msgstr ""
-"'''<<BR>>Jūsų juodraštis sukurtas pagrindu %(draft_rev)d (išsaugota %"
-"(draft_timestamp_str)s) jau gali būti įkrautas vietoje einamosios versijos %"
-"(page_rev)d naudojant juodraščio įkrovimo mygtuką - tuo atveju jeigu jūs "
-"praradote savo paskutinį redagavimą jo neišsaugoję.''' Juodraštis yra "
-"automatiškai išsaugojamas kai jūs peržiūrite, atsakote arba redaguojate "
-"nesėkmingą išsaugojimą."
+"'''<<BR>>Jūsų juodraštis, sukurtas %(draft_rev)d versijos pagrindu "
+"(išsaugota %(draft_timestamp_str)s), gali būti įkrautas vietoje einamosios "
+"versijos %(page_rev)d naudojant juodraščio įkrovimo mygtuką - tuo atveju, "
+"jeigu jūs praradote savo paskutinius pakeitimus jų neišsaugoję.''' Juodraštis "
+"automatiškai išsaugojamas, kai jūs peržiūrite, atšaukiate arba nesėkmingai "
+"išsaugojate pakeitimus."
 
 #, python-format
 msgid "Describe %s here."
@@ -149,7 +154,7 @@
 msgstr "Išsaugoti pakeitimus"
 
 msgid "Cancel"
-msgstr "Atsisakyti"
+msgstr "Atšaukti"
 
 #, python-format
 msgid ""
@@ -161,7 +166,7 @@
 "Paspaudę '''%(save_button_text)s''' jūs pridedate savo pakeitimus pagal %"
 "(license_link)s.\n"
 "Jeigu jūs to nenorite, spauskite '''%(cancel_button_text)s''', kad "
-"atsakytumėte savo pakeitimus."
+"atšauktumėte savo pakeitimus."
 
 msgid "Preview"
 msgstr "Peržiūrėti"
@@ -191,81 +196,81 @@
 #, python-format
 msgid "Argument \"%s\" must be a boolean value, not \"%s\""
 msgstr ""
-"Argumentas \"%s\" privalo būti teigiamos/neigiamos reikšmės, o ne \"%s\""
+"Argumentas „%s“ privalo būti teigiamos/neigiamos reikšmės, o ne „%s“"
 
 #, python-format
 msgid "Argument must be a boolean value, not \"%s\""
-msgstr "Argumentas privalo būti teigiamos/neigiamos reikšmės, o ne \"%s\""
+msgstr "Argumentas privalo būti teigiamos/neigiamos reikšmės, o ne „%s“"
 
 #, python-format
 msgid "Argument \"%s\" must be an integer value, not \"%s\""
-msgstr "Argumentas \"%s\" privalo būti skaitinės reikšmės, o ne \"%s\""
+msgstr "Argumentas „%s“ privalo būti skaitinės reikšmės, o ne „%s“"
 
 #, python-format
 msgid "Argument must be an integer value, not \"%s\""
-msgstr "Argumentas privalo būti skaitinės reikšmės, o ne \"%s\""
+msgstr "Argumentas privalo būti skaitinės reikšmės, o ne „%s“"
 
 #, python-format
 msgid "Argument \"%s\" must be a floating point value, not \"%s\""
 msgstr ""
-"Argumentas \"%s\" privalo būti slankiojo kablelio reikšmės, o ne \"%s\""
+"Argumentas „%s“ privalo būti slankiojo kablelio reikšmės, o ne „%s“"
 
 #, python-format
 msgid "Argument must be a floating point value, not \"%s\""
-msgstr "Argumentas privalo būti slankiojo kablelio reikšmės, o ne \"%s\""
+msgstr "Argumentas privalo būti slankiojo kablelio reikšmės, o ne „%s“"
 
 #, python-format
 msgid "Argument \"%s\" must be a complex value, not \"%s\""
-msgstr "Argumentas \"%s\" privalo būti kompleksinės reikšmės, o ne \"%s\""
+msgstr "Argumentas „%s“ privalo būti kompleksinės reikšmės, o ne „%s“"
 
 #, python-format
 msgid "Argument must be a complex value, not \"%s\""
-msgstr "Argumentas privalo būti kompleksinės reikšmės, o ne \"%s\""
+msgstr "Argumentas privalo būti kompleksinės reikšmės, o ne „%s“"
 
 #, python-format
 msgid "Argument \"%s\" must be one of \"%s\", not \"%s\""
-msgstr "Argumentas \"%s\" privalo būti arba \"%s\", arba \"%s\""
+msgstr "Argumentas „%s“ privalo būti arba „%s“, arba „%s“"
 
 #, python-format
 msgid "Argument must be one of \"%s\", not \"%s\""
-msgstr "Argumentas privalo būti arba \"%s\", arba \"%s\""
+msgstr "Argumentas privalo būti arba „%s“, arba „%s“"
 
 msgid "Too many arguments"
 msgstr "Per daug argumentų"
 
 msgid "Cannot have arguments without name following named arguments"
-msgstr "Negalimi argumentai be toliau išvardintų įvardintų argumentų"
+msgstr "Po įvardintų argumentų negali būtia argumentų be pavadinimo"
 
 #, python-format
 msgid "Argument \"%s\" is required"
-msgstr "Argumentas \"%s\" yra būtinas"
+msgstr "Argumentas „%s“ yra būtinas"
 
 #, python-format
 msgid "No argument named \"%s\""
-msgstr "Nėra argumentų pavadintų \"%s\""
+msgstr "Nėra argumentų, pavadintų „%s“"
 
 #, python-format
 msgid "Expected \"=\" to follow \"%(token)s\""
-msgstr "Tikimasi \"=\" sekant \"%(token)s\""
+msgstr "Po „%(token)s“ tikimasi „=“"
 
 #, python-format
 msgid "Expected a value for key \"%(token)s\""
-msgstr "Tikimasi reikšmės raktui \"%(token)s\""
+msgstr "Raktui „%(token)s“ tikimasi reikšmės"
 
 msgid "Your changes are not saved!"
-msgstr "Jūsų nustatymai nebuvo išaugoti!"
+msgstr "Jūsų nustatymai neišaugoti!"
 
 msgid "Page name is too long, try shorter name."
-msgstr "Puslapio vardas yra per ilgas, išbandykite trumpesnį vardą."
+msgstr "Puslapio pavadinimas per ilgas, išbandykite trumpesnį."
 
 msgid "GUI Mode"
 msgstr "GUI veiksena"
 
 msgid "Edit was cancelled."
-msgstr "Redagavimas buvo atšauktas."
+msgstr "Pakeitimai buvo atšaukti."
 
 msgid "You can't copy to an empty pagename."
-msgstr "Jūs negalite kopijuoti tuščio puslapio vardo."
+msgstr "Jūs negalite kopijuoti tuščio puslapio pavadinimo."
 
 msgid "You are not allowed to copy this page!"
 msgstr "Jums neleidžiama kopijuoti šio puslapio!"
@@ -278,11 +283,11 @@
 msgstr ""
 "'''Puslapis pavadinimu {{{'%s'}}} jau egzistuoja.'''\n"
 "\n"
-"Pabandykite kitą vardą."
+"Pabandykite kitokį."
 
 #, python-format
 msgid "Could not copy page because of file system error: %s."
-msgstr "Negalėjau nukopijuoti puslapio dėl sisteminės klaidos: %s."
+msgstr "Puslapio nepavyko nukopijuoti dėl failų sistemos klaidos: %s."
 
 msgid "You are not allowed to rename this page!"
 msgstr "Jums neleidžiama pervadinti šio puslapio!"
@@ -292,36 +297,36 @@
 
 #, python-format
 msgid "Could not rename page because of file system error: %s."
-msgstr "Negalėjau pervadinti puslapio dėl sisteminės klaidos: %s."
+msgstr "Puslapio nepavko pervadinti dėl failų sistemos klaidos: %s."
 
 msgid "You are not allowed to delete this page!"
 msgstr "Jūs negalite pašalinti šio puslapio!"
 
 msgid "Thank you for your changes. Your attention to detail is appreciated."
-msgstr "Ačiū už jūsų pakeitimus. Jūsų detalių pastebėjimas yra vertinamas."
+msgstr "Ačiū už jūsų pakeitimus. Jūsų pastabumas yra vertinamas."
 
 #, python-format
 msgid "Page \"%s\" was successfully deleted!"
-msgstr "Puslapis \"%s\" buvo sėkmingai pašalintas!"
+msgstr "Puslapis  „%s“ buvo sėkmingai pašalintas!"
 
 #, python-format
 msgid "Page could not get locked. Unexpected error (errno=%d)."
 msgstr "Puslapis negalėjo būti užrakintas. Netikėta klaida (errno=%d)."
 
 msgid "Page could not get locked. Missing 'current' file?"
-msgstr "Puslapis negalėjo būti užrakintas. Trūkstamas 'current' failas?"
+msgstr "Puslapis negalėjo būti užrakintas. Trūksta 'current' failo?"
 
 #, python-format
 msgid ""
 "Unable to determine current page revision from the 'current' file. The page %"
 "s is damaged and cannot be edited right now."
 msgstr ""
-"Negalėjau nustatyti einamosios puslapio versijos iš 'current' failo. "
-"Puslapis %s yra pažeistas arba negali būti redaguojamas šiuo metu."
+"Iš 'current' failo nepavyko nustatyti einamosios puslapio versijos. "
+"Puslapis %s yra pažeistas arba šiuo metu negali būti redaguojamas."
 
 #, python-format
 msgid "Cannot save page %s, no storage space left."
-msgstr "Negalėjau išsaugoti puslapio %s, neliko vietos."
+msgstr "Nepavyko išsaugoti puslapio %s, neliko vietos."
 
 #, python-format
 msgid "An I/O error occurred while saving page %s (errno=%d)"
@@ -349,14 +354,14 @@
 "administracinių teisių!"
 
 msgid "Notifications sent to:"
-msgstr ""
+msgstr "Pranešimas išsiųstas:"
 
 #, python-format
 msgid ""
 "The lock of %(owner)s timed out %(mins_ago)d minute(s) ago, and you were "
 "granted the lock for this page."
 msgstr ""
-"Užrakinimas %(owner)s pasibaigė prieš %(mins_ago)d minute(s), ir jums buvo "
+"Užrakinimas %(owner)s pasibaigė prieš %(mins_ago)d minutes, ir jums buvo "
 "suteiktas užrakinimas šiam puslapiui."
 
 #, python-format
@@ -382,8 +387,8 @@
 "This page is currently ''locked'' for editing by %(owner)s until %(timestamp)"
 "s, i.e. for %(mins_valid)d minute(s)."
 msgstr ""
-"Šis puslapis šiuo metu yra ''užrakintas'' redagavimams %(owner)s iki %"
-"(timestamp)s, t.y. %(mins_valid)d minutėms."
+"Šis puslapis šiuo metu yra ''užrakintas'' naudotojo %(owner)s redagavimui "
+"iki %(timestamp)s, t.y. %(mins_valid)d minutėms."
 
 #, python-format
 msgid ""
@@ -395,24 +400,24 @@
 "To leave the editor, press the Cancel button."
 msgstr ""
 "Šis puslapis buvo atidarytas redagavimui arba paskutinį kartą peržiūrėtas %"
-"(timestamp)s vartotojo %(owner)s.<<BR>>\n"
-"'''Jūs turėtumėte ''susilaikyti nuo redagavimo'' šio puslapio bent "
-"sekančioms %(mins_valid)d minutėms,\n"
+"(timestamp)s naudotojo %(owner)s.<<BR>>\n"
+"'''Jūs turėtumėte ''susilaikyti nuo šio puslapio redagavimo'' bent %"
+"(mins_valid)d minutes,\n"
 "kad išvengtumėte redagavimo konfliktų.'''<<BR>>\n"
-"Kad palikti redagavimą, spauskite mygtuką Atsisakyti."
+"Kad paliktumėte redaktorių, spauskite mygtuką Atšaukti."
 
 msgid "The wiki is currently not reachable."
 msgstr "Wiki šiuo metu nepasiekiamas."
 
 msgid "Invalid username or password."
-msgstr "Klaidingas vartotojo vardas arba slaptažodis."
+msgstr "Klaidingas naudotojo vardas arba slaptažodis."
 
 #, python-format
 msgid ""
 "The remote wiki uses a different InterWiki name (%(remotename)s) internally "
 "than you specified (%(localname)s)."
 msgstr ""
-"Nuotolinis wiki naudoja skirtingą vidinį InterWiki vardą (%(remotename)s) "
+"Nuotolinis wiki naudoja kitokį vidinį InterWiki vardą (%(remotename)s) "
 "negu jūs nurodėte (%(localname)s)."
 
 #, python-format
@@ -423,11 +428,11 @@
 msgstr "Tema nenustatyta."
 
 msgid "Installing theme files is only supported for standalone type servers."
-msgstr "Temos failų instaliavimas palaikomas tik savarankiškų tipų serveriams."
+msgstr "Temos failų diegimas palaikomas tik savarankiško tipo serveriams."
 
 #, python-format
 msgid "Installation of '%(filename)s' failed."
-msgstr "Instaliavimas '%(filename)s' nesėkmingas."
+msgstr "'%(filename)s' diegimas nesėkmingas."
 
 #, python-format
 msgid "The file %s is not a MoinMoin package file."
@@ -453,13 +458,13 @@
 
 #, python-format
 msgid "Invalid highlighting regular expression \"%(regex)s\": %(error)s"
-msgstr ""
+msgstr "Klaidinga paryškinimo reguliarioji išraiška „%(regex)s“: %(error)s"
 
 msgid ""
 "The backed up content of this page is deprecated and will not be included in "
 "search results!"
 msgstr ""
-"Šio puslapio atsarginė kopija yra uždrausta ir nebus įtraukta į paieškos "
+"Šio puslapio atsarginė kopija yra pasenusi ir nebus įtraukta į paieškos "
 "rezultatus!"
 
 #, python-format
@@ -468,32 +473,32 @@
 
 #, python-format
 msgid "Redirected from page \"%(page)s\""
-msgstr "Nukreipiama iš puslapio \"%(page)s\""
+msgstr "Nukreipta iš puslapio „%(page)s“"
 
 #, python-format
 msgid "This page redirects to page \"%(page)s\""
-msgstr "Šis puslapis nukreipia į puslapį \"%(page)s\""
+msgstr "Šis puslapis nukreipia į „%(page)s“"
 
 msgid "Create New Page"
 msgstr "Sukurti naują puslapį"
 
 msgid "You are not allowed to view this page."
-msgstr "Jums neleidžiama peržiūrėti šį puslapį."
+msgstr "Jums neleidžiama peržiūrėti šio puslapio."
 
 msgid "[all]"
 msgstr "[visi]"
 
 msgid "[not empty]"
-msgstr "[ne tušti]"
+msgstr "[ne tuščia]"
 
 msgid "[empty]"
-msgstr "[tušti]"
+msgstr "[tuščia]"
 
 msgid "filter"
 msgstr "filtras"
 
 msgid "about"
-msgstr ""
+msgstr "apie"
 
 #, python-format
 msgid ""
@@ -510,7 +515,7 @@
 msgstr "Ankstesnis"
 
 msgid "Next"
-msgstr "Paskesnis"
+msgstr "Kitas"
 
 msgid "rev"
 msgstr "ver"
@@ -523,7 +528,7 @@
 msgstr "paskutinį kartą modifikuota: %s"
 
 msgid "match"
-msgstr "sutpti"
+msgstr "sutapti"
 
 msgid "matches"
 msgstr "sutampa"
@@ -547,68 +552,70 @@
 msgstr "Slaptažodis"
 
 msgid "OpenID"
-msgstr ""
+msgstr "OpenID"
 
 msgid "Login"
 msgstr "Prisijungti"
 
-#, fuzzy
 msgid "Username"
-msgstr "Vartotojas"
-
-#, fuzzy
+msgstr "Naudotojo vardas"
+
 msgid "Member of Groups"
-msgstr "Puslapių kiekis"
+msgstr "Grupių narys"
 
 msgid "Email"
 msgstr "El. paštas"
 
 msgid "Jabber"
-msgstr ""
+msgstr "Jabber"
 
 msgid "Action"
 msgstr "Veiksmas"
 
 msgid "Enable user"
-msgstr "Įgalinti vartotoją"
+msgstr "Aktyvinti naudotoją"
 
 msgid "disabled"
-msgstr "neįgalus"
+msgstr "pasyvintas"
 
 msgid "Disable user"
-msgstr "Apriboti vartotojo veiksnumą"
+msgstr "Pasyvinti naudotoją"
 
 msgid "Mail account data"
 msgstr "Pašto paskyros informacija"
 
 msgid "Missing password. Please enter user name and password."
-msgstr "Trūkstamas slaptažodis. Prašome įvesti vartotojo vardą ir slaptažodį."
+msgstr "Trūksta slaptažodžio. Prašome įvesti naudotojo vardą ir slaptažodį."
 
 #, python-format
 msgid "LDAP server %(server)s failed."
-msgstr ""
-
-#, fuzzy
+msgstr "LDAP serverio %(server)s klaida."
+
 msgid "You need to log in."
-msgstr "Jūs dabar atsijungęs."
+msgstr "Jūs turite prisijungti."
 
 #, python-format
 msgid ""
 "If you do not have an account, <a href=\"%(userprefslink)s\">you can create "
 "one now</a>. <a href=\"%(sendmypasswordlink)s\">Forgot your password?</a>"
 msgstr ""
+"Jei dar neturite paskyros, <a href=\"%(userprefslink)s\">galite sukurti ją "
+"dabar</a>. <a href=\"%(sendmypasswordlink)s\">Pamiršote savo slaptažodį?</a>"
 
 msgid ""
 "Please choose an account name now.\n"
 "If you choose an existing account name you will be asked for the\n"
 "password and be able to associate the account with your OpenID."
 msgstr ""
+"Dabar pasirinkite paskyros pavadinimą.\n"
+"Jei pasirinksite esančios paskyros pavadinimą, būsite paprašyti\n"
+"slaptažodžio ir galėsite susieti paskyrą su savo OpenID."
 
 msgid "Choose this name"
-msgstr ""
+msgstr "Pasirinkti šį pavadinimą"
 
 msgid "This is not a valid username, choose a different one."
-msgstr ""
+msgstr "Tai netinkamas naudotojo vardas, pasirinkite kitokį."
 
 msgid ""
 "The username you have chosen is already\n"
@@ -616,52 +623,57 @@
 "the username with your OpenID. Otherwise, please choose a different\n"
 "username and leave the password field blank."
 msgstr ""
+"Jūsų pasirinktas naudotojo vardas jau\n"
+"yra. Jei tai jūsų naudotojo vardas, žemiau įveskite savo slaptažodį, kad\n"
+"susietumėte naudotojo vardą su savo OpenID. Kitu atveju pasirinkite kitokį\n"
+"naudotojo vardą ir slaptažodžio lauką palikite tuščią."
 
 msgid "Associate this name"
-msgstr ""
+msgstr "Susieti šį pavadinimą"
 
 #, python-format
 msgid "OpenID error: %s."
-msgstr ""
-
-#, fuzzy
+msgstr "OpenID klaida: %s."
+
 msgid "Verification canceled."
-msgstr "Operacija buvo atsakyta."
+msgstr "Patikrinimas atšauktas."
 
 msgid "OpenID failure."
-msgstr ""
+msgstr "OpenID klaida."
 
 msgid "Your account is now associated to your OpenID."
-msgstr ""
+msgstr "Jūsų paskyra dabar susieta su jūsų OpenID."
 
 msgid "The password you entered is not valid."
-msgstr ""
+msgstr "Įvestas netinkamas slaptažodis."
 
 msgid "OpenID verification requires that you click this button:"
-msgstr ""
+msgstr "OpenID patikrinimui privalote paspausti šį mygtuką:"
 
 msgid "Anonymous sessions need to be enabled for OpenID login."
-msgstr ""
+msgstr "OpenID prisijungimui turi būti aktyvinti anoniminiai seansai."
 
 msgid "Failed to resolve OpenID."
-msgstr ""
+msgstr "Nepavyko rasti OpenID."
 
 msgid "OpenID discovery failure, not a valid OpenID."
-msgstr ""
+msgstr "OpenID radimo klaida, netinkamas OpenID."
 
 msgid "No OpenID."
-msgstr ""
+msgstr "Nėra OpenID."
 
 msgid ""
 "If you do not have an account yet, you can still log in with your OpenID and "
 "create one during login."
 msgstr ""
+"Jei dar neturite paskyros, vis vien galite prisijungti su savo OpenID, o "
+"paskyrą susikurti prisijungimo metu."
 
 msgid "Failed to connect to database."
-msgstr ""
+msgstr "Nepavyko prisijungti prie duomenų bazės."
 
 msgid "Could not contact botbouncer.com."
-msgstr ""
+msgstr "Nepavyko prisijungti prie botbouncer.com."
 
 msgid "Wiki"
 msgstr "Wiki"
@@ -670,7 +682,7 @@
 msgstr "Puslapis"
 
 msgid "User"
-msgstr "Vartotojas"
+msgstr "Naudotojas"
 
 msgid "Diffs"
 msgstr "Pakeitimai"
@@ -736,7 +748,7 @@
 msgstr "Spauskite, kad atliktumėte šios antraštės paiešką visame tekste"
 
 msgid "Settings"
-msgstr ""
+msgstr "Nuostatos"
 
 msgid "Logout"
 msgstr "Atsijungti"
@@ -792,13 +804,13 @@
 msgstr "Panašūs puslapiai"
 
 msgid "Local Site Map"
-msgstr "Lokalus svetainės žemėlapis"
+msgstr "Vietinis svetainės žemėlapis"
 
 msgid "My Pages"
 msgstr "Mano puslapiai"
 
 msgid "Subscribe User"
-msgstr "Užsakyti vartotoją"
+msgstr "Užprenumeruoti naudotoją"
 
 msgid "Remove Spam"
 msgstr "Pašalinti šlamštą"
@@ -881,21 +893,21 @@
 msgid ""
 "Rendering of reStructured text is not possible, please install Docutils."
 msgstr ""
-"Apdorojimas reStructured teksto nėra galimas, prašome instaliuoti Docutils."
+"reStructured teksto apdorojimas negalimas, prašome įdiegti Docutils."
 
 msgid "**Maximum number of allowed includes exceeded**"
-msgstr "**Didžiausias skaičius galimų įterpimų viršytas**"
-
-#, fuzzy, python-format
+msgstr "**Viršytas didžiausias galimų įterpimų skaičius**"
+
+#, python-format
 msgid "**You are not allowed to read the page: %s**"
-msgstr "Jums neleidžiama pervadinti šio puslapio!"
+msgstr "**Jums neleidžiama skaityti puslapio: %s**"
 
 #, python-format
 msgid "**Could not find the referenced page: %s**"
 msgstr "**Negalėjau surasti minimo puslapio: %s**"
 
 msgid "XSLT option disabled, please look at HelpOnConfiguration."
-msgstr "XSLT opcija neįgalinta, prašome žiūrėti į HelpOnConfiguration."
+msgstr "XSLT parinktis pasyvinta, prašome žiūrėti HelpOnConfiguration."
 
 msgid "XSLT processing is not available, please install 4suite 1.x."
 msgstr "XSLT apdorojimas negalimas, prašome įdiegti 4suite 1.x."
@@ -906,22 +918,22 @@
 
 #, python-format
 msgid "Expected \"%(wanted)s\" after \"%(key)s\", got \"%(token)s\""
-msgstr "Tikėtasi \"%(wanted)s\" po \"%(key)s\", gauta \"%(token)s\""
+msgstr "Tikėtasi „%(wanted)s“ po „%(key)s“, gauta „%(token)s“"
 
 #, python-format
 msgid "Expected an integer \"%(key)s\" before \"%(token)s\""
-msgstr "Tikėtasi sveikojo skaičiaus \"%(key)s\" prieš \"%(token)s\""
+msgstr "Tikėtasi sveikojo skaičiaus „%(key)s“ prieš „%(token)s“"
 
 #, python-format
 msgid "Expected an integer \"%(arg)s\" after \"%(key)s\""
-msgstr "Tikėtasi skaičiaus \"%(arg)s\" po \"%(key)s\""
+msgstr "Tikėtasi skaičiaus „%(arg)s“ po „%(key)s“"
 
 #, python-format
 msgid "Expected a color value \"%(arg)s\" after \"%(key)s\""
-msgstr "Tikėtasi spalvos reikšmės \"%(arg)s\" po \"%(key)s\""
+msgstr "Tikėtasi spalvos reikšmės „%(arg)s“ po „%(key)s“"
 
 msgid "FrontPage"
-msgstr "PirmasisPuslapia"
+msgstr "PirmasisPuslapis"
 
 msgid "RecentChanges"
 msgstr "PaskutiniaiPakeitimai"
@@ -966,7 +978,7 @@
 msgstr "Kt"
 
 msgid "Fri"
-msgstr "Pe"
+msgstr "Pn"
 
 msgid "Sat"
 msgstr "Št"
@@ -984,64 +996,61 @@
 msgstr "PanašūsPuslapiai"
 
 msgid "LocalSiteMap"
-msgstr "LokalusSvetainėsŽemėlapis"
+msgstr "VietinisSvetainėsŽemėlapis"
 
 msgid "RenamePage"
 msgstr "PervadintiPuslapį"
 
 msgid "SpellCheck"
-msgstr "KlaidųTaisymas"
+msgstr "RašybosTikrinimas"
 
 msgid "Discussion"
-msgstr ""
+msgstr "Aptarimas"
 
 #, python-format
 msgid ""
 "Sorry, can not save page because \"%(content)s\" is not allowed in this wiki."
 msgstr ""
-"Atsiprašome, tačiau jūs negalite išsaugoti puslapio, kadangi \"%(content)s\" "
+"Atsiprašome, tačiau jūs negalite išsaugoti puslapio, kadangi „%(content)s“ "
 "nėra leidžiamas šiame wiki."
 
 msgid "Notification"
-msgstr ""
+msgstr "Pranešimas"
 
 msgid "Notification settings saved!"
-msgstr ""
-
-#, fuzzy
+msgstr "Pranešimo nustatymai išsaugoti!"
+
 msgid "'''Email'''"
-msgstr "El. paštas"
+msgstr "'''El. paštas'''"
 
 msgid "'''Jabber'''"
-msgstr ""
+msgstr "'''Jabber'''"
 
 msgid "'''Event type'''"
-msgstr ""
+msgstr "'''Įvykio tipas'''"
 
 msgid "Select the events you want to be notified about."
-msgstr ""
+msgstr "Pasirinkite įvykius, apie kuriuos norėtumėte būti informuoti."
 
 msgid ""
 "Before you can be notified, you need to provide a way to contact you in the "
 "general preferences."
 msgstr ""
-
-#, fuzzy
+"Norėdami būti informuojami, pagrindiniuose nustatymuose turite pateikti "
+"susisiekimo su jumis būdą."
+
 msgid "Subscribed events"
-msgstr "Užsakyti vartotoją"
-
-#, fuzzy
+msgstr "Prenumeruojami įvykiai"
+
 msgid "Subscribed wiki pages<<BR>>(one regex per line)"
 msgstr ""
-"Užsiprenumeruoti wiki puslapius (naudokite vieną reguliariąją išraišką "
-"vienoje eilutėje)"
+"Prenumeruojami wiki puslapiai<<BR>>(viena reguliarioji išraišką eilutėje)"
 
 msgid "Save"
 msgstr "Išsaugoti"
 
-#, fuzzy
 msgid "Change password"
-msgstr "Slaptažodis"
+msgstr "Pakeisti slaptažodį"
 
 msgid "Passwords don't match!"
 msgstr "Slaptažodžiai nesutampa!"
@@ -1054,68 +1063,71 @@
 msgstr "Slaptažodis nepriimtinas: %s"
 
 msgid "Your password has been changed."
-msgstr ""
+msgstr "Jūsų slaptažodis pakeistas"
 
 msgid "To change your password, enter a new password twice."
-msgstr ""
+msgstr "Norėdami savo pakeisti slaptažodį, du kartus įveskite naują slaptažodį."
 
 msgid "Password repeat"
 msgstr "Pakartoti slaptažodį"
 
 msgid "Switch user"
-msgstr ""
+msgstr "Perjungti naudotoją"
 
 msgid "No user selected"
-msgstr ""
+msgstr "Naudotojas nepasirinktas"
 
 msgid ""
 "You can now change the settings of the selected user account; log out to get "
 "back to your account."
 msgstr ""
+"Dabar galite keisti pasirinkto naudotojo paskyros nuostatas; "
+"išsiregistruokite, kad grįžtumėte prie savo paskyros."
 
 msgid "You are the only user."
-msgstr ""
+msgstr "Jūs esate vienintelis naudotojas."
 
 msgid ""
 "As a superuser, you can temporarily assume the identity of another user."
 msgstr ""
+"Jūs, kaip administratorius, galite laikinai pasisavinti kito naudotojo "
+"tapatybę."
 
 msgid "Select User"
-msgstr "Pasirikite vartotoją"
+msgstr "Pasirikite naudotoją"
 
 msgid "OpenID settings"
-msgstr ""
+msgstr "OpenID nuostatos"
 
 msgid "Cannot remove all OpenIDs."
-msgstr ""
+msgstr "Negalima pašalinti visų OpenID."
 
 msgid "The selected OpenIDs have been removed."
-msgstr ""
+msgstr "Pažymėti OpenID buvo pašalinti."
 
 msgid "No OpenID given."
-msgstr ""
+msgstr "Nepateiktas joks OpenID."
 
 msgid "OpenID is already present."
-msgstr ""
-
-#, fuzzy
+msgstr "OpenID jau yra."
+
 msgid "This OpenID is already used for another account."
-msgstr "Šis puslapis jau pašalintas, arba niekada nebuvo sukurtas!"
+msgstr "Šis OpenID jau naudojamas kitai paskyrai"
 
 msgid "OpenID added successfully."
-msgstr ""
+msgstr "OpenID sėkmingai pridėtas"
 
 msgid "Current OpenIDs"
-msgstr ""
+msgstr "Esami OpenID"
 
 msgid "Remove selected"
-msgstr ""
+msgstr "Pašalinti pažymėtus"
 
 msgid "Add OpenID"
-msgstr ""
+msgstr "Pridėti OpenID"
 
 msgid "Preferences"
-msgstr "Nustatymai"
+msgstr "Nuostatos"
 
 #, python-format
 msgid ""
@@ -1123,16 +1135,16 @@
 "Name may contain any Unicode alpha numeric character, with optional one\n"
 "space between words. Group page name is not allowed."
 msgstr ""
-"Klaidingas vartotojo vardas {{{'%s'}}}.\n"
+"Klaidingas naudotojo vardas {{{'%s'}}}.\n"
 "Vardas gali susidaryti iš bet kokių Unikodo raidinių skaitmeninių simbolių, "
 "su neprivalomu vienu\n"
-"tarpu tarp žodžių. Grupės puslapių vardai neleidžiami."
+"tarpu tarp žodžių. Grupės puslapio pavadinimas neleidžiamas."
 
 msgid "This user name already belongs to somebody else."
-msgstr "Šis vartotojo vardas jau priklauso kažkam kitkam."
+msgstr "Šis naudotojo vardas jau priklauso kažkam kitkam."
 
 msgid "Empty user name. Please enter a user name."
-msgstr "Tuščias vartotojo vardas. Prašome įvesti vartotojo vardą."
+msgstr "Tuščias naudotojo vardas. Prašome įvesti naudotojo vardą."
 
 msgid ""
 "Please provide your email address. If you lose your login information, you "
@@ -1144,25 +1156,24 @@
 msgid "This email already belongs to somebody else."
 msgstr "Šis el. pašto adresas jau priklauso kažkam kitkam."
 
-#, fuzzy
 msgid "This jabber id already belongs to somebody else."
-msgstr "Šis el. pašto adresas jau priklauso kažkam kitkam."
+msgstr "Šis jabber id jau priklauso kažkam kitkam."
 
 #, python-format
 msgid "The theme '%(theme_name)s' could not be loaded!"
 msgstr "Tema '%(theme_name)s' negalėjo būti įkrauta!"
 
 msgid "User preferences saved!"
-msgstr "Vartotojo nustatymai išsaugoti!"
+msgstr "Naudotojo nuostatos išsaugotos!"
 
 msgid "Default"
-msgstr "Numatytasis"
+msgstr "Numatyta"
 
 msgid "<Browser setting>"
 msgstr "<Naršyklės nustatymai>"
 
 msgid "the one preferred"
-msgstr "duodama pirmenybė"
+msgstr "nustatytoji"
 
 msgid "free choice"
 msgstr "laisvas pasirinkimas"
@@ -1171,7 +1182,7 @@
 msgstr "Nustatyta tema"
 
 msgid "Editor Preference"
-msgstr "Redaktoriaus nustatymai"
+msgstr "Redaktoriaus pasirinkimas"
 
 msgid "Editor shown on UI"
 msgstr "Redaktorius rodomas UI"
@@ -1189,7 +1200,7 @@
 msgstr "Datos formatas"
 
 msgid "Preferred language"
-msgstr "Nustatyta kalba"
+msgstr "Kalbos pasirinkimas"
 
 msgid "General options"
 msgstr "Bendri nustatymai"
@@ -1198,15 +1209,15 @@
 msgstr "Greitosios nuorodos"
 
 msgid "OpenID server"
-msgstr ""
+msgstr "OpenID serveris"
 
 msgid "The selected websites have been removed."
-msgstr ""
+msgstr "Pažymėtos svetainės buvo pašalintos."
 
 msgid "Trusted websites"
-msgstr ""
-
-#, fuzzy, python-format
+msgstr "Patikimos svetainės"
+
+#, python-format
 msgid ""
 "Dear Wiki user,\n"
 "\n"
@@ -1215,14 +1226,12 @@
 "\n"
 "The \"%(pagename)s\" page has been changed by %(editor)s:\n"
 msgstr ""
-"Mielasis Wiki vartotojau,\n"
+"Mielasis Wiki naudotojau,\n"
 "\n"
-"Jūs sėkmingai užsiregistravote wiki puslapyje arba wiki kategorijoje \"%"
-"(sitename)s\" dėl pakeitimų pranešimų.\n"
+"Jūs užsiregistravote wiki puslapyje arba wiki kategorijoje „%(sitename)s“ "
+"pranešimų apie pakeitimus gavimui.\n"
 "\n"
-"Toliau paminėtas puslapis buvo pakeistas %(editor)s:\n"
-"%(pagelink)s\n"
-"\n"
+"Puslapis „%(pagename)s“ buvo pakeistas %(editor)s:\n"
 
 msgid "New page:\n"
 msgstr "Naujas puslapis:\n"
@@ -1230,7 +1239,7 @@
 msgid "No differences found!\n"
 msgstr "Pakeitimų nerasta!\n"
 
-#, fuzzy, python-format
+#, python-format
 msgid ""
 "Dear wiki user,\n"
 "\n"
@@ -1240,16 +1249,15 @@
 "The page \"%(pagename)s\" has been deleted by %(editor)s:\n"
 "\n"
 msgstr ""
-"Mielasis Wiki vartotojau,\n"
-"\n"
-"Jūs sėkmingai užsiregistravote wiki puslapyje arba wiki kategorijoje \"%"
-"(sitename)s\" dėl pakeitimų pranešimų.\n"
+"Mielasis Wiki naudotojau,\n"
 "\n"
-"Toliau paminėtas puslapis buvo pakeistas %(editor)s:\n"
-"%(pagelink)s\n"
+"Jūs užsiregistravote wiki puslapyje „%(sitename)s“ pranešimų apie "
+"pakeitimus gavimui.\n"
 "\n"
-
-#, fuzzy, python-format
+"Puslapis „%(pagename)s“ buvo ištrintas %(editor)s:\n"
+"\n"
+
+#, python-format
 msgid ""
 "Dear wiki user,\n"
 "\n"
@@ -1259,18 +1267,17 @@
 "The page \"%(pagename)s\" has been renamed from \"%(oldname)s\" by %(editor)"
 "s:\n"
 msgstr ""
-"Mielasis Wiki vartotojau,\n"
+"Mielasis Wiki naudotojau,\n"
 "\n"
-"Jūs sėkmingai užsiregistravote wiki puslapyje arba wiki kategorijoje \"%"
-"(sitename)s\" dėl pakeitimų pranešimų.\n"
+"Jūs užsiregistravote wiki puslapyje „%(sitename)s“ pranešimų apie "
+"pakeitimus gavimui.\n"
 "\n"
-"Toliau paminėtas puslapis buvo pakeistas %(editor)s:\n"
-"%(pagelink)s\n"
+"Puslapis „%(pagename)s“ buvo pervadintas iš „%(oldname)s“ %(editor)s:\n"
 "\n"
 
 #, python-format
 msgid "New user account created on %(sitename)s"
-msgstr ""
+msgstr "%(sitename)s sukurta nauja naudotojo paskyra"
 
 #, python-format
 msgid ""
@@ -1279,10 +1286,14 @@
 "    User name: %(username)s\n"
 "    Email address: %(useremail)s"
 msgstr ""
-
-#, fuzzy, python-format
+"Mielasis administratoriau, ką tik sukurtas naujas naudotojas. Informacija:\n"
+"\n"
+"    Naudotojo vardas: %(username)s\n"
+"    El. pašto adresas: %(useremail)s"
+
+#, python-format
 msgid "New attachment added to page %(pagename)s on %(sitename)s"
-msgstr "<<Verbatim(attachment:)>>%(filename)s iš %(pagename)s"
+msgstr "Naujas priedas įkeltas į %(sitename)s puslapį %(pagename)s"
 
 #, python-format
 msgid ""
@@ -1295,78 +1306,78 @@
 "Attachment name: %(attach_name)s\n"
 "Attachment size: %(attach_size)s\n"
 msgstr ""
+"Mielasis Wiki naudotojau,\n"
+"\n"
+"Jūs užsiregistravote wiki puslapyje „%(page_name)s“ pranešimų apie "
+"pakeitimus gavimui. %(editor)s šiame puslapyje įkėlė priedą. "
+"Išsamesnė informacija:\n"
+"\n"
+"Priedo pavadinimas: %(attach_name)s\n"
+"Priedo dydis: %(attach_size)s\n"
 
 msgid "Page has been modified"
-msgstr ""
+msgstr "Puslapis buvo pakeistas"
 
 msgid "Page has been modified in a trivial fashion"
-msgstr ""
-
-#, fuzzy
+msgstr "Puslapis buvo nežymiai pakeistas"
+
 msgid "Page has been renamed"
-msgstr "Puslapių aplankymai ir pakeitimai"
-
-#, fuzzy
+msgstr "Puslapis pervadintas"
+
 msgid "Page has been deleted"
-msgstr "Puslapis \"%s\" buvo sėkmingai pašalintas!"
-
-#, fuzzy
+msgstr "Puslapis pašalintas"
+
 msgid "Page has been copied"
-msgstr "Puslapių aplankymai ir pakeitimai"
-
-#, fuzzy
+msgstr "Puslapis nukopijuotas"
+
 msgid "A new attachment has been added"
-msgstr "Naujas priedo pavadinimas"
+msgstr "Įkeltas naujas priedas"
 
 msgid "A page has been reverted to a previous state"
-msgstr ""
-
-#, fuzzy
+msgstr "Puslapis grąžintas į buvusią būseną"
+
 msgid "A user has subscribed to a page"
-msgstr "Jūs buvote užprenumeruotas šiame puslapyje."
+msgstr "Naudotojas užsiprenumeravo puslapį"
 
 msgid "A new account has been created"
-msgstr ""
+msgstr "Sukurta nauja paskyra"
 
 #, python-format
 msgid "[%(sitename)s] %(trivial)sUpdate of \"%(pagename)s\" by %(username)s"
 msgstr ""
-"[%(sitename)s] %(trivial)sAtnaujinimas \"%(pagename)s\" vartotojo %(username)"
-"s"
+"[%(sitename)s] %(trivial)sNaudotojo %(username)s atnaujintas „%(pagename)s“"
 
 msgid "Trivial "
-msgstr "Paprastas "
+msgstr "Nežymus "
 
 #, python-format
 msgid ""
 "Attachment link: %(attach)s\n"
 "Page link: %(page)s\n"
 msgstr ""
-
-#, fuzzy
+"Priedo nuoroda: %(attach)s\n"
+"Puslapio nuoroda: %(page)s\n"
+
 msgid "Attachment link"
-msgstr "Priedai"
-
-#, fuzzy
+msgstr "Priedo nuoroda"
+
 msgid "Page link"
-msgstr "Puslapiai panašūs į \"%s\""
-
-#, fuzzy
+msgstr "Puslapio nuoroda"
+
 msgid "Changed page"
-msgstr "Paketo puslapiai"
-
-#, fuzzy
+msgstr "Pakeistas puslapis"
+
 msgid "Page changed"
-msgstr "Išsaugoti pakeitimus"
+msgstr "Puslapis pakeistas"
 
 msgid "Options --pages and --search are mutually exclusive!"
-msgstr "Opcijos --pages ir --search yra nesuderinamos!"
+msgstr "Parametrai --pages ir --search yra nesuderinamos!"
 
 msgid "You must specify an output file!"
-msgstr "Jūs privalote nurodyti išvesties failą!"
+msgstr "Privalote nurodyti išvesties failą!"
 
 msgid "No pages specified using --pages or --search, assuming full package."
-msgstr "Nenurodyti puslapiai naudojant --pages arba --search,"
+msgstr "Nenurodyti puslapiai naudojant --pages arba --search, numatomas pilnas paketas"
 
 msgid "Output file already exists! Cowardly refusing to continue!"
 msgstr "Išvesties failas jau egzistuoja! Atsisakoma tęsti!"
@@ -1378,22 +1389,22 @@
 msgstr "Kiti"
 
 msgid "Charts are not available!"
-msgstr "Diagramos nėra prieinamos!"
+msgstr "Diagramos neprieinamos!"
 
 msgid "Page Size Distribution"
-msgstr "Puslapio distribucijos dydis"
+msgstr "Puslapių dydžių paplitimas"
 
 msgid "page size upper bound [bytes]"
-msgstr "puslapio aukštesnysis apribojimas [baitais]"
+msgstr "puslapio dydžio apribojimas [baitais]"
 
 msgid "# of pages of this size"
-msgstr "# puslapių šio dydžio"
+msgstr "# šio dydžio puslapių"
 
 msgid "Views/day"
-msgstr "Peržiūros/dieną"
+msgstr "Peržiūros per dieną"
 
 msgid "Edits/day"
-msgstr "Pakeitimai/dieną"
+msgstr "Pakeitimai per dieną"
 
 msgid "Page hits and edits"
 msgstr "Puslapių aplankymai ir pakeitimai"
@@ -1406,8 +1417,8 @@
 "green=view\n"
 "red=edit"
 msgstr ""
-"žalias=peržiūrėti\n"
-"raudotas=redaguoti"
+"žalia=peržiūrėti\n"
+"raudona=redaguoti"
 
 msgid "date"
 msgstr "data"
@@ -1416,12 +1427,11 @@
 msgstr "# apsilankymų"