Browse Source

Merge pull request #498 from flaskbb/fixes-and-cleanups

Fixes and cleanups
Peter Justin 6 years ago
parent
commit
70787a1ae5

+ 4 - 7
docs/installation.rst

@@ -27,7 +27,7 @@ are running Linux) to install them.
 
 
 For example, on archlinux you can install them with::
 For example, on archlinux you can install them with::
 
 
-    $ sudo pacman -S python2-virtualenvwrapper
+    $ sudo pacman -S python-virtualenvwrapper
 
 
 or, on macOS, you can install them with::
 or, on macOS, you can install them with::
 
 
@@ -38,7 +38,7 @@ virtualenv and the package manager will resolve all the dependencies for you.
 
 
 After that, you can create your virtualenv with::
 After that, you can create your virtualenv with::
 
 
-    $ mkvirtualenv -a /path/to/flaskbb -p $(which python2) flaskbb
+    $ mkvirtualenv -a /path/to/flaskbb -p $(which python) flaskbb
 
 
 This will create a virtualenv named ``flaskbb`` using the python interpreter in
 This will create a virtualenv named ``flaskbb`` using the python interpreter in
 version 2 and it will set your project directory to ``/path/to/flaskbb``.
 version 2 and it will set your project directory to ``/path/to/flaskbb``.
@@ -382,12 +382,9 @@ Just install gunicorn via pip inside your virtualenv::
 
 
     pip install gunicorn
     pip install gunicorn
 
 
-FlaskBB has an built-in command to gunicorn::
+and run FlaskBB using the  ``gunicorn`` command::
 
 
-    flaskbb start
-
-To see a full list of options either type ``flaskbb start --help`` or
-visit the :ref:`cli <commandline>` docs.
+    gunicorn wsgi:flaskbb --log-file logs/gunicorn.log --pid gunicorn.pid -w 4
 
 
 
 
 nginx
 nginx

+ 17 - 8
flaskbb/management/forms.py

@@ -9,22 +9,24 @@
     :license: BSD, see LICENSE for more details.
     :license: BSD, see LICENSE for more details.
 """
 """
 import logging
 import logging
+
+from flask_allows import Permission
+from flask_babelplus import lazy_gettext as _
 from flask_wtf import FlaskForm
 from flask_wtf import FlaskForm
+from sqlalchemy.orm.session import make_transient, make_transient_to_detached
 from wtforms import (BooleanField, HiddenField, IntegerField, PasswordField,
 from wtforms import (BooleanField, HiddenField, IntegerField, PasswordField,
                      SelectField, StringField, SubmitField, TextAreaField)
                      SelectField, StringField, SubmitField, TextAreaField)
-from wtforms.validators import (DataRequired, Optional, Email, regexp, Length,
-                                URL, ValidationError)
 from wtforms.ext.sqlalchemy.fields import (QuerySelectField,
 from wtforms.ext.sqlalchemy.fields import (QuerySelectField,
                                            QuerySelectMultipleField)
                                            QuerySelectMultipleField)
-from sqlalchemy.orm.session import make_transient, make_transient_to_detached
-from flask_babelplus import lazy_gettext as _
+from wtforms.validators import (URL, DataRequired, Email, Length, Optional,
+                                ValidationError, regexp)
 
 
-from flaskbb.utils.fields import BirthdayField
 from flaskbb.extensions import db
 from flaskbb.extensions import db
-from flaskbb.forum.models import Forum, Category
-from flaskbb.user.models import User, Group
+from flaskbb.forum.models import Category, Forum
+from flaskbb.user.models import Group, User
+from flaskbb.utils.fields import BirthdayField
+from flaskbb.utils.helpers import check_image
 from flaskbb.utils.requirements import IsAtleastModerator
 from flaskbb.utils.requirements import IsAtleastModerator
-from flask_allows import Permission
 
 
 
 
 logger = logging.getLogger(__name__)
 logger = logging.getLogger(__name__)
@@ -135,6 +137,13 @@ class UserForm(FlaskForm):
         if user:
         if user:
             raise ValidationError(_("This email address is already taken."))
             raise ValidationError(_("This email address is already taken."))
 
 
+    def validate_avatar(self, field):
+        if field.data is not None:
+            error, status = check_image(field.data)
+            if error is not None:
+                raise ValidationError(error)
+            return status
+
     def save(self):
     def save(self):
         data = self.data
         data = self.data
         data.pop('submit', None)
         data.pop('submit', None)

+ 2 - 2
flaskbb/templates/forum/edit_forum.html

@@ -32,7 +32,7 @@
                     <div class="col-md-2 col-sm-2 hidden-xs topic-stats">{% trans %}Posts{% endtrans %}</div>
                     <div class="col-md-2 col-sm-2 hidden-xs topic-stats">{% trans %}Posts{% endtrans %}</div>
                     <div class="col-md-2 col-sm-2 hidden-xs topic-stats">{% trans %}Views{% endtrans %}</div>
                     <div class="col-md-2 col-sm-2 hidden-xs topic-stats">{% trans %}Views{% endtrans %}</div>
                     <div class="col-md-3 col-sm-3 col-xs-4 topic-last-post">{% trans %}Last Post{% endtrans %}</div>
                     <div class="col-md-3 col-sm-3 col-xs-4 topic-last-post">{% trans %}Last Post{% endtrans %}</div>
-                    <div class="col-md-1 col-sm-1 col-xs-2 topic-select-all"><input type="checkbox" name="rowtoggle" class="action-checkall" title="Select All"/></div>
+                    <div class="col-md-1 col-sm-1 col-xs-2 topic-select-all"><input type="checkbox" name="rowtoggle" class="action-checkall" title="{% trans %}Select all{% endtrans %}"/></div>
                 </div>
                 </div>
 
 
                 {% for topic, last_post, topicread in topics.items %}
                 {% for topic, last_post, topicread in topics.items %}
@@ -98,7 +98,7 @@
                     </div>
                     </div>
 
 
                     <div class="col-md-1 col-sm-1 col-xs-2 topic-select">
                     <div class="col-md-1 col-sm-1 col-xs-2 topic-select">
-                        <input type="checkbox" name="rowid" class="action-checkbox" value="{{ topic.id }}" title="Select Topic"/>
+                        <input type="checkbox" name="rowid" class="action-checkbox" value="{{ topic.id }}" title="{% trans %}Select topic{% endtrans %}"/>
                     </div>
                     </div>
                 </div>
                 </div>
                 {% else %}
                 {% else %}

+ 9 - 11
flaskbb/templates/forum/new_post.html

@@ -1,4 +1,10 @@
-{% set page_title = _("New Post") %}
+{% if edit_mode %}
+    {% set title = _("Edit Post") %}
+{% else %}
+    {% set title = _("New Post") %}
+{% endif %}
+
+{% set page_title = title %}
 {% set active_forum_nav=True %}
 {% set active_forum_nav=True %}
 
 
 {% extends theme("layout.html") %}
 {% extends theme("layout.html") %}
@@ -12,11 +18,7 @@
         <li><a href="{{ topic.forum.url }}">{{ topic.forum.title }}</a></li>
         <li><a href="{{ topic.forum.url }}">{{ topic.forum.title }}</a></li>
         <li><a href="{{ topic.url }}">{{ topic.title }}</a></li>
         <li><a href="{{ topic.url }}">{{ topic.title }}</a></li>
         <li class="active">
         <li class="active">
-            {% if edit_mode %}
-                {% trans %}Edit Post{% endtrans %}
-            {% else %}
-                {% trans %}New Post{% endtrans %}
-            {% endif %}
+            {{ title }}
         </li>
         </li>
     </ol>
     </ol>
 
 
@@ -24,11 +26,7 @@
         {{ form.hidden_tag() }}
         {{ form.hidden_tag() }}
         <div class="panel page-panel">
         <div class="panel page-panel">
             <div class="panel-heading page-head">
             <div class="panel-heading page-head">
-                {% if edit_mode %}
-                    {% trans %}Edit Post{% endtrans %}
-                {% else %}
-                    {% trans %}New Post{% endtrans %}
-                {% endif %}
+                {{ title }}
             </div>
             </div>
 
 
             <div class="panel-body page-body">
             <div class="panel-body page-body">

+ 7 - 13
flaskbb/templates/forum/search_result.html

@@ -26,27 +26,22 @@
 
 
                     <!-- check if user is online or not -->
                     <!-- check if user is online or not -->
                     {% if post.user|is_online %}
                     {% if post.user|is_online %}
-                    <div class="author-online" data-toggle="tooltip" data-placement="top" title="online"></div>
+                    <div class="author-online" data-toggle="tooltip" data-placement="top" title="{% trans %}online{% endtrans %}"></div>
                     {% else %}
                     {% else %}
-                    <div class="author-offline" data-toggle="tooltip" data-placement="top" title="offline"></div>
+                    <div class="author-offline" data-toggle="tooltip" data-placement="top" title="{% trans %}offline{% endtrans %}"></div>
                     {% endif %}
                     {% endif %}
                     <div class="author-title"><h5>{{ post.user.primary_group.name }}</h5></div>
                     <div class="author-title"><h5>{{ post.user.primary_group.name }}</h5></div>
 
 
+                    {{ run_hook("flaskbb_tpl_post_author_info_before", user=user, post=post) }}
+
                     {% if post.user.avatar %}
                     {% if post.user.avatar %}
                         <div class="author-avatar"><img src="{{ post.user.avatar }}" alt="avatar"></div>
                         <div class="author-avatar"><img src="{{ post.user.avatar }}" alt="avatar"></div>
                     {% endif %}
                     {% endif %}
 
 
                     <div class="author-registered">{% trans %}Joined{% endtrans %}: {{ post.user.date_joined|format_date }}</div>
                     <div class="author-registered">{% trans %}Joined{% endtrans %}: {{ post.user.date_joined|format_date }}</div>
                     <div class="author-posts">{% trans %}Posts{% endtrans %}: {{ post.user.post_count }}</div>
                     <div class="author-posts">{% trans %}Posts{% endtrans %}: {{ post.user.post_count }}</div>
-                    <div class="author-pm">
-                        {% if current_user.is_authenticated and post.user_id %}
-                        <a href="{{ url_for('message.new_conversation') }}?to_user={{ post.user.username }}">{% trans %}Message{% endtrans %}</a>
-                        {% endif %}
-                    </div>
 
 
-                    {% if post.user.website %}
-                    <div class="author-website"><a href="{{ post.user.website }}" rel="nofollow">{% trans %}Website{% endtrans %}</a></div>
-                    {% endif %}
+                    {{ run_hook("flaskbb_tpl_post_author_info_after", user=user, post=post) }}
 
 
                     {% else %}
                     {% else %}
                     <!-- user deleted or guest -->
                     <!-- user deleted or guest -->
@@ -66,8 +61,7 @@
                             </a>
                             </a>
                             {% if post.user_id and post.date_modified %}
                             {% if post.user_id and post.date_modified %}
                             <small>
                             <small>
-                                (Last modified: {{ post.date_modified|format_datetime }} by
-                                <a href="{{ url_for('user.profile', username=post.modified_by) }}">{{ post.modified_by }}</a>.)
+                                ({% trans date=post.date_modified|format_datetime, user_url=url_for('user.profile', username=post.modified_by), user=post.modified_by %}Last modified: {{ date }} by <a href="{{ user_url }}">{{ user }}</a>{% endtrans %})
                             </small>
                             </small>
                             {% endif %}
                             {% endif %}
                         </div>
                         </div>
@@ -205,7 +199,7 @@
     {% if result['forum'] %}
     {% if result['forum'] %}
     <div class="panel panel-default category-panel">
     <div class="panel panel-default category-panel">
         <div class="panel-heading category-head">
         <div class="panel-heading category-head">
-            Forums
+            {% trans %}Forums{% endtrans %}
         </div>
         </div>
 
 
         <div class="panel-body category-body">
         <div class="panel-body category-body">

+ 15 - 16
flaskbb/templates/forum/topic.html

@@ -17,7 +17,7 @@
     {% if topic.hidden %}
     {% if topic.hidden %}
     <div class="alert alert-warning">
     <div class="alert alert-warning">
         <span class="fa fa-user-secret"></span>
         <span class="fa fa-user-secret"></span>
-        {{ gettext("This topic is hidden (%(when)s  by %(who)s)", who=topic.hidden_by.username, when=format_date(topic.hidden_at)) }}
+        {{ gettext("This topic is hidden (%(when)s by %(who)s)", who=topic.hidden_by.username, when=format_date(topic.hidden_at)) }}
     </div>
     </div>
     {% endif %}
     {% endif %}
 
 
@@ -37,9 +37,9 @@
 
 
                     <!-- check if user is online or not -->
                     <!-- check if user is online or not -->
                     {% if user|is_online %}
                     {% if user|is_online %}
-                    <div class="author-online" data-toggle="tooltip" data-placement="top" title="online"></div>
+                    <div class="author-online" data-toggle="tooltip" data-placement="top" title="{% trans %}online{% endtrans %}"></div>
                     {% else %}
                     {% else %}
-                    <div class="author-offline" data-toggle="tooltip" data-placement="top" title="offline"></div>
+                    <div class="author-offline" data-toggle="tooltip" data-placement="top" title="{% trans %}offline{% endtrans %}"></div>
                     {% endif %}
                     {% endif %}
                     <div class="author-title"><h5>{{ user.primary_group.name }}</h5></div>
                     <div class="author-title"><h5>{{ user.primary_group.name }}</h5></div>
 
 
@@ -72,8 +72,7 @@
                             </a>
                             </a>
                             {% if post.user_id and post.date_modified %}
                             {% if post.user_id and post.date_modified %}
                             <small>
                             <small>
-                                (Last modified: {{ post.date_modified|format_datetime }} by
-                                <a href="{{ url_for('user.profile', username=post.modified_by) }}">{{ post.modified_by }}</a>.)
+                                ({% trans date=post.date_modified|format_datetime, user_url=url_for('user.profile', username=post.modified_by), user=post.modified_by %}Last modified: {{ date }} by <a href="{{ user_url }}">{{ user }}</a>{% endtrans %})
                             </small>
                             </small>
                             {% endif %}
                             {% endif %}
                         </div>
                         </div>
@@ -88,7 +87,7 @@
                             {% if post.hidden %}
                             {% if post.hidden %}
                             <div class="alert alert-warning">
                             <div class="alert alert-warning">
                                 <span class="fa fa-user-secret"></span>
                                 <span class="fa fa-user-secret"></span>
-                                {{ gettext("This post is hidden (%(when)s  by %(who)s)", who=post.hidden_by.username, when=format_date(post.hidden_at)) }}
+                                {{ gettext("This post is hidden (%(when)s by %(who)s)", who=post.hidden_by.username, when=format_date(post.hidden_at)) }}
                             </div>
                             </div>
                             {% endif %}
                             {% endif %}
 
 
@@ -116,20 +115,20 @@
 
 
                             {% if current_user|post_reply(topic) %}
                             {% if current_user|post_reply(topic) %}
                             <!-- Quick quote -->
                             <!-- Quick quote -->
-                                <a href="#" class="btn btn-icon icon-reply quote-btn" data-post-id="{{ post.id }}" data-toggle="tooltip" data-placement="top" title="Quote this post"></a>
+                                <a href="#" class="btn btn-icon icon-reply quote-btn" data-post-id="{{ post.id }}" data-toggle="tooltip" data-placement="top" title="{% trans %}Quote this post{% endtrans %}"></a>
                             <!-- Full quote/reply -->
                             <!-- Full quote/reply -->
-                                <a href="{{ url_for('forum.reply_post', topic_id=topic.id, post_id=post.id) }}" class="btn btn-icon icon-replyall" data-toggle="tooltip" data-placement="top" title="Full Reply"></a>
+                                <a href="{{ url_for('forum.reply_post', topic_id=topic.id, post_id=post.id) }}" class="btn btn-icon icon-replyall" data-toggle="tooltip" data-placement="top" title="{% trans %}Full Reply{% endtrans %}"></a>
                             {% endif %}
                             {% endif %}
 
 
                             {% if current_user|edit_post(post) %}
                             {% if current_user|edit_post(post) %}
                             <!-- Edit Post -->
                             <!-- Edit Post -->
-                            <a href="{{ url_for('forum.edit_post', post_id=post.id) }}" class="btn btn-icon icon-edit" data-toggle="tooltip" data-placement="top" title="Edit this post"></a>
+                            <a href="{{ url_for('forum.edit_post', post_id=post.id) }}" class="btn btn-icon icon-edit" data-toggle="tooltip" data-placement="top" title="{% trans %}Edit this post{% endtrans %}"></a>
                             {% endif %}
                             {% endif %}
                             {% if topic.first_post_id == post.id %}
                             {% if topic.first_post_id == post.id %}
                                 {% if current_user|delete_topic(topic) %}
                                 {% if current_user|delete_topic(topic) %}
                                 <form class="inline-form" method="post" action="{{ url_for('forum.delete_topic', topic_id=topic.id, slug=topic.slug) }}">
                                 <form class="inline-form" method="post" action="{{ url_for('forum.delete_topic', topic_id=topic.id, slug=topic.slug) }}">
                                     <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
                                     <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
-                                    <button class="btn btn-icon icon-delete" name="confirmDialog" data-toggle="tooltip" data-placement="top" title="Delete this topic"></button>
+                                    <button class="btn btn-icon icon-delete" name="confirmDialog" data-toggle="tooltip" data-placement="top" title="{% trans %}Delete this topic{% endtrans %}"></button>
                                 </form>
                                 </form>
                                 {% endif %}
                                 {% endif %}
                             {% else %}
                             {% else %}
@@ -137,7 +136,7 @@
                             <!-- Delete Post -->
                             <!-- Delete Post -->
                                 <form class="inline-form" method="post" action="{{ url_for('forum.delete_post', post_id=post.id) }}">
                                 <form class="inline-form" method="post" action="{{ url_for('forum.delete_post', post_id=post.id) }}">
                                     <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
                                     <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
-                                    <button  class="btn btn-icon icon-delete" name="confirmDialog" data-toggle="tooltip" data-placement="top" title="Delete this post"></button>
+                                    <button  class="btn btn-icon icon-delete" name="confirmDialog" data-toggle="tooltip" data-placement="top" title="{% trans %}Delete this post{% endtrans %}"></button>
                                 </form>
                                 </form>
                                 {% endif %}
                                 {% endif %}
 
 
@@ -145,7 +144,7 @@
 
 
                             {% if current_user.is_authenticated %}
                             {% if current_user.is_authenticated %}
                             <!-- Report post -->
                             <!-- Report post -->
-                                <a href="{{ url_for('forum.report_post', post_id=post.id) }}" onclick="window.open(this.href, 'wio_window','width=500,height=500'); return false;" class="btn btn-icon icon-report" data-toggle="tooltip" data-placement="top" title="Report this post"></a>
+                                <a href="{{ url_for('forum.report_post', post_id=post.id) }}" onclick="window.open(this.href, 'wio_window','width=500,height=500'); return false;" class="btn btn-icon icon-report" data-toggle="tooltip" data-placement="top" title="{% trans %}Report this post{% endtrans %}"></a>
                             {% endif %}
                             {% endif %}
 
 
                             {% if current_user.permissions.get('makehidden') %}
                             {% if current_user.permissions.get('makehidden') %}
@@ -153,24 +152,24 @@
                                     {% if topic.hidden %}
                                     {% if topic.hidden %}
                                     <form class="inline-form" method="post" action="{{ url_for('forum.unhide_topic', topic_id=topic.id) }}">
                                     <form class="inline-form" method="post" action="{{ url_for('forum.unhide_topic', topic_id=topic.id) }}">
                                         <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
                                         <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
-                                        <button class="btn btn-icon fa fa-user" name="unhide" data-toggle="tooltip" data-placement="top" title="Unhide this topic"></button>
+                                        <button class="btn btn-icon fa fa-user" name="unhide" data-toggle="tooltip" data-placement="top" title="{% trans %}Unhide this topic{% endtrans %}"></button>
                                     </form>
                                     </form>
                                     {% else %}
                                     {% else %}
                                     <form class="inline-form" method="post" action="{{ url_for('forum.hide_topic', topic_id=topic.id) }}">
                                     <form class="inline-form" method="post" action="{{ url_for('forum.hide_topic', topic_id=topic.id) }}">
                                         <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
                                         <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
-                                        <button class="btn btn-icon fa fa-user-secret" name="hide" data-toggle="tooltip" data-placement="top" title="Hide this topic"></button>
+                                        <button class="btn btn-icon fa fa-user-secret" name="hide" data-toggle="tooltip" data-placement="top" title="{% trans %}Hide this topic{% endtrans %}"></button>
                                     </form>
                                     </form>
                                     {% endif %}
                                     {% endif %}
                                 {% else %}
                                 {% else %}
                                     {% if post.hidden %}
                                     {% if post.hidden %}
                                     <form class="inline-form" method="post" action="{{ url_for('forum.unhide_post', post_id=post.id) }}">
                                     <form class="inline-form" method="post" action="{{ url_for('forum.unhide_post', post_id=post.id) }}">
                                         <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
                                         <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
-                                        <button class="btn btn-icon fa fa-user" name="unhide" data-toggle="tooltip" data-placement="top" title="Unhide this post"></button>
+                                        <button class="btn btn-icon fa fa-user" name="unhide" data-toggle="tooltip" data-placement="top" title="{% trans %}Unhide this post{% endtrans %}"></button>
                                     </form>
                                     </form>
                                     {% else %}
                                     {% else %}
                                     <form class="inline-form" method="post" action="{{ url_for('forum.hide_post', post_id=post.id) }}">
                                     <form class="inline-form" method="post" action="{{ url_for('forum.hide_post', post_id=post.id) }}">
                                         <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
                                         <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
-                                        <button class="btn btn-icon fa fa-user-secret" name="hide" data-toggle="tooltip" data-placement="top" title="Hide this post"></button>
+                                        <button class="btn btn-icon fa fa-user-secret" name="hide" data-toggle="tooltip" data-placement="top" title="{% trans %}Hide this post{% endtrans %}"></button>
                                     </form>
                                     </form>
                                     {% endif %}
                                     {% endif %}
                                 {% endif %}
                                 {% endif %}

+ 14 - 15
flaskbb/templates/forum/topic_horizontal.html

@@ -17,7 +17,7 @@
     {% if topic.hidden %}
     {% if topic.hidden %}
     <div class="alert alert-warning">
     <div class="alert alert-warning">
         <span class="fa fa-user-secret"></span>
         <span class="fa fa-user-secret"></span>
-        {{ gettext("This topic is hidden (%(when)s  by %(who)s)", who=topic.hidden_by.username, when=format_date(topic.hidden_at)) }}
+        {{ gettext("This topic is hidden (%(when)s by %(who)s)", who=topic.hidden_by.username, when=format_date(topic.hidden_at)) }}
     </div>
     </div>
     {% endif %}
     {% endif %}
 
 
@@ -44,9 +44,9 @@
 
 
                             <!-- check whether user is online or not -->
                             <!-- check whether user is online or not -->
                             {% if user|is_online %}
                             {% if user|is_online %}
-                            <div class="author-online" data-toggle="tooltip" data-placement="top" title="online"></div>
+                            <div class="author-online" data-toggle="tooltip" data-placement="top" title="{% trans %}online{% endtrans %}"></div>
                             {% else %}
                             {% else %}
-                            <div class="author-offline" data-toggle="tooltip" data-placement="top" title="offline"></div>
+                            <div class="author-offline" data-toggle="tooltip" data-placement="top" title="{% trans %}offline{% endtrans %}"></div>
                             {% endif %}
                             {% endif %}
                             <div class="author-title"><h5>{{ user.primary_group.name }}</h5></div>
                             <div class="author-title"><h5>{{ user.primary_group.name }}</h5></div>
                             {{ run_hook("flaskbb_tpl_before_post_author_info", user=user, post=post) }}
                             {{ run_hook("flaskbb_tpl_before_post_author_info", user=user, post=post) }}
@@ -73,8 +73,7 @@
                             </a>
                             </a>
                             {% if post.user_id and post.date_modified %}
                             {% if post.user_id and post.date_modified %}
                             <small>
                             <small>
-                                (Last modified: {{ post.date_modified|format_datetime }} by
-                                <a href="{{ url_for('user.profile', username=post.modified_by) }}">{{ post.modified_by }}</a>.)
+                                ({% trans date=post.date_modified|format_datetime, user_url=url_for('user.profile', username=post.modified_by), user=post.modified_by %}Last modified: {{ date }} by <a href="{{ user_url }}">{{ user }}</a>{% endtrans %})
                             </small>
                             </small>
                             {% endif %}
                             {% endif %}
                         </div>
                         </div>
@@ -105,20 +104,20 @@
 
 
                             {% if current_user|post_reply(topic) %}
                             {% if current_user|post_reply(topic) %}
                             <!-- Quick quote -->
                             <!-- Quick quote -->
-                                <a href="#" class="btn btn-icon icon-reply quote-btn" data-post-id="{{ post.id }}" data-toggle="tooltip" data-placement="top" title="Quote this post"></a>
+                                <a href="#" class="btn btn-icon icon-reply quote-btn" data-post-id="{{ post.id }}" data-toggle="tooltip" data-placement="top" title="{% trans %}Quote this post{% endtrans %}"></a>
                             <!-- Full quote/reply -->
                             <!-- Full quote/reply -->
-                                <a href="{{ url_for('forum.reply_post', topic_id=topic.id, post_id=post.id) }}" class="btn btn-icon icon-replyall" data-toggle="tooltip" data-placement="top" title="Full Reply"></a>
+                                <a href="{{ url_for('forum.reply_post', topic_id=topic.id, post_id=post.id) }}" class="btn btn-icon icon-replyall" data-toggle="tooltip" data-placement="top" title="{% trans %}Full Reply{% endtrans %}"></a>
                             {% endif %}
                             {% endif %}
 
 
                             {% if current_user|edit_post(post) %}
                             {% if current_user|edit_post(post) %}
                             <!-- Edit Post -->
                             <!-- Edit Post -->
-                            <a href="{{ url_for('forum.edit_post', post_id=post.id) }}" class="btn btn-icon icon-edit" data-toggle="tooltip" data-placement="top" title="Edit this post"></a>
+                            <a href="{{ url_for('forum.edit_post', post_id=post.id) }}" class="btn btn-icon icon-edit" data-toggle="tooltip" data-placement="top" title="{% trans %}Edit this post{% endtrans %}"></a>
                             {% endif %}
                             {% endif %}
                             {% if topic.first_post == post %}
                             {% if topic.first_post == post %}
                                 {% if current_user|delete_topic(topic) %}
                                 {% if current_user|delete_topic(topic) %}
                                 <form class="inline-form" method="post" action="{{ url_for('forum.delete_topic', topic_id=topic.id, slug=topic.slug) }}">
                                 <form class="inline-form" method="post" action="{{ url_for('forum.delete_topic', topic_id=topic.id, slug=topic.slug) }}">
                                     <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
                                     <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
-                                    <button class="btn btn-icon icon-delete" data-toggle="tooltip" data-placement="top" title="Delete this topic"></button>
+                                    <button class="btn btn-icon icon-delete" data-toggle="tooltip" data-placement="top" title="{% trans %}Delete this topic{% endtrans %}"></button>
                                 </form>
                                 </form>
                                 {% endif %}
                                 {% endif %}
                             {% else %}
                             {% else %}
@@ -126,7 +125,7 @@
                             <!-- Delete Post -->
                             <!-- Delete Post -->
                                 <form class="inline-form" method="post" action="{{ url_for('forum.delete_post', post_id=post.id) }}">
                                 <form class="inline-form" method="post" action="{{ url_for('forum.delete_post', post_id=post.id) }}">
                                     <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
                                     <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
-                                    <button  class="btn btn-icon icon-delete" data-toggle="tooltip" data-placement="top" title="Delete this post"></button>
+                                    <button  class="btn btn-icon icon-delete" data-toggle="tooltip" data-placement="top" title="{% trans %}Delete this post{% endtrans %}"></button>
                                 </form>
                                 </form>
                                 {% endif %}
                                 {% endif %}
 
 
@@ -134,7 +133,7 @@
 
 
                             {% if current_user.is_authenticated %}
                             {% if current_user.is_authenticated %}
                             <!-- Report post -->
                             <!-- Report post -->
-                                <a href="{{ url_for('forum.report_post', post_id=post.id) }}" onclick="window.open(this.href, 'wio_window','width=500,height=500'); return false;" class="btn btn-icon icon-report" data-toggle="tooltip" data-placement="top" title="Report this post"></a>
+                                <a href="{{ url_for('forum.report_post', post_id=post.id) }}" onclick="window.open(this.href, 'wio_window','width=500,height=500'); return false;" class="btn btn-icon icon-report" data-toggle="tooltip" data-placement="top" title="{% trans %}Report this post{% endtrans %}"></a>
                             {% endif %}
                             {% endif %}
 
 
                             {% if current_user.permissions.get('makehidden') %}
                             {% if current_user.permissions.get('makehidden') %}
@@ -142,24 +141,24 @@
                                     {% if topic.hidden %}
                                     {% if topic.hidden %}
                                     <form class="inline-form" method="post" action="{{ url_for('forum.unhide_topic', topic_id=topic.id) }}">
                                     <form class="inline-form" method="post" action="{{ url_for('forum.unhide_topic', topic_id=topic.id) }}">
                                         <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
                                         <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
-                                        <button class="btn btn-icon fa fa-user" name="unhide" data-toggle="tooltip" data-placement="top" title="Unhide this topic"></button>
+                                        <button class="btn btn-icon fa fa-user" name="unhide" data-toggle="tooltip" data-placement="top" title="{% trans %}Unhide this topic{% endtrans %}"></button>
                                     </form>
                                     </form>
                                     {% else %}
                                     {% else %}
                                     <form class="inline-form" method="post" action="{{ url_for('forum.hide_topic', topic_id=topic.id) }}">
                                     <form class="inline-form" method="post" action="{{ url_for('forum.hide_topic', topic_id=topic.id) }}">
                                         <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
                                         <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
-                                        <button class="btn btn-icon fa fa-user-secret" name="hide" data-toggle="tooltip" data-placement="top" title="Hide this topic"></button>
+                                        <button class="btn btn-icon fa fa-user-secret" name="hide" data-toggle="tooltip" data-placement="top" title="{% trans %}Hide this topic{% endtrans %}"></button>
                                     </form>
                                     </form>
                                     {% endif %}
                                     {% endif %}
                                 {% else %}
                                 {% else %}
                                     {% if post.hidden %}
                                     {% if post.hidden %}
                                     <form class="inline-form" method="post" action="{{ url_for('forum.unhide_post', post_id=post.id) }}">
                                     <form class="inline-form" method="post" action="{{ url_for('forum.unhide_post', post_id=post.id) }}">
                                         <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
                                         <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
-                                        <button class="btn btn-icon fa fa-user" name="unhide" data-toggle="tooltip" data-placement="top" title="Unhide this post"></button>
+                                        <button class="btn btn-icon fa fa-user" name="unhide" data-toggle="tooltip" data-placement="top" title="{% trans %}Unhide this post{% endtrans %}"></button>
                                     </form>
                                     </form>
                                     {% else %}
                                     {% else %}
                                     <form class="inline-form" method="post" action="{{ url_for('forum.hide_post', post_id=post.id) }}">
                                     <form class="inline-form" method="post" action="{{ url_for('forum.hide_post', post_id=post.id) }}">
                                         <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
                                         <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
-                                        <button class="btn btn-icon fa fa-user-secret" name="hide" data-toggle="tooltip" data-placement="top" title="Hide this post"></button>
+                                        <button class="btn btn-icon fa fa-user-secret" name="hide" data-toggle="tooltip" data-placement="top" title="{% trans %}Hide this post{% endtrans %}"></button>
                                     </form>
                                     </form>
                                     {% endif %}
                                     {% endif %}
                                 {% endif %}
                                 {% endif %}

+ 2 - 2
flaskbb/templates/forum/topictracker.html

@@ -32,7 +32,7 @@
                     <div class="col-md-2 col-sm-2 hidden-xs topic-stats">{% trans %}Posts{% endtrans %}</div>
                     <div class="col-md-2 col-sm-2 hidden-xs topic-stats">{% trans %}Posts{% endtrans %}</div>
                     <div class="col-md-2 col-sm-2 hidden-xs topic-stats">{% trans %}Views{% endtrans %}</div>
                     <div class="col-md-2 col-sm-2 hidden-xs topic-stats">{% trans %}Views{% endtrans %}</div>
                     <div class="col-md-3 col-sm-3 col-xs-4 topic-last-post">{% trans %}Last Post{% endtrans %}</div>
                     <div class="col-md-3 col-sm-3 col-xs-4 topic-last-post">{% trans %}Last Post{% endtrans %}</div>
-                    <div class="col-md-1 col-sm-1 col-xs-2 topic-select-all"><input type="checkbox" name="rowtoggle" class="action-checkall" title="Select All"/></div>
+                    <div class="col-md-1 col-sm-1 col-xs-2 topic-select-all"><input type="checkbox" name="rowtoggle" class="action-checkall" title="{% trans %}Select all{% endtrans %}"/></div>
                 </div>
                 </div>
 
 
                 {% for topic, last_post, topicread, forumsread in topics.items %}
                 {% for topic, last_post, topicread, forumsread in topics.items %}
@@ -98,7 +98,7 @@
                     </div>
                     </div>
 
 
                     <div class="col-md-1 col-sm-1 col-xs-2 topic-select">
                     <div class="col-md-1 col-sm-1 col-xs-2 topic-select">
-                        <input type="checkbox" name="rowid" class="action-checkbox" value="{{ topic.id }}" title="Select Topic"/>
+                        <input type="checkbox" name="rowid" class="action-checkbox" value="{{ topic.id }}" title="{% trans %}Select topic{% endtrans %}"/>
                     </div>
                     </div>
                 </div>  <!-- end forum-row -->
                 </div>  <!-- end forum-row -->
                 {% else %}
                 {% else %}

+ 7 - 7
flaskbb/templates/management/overview.html

@@ -112,7 +112,7 @@
                             <div class="row stats-item">
                             <div class="row stats-item">
                                 <div class="key pull-left">Celery</div>
                                 <div class="key pull-left">Celery</div>
                                 <div class="value pull-right">
                                 <div class="value pull-right">
-                                    <span id="celery-status" class="text-warning">checking status</span>
+                                    <span id="celery-status" class="text-warning">{% trans %}checking status{% endtrans %}</span>
                                     {{ celery_version }}
                                     {{ celery_version }}
                                 </div>
                                 </div>
                             </div>
                             </div>
@@ -138,14 +138,14 @@
                                 </div>
                                 </div>
                                 <div class="value pull-right">
                                 <div class="value pull-right">
                                     {% if not plugin.enabled %}
                                     {% if not plugin.enabled %}
-                                        <span class="text-danger">not enabled</span>
+                                        <span class="text-danger">{% trans %}not enabled{% endtrans %}</span>
                                     {% elif plugin.enabled %}
                                     {% elif plugin.enabled %}
                                         {% if plugin.is_installed %}
                                         {% if plugin.is_installed %}
-                                        <span class="text-success">enabled &amp; installed</span>
+                                        <span class="text-success">{% trans %}enabled &amp; installed{% endtrans %}</span>
                                         {% elif not plugin.is_installable %}
                                         {% elif not plugin.is_installable %}
-                                        <span class="text-success">enabled</span>
+                                        <span class="text-success">{% trans %}enabled{% endtrans %}</span>
                                         {% elif not plugin.is_installed %}
                                         {% elif not plugin.is_installed %}
-                                        <span class="text-warning">not installed</span>
+                                        <span class="text-warning">{% trans %}not installed{% endtrans %}</span>
                                         {% endif %}
                                         {% endif %}
                                     {% endif %}
                                     {% endif %}
                                     {{ plugin.version }}
                                     {{ plugin.version }}
@@ -185,9 +185,9 @@ $(document).ready(function () {
 
 
     $.getJSON('/admin/celerystatus', function(data) {
     $.getJSON('/admin/celerystatus', function(data) {
         if(data.celery_running) {
         if(data.celery_running) {
-            $celerystatus.replaceWith("<span id='celery-status' class='text-success'><strong>running</strong></span>");
+            $celerystatus.replaceWith("<span id='celery-status' class='text-success'><strong>{% trans %}running{% endtrans %}</strong></span>");
         } else {
         } else {
-            $celerystatus.replaceWith("<span id='celery-status' class='text-danger'><strong>not running</strong></span>");
+            $celerystatus.replaceWith("<span id='celery-status' class='text-danger'><strong>{% trans %}not running{% endtrans %}</strong></span>");
             celery_not_running_notification()
             celery_not_running_notification()
         }
         }
     });
     });

+ 8 - 3
flaskbb/templates/user/profile_layout.html

@@ -1,4 +1,6 @@
 {% extends theme("layout.html") %}
 {% extends theme("layout.html") %}
+{% set page_title = _("%(user)s - User", user=user.username) %}
+
 {% block content %}
 {% block content %}
 
 
 {% block breadcrumb %}
 {% block breadcrumb %}
@@ -10,6 +12,9 @@
             <div class="panel page-panel">
             <div class="panel page-panel">
                 <div class="panel-heading page-head">
                 <div class="panel-heading page-head">
                     <a href="{{ user.url }}">{{ user.username }}</a>
                     <a href="{{ user.url }}">{{ user.username }}</a>
+                    {% if current_user|can_edit_user %}
+                    <a class="btn btn-xs btn-default pull-right" href="{{ url_for('management.edit_user', user_id=user.id)}}"><i class="fa fa-pencil"></i> {% trans %}Edit{% endtrans %}</a>
+                    {% endif %}
                 </div>
                 </div>
                 <div class="panel-body page-body profile-body">
                 <div class="panel-body page-body profile-body">
                     {% block profile_sidebar %}
                     {% block profile_sidebar %}
@@ -26,15 +31,15 @@
 
 
                         <div class="profile-online" data-toggle="tooltip" data-placement="top" title="{%- if user.lastseen -%} {{ user.lastseen|time_since }} {%- else -%} {% trans %}Never seen{% endtrans %} {%- endif -%}">
                         <div class="profile-online" data-toggle="tooltip" data-placement="top" title="{%- if user.lastseen -%} {{ user.lastseen|time_since }} {%- else -%} {% trans %}Never seen{% endtrans %} {%- endif -%}">
                             {%- if user|is_online %}
                             {%- if user|is_online %}
-                            <span class="label label-success">online</span>
+                            <span class="label label-success">{% trans %}online{% endtrans %}</span>
                             {%- else %}
                             {%- else %}
-                            <span class="label label-default">offline</span>
+                            <span class="label label-default">{% trans %}offline{% endtrans %}</span>
                             {%- endif %}
                             {%- endif %}
                         </div>
                         </div>
 
 
                         <div class="profile-sidebar-stats">
                         <div class="profile-sidebar-stats">
                             <div class="profile-posts">
                             <div class="profile-posts">
-                                {{ user.post_count }} posts
+                                {{ user.post_count }} {% trans %}posts{% endtrans %}
                             </div>
                             </div>
 
 
                             <div class="profile-date">
                             <div class="profile-date">

+ 2 - 0
flaskbb/templates/user/settings_layout.html

@@ -1,4 +1,6 @@
 {% extends theme("layout.html") %}
 {% extends theme("layout.html") %}
+{% set page_title = _("Settings - %(user)s - User", user=current_user.username) %}
+
 {% block content %}
 {% block content %}
 {%- from theme('macros.html') import navlink with context -%}
 {%- from theme('macros.html') import navlink with context -%}
 
 

+ 436 - 206
flaskbb/translations/messages.pot

@@ -8,14 +8,19 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: PROJECT VERSION\n"
 "Project-Id-Version: PROJECT VERSION\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2018-05-03 12:13+0200\n"
+"POT-Creation-Date: 2018-07-28 11:36+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
 "MIME-Version: 1.0\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.5.3\n"
+"Generated-By: Babel 2.6.0\n"
+
+#: flaskbb/deprecation.py:70
+#, python-format
+msgid "%(name)s is deprecated and will be removed in version %(version)s."
+msgstr ""
 
 
 #: flaskbb/email.py:31
 #: flaskbb/email.py:31
 msgid "Password Recovery Confirmation"
 msgid "Password Recovery Confirmation"
@@ -26,172 +31,175 @@ msgstr ""
 msgid "Account Activation"
 msgid "Account Activation"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/forms.py:26 flaskbb/management/forms.py:35
+#: flaskbb/auth/forms.py:37 flaskbb/management/forms.py:35
 msgid "You can only use letters, numbers or dashes."
 msgid "You can only use letters, numbers or dashes."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/forms.py:32
+#: flaskbb/auth/forms.py:43
 msgid "Username or Email address"
 msgid "Username or Email address"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/forms.py:35
+#: flaskbb/auth/forms.py:46
 msgid "Please enter your username or email address."
 msgid "Please enter your username or email address."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/forms.py:41 flaskbb/auth/forms.py:73 flaskbb/auth/forms.py:97
-#: flaskbb/auth/forms.py:130 flaskbb/user/forms.py:67
+#: flaskbb/auth/forms.py:52 flaskbb/auth/forms.py:84 flaskbb/auth/forms.py:108
+#: flaskbb/auth/forms.py:141 flaskbb/user/forms.py:67
 msgid "Password"
 msgid "Password"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/forms.py:42 flaskbb/auth/forms.py:98 flaskbb/user/forms.py:68
+#: flaskbb/auth/forms.py:53 flaskbb/auth/forms.py:109 flaskbb/user/forms.py:68
 msgid "Please enter your password."
 msgid "Please enter your password."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/forms.py:45
+#: flaskbb/auth/forms.py:56
 msgid "Remember me"
 msgid "Remember me"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/forms.py:47 flaskbb/templates/auth/login.html:1
+#: flaskbb/auth/forms.py:58 flaskbb/templates/auth/login.html:1
 #: flaskbb/templates/auth/login.html:10 flaskbb/templates/layout.html:118
 #: flaskbb/templates/auth/login.html:10 flaskbb/templates/layout.html:118
 msgid "Login"
 msgid "Login"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/forms.py:48 flaskbb/auth/forms.py:52 flaskbb/auth/forms.py:82
-#: flaskbb/auth/forms.py:113
+#: flaskbb/auth/forms.py:59 flaskbb/auth/forms.py:63 flaskbb/auth/forms.py:93
+#: flaskbb/auth/forms.py:124
 msgid "Captcha"
 msgid "Captcha"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/forms.py:57 flaskbb/auth/forms.py:144
+#: flaskbb/auth/forms.py:68 flaskbb/auth/forms.py:155
 #: flaskbb/management/forms.py:55 flaskbb/templates/forum/memberlist.html:45
 #: flaskbb/management/forms.py:55 flaskbb/templates/forum/memberlist.html:45
-#: flaskbb/templates/forum/search_result.html:104
+#: flaskbb/templates/forum/search_result.html:98
 #: flaskbb/templates/management/banned_users.html:62
 #: flaskbb/templates/management/banned_users.html:62
 #: flaskbb/templates/management/users.html:61
 #: flaskbb/templates/management/users.html:61
 msgid "Username"
 msgid "Username"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/forms.py:59
+#: flaskbb/auth/forms.py:70
 msgid "A valid username is required"
 msgid "A valid username is required"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/forms.py:65 flaskbb/auth/forms.py:106 flaskbb/auth/forms.py:122
-#: flaskbb/auth/forms.py:152 flaskbb/management/forms.py:59
+#: flaskbb/auth/forms.py:76 flaskbb/auth/forms.py:117 flaskbb/auth/forms.py:133
+#: flaskbb/auth/forms.py:163 flaskbb/management/forms.py:59
 msgid "Email address"
 msgid "Email address"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/forms.py:67 flaskbb/auth/forms.py:108 flaskbb/auth/forms.py:124
-#: flaskbb/auth/forms.py:154 flaskbb/management/forms.py:60
+#: flaskbb/auth/forms.py:78 flaskbb/auth/forms.py:119 flaskbb/auth/forms.py:135
+#: flaskbb/auth/forms.py:165 flaskbb/management/forms.py:60
 #: flaskbb/user/forms.py:40
 #: flaskbb/user/forms.py:40
 msgid "A valid email address is required."
 msgid "A valid email address is required."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/forms.py:68 flaskbb/auth/forms.py:155
+#: flaskbb/auth/forms.py:79 flaskbb/auth/forms.py:166
 #: flaskbb/management/forms.py:61 flaskbb/user/forms.py:41
 #: flaskbb/management/forms.py:61 flaskbb/user/forms.py:41
 #: flaskbb/user/forms.py:46 flaskbb/user/forms.py:49
 #: flaskbb/user/forms.py:46 flaskbb/user/forms.py:49
 msgid "Invalid email address."
 msgid "Invalid email address."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/forms.py:76 flaskbb/auth/forms.py:133
+#: flaskbb/auth/forms.py:87 flaskbb/auth/forms.py:144
 msgid "Passwords must match."
 msgid "Passwords must match."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/forms.py:80 flaskbb/auth/forms.py:137
+#: flaskbb/auth/forms.py:91 flaskbb/auth/forms.py:148
 msgid "Confirm password"
 msgid "Confirm password"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/forms.py:84 flaskbb/user/forms.py:32
+#: flaskbb/auth/forms.py:95 flaskbb/user/forms.py:32
 msgid "Language"
 msgid "Language"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/forms.py:87
+#: flaskbb/auth/forms.py:98
 msgid "I accept the Terms of Service"
 msgid "I accept the Terms of Service"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/forms.py:88
+#: flaskbb/auth/forms.py:99
 msgid "Please accept the TOS."
 msgid "Please accept the TOS."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/forms.py:92 flaskbb/templates/auth/register.html:1
-#: flaskbb/templates/auth/register.html:10 flaskbb/templates/layout.html:123
+#: flaskbb/auth/forms.py:103 flaskbb/templates/auth/register.html:1
+#: flaskbb/templates/auth/register.html:10 flaskbb/templates/layout.html:124
 msgid "Register"
 msgid "Register"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/forms.py:101 flaskbb/templates/auth/reauth.html:1
+#: flaskbb/auth/forms.py:112 flaskbb/templates/auth/reauth.html:1
 #: flaskbb/templates/auth/reauth.html:10
 #: flaskbb/templates/auth/reauth.html:10
 msgid "Refresh Login"
 msgid "Refresh Login"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/forms.py:115
+#: flaskbb/auth/forms.py:126
 msgid "Request Password"
 msgid "Request Password"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/forms.py:139
+#: flaskbb/auth/forms.py:150
 msgid "Reset password"
 msgid "Reset password"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/forms.py:146 flaskbb/management/forms.py:56
+#: flaskbb/auth/forms.py:157 flaskbb/management/forms.py:56
 msgid "A valid username is required."
 msgid "A valid username is required."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/forms.py:159
+#: flaskbb/auth/forms.py:170
 msgid "Send Confirmation Mail"
 msgid "Send Confirmation Mail"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/plugins.py:35
-#, python-format
-msgid "An account activation email has been sent to %(email)s"
+#: flaskbb/auth/forms.py:175
+msgid "Email confirmation token"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/plugins.py:43
-msgid "Thanks for registering."
+#: flaskbb/auth/forms.py:177
+msgid "Please enter the token we have sent to you."
+msgstr ""
+
+#: flaskbb/auth/forms.py:180
+msgid "Confirm Email"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/views.py:49
+#: flaskbb/auth/views.py:72
 msgid "Logged out"
 msgid "Logged out"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/views.py:80
+#: flaskbb/auth/views.py:103
 msgid "Unrecoverable error while handling login"
 msgid "Unrecoverable error while handling login"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/views.py:107
+#: flaskbb/auth/views.py:130
 msgid "Reauthenticated."
 msgid "Reauthenticated."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/views.py:112
+#: flaskbb/auth/views.py:135
 msgid "Unrecoverable error while handling reauthentication"
 msgid "Unrecoverable error while handling reauthentication"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/views.py:161
+#: flaskbb/auth/views.py:179
 msgid "Could not process registration dueto an unrecoverable error"
 msgid "Could not process registration dueto an unrecoverable error"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/views.py:196
+#: flaskbb/auth/views.py:214
 msgid ""
 msgid ""
 "You have entered an username or email address that is not linked with "
 "You have entered an username or email address that is not linked with "
 "your account."
 "your account."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/views.py:202
+#: flaskbb/auth/views.py:220
 msgid "Email sent! Please check your inbox."
 msgid "Email sent! Please check your inbox."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/views.py:237
+#: flaskbb/auth/views.py:255
 msgid "Error when resetting password"
 msgid "Error when resetting password"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/views.py:248
+#: flaskbb/auth/views.py:266
 msgid "Your password has been updated."
 msgid "Your password has been updated."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/views.py:277
+#: flaskbb/auth/views.py:295
 msgid "A new account activation token has been sent to your email address."
 msgid "A new account activation token has been sent to your email address."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/views.py:312
+#: flaskbb/auth/views.py:331 flaskbb/auth/views.py:380
 msgid "Could not activate account due to an unrecoverable error"
 msgid "Could not activate account due to an unrecoverable error"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/views.py:320
+#: flaskbb/auth/views.py:339 flaskbb/auth/views.py:388
 msgid "Your account has been activated and you can now login."
 msgid "Your account has been activated and you can now login."
 msgstr ""
 msgstr ""
 
 
@@ -226,26 +234,35 @@ msgstr ""
 msgid "Wrong password."
 msgid "Wrong password."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/services/registration.py:50
+#: flaskbb/auth/services/registration.py:74
 #, python-format
 #, python-format
 msgid "Username must be between %(min)s and %(max)s characters long"
 msgid "Username must be between %(min)s and %(max)s characters long"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/services/registration.py:61
+#: flaskbb/auth/services/registration.py:85
 #, python-format
 #, python-format
 msgid "%(username)s is a forbidden username"
 msgid "%(username)s is a forbidden username"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/services/registration.py:83
+#: flaskbb/auth/services/registration.py:107
 #, python-format
 #, python-format
 msgid "%(username)s is already registered"
 msgid "%(username)s is already registered"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/auth/services/registration.py:105
+#: flaskbb/auth/services/registration.py:129
 #, python-format
 #, python-format
 msgid "%(email)s is already registered"
 msgid "%(email)s is already registered"
 msgstr ""
 msgstr ""
 
 
+#: flaskbb/auth/services/registration.py:147
+#, python-format
+msgid "An account activation email has been sent to %(email)s"
+msgstr ""
+
+#: flaskbb/auth/services/registration.py:162
+msgid "Thanks for registering."
+msgstr ""
+
 #: flaskbb/core/tokens.py:41
 #: flaskbb/core/tokens.py:41
 msgid "Token is invalid"
 msgid "Token is invalid"
 msgstr ""
 msgstr ""
@@ -263,7 +280,7 @@ msgid "Quick reply"
 msgstr ""
 msgstr ""
 
 
 #: flaskbb/forum/forms.py:29 flaskbb/forum/forms.py:40
 #: flaskbb/forum/forms.py:29 flaskbb/forum/forms.py:40
-#: flaskbb/forum/forms.py:63
+#: flaskbb/forum/forms.py:62
 msgid "You cannot post a reply without content."
 msgid "You cannot post a reply without content."
 msgstr ""
 msgstr ""
 
 
@@ -272,45 +289,41 @@ msgstr ""
 msgid "Reply"
 msgid "Reply"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/forms.py:39 flaskbb/forum/forms.py:62
-#: flaskbb/forum/forms.py:111
+#: flaskbb/forum/forms.py:39 flaskbb/forum/forms.py:61
+#: flaskbb/forum/forms.py:109
 msgid "Content"
 msgid "Content"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/forms.py:42 flaskbb/forum/forms.py:65
+#: flaskbb/forum/forms.py:42 flaskbb/forum/forms.py:64
 msgid "Track this topic"
 msgid "Track this topic"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/forms.py:46 flaskbb/forum/forms.py:69
-msgid "Preview"
-msgstr ""
-
-#: flaskbb/forum/forms.py:59
+#: flaskbb/forum/forms.py:58
 msgid "Topic title"
 msgid "Topic title"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/forms.py:60
+#: flaskbb/forum/forms.py:59
 msgid "Please choose a title for your topic."
 msgid "Please choose a title for your topic."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/forms.py:68
+#: flaskbb/forum/forms.py:67
 msgid "Post Topic"
 msgid "Post Topic"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/forms.py:84 flaskbb/templates/management/reports.html:39
+#: flaskbb/forum/forms.py:82 flaskbb/templates/management/reports.html:39
 msgid "Reason"
 msgid "Reason"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/forms.py:85
+#: flaskbb/forum/forms.py:83
 msgid "What is the reason for reporting this post?"
 msgid "What is the reason for reporting this post?"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/forms.py:88
+#: flaskbb/forum/forms.py:86
 msgid "Report post"
 msgid "Report post"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/forms.py:96 flaskbb/forum/forms.py:100
-#: flaskbb/forum/forms.py:115 flaskbb/templates/forum/memberlist.html:29
+#: flaskbb/forum/forms.py:94 flaskbb/forum/forms.py:98
+#: flaskbb/forum/forms.py:113 flaskbb/templates/forum/memberlist.html:29
 #: flaskbb/templates/forum/search_form.html:1
 #: flaskbb/templates/forum/search_form.html:1
 #: flaskbb/templates/forum/search_form.html:10
 #: flaskbb/templates/forum/search_form.html:10
 #: flaskbb/templates/forum/search_form.html:15
 #: flaskbb/templates/forum/search_form.html:15
@@ -322,32 +335,32 @@ msgstr ""
 msgid "Search"
 msgid "Search"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/forms.py:108
+#: flaskbb/forum/forms.py:106
 msgid "Criteria"
 msgid "Criteria"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/forms.py:112
+#: flaskbb/forum/forms.py:110
 msgid "Post"
 msgid "Post"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/forms.py:112 flaskbb/templates/forum/edit_forum.html:31
+#: flaskbb/forum/forms.py:110 flaskbb/templates/forum/edit_forum.html:31
 #: flaskbb/templates/forum/forum.html:49
 #: flaskbb/templates/forum/forum.html:49
-#: flaskbb/templates/forum/search_result.html:134
+#: flaskbb/templates/forum/search_result.html:128
 #: flaskbb/templates/forum/topictracker.html:31
 #: flaskbb/templates/forum/topictracker.html:31
 #: flaskbb/templates/management/reports.html:38
 #: flaskbb/templates/management/reports.html:38
 msgid "Topic"
 msgid "Topic"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/forms.py:113 flaskbb/templates/forum/category.html:9
+#: flaskbb/forum/forms.py:111 flaskbb/templates/forum/category.html:9
 #: flaskbb/templates/forum/category_layout.html:8
 #: flaskbb/templates/forum/category_layout.html:8
 #: flaskbb/templates/forum/edit_forum.html:13
 #: flaskbb/templates/forum/edit_forum.html:13
 #: flaskbb/templates/forum/forum.html:10
 #: flaskbb/templates/forum/forum.html:10
 #: flaskbb/templates/forum/memberlist.html:12
 #: flaskbb/templates/forum/memberlist.html:12
-#: flaskbb/templates/forum/new_post.html:11
+#: flaskbb/templates/forum/new_post.html:17
 #: flaskbb/templates/forum/new_topic.html:11
 #: flaskbb/templates/forum/new_topic.html:11
 #: flaskbb/templates/forum/search_form.html:9
 #: flaskbb/templates/forum/search_form.html:9
 #: flaskbb/templates/forum/search_result.html:9
 #: flaskbb/templates/forum/search_result.html:9
-#: flaskbb/templates/forum/search_result.html:213
+#: flaskbb/templates/forum/search_result.html:207
 #: flaskbb/templates/forum/topic.html:10
 #: flaskbb/templates/forum/topic.html:10
 #: flaskbb/templates/forum/topic_horizontal.html:10
 #: flaskbb/templates/forum/topic_horizontal.html:10
 #: flaskbb/templates/forum/topictracker.html:14
 #: flaskbb/templates/forum/topictracker.html:14
@@ -368,130 +381,184 @@ msgstr ""
 #: flaskbb/templates/user/all_posts.html:6
 #: flaskbb/templates/user/all_posts.html:6
 #: flaskbb/templates/user/all_topics.html:6
 #: flaskbb/templates/user/all_topics.html:6
 #: flaskbb/templates/user/profile.html:5
 #: flaskbb/templates/user/profile.html:5
-#: flaskbb/templates/user/settings_layout.html:6
+#: flaskbb/templates/user/settings_layout.html:8
 msgid "Forum"
 msgid "Forum"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/forms.py:113 flaskbb/templates/forum/search_result.html:99
+#: flaskbb/forum/forms.py:111 flaskbb/templates/forum/search_result.html:93
 #: flaskbb/templates/management/users.html:1
 #: flaskbb/templates/management/users.html:1
 #: flaskbb/templates/management/users.html:33
 #: flaskbb/templates/management/users.html:33
 msgid "Users"
 msgid "Users"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/views.py:194
+#: flaskbb/forum/views.py:100 flaskbb/forum/views.py:826
+#: flaskbb/forum/views.py:844 flaskbb/forum/views.py:922
+#: flaskbb/forum/views.py:942
+msgid "You are not allowed to access that forum"
+msgstr ""
+
+#: flaskbb/forum/views.py:135 flaskbb/forum/views.py:166
+msgid "You are not allowed to access that topic"
+msgstr ""
+
+#: flaskbb/forum/views.py:217
+msgid "You are not allowed to post a reply to this topic."
+msgstr ""
+
+#: flaskbb/forum/views.py:230
 msgid "Cannot post reply"
 msgid "Cannot post reply"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/views.py:294
+#: flaskbb/forum/views.py:256
+msgid "You are not allowed to post a topic here"
+msgstr ""
+
+#: flaskbb/forum/views.py:291
+msgid "You are not allowed to manage this forum"
+msgstr ""
+
+#: flaskbb/forum/views.py:345
 msgid "In order to perform this action you have to select at least one topic."
 msgid "In order to perform this action you have to select at least one topic."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/views.py:310
+#: flaskbb/forum/views.py:361
 #, python-format
 #, python-format
 msgid "%(count)s topics locked."
 msgid "%(count)s topics locked."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/views.py:320
+#: flaskbb/forum/views.py:371
 #, python-format
 #, python-format
 msgid "%(count)s topics unlocked."
 msgid "%(count)s topics unlocked."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/views.py:331
+#: flaskbb/forum/views.py:382
 #, python-format
 #, python-format
 msgid "%(count)s topics highlighted."
 msgid "%(count)s topics highlighted."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/views.py:341
+#: flaskbb/forum/views.py:392
 #, python-format
 #, python-format
 msgid "%(count)s topics trivialized."
 msgid "%(count)s topics trivialized."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/views.py:352
+#: flaskbb/forum/views.py:403
 #, python-format
 #, python-format
 msgid "%(count)s topics deleted."
 msgid "%(count)s topics deleted."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/views.py:360
+#: flaskbb/forum/views.py:411
 msgid "Please choose a new forum for the topics."
 msgid "Please choose a new forum for the topics."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/views.py:370
+#: flaskbb/forum/views.py:421
 msgid "You do not have the permissions to move this topic."
 msgid "You do not have the permissions to move this topic."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/views.py:376
+#: flaskbb/forum/views.py:427
 msgid "Topics moved."
 msgid "Topics moved."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/views.py:378
+#: flaskbb/forum/views.py:429
 msgid "Failed to move topics."
 msgid "Failed to move topics."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/views.py:390
+#: flaskbb/forum/views.py:441
 #, python-format
 #, python-format
 msgid "%(count)s topics hidden."
 msgid "%(count)s topics hidden."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/views.py:400
+#: flaskbb/forum/views.py:451
 #, python-format
 #, python-format
 msgid "%(count)s topics unhidden."
 msgid "%(count)s topics unhidden."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/views.py:404
+#: flaskbb/forum/views.py:455
 msgid "Unknown action requested"
 msgid "Unknown action requested"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/views.py:502
+#: flaskbb/forum/views.py:465
+msgid "You are not allowed to post a reply"
+msgstr ""
+
+#: flaskbb/forum/views.py:511
+msgid "You are not allowed to edit that post"
+msgstr ""
+
+#: flaskbb/forum/views.py:559
 msgid "Thanks for reporting."
 msgid "Thanks for reporting."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/views.py:598
+#: flaskbb/forum/views.py:663
 #, python-format
 #, python-format
 msgid "%(topic_count)s topics untracked."
 msgid "%(topic_count)s topics untracked."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/views.py:724
+#: flaskbb/forum/views.py:692
+msgid "You are not allowed to delete this topic"
+msgstr ""
+
+#: flaskbb/forum/views.py:715
+msgid "You are not allowed to lock this topic"
+msgstr ""
+
+#: flaskbb/forum/views.py:736
+msgid "You are not allowed to unlock this topic"
+msgstr ""
+
+#: flaskbb/forum/views.py:757
+msgid "You are not allowed to highlight this topic"
+msgstr ""
+
+#: flaskbb/forum/views.py:778
+msgid "You are not allowed to trivialize this topic"
+msgstr ""
+
+#: flaskbb/forum/views.py:799
+msgid "You are not allowed to delete this post"
+msgstr ""
+
+#: flaskbb/forum/views.py:874
 #, python-format
 #, python-format
 msgid "Forum %(forum)s marked as read."
 msgid "Forum %(forum)s marked as read."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/views.py:749
+#: flaskbb/forum/views.py:899
 msgid "All forums marked as read."
 msgid "All forums marked as read."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/views.py:793
+#: flaskbb/forum/views.py:963
 msgid "You do not have permission to hide this topic"
 msgid "You do not have permission to hide this topic"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/views.py:811
+#: flaskbb/forum/views.py:981
 msgid "You do not have permission to unhide this topic"
 msgid "You do not have permission to unhide this topic"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/views.py:827
+#: flaskbb/forum/views.py:997
 msgid "You do not have permission to hide this post"
 msgid "You do not have permission to hide this post"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/views.py:831
+#: flaskbb/forum/views.py:1001
 msgid "Post is already hidden"
 msgid "Post is already hidden"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/views.py:840
+#: flaskbb/forum/views.py:1010
 msgid "Topic hidden"
 msgid "Topic hidden"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/views.py:842
+#: flaskbb/forum/views.py:1012
 msgid "Post hidden"
 msgid "Post hidden"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/views.py:857
+#: flaskbb/forum/views.py:1027
 msgid "You do not have permission to unhide this post"
 msgid "You do not have permission to unhide this post"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/views.py:861
+#: flaskbb/forum/views.py:1031
 msgid "Post is already unhidden"
 msgid "Post is already unhidden"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/forum/views.py:866
+#: flaskbb/forum/views.py:1036
 msgid "Post unhidden"
 msgid "Post unhidden"
 msgstr ""
 msgstr ""
 
 
@@ -515,8 +582,7 @@ msgstr ""
 msgid "Location"
 msgid "Location"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/forms.py:77 flaskbb/templates/forum/search_result.html:48
-#: flaskbb/user/forms.py:96
+#: flaskbb/management/forms.py:77 flaskbb/user/forms.py:96
 msgid "Website"
 msgid "Website"
 msgstr ""
 msgstr ""
 
 
@@ -744,7 +810,7 @@ msgstr ""
 
 
 #: flaskbb/management/forms.py:373
 #: flaskbb/management/forms.py:373
 #: flaskbb/templates/forum/category_layout.html:80
 #: flaskbb/templates/forum/category_layout.html:80
-#: flaskbb/templates/forum/search_result.html:283
+#: flaskbb/templates/forum/search_result.html:277
 #: flaskbb/templates/management/forums.html:136
 #: flaskbb/templates/management/forums.html:136
 msgid "Moderators"
 msgid "Moderators"
 msgstr ""
 msgstr ""
@@ -804,119 +870,140 @@ msgstr ""
 msgid "Please enter a position for the category."
 msgid "Please enter a position for the category."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:117
+#: flaskbb/management/views.py:54 flaskbb/management/views.py:1091
+msgid "You are not allowed to access the management settings"
+msgstr ""
+
+#: flaskbb/management/views.py:127
 msgid "Settings saved."
 msgid "Settings saved."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:197 flaskbb/management/views.py:242
+#: flaskbb/management/views.py:143 flaskbb/management/views.py:188
+#: flaskbb/management/views.py:280 flaskbb/management/views.py:332
+#: flaskbb/management/views.py:362 flaskbb/management/views.py:414
+#: flaskbb/management/views.py:485
+msgid "You are not allowed to manage users"
+msgstr ""
+
+#: flaskbb/management/views.py:226 flaskbb/management/views.py:271
 msgid "Edit User"
 msgid "Edit User"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:238
+#: flaskbb/management/views.py:267
 msgid "User updated."
 msgid "User updated."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:280
+#: flaskbb/management/views.py:319
 msgid "You cannot delete yourself."
 msgid "You cannot delete yourself."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:284
+#: flaskbb/management/views.py:323
 msgid "User deleted."
 msgid "User deleted."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:294 flaskbb/management/views.py:305
+#: flaskbb/management/views.py:342 flaskbb/management/views.py:353
 #: flaskbb/templates/management/banned_users.html:24
 #: flaskbb/templates/management/banned_users.html:24
 #: flaskbb/templates/management/user_form.html:24
 #: flaskbb/templates/management/user_form.html:24
 #: flaskbb/templates/management/users.html:23
 #: flaskbb/templates/management/users.html:23
 msgid "Add User"
 msgid "Add User"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:301
+#: flaskbb/management/views.py:349
 msgid "User added."
 msgid "User added."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:358
+#: flaskbb/management/views.py:424
 msgid "You do not have the permissions to ban this user."
 msgid "You do not have the permissions to ban this user."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:387
+#: flaskbb/management/views.py:453
 #: flaskbb/templates/management/banned_users.html:95
 #: flaskbb/templates/management/banned_users.html:95
 #: flaskbb/templates/management/users.html:121
 #: flaskbb/templates/management/users.html:121
 msgid "Unban"
 msgid "Unban"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:404
+#: flaskbb/management/views.py:470
 msgid "A moderator cannot ban an admin user."
 msgid "A moderator cannot ban an admin user."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:408
+#: flaskbb/management/views.py:474
 msgid "User is now banned."
 msgid "User is now banned."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:410
+#: flaskbb/management/views.py:476
 msgid "Could not ban user."
 msgid "Could not ban user."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:421
+#: flaskbb/management/views.py:497
 msgid "You do not have the permissions to unban this user."
 msgid "You do not have the permissions to unban this user."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:438 flaskbb/templates/management/users.html:110
+#: flaskbb/management/views.py:514 flaskbb/templates/management/users.html:110
 msgid "Ban"
 msgid "Ban"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:454
+#: flaskbb/management/views.py:530
 msgid "User is now unbanned."
 msgid "User is now unbanned."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:456
+#: flaskbb/management/views.py:532
 msgid "Could not unban user."
 msgid "Could not unban user."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:483 flaskbb/management/views.py:494
+#: flaskbb/management/views.py:542 flaskbb/management/views.py:565
+#: flaskbb/management/views.py:597 flaskbb/management/views.py:636
+msgid "You are not allowed to modify groups."
+msgstr ""
+
+#: flaskbb/management/views.py:577 flaskbb/management/views.py:588
 #: flaskbb/templates/management/group_form.html:21
 #: flaskbb/templates/management/group_form.html:21
 #: flaskbb/templates/management/groups.html:20
 #: flaskbb/templates/management/groups.html:20
 msgid "Add Group"
 msgid "Add Group"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:490
+#: flaskbb/management/views.py:584
 msgid "Group added."
 msgid "Group added."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:506 flaskbb/management/views.py:524
+#: flaskbb/management/views.py:609 flaskbb/management/views.py:627
 msgid "Edit Group"
 msgid "Edit Group"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:520
+#: flaskbb/management/views.py:623
 msgid "Group updated."
 msgid "Group updated."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:556
+#: flaskbb/management/views.py:668
 msgid "You cannot delete one of the standard groups."
 msgid "You cannot delete one of the standard groups."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:565
+#: flaskbb/management/views.py:677
 msgid "You cannot delete the standard groups. Try renaming it instead."
 msgid "You cannot delete the standard groups. Try renaming it instead."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:574
+#: flaskbb/management/views.py:686
 msgid "Group deleted."
 msgid "Group deleted."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:577
+#: flaskbb/management/views.py:689
 msgid "No group chosen."
 msgid "No group chosen."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:606 flaskbb/management/views.py:627
+#: flaskbb/management/views.py:698 flaskbb/management/views.py:715
+#: flaskbb/management/views.py:766
+msgid "You are not allowed to modify forums."
+msgstr ""
+
+#: flaskbb/management/views.py:736 flaskbb/management/views.py:757
 #: flaskbb/templates/management/forums.html:155
 #: flaskbb/templates/management/forums.html:155
 msgid "Edit Forum"
 msgid "Edit Forum"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:615
+#: flaskbb/management/views.py:745
 msgid "Forum updated."
 msgid "Forum updated."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:645 flaskbb/management/views.py:662
+#: flaskbb/management/views.py:784 flaskbb/management/views.py:801
 #: flaskbb/templates/management/category_form.html:21
 #: flaskbb/templates/management/category_form.html:21
 #: flaskbb/templates/management/forum_form.html:21
 #: flaskbb/templates/management/forum_form.html:21
 #: flaskbb/templates/management/forums.html:20
 #: flaskbb/templates/management/forums.html:20
@@ -924,86 +1011,110 @@ msgstr ""
 msgid "Add Forum"
 msgid "Add Forum"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:653
+#: flaskbb/management/views.py:792
 msgid "Forum added."
 msgid "Forum added."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:678
+#: flaskbb/management/views.py:810
+msgid "You are not allowed to modify forums"
+msgstr ""
+
+#: flaskbb/management/views.py:826
 msgid "Forum deleted."
 msgid "Forum deleted."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:690 flaskbb/management/views.py:702
+#: flaskbb/management/views.py:835 flaskbb/management/views.py:868
+#: flaskbb/management/views.py:909
+msgid "You are not allowed to modify categories"
+msgstr ""
+
+#: flaskbb/management/views.py:847 flaskbb/management/views.py:859
 #: flaskbb/templates/management/category_form.html:22
 #: flaskbb/templates/management/category_form.html:22
 #: flaskbb/templates/management/forum_form.html:22
 #: flaskbb/templates/management/forum_form.html:22
 #: flaskbb/templates/management/forums.html:21
 #: flaskbb/templates/management/forums.html:21
 msgid "Add Category"
 msgid "Add Category"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:698
+#: flaskbb/management/views.py:855
 msgid "Category added."
 msgid "Category added."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:718 flaskbb/management/views.py:734
+#: flaskbb/management/views.py:884 flaskbb/management/views.py:900
 #: flaskbb/templates/management/forums.html:46
 #: flaskbb/templates/management/forums.html:46
 msgid "Edit Category"
 msgid "Edit Category"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:728
+#: flaskbb/management/views.py:894
 msgid "Category updated."
 msgid "Category updated."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:750
+#: flaskbb/management/views.py:925
 msgid "Category with all associated forums deleted."
 msgid "Category with all associated forums deleted."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:815
+#: flaskbb/management/views.py:934 flaskbb/management/views.py:955
+#: flaskbb/management/views.py:977 flaskbb/management/views.py:1048
+msgid "You are not allowed to view reports."
+msgstr ""
+
+#: flaskbb/management/views.py:1017
 #, python-format
 #, python-format
 msgid "Report %(id)s is already marked as read."
 msgid "Report %(id)s is already marked as read."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:823
+#: flaskbb/management/views.py:1025
 #, python-format
 #, python-format
 msgid "Report %(id)s marked as read."
 msgid "Report %(id)s marked as read."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:837
+#: flaskbb/management/views.py:1039
 msgid "All reports were marked as read."
 msgid "All reports were marked as read."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:871
+#: flaskbb/management/views.py:1082
 msgid "Report deleted."
 msgid "Report deleted."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:954
+#: flaskbb/management/views.py:1116
+msgid "You are not allowed to access the management panel"
+msgstr ""
+
+#: flaskbb/management/views.py:1171 flaskbb/management/views.py:1188
+#: flaskbb/management/views.py:1223 flaskbb/management/views.py:1257
+#: flaskbb/management/views.py:1278
+msgid "You are not allowed to modify plugins"
+msgstr ""
+
+#: flaskbb/management/views.py:1201
 #, python-format
 #, python-format
 msgid "Plugin %(plugin)s is already enabled."
 msgid "Plugin %(plugin)s is already enabled."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:963
+#: flaskbb/management/views.py:1210
 #, python-format
 #, python-format
 msgid "Plugin %(plugin)s enabled. Please restart FlaskBB now."
 msgid "Plugin %(plugin)s enabled. Please restart FlaskBB now."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:980
+#: flaskbb/management/views.py:1236
 #, python-format
 #, python-format
 msgid "Plugin %(plugin)s is already disabled."
 msgid "Plugin %(plugin)s is already disabled."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:988
+#: flaskbb/management/views.py:1244
 #, python-format
 #, python-format
 msgid "Plugin %(plugin)s disabled. Please restart FlaskBB now."
 msgid "Plugin %(plugin)s disabled. Please restart FlaskBB now."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:1004
+#: flaskbb/management/views.py:1269
 msgid "Plugin has been uninstalled."
 msgid "Plugin has been uninstalled."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:1017
+#: flaskbb/management/views.py:1291
 #, python-format
 #, python-format
 msgid "Can't install plugin. Enable '%(plugin)s' plugin first."
 msgid "Can't install plugin. Enable '%(plugin)s' plugin first."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/management/views.py:1025
+#: flaskbb/management/views.py:1299
 msgid "Plugin has been installed."
 msgid "Plugin has been installed."
 msgstr ""
 msgstr ""
 
 
@@ -1039,7 +1150,7 @@ msgid "Topic Tracker"
 msgstr ""
 msgstr ""
 
 
 #: flaskbb/templates/layout.html:100
 #: flaskbb/templates/layout.html:100
-#: flaskbb/templates/user/settings_layout.html:8
+#: flaskbb/templates/user/settings_layout.html:10
 msgid "Settings"
 msgid "Settings"
 msgstr ""
 msgstr ""
 
 
@@ -1065,10 +1176,14 @@ msgstr ""
 
 
 #: flaskbb/templates/auth/reset_password.html:1
 #: flaskbb/templates/auth/reset_password.html:1
 #: flaskbb/templates/auth/reset_password.html:10
 #: flaskbb/templates/auth/reset_password.html:10
-#: flaskbb/templates/layout.html:125
+#: flaskbb/templates/layout.html:126
 msgid "Reset Password"
 msgid "Reset Password"
 msgstr ""
 msgstr ""
 
 
+#: flaskbb/templates/layout.html:128
+msgid "Activate Account"
+msgstr ""
+
 #: flaskbb/templates/macros.html:327
 #: flaskbb/templates/macros.html:327
 msgid "Pages"
 msgid "Pages"
 msgstr ""
 msgstr ""
@@ -1171,13 +1286,13 @@ msgid ""
 msgstr ""
 msgstr ""
 
 
 #: flaskbb/templates/forum/category_layout.html:9
 #: flaskbb/templates/forum/category_layout.html:9
-#: flaskbb/templates/forum/search_result.html:129
-#: flaskbb/templates/forum/search_result.html:214
+#: flaskbb/templates/forum/search_result.html:123
+#: flaskbb/templates/forum/search_result.html:208
 #: flaskbb/templates/management/overview.html:91
 #: flaskbb/templates/management/overview.html:91
 #: flaskbb/templates/user/all_posts.html:28
 #: flaskbb/templates/user/all_posts.html:28
 #: flaskbb/templates/user/all_topics.html:8
 #: flaskbb/templates/user/all_topics.html:8
 #: flaskbb/templates/user/all_topics.html:28
 #: flaskbb/templates/user/all_topics.html:28
-#: flaskbb/templates/user/profile_layout.html:63
+#: flaskbb/templates/user/profile_layout.html:68
 msgid "Topics"
 msgid "Topics"
 msgstr ""
 msgstr ""
 
 
@@ -1186,10 +1301,10 @@ msgstr ""
 #: flaskbb/templates/forum/forum.html:50
 #: flaskbb/templates/forum/forum.html:50
 #: flaskbb/templates/forum/memberlist.html:52
 #: flaskbb/templates/forum/memberlist.html:52
 #: flaskbb/templates/forum/search_result.html:16
 #: flaskbb/templates/forum/search_result.html:16
-#: flaskbb/templates/forum/search_result.html:40
-#: flaskbb/templates/forum/search_result.html:105
-#: flaskbb/templates/forum/search_result.html:135
-#: flaskbb/templates/forum/search_result.html:215
+#: flaskbb/templates/forum/search_result.html:42
+#: flaskbb/templates/forum/search_result.html:99
+#: flaskbb/templates/forum/search_result.html:129
+#: flaskbb/templates/forum/search_result.html:209
 #: flaskbb/templates/forum/topic.html:53
 #: flaskbb/templates/forum/topic.html:53
 #: flaskbb/templates/forum/topic_horizontal.html:60
 #: flaskbb/templates/forum/topic_horizontal.html:60
 #: flaskbb/templates/forum/topictracker.html:32
 #: flaskbb/templates/forum/topictracker.html:32
@@ -1199,21 +1314,21 @@ msgstr ""
 #: flaskbb/templates/user/all_posts.html:8
 #: flaskbb/templates/user/all_posts.html:8
 #: flaskbb/templates/user/all_posts.html:34
 #: flaskbb/templates/user/all_posts.html:34
 #: flaskbb/templates/user/all_topics.html:34
 #: flaskbb/templates/user/all_topics.html:34
-#: flaskbb/templates/user/profile_layout.html:69
+#: flaskbb/templates/user/profile_layout.html:74
 msgid "Posts"
 msgid "Posts"
 msgstr ""
 msgstr ""
 
 
 #: flaskbb/templates/forum/category_layout.html:11
 #: flaskbb/templates/forum/category_layout.html:11
 #: flaskbb/templates/forum/edit_forum.html:34
 #: flaskbb/templates/forum/edit_forum.html:34
 #: flaskbb/templates/forum/forum.html:52
 #: flaskbb/templates/forum/forum.html:52
-#: flaskbb/templates/forum/search_result.html:137
-#: flaskbb/templates/forum/search_result.html:216
+#: flaskbb/templates/forum/search_result.html:131
+#: flaskbb/templates/forum/search_result.html:210
 #: flaskbb/templates/forum/topictracker.html:34
 #: flaskbb/templates/forum/topictracker.html:34
 msgid "Last Post"
 msgid "Last Post"
 msgstr ""
 msgstr ""
 
 
 #: flaskbb/templates/forum/category_layout.html:27
 #: flaskbb/templates/forum/category_layout.html:27
-#: flaskbb/templates/forum/search_result.html:232
+#: flaskbb/templates/forum/search_result.html:226
 #: flaskbb/templates/management/forums.html:79
 #: flaskbb/templates/management/forums.html:79
 msgid "Link to"
 msgid "Link to"
 msgstr ""
 msgstr ""
@@ -1222,9 +1337,9 @@ msgstr ""
 #: flaskbb/templates/forum/edit_forum.html:68
 #: flaskbb/templates/forum/edit_forum.html:68
 #: flaskbb/templates/forum/edit_forum.html:91
 #: flaskbb/templates/forum/edit_forum.html:91
 #: flaskbb/templates/forum/forum.html:87 flaskbb/templates/forum/forum.html:115
 #: flaskbb/templates/forum/forum.html:87 flaskbb/templates/forum/forum.html:115
-#: flaskbb/templates/forum/search_result.html:162
-#: flaskbb/templates/forum/search_result.html:184
-#: flaskbb/templates/forum/search_result.html:317
+#: flaskbb/templates/forum/search_result.html:156
+#: flaskbb/templates/forum/search_result.html:178
+#: flaskbb/templates/forum/search_result.html:311
 #: flaskbb/templates/forum/topictracker.html:68
 #: flaskbb/templates/forum/topictracker.html:68
 #: flaskbb/templates/forum/topictracker.html:91
 #: flaskbb/templates/forum/topictracker.html:91
 #: flaskbb/templates/management/plugins.html:46
 #: flaskbb/templates/management/plugins.html:46
@@ -1232,17 +1347,27 @@ msgid "by"
 msgstr ""
 msgstr ""
 
 
 #: flaskbb/templates/forum/category_layout.html:123
 #: flaskbb/templates/forum/category_layout.html:123
-#: flaskbb/templates/forum/search_result.html:326
+#: flaskbb/templates/forum/search_result.html:320
 msgid "No posts."
 msgid "No posts."
 msgstr ""
 msgstr ""
 
 
 #: flaskbb/templates/forum/edit_forum.html:33
 #: flaskbb/templates/forum/edit_forum.html:33
 #: flaskbb/templates/forum/forum.html:51
 #: flaskbb/templates/forum/forum.html:51
-#: flaskbb/templates/forum/search_result.html:136
+#: flaskbb/templates/forum/search_result.html:130
 #: flaskbb/templates/forum/topictracker.html:33
 #: flaskbb/templates/forum/topictracker.html:33
 msgid "Views"
 msgid "Views"
 msgstr ""
 msgstr ""
 
 
+#: flaskbb/templates/forum/edit_forum.html:35
+#: flaskbb/templates/forum/topictracker.html:35
+msgid "Select all"
+msgstr ""
+
+#: flaskbb/templates/forum/edit_forum.html:101
+#: flaskbb/templates/forum/topictracker.html:101
+msgid "Select topic"
+msgstr ""
+
 #: flaskbb/templates/forum/edit_forum.html:107
 #: flaskbb/templates/forum/edit_forum.html:107
 #: flaskbb/templates/forum/forum.html:128
 #: flaskbb/templates/forum/forum.html:128
 #: flaskbb/templates/forum/topictracker.html:107
 #: flaskbb/templates/forum/topictracker.html:107
@@ -1356,28 +1481,25 @@ msgid "Guests online"
 msgstr ""
 msgstr ""
 
 
 #: flaskbb/templates/forum/memberlist.html:48
 #: flaskbb/templates/forum/memberlist.html:48
-#: flaskbb/templates/forum/search_result.html:106
+#: flaskbb/templates/forum/search_result.html:100
 #: flaskbb/templates/management/banned_users.html:64
 #: flaskbb/templates/management/banned_users.html:64
 #: flaskbb/templates/management/users.html:63
 #: flaskbb/templates/management/users.html:63
 msgid "Date registered"
 msgid "Date registered"
 msgstr ""
 msgstr ""
 
 
 #: flaskbb/templates/forum/memberlist.html:50
 #: flaskbb/templates/forum/memberlist.html:50
-#: flaskbb/templates/forum/search_result.html:107
+#: flaskbb/templates/forum/search_result.html:101
 #: flaskbb/templates/management/banned_users.html:65
 #: flaskbb/templates/management/banned_users.html:65
 #: flaskbb/templates/management/users.html:64
 #: flaskbb/templates/management/users.html:64
 msgid "Group"
 msgid "Group"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/templates/forum/new_post.html:1
-#: flaskbb/templates/forum/new_post.html:18
-#: flaskbb/templates/forum/new_post.html:30
-msgid "New Post"
+#: flaskbb/templates/forum/new_post.html:2
+msgid "Edit Post"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/templates/forum/new_post.html:16
-#: flaskbb/templates/forum/new_post.html:28
-msgid "Edit Post"
+#: flaskbb/templates/forum/new_post.html:4
+msgid "New Post"
 msgstr ""
 msgstr ""
 
 
 #: flaskbb/templates/forum/online_users.html:1
 #: flaskbb/templates/forum/online_users.html:1
@@ -1398,36 +1520,59 @@ msgstr ""
 msgid "Close"
 msgid "Close"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/templates/forum/search_result.html:39
+#: flaskbb/templates/forum/search_result.html:29
+#: flaskbb/templates/forum/topic.html:40
+#: flaskbb/templates/forum/topic_horizontal.html:47
+#: flaskbb/templates/user/profile_layout.html:34
+msgid "online"
+msgstr ""
+
+#: flaskbb/templates/forum/search_result.html:31
+#: flaskbb/templates/forum/topic.html:42
+#: flaskbb/templates/forum/topic_horizontal.html:49
+#: flaskbb/templates/user/profile_layout.html:36
+msgid "offline"
+msgstr ""
+
+#: flaskbb/templates/forum/search_result.html:41
 #: flaskbb/templates/forum/topic.html:52
 #: flaskbb/templates/forum/topic.html:52
 #: flaskbb/templates/forum/topic_horizontal.html:59
 #: flaskbb/templates/forum/topic_horizontal.html:59
 msgid "Joined"
 msgid "Joined"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/templates/forum/search_result.html:43
-msgid "Message"
-msgstr ""
-
-#: flaskbb/templates/forum/search_result.html:54
+#: flaskbb/templates/forum/search_result.html:49
 #: flaskbb/templates/forum/topic.html:60
 #: flaskbb/templates/forum/topic.html:60
 msgid "Guest"
 msgid "Guest"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/templates/forum/search_result.html:89
+#: flaskbb/templates/forum/search_result.html:64
+#: flaskbb/templates/forum/topic.html:75
+#: flaskbb/templates/forum/topic_horizontal.html:76
+#, python-format
+msgid "Last modified: %(date)s by <a href=\"%(user_url)s\">%(user)s</a>"
+msgstr ""
+
+#: flaskbb/templates/forum/search_result.html:83
 msgid "No posts found matching your search criteria."
 msgid "No posts found matching your search criteria."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/templates/forum/search_result.html:119
+#: flaskbb/templates/forum/search_result.html:113
 #: flaskbb/templates/management/banned_users.html:104
 #: flaskbb/templates/management/banned_users.html:104
 #: flaskbb/templates/management/users.html:139
 #: flaskbb/templates/management/users.html:139
 msgid "No users found matching your search criteria."
 msgid "No users found matching your search criteria."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/templates/forum/search_result.html:197
+#: flaskbb/templates/forum/search_result.html:191
 msgid "No topics found matching your search criteria."
 msgid "No topics found matching your search criteria."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/templates/forum/search_result.html:335
+#: flaskbb/templates/forum/search_result.html:202
+#: flaskbb/templates/management/forums.html:1
+#: flaskbb/templates/management/forums.html:9
+msgid "Forums"
+msgstr ""
+
+#: flaskbb/templates/forum/search_result.html:329
 msgid "No forums found matching your search criteria."
 msgid "No forums found matching your search criteria."
 msgstr ""
 msgstr ""
 
 
@@ -1440,12 +1585,62 @@ msgstr ""
 #: flaskbb/templates/forum/topic.html:20
 #: flaskbb/templates/forum/topic.html:20
 #: flaskbb/templates/forum/topic_horizontal.html:20
 #: flaskbb/templates/forum/topic_horizontal.html:20
 #, python-format
 #, python-format
-msgid "This topic is hidden (%(when)s  by %(who)s)"
+msgid "This topic is hidden (%(when)s by %(who)s)"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/templates/forum/topic.html:91
+#: flaskbb/templates/forum/topic.html:90
 #, python-format
 #, python-format
-msgid "This post is hidden (%(when)s  by %(who)s)"
+msgid "This post is hidden (%(when)s by %(who)s)"
+msgstr ""
+
+#: flaskbb/templates/forum/topic.html:118
+#: flaskbb/templates/forum/topic_horizontal.html:107
+msgid "Quote this post"
+msgstr ""
+
+#: flaskbb/templates/forum/topic.html:120
+#: flaskbb/templates/forum/topic_horizontal.html:109
+msgid "Full Reply"
+msgstr ""
+
+#: flaskbb/templates/forum/topic.html:125
+#: flaskbb/templates/forum/topic_horizontal.html:114
+msgid "Edit this post"
+msgstr ""
+
+#: flaskbb/templates/forum/topic.html:131
+#: flaskbb/templates/forum/topic_horizontal.html:120
+msgid "Delete this topic"
+msgstr ""
+
+#: flaskbb/templates/forum/topic.html:139
+#: flaskbb/templates/forum/topic_horizontal.html:128
+msgid "Delete this post"
+msgstr ""
+
+#: flaskbb/templates/forum/topic.html:147
+#: flaskbb/templates/forum/topic_horizontal.html:136
+msgid "Report this post"
+msgstr ""
+
+#: flaskbb/templates/forum/topic.html:155
+#: flaskbb/templates/forum/topic_horizontal.html:144
+msgid "Unhide this topic"
+msgstr ""
+
+#: flaskbb/templates/forum/topic.html:160
+#: flaskbb/templates/forum/topic_horizontal.html:149
+msgid "Hide this topic"
+msgstr ""
+
+#: flaskbb/templates/forum/topic.html:167
+#: flaskbb/templates/forum/topic_horizontal.html:156
+msgid "Unhide this post"
+msgstr ""
+
+#: flaskbb/templates/forum/topic.html:172
+#: flaskbb/templates/forum/topic_horizontal.html:161
+msgid "Hide this post"
 msgstr ""
 msgstr ""
 
 
 #: flaskbb/templates/forum/topic_controls.html:15
 #: flaskbb/templates/forum/topic_controls.html:15
@@ -1528,11 +1723,6 @@ msgstr ""
 msgid "Manage Forums"
 msgid "Manage Forums"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/templates/management/forums.html:1
-#: flaskbb/templates/management/forums.html:9
-msgid "Forums"
-msgstr ""
-
 #: flaskbb/templates/management/forums.html:51
 #: flaskbb/templates/management/forums.html:51
 msgid "Delete Category"
 msgid "Delete Category"
 msgstr ""
 msgstr ""
@@ -1576,6 +1766,7 @@ msgstr ""
 
 
 #: flaskbb/templates/management/groups.html:59
 #: flaskbb/templates/management/groups.html:59
 #: flaskbb/templates/management/users.html:102
 #: flaskbb/templates/management/users.html:102
+#: flaskbb/templates/user/profile_layout.html:16
 msgid "Edit"
 msgid "Edit"
 msgstr ""
 msgstr ""
 
 
@@ -1587,7 +1778,7 @@ msgstr ""
 #: flaskbb/templates/management/overview.html:16
 #: flaskbb/templates/management/overview.html:16
 #: flaskbb/templates/user/all_posts.html:16
 #: flaskbb/templates/user/all_posts.html:16
 #: flaskbb/templates/user/all_topics.html:16
 #: flaskbb/templates/user/all_topics.html:16
-#: flaskbb/templates/user/profile_layout.html:51
+#: flaskbb/templates/user/profile_layout.html:56
 msgid "Overview"
 msgid "Overview"
 msgstr ""
 msgstr ""
 
 
@@ -1613,6 +1804,7 @@ msgid "users"
 msgstr ""
 msgstr ""
 
 
 #: flaskbb/templates/management/overview.html:56
 #: flaskbb/templates/management/overview.html:56
+#: flaskbb/templates/user/profile_layout.html:42
 msgid "posts"
 msgid "posts"
 msgstr ""
 msgstr ""
 
 
@@ -1647,12 +1839,32 @@ msgstr ""
 msgid "Components"
 msgid "Components"
 msgstr ""
 msgstr ""
 
 
+#: flaskbb/templates/management/overview.html:115
+msgid "checking status"
+msgstr ""
+
 #: flaskbb/templates/management/overview.html:128
 #: flaskbb/templates/management/overview.html:128
 #: flaskbb/templates/management/plugins.html:1
 #: flaskbb/templates/management/plugins.html:1
 #: flaskbb/templates/management/plugins.html:9
 #: flaskbb/templates/management/plugins.html:9
 msgid "Plugins"
 msgid "Plugins"
 msgstr ""
 msgstr ""
 
 
+#: flaskbb/templates/management/overview.html:141
+msgid "not enabled"
+msgstr ""
+
+#: flaskbb/templates/management/overview.html:144
+msgid "enabled &amp; installed"
+msgstr ""
+
+#: flaskbb/templates/management/overview.html:146
+msgid "enabled"
+msgstr ""
+
+#: flaskbb/templates/management/overview.html:148
+msgid "not installed"
+msgstr ""
+
 #: flaskbb/templates/management/overview.html:169
 #: flaskbb/templates/management/overview.html:169
 msgid "There is a problem."
 msgid "There is a problem."
 msgstr ""
 msgstr ""
@@ -1665,6 +1877,14 @@ msgstr ""
 msgid "You can start celery with this command:"
 msgid "You can start celery with this command:"
 msgstr ""
 msgstr ""
 
 
+#: flaskbb/templates/management/overview.html:188
+msgid "running"
+msgstr ""
+
+#: flaskbb/templates/management/overview.html:190
+msgid "not running"
+msgstr ""
+
 #: flaskbb/templates/management/plugins.html:19
 #: flaskbb/templates/management/plugins.html:19
 msgid "Manage Plugins"
 msgid "Manage Plugins"
 msgstr ""
 msgstr ""
@@ -1773,10 +1993,20 @@ msgstr ""
 msgid "Signature"
 msgid "Signature"
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/templates/user/profile_layout.html:27
+#: flaskbb/templates/user/profile_layout.html:2
+#, python-format
+msgid "%(user)s - User"
+msgstr ""
+
+#: flaskbb/templates/user/profile_layout.html:32
 msgid "Never seen"
 msgid "Never seen"
 msgstr ""
 msgstr ""
 
 
+#: flaskbb/templates/user/settings_layout.html:2
+#, python-format
+msgid "Settings - %(user)s - User"
+msgstr ""
+
 #: flaskbb/user/forms.py:33
 #: flaskbb/user/forms.py:33
 msgid "Theme"
 msgid "Theme"
 msgstr ""
 msgstr ""
@@ -1833,27 +2063,27 @@ msgstr ""
 msgid "User details updated."
 msgid "User details updated."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/utils/helpers.py:109
+#: flaskbb/utils/helpers.py:114
 msgid "You do not have the permissions to execute this action."
 msgid "You do not have the permissions to execute this action."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/utils/helpers.py:125
+#: flaskbb/utils/helpers.py:132
 msgid "You do not have the permissions to delete these topics."
 msgid "You do not have the permissions to delete these topics."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/utils/helpers.py:134
+#: flaskbb/utils/helpers.py:144
 msgid "You do not have the permissions to hide these topics."
 msgid "You do not have the permissions to hide these topics."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/utils/helpers.py:145
+#: flaskbb/utils/helpers.py:158
 msgid "You do not have the permissions to unhide these topics."
 msgid "You do not have the permissions to unhide these topics."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/utils/helpers.py:741
+#: flaskbb/utils/helpers.py:798
 msgid "The registration has been disabled."
 msgid "The registration has been disabled."
 msgstr ""
 msgstr ""
 
 
-#: flaskbb/utils/helpers.py:753
+#: flaskbb/utils/helpers.py:810
 msgid "This account is already activated."
 msgid "This account is already activated."
 msgstr ""
 msgstr ""