Browse Source

All strings can now be translated. #16

sh4nks 10 years ago
parent
commit
a059f65a4a
67 changed files with 2255 additions and 663 deletions
  1. 30 28
      flaskbb/auth/forms.py
  2. 9 8
      flaskbb/auth/views.py
  3. 3 1
      flaskbb/email.py
  4. 21 20
      flaskbb/forum/forms.py
  5. 87 81
      flaskbb/management/forms.py
  6. 0 1
      flaskbb/management/models.py
  7. 47 44
      flaskbb/management/views.py
  8. 3 3
      flaskbb/templates/auth/forgot_password.html
  9. 4 4
      flaskbb/templates/auth/login.html
  10. 3 3
      flaskbb/templates/auth/reauth.html
  11. 4 4
      flaskbb/templates/auth/register.html
  12. 3 3
      flaskbb/templates/auth/reset_password.html
  13. 4 4
      flaskbb/templates/email/reset_password.html
  14. 5 3
      flaskbb/templates/email/reset_password.txt
  15. 4 4
      flaskbb/templates/errors/forbidden_page.html
  16. 4 4
      flaskbb/templates/errors/page_not_found.html
  17. 3 3
      flaskbb/templates/errors/server_error.html
  18. 1 1
      flaskbb/templates/forum/category.html
  19. 5 5
      flaskbb/templates/forum/category_layout.html
  20. 25 19
      flaskbb/templates/forum/forum.html
  21. 9 9
      flaskbb/templates/forum/index.html
  22. 8 8
      flaskbb/templates/forum/memberlist.html
  23. 7 7
      flaskbb/templates/forum/new_post.html
  24. 7 7
      flaskbb/templates/forum/new_topic.html
  25. 2 2
      flaskbb/templates/forum/online_users.html
  26. 4 4
      flaskbb/templates/forum/report_post.html
  27. 6 6
      flaskbb/templates/forum/search_form.html
  28. 40 32
      flaskbb/templates/forum/search_result.html
  29. 15 15
      flaskbb/templates/forum/topic.html
  30. 8 8
      flaskbb/templates/forum/topic_controls.html
  31. 25 19
      flaskbb/templates/forum/topictracker.html
  32. 12 12
      flaskbb/templates/layout.html
  33. 1 1
      flaskbb/templates/macros.html
  34. 13 13
      flaskbb/templates/management/banned_users.html
  35. 4 4
      flaskbb/templates/management/category_form.html
  36. 4 4
      flaskbb/templates/management/forum_form.html
  37. 12 12
      flaskbb/templates/management/forums.html
  38. 3 3
      flaskbb/templates/management/group_form.html
  39. 9 9
      flaskbb/templates/management/groups.html
  40. 7 7
      flaskbb/templates/management/management_layout.html
  41. 8 8
      flaskbb/templates/management/overview.html
  42. 11 11
      flaskbb/templates/management/plugins.html
  43. 10 10
      flaskbb/templates/management/reports.html
  44. 1 1
      flaskbb/templates/management/settings.html
  45. 12 12
      flaskbb/templates/management/unread_reports.html
  46. 4 4
      flaskbb/templates/management/user_form.html
  47. 18 15
      flaskbb/templates/management/users.html
  48. 9 9
      flaskbb/templates/message/drafts.html
  49. 8 8
      flaskbb/templates/message/inbox.html
  50. 2 2
      flaskbb/templates/message/message_form.html
  51. 7 7
      flaskbb/templates/message/message_layout.html
  52. 8 8
      flaskbb/templates/message/sent.html
  53. 10 10
      flaskbb/templates/message/trash.html
  54. 4 4
      flaskbb/templates/message/view_message.html
  55. 2 2
      flaskbb/templates/user/all_posts.html
  56. 23 9
      flaskbb/templates/user/all_topics.html
  57. 2 2
      flaskbb/templates/user/change_email.html
  58. 2 2
      flaskbb/templates/user/change_password.html
  59. 2 2
      flaskbb/templates/user/change_user_details.html
  60. 2 2
      flaskbb/templates/user/general_settings.html
  61. 17 17
      flaskbb/templates/user/profile.html
  62. 7 7
      flaskbb/templates/user/settings_layout.html
  63. 17 17
      flaskbb/themes/bootstrap2/templates/layout.html
  64. 16 16
      flaskbb/themes/bootstrap3/templates/layout.html
  65. 1538 1
      flaskbb/translations/en/LC_MESSAGES/messages.po
  66. 39 38
      flaskbb/user/forms.py
  67. 15 14
      flaskbb/user/views.py

+ 30 - 28
flaskbb/auth/forms.py

@@ -14,51 +14,53 @@ from flask.ext.wtf import Form, RecaptchaField
 from wtforms import StringField, PasswordField, BooleanField, HiddenField
 from wtforms import StringField, PasswordField, BooleanField, HiddenField
 from wtforms.validators import (DataRequired, Email, EqualTo, regexp,
 from wtforms.validators import (DataRequired, Email, EqualTo, regexp,
                                 ValidationError)
                                 ValidationError)
+from flask.ext.babel import lazy_gettext as _
 
 
 from flaskbb.user.models import User
 from flaskbb.user.models import User
 
 
 USERNAME_RE = r'^[\w.+-]+$'
 USERNAME_RE = r'^[\w.+-]+$'
 is_username = regexp(USERNAME_RE,
 is_username = regexp(USERNAME_RE,
-                     message=("You can only use letters, numbers or dashes"))
+                     message=_("You can only use letters, numbers or dashes"))
 
 
 
 
 class LoginForm(Form):
 class LoginForm(Form):
-    login = StringField("Username or E-Mail", validators=[
-        DataRequired(message="You must provide an email adress or username")])
+    login = StringField(_("Username or E-Mail"), validators=[
+        DataRequired(message=_("You must provide an email adress or username"))]
+    )
 
 
-    password = PasswordField("Password", validators=[
-        DataRequired(message="Password required")])
+    password = PasswordField(_("Password"), validators=[
+        DataRequired(message=_("Password required"))])
 
 
-    remember_me = BooleanField("Remember Me", default=False)
+    remember_me = BooleanField(_("Remember Me"), default=False)
 
 
 
 
 class RegisterForm(Form):
 class RegisterForm(Form):
-    username = StringField("Username", validators=[
-        DataRequired(message="Username required"),
+    username = StringField(_("Username"), validators=[
+        DataRequired(message=_("Username required")),
         is_username])
         is_username])
 
 
-    email = StringField("E-Mail", validators=[
-        DataRequired(message="Email adress required"),
-        Email(message="This email is invalid")])
+    email = StringField(_("E-Mail"), validators=[
+        DataRequired(message=_("E-Mail required")),
+        Email(message=_("This E-Mail is invalid"))])
 
 
-    password = PasswordField("Password", validators=[
-        DataRequired(message="Password required")])
+    password = PasswordField(_("Password"), validators=[
+        DataRequired(message=_("Password required"))])
 
 
-    confirm_password = PasswordField("Confirm Password", validators=[
-        DataRequired(message="Confirm Password required"),
-        EqualTo("password", message="Passwords do not match")])
+    confirm_password = PasswordField(_("Confirm Password"), validators=[
+        DataRequired(message=_("Confirm Password required")),
+        EqualTo("password", message=_("Passwords do not match"))])
 
 
-    accept_tos = BooleanField("Accept Terms of Service", default=True)
+    accept_tos = BooleanField(_("I accept the Terms of Service"), default=True)
 
 
     def validate_username(self, field):
     def validate_username(self, field):
         user = User.query.filter_by(username=field.data).first()
         user = User.query.filter_by(username=field.data).first()
         if user:
         if user:
-            raise ValidationError("This username is taken")
+            raise ValidationError(_("This username is taken"))
 
 
     def validate_email(self, field):
     def validate_email(self, field):
         email = User.query.filter_by(email=field.data).first()
         email = User.query.filter_by(email=field.data).first()
         if email:
         if email:
-            raise ValidationError("This email is taken")
+            raise ValidationError(_("This email is taken"))
 
 
     def save(self):
     def save(self):
         user = User(username=self.username.data,
         user = User(username=self.username.data,
@@ -70,35 +72,35 @@ class RegisterForm(Form):
 
 
 
 
 class RegisterRecaptchaForm(RegisterForm):
 class RegisterRecaptchaForm(RegisterForm):
-    recaptcha = RecaptchaField("Captcha")
+    recaptcha = RecaptchaField(_("Captcha"))
 
 
 
 
 class ReauthForm(Form):
 class ReauthForm(Form):
-    password = PasswordField('Password', valdidators=[
+    password = PasswordField(_('Password'), valdidators=[
         DataRequired()])
         DataRequired()])
 
 
 
 
 class ForgotPasswordForm(Form):
 class ForgotPasswordForm(Form):
-    email = StringField('Email', validators=[
-        DataRequired(message="Email reguired"),
+    email = StringField(_('E-Mail'), validators=[
+        DataRequired(message=("E-Mail reguired")),
         Email()])
         Email()])
 
 
 
 
 class ResetPasswordForm(Form):
 class ResetPasswordForm(Form):
     token = HiddenField('Token')
     token = HiddenField('Token')
 
 
-    email = StringField('Email', validators=[
+    email = StringField(_('E-Mail'), validators=[
         DataRequired(),
         DataRequired(),
         Email()])
         Email()])
 
 
-    password = PasswordField('Password', validators=[
+    password = PasswordField(_('Password'), validators=[
         DataRequired()])
         DataRequired()])
 
 
-    confirm_password = PasswordField('Confirm password', validators=[
+    confirm_password = PasswordField(_('Confirm password'), validators=[
         DataRequired(),
         DataRequired(),
-        EqualTo('password', message='Passwords must match')])
+        EqualTo('password', message=_('Passwords do not match'))])
 
 
     def validate_email(self, field):
     def validate_email(self, field):
         email = User.query.filter_by(email=field.data).first()
         email = User.query.filter_by(email=field.data).first()
         if not email:
         if not email:
-            raise ValidationError("Wrong E-Mail.")
+            raise ValidationError(_("Wrong E-Mail."))

+ 9 - 8
flaskbb/auth/views.py

@@ -12,6 +12,7 @@
 from flask import Blueprint, flash, redirect, url_for, request, current_app
 from flask import Blueprint, flash, redirect, url_for, request, current_app
 from flask.ext.login import (current_user, login_user, login_required,
 from flask.ext.login import (current_user, login_user, login_required,
                              logout_user, confirm_login, login_fresh)
                              logout_user, confirm_login, login_fresh)
+from flask.ext.babel import gettext as _
 
 
 from flaskbb.utils.helpers import render_template
 from flaskbb.utils.helpers import render_template
 from flaskbb.email import send_reset_token
 from flaskbb.email import send_reset_token
@@ -41,7 +42,7 @@ def login():
             return redirect(request.args.get("next") or
             return redirect(request.args.get("next") or
                             url_for("forum.index"))
                             url_for("forum.index"))
 
 
-        flash(("Wrong username or password"), "danger")
+        flash(_("Wrong username or password"), "danger")
     return render_template("auth/login.html", form=form)
     return render_template("auth/login.html", form=form)
 
 
 
 
@@ -56,7 +57,7 @@ def reauth():
         form = ReauthForm(request.form)
         form = ReauthForm(request.form)
         if form.validate_on_submit():
         if form.validate_on_submit():
             confirm_login()
             confirm_login()
-            flash(("Reauthenticated"), "success")
+            flash(_("Reauthenticated"), "success")
             return redirect(request.args.get("next") or
             return redirect(request.args.get("next") or
                             url_for("user.profile"))
                             url_for("user.profile"))
         return render_template("auth/reauth.html", form=form)
         return render_template("auth/reauth.html", form=form)
@@ -92,7 +93,7 @@ def register():
         user = form.save()
         user = form.save()
         login_user(user)
         login_user(user)
 
 
-        flash(("Thanks for registering"), "success")
+        flash(_("Thanks for registering"), "success")
         return redirect(url_for("user.profile", username=current_user.username))
         return redirect(url_for("user.profile", username=current_user.username))
     return render_template("auth/register.html", form=form)
     return render_template("auth/register.html", form=form)
 
 
@@ -114,10 +115,10 @@ def forgot_password():
             token = user.make_reset_token()
             token = user.make_reset_token()
             send_reset_token(user, token=token)
             send_reset_token(user, token=token)
 
 
-            flash(("E-Mail sent! Please check your inbox."), "info")
+            flash(_("E-Mail sent! Please check your inbox."), "info")
             return redirect(url_for("auth.forgot_password"))
             return redirect(url_for("auth.forgot_password"))
         else:
         else:
-            flash(("You have entered an username or email that is not linked \
+            flash(_("You have entered an username or email that is not linked \
                 with your account"), "danger")
                 with your account"), "danger")
     return render_template("auth/forgot_password.html", form=form)
     return render_template("auth/forgot_password.html", form=form)
 
 
@@ -137,17 +138,17 @@ def reset_password(token):
         expired, invalid, data = user.verify_reset_token(form.token.data)
         expired, invalid, data = user.verify_reset_token(form.token.data)
 
 
         if invalid:
         if invalid:
-            flash(("Your password token is invalid."), "danger")
+            flash(_("Your password token is invalid."), "danger")
             return redirect(url_for("auth.forgot_password"))
             return redirect(url_for("auth.forgot_password"))
 
 
         if expired:
         if expired:
-            flash(("Your password is expired."), "danger")
+            flash(_("Your password is expired."), "danger")
             return redirect(url_for("auth.forgot_password"))
             return redirect(url_for("auth.forgot_password"))
 
 
         if user and data:
         if user and data:
             user.password = form.password.data
             user.password = form.password.data
             user.save()
             user.save()
-            flash(("Your password has been updated."), "success")
+            flash(_("Your password has been updated."), "success")
             return redirect(url_for("auth.login"))
             return redirect(url_for("auth.login"))
 
 
     form.token.data = token
     form.token.data = token

+ 3 - 1
flaskbb/email.py

@@ -10,12 +10,14 @@
 """
 """
 from flask import render_template
 from flask import render_template
 from flask.ext.mail import Message
 from flask.ext.mail import Message
+from flask.ext.babel import lazy_gettext as _
+
 from flaskbb.extensions import mail
 from flaskbb.extensions import mail
 
 
 
 
 def send_reset_token(user, token):
 def send_reset_token(user, token):
     send_email(
     send_email(
-        subject="Password Reset",
+        subject=_("Password Reset"),
         recipients=[user.email],
         recipients=[user.email],
         text_body=render_template(
         text_body=render_template(
             "email/reset_password.txt",
             "email/reset_password.txt",

+ 21 - 20
flaskbb/forum/forms.py

@@ -12,14 +12,15 @@ from flask.ext.wtf import Form
 from wtforms import (TextAreaField, StringField, SelectMultipleField,
 from wtforms import (TextAreaField, StringField, SelectMultipleField,
                      BooleanField)
                      BooleanField)
 from wtforms.validators import DataRequired, Optional, Length
 from wtforms.validators import DataRequired, Optional, Length
+from flask.ext.babel import lazy_gettext as _
 
 
 from flaskbb.forum.models import Topic, Post, Report, Forum
 from flaskbb.forum.models import Topic, Post, Report, Forum
 from flaskbb.user.models import User
 from flaskbb.user.models import User
 
 
 
 
 class QuickreplyForm(Form):
 class QuickreplyForm(Form):
-    content = TextAreaField("Quickreply", validators=[
-        DataRequired(message="You cannot post a reply without content.")])
+    content = TextAreaField(_("Quickreply"), validators=[
+        DataRequired(message=_("You cannot post a reply without content."))])
 
 
     def save(self, user, topic):
     def save(self, user, topic):
         post = Post(**self.data)
         post = Post(**self.data)
@@ -27,11 +28,11 @@ class QuickreplyForm(Form):
 
 
 
 
 class ReplyForm(Form):
 class ReplyForm(Form):
-    content = TextAreaField("Content", validators=[
-        DataRequired(message="You cannot post a reply without content.")])
+    content = TextAreaField(_("Content"), validators=[
+        DataRequired(message=_("You cannot post a reply without content."))])
 
 
-    track_topic = BooleanField("Track this topic", default=False, validators=[
-        Optional()])
+    track_topic = BooleanField(_("Track this topic"), default=False,
+                               validators=[Optional()])
 
 
     def save(self, user, topic):
     def save(self, user, topic):
         post = Post(content=self.content.data)
         post = Post(content=self.content.data)
@@ -42,14 +43,14 @@ class ReplyForm(Form):
 
 
 
 
 class NewTopicForm(ReplyForm):
 class NewTopicForm(ReplyForm):
-    title = StringField("Topic Title", validators=[
-        DataRequired(message="A topic title is required")])
+    title = StringField(_("Topic Title"), validators=[
+        DataRequired(message=_("A topic title is required"))])
 
 
-    content = TextAreaField("Content", validators=[
-        DataRequired(message="You cannot post a reply without content.")])
+    content = TextAreaField(_("Content"), validators=[
+        DataRequired(message=_("You cannot post a reply without content."))])
 
 
-    track_topic = BooleanField("Track this topic", default=False, validators=[
-        Optional()])
+    track_topic = BooleanField(_("Track this topic"), default=False,
+                               validators=[Optional()])
 
 
     def save(self, user, forum):
     def save(self, user, forum):
         topic = Topic(title=self.title.data)
         topic = Topic(title=self.title.data)
@@ -61,9 +62,9 @@ class NewTopicForm(ReplyForm):
 
 
 
 
 class ReportForm(Form):
 class ReportForm(Form):
-    reason = TextAreaField("Reason", validators=[
-        DataRequired(message="Please insert a reason why you want to report \
-                              this post")
+    reason = TextAreaField(_("Reason"), validators=[
+        DataRequired(message=_("Please insert a reason why you want to report "
+                               "this post."))
     ])
     ])
 
 
     def save(self, user, post):
     def save(self, user, post):
@@ -72,7 +73,7 @@ class ReportForm(Form):
 
 
 
 
 class UserSearchForm(Form):
 class UserSearchForm(Form):
-    search_query = StringField("Search", validators=[
+    search_query = StringField(_("Search"), validators=[
         Optional(), Length(min=3, max=50)
         Optional(), Length(min=3, max=50)
     ])
     ])
 
 
@@ -82,12 +83,12 @@ class UserSearchForm(Form):
 
 
 
 
 class SearchPageForm(Form):
 class SearchPageForm(Form):
-    search_query = StringField("Criteria", validators=[
+    search_query = StringField(_("Criteria"), validators=[
         DataRequired(), Length(min=3, max=50)])
         DataRequired(), Length(min=3, max=50)])
 
 
-    search_types = SelectMultipleField("Content", validators=[
-        DataRequired()], choices=[('post', 'Post'), ('topic', 'Topic'),
-                                  ('forum', 'Forum'), ('user', 'Users')])
+    search_types = SelectMultipleField(_("Content"), validators=[
+        DataRequired()], choices=[('post', _('Post')), ('topic', _('Topic')),
+                                  ('forum', _('Forum')), ('user', _('Users'))])
 
 
     def get_results(self):
     def get_results(self):
         # Because the DB is not yet initialized when this form is loaded,
         # Because the DB is not yet initialized when this form is loaded,

+ 87 - 81
flaskbb/management/forms.py

@@ -16,6 +16,7 @@ from wtforms.validators import (DataRequired, Optional, Email, regexp, Length,
 
 
 from wtforms.ext.sqlalchemy.fields import (QuerySelectField,
 from wtforms.ext.sqlalchemy.fields import (QuerySelectField,
                                            QuerySelectMultipleField)
                                            QuerySelectMultipleField)
+from flask.ext.babel import lazy_gettext as _
 
 
 from flaskbb.utils.widgets import SelectDateWidget
 from flaskbb.utils.widgets import SelectDateWidget
 from flaskbb.extensions import db
 from flaskbb.extensions import db
@@ -24,7 +25,7 @@ from flaskbb.user.models import User, Group
 
 
 USERNAME_RE = r'^[\w.+-]+$'
 USERNAME_RE = r'^[\w.+-]+$'
 is_username = regexp(USERNAME_RE,
 is_username = regexp(USERNAME_RE,
-                     message=("You can only use letters, numbers or dashes"))
+                     message=_("You can only use letters, numbers or dashes"))
 
 
 
 
 def selectable_forums():
 def selectable_forums():
@@ -40,48 +41,48 @@ def select_primary_group():
 
 
 
 
 class UserForm(Form):
 class UserForm(Form):
-    username = StringField("Username", validators=[
-        DataRequired(message="A username is required."),
+    username = StringField(_("Username"), validators=[
+        DataRequired(message=_("A username is required.")),
         is_username])
         is_username])
 
 
-    email = StringField("E-Mail", validators=[
-        DataRequired(message="A E-Mail address is required."),
-        Email(message="This email is invalid")])
+    email = StringField(_("E-Mail"), validators=[
+        DataRequired(message=_("A E-Mail address is required.")),
+        Email(message=_("This email is invalid"))])
 
 
     password = PasswordField("Password", validators=[
     password = PasswordField("Password", validators=[
         Optional()])
         Optional()])
 
 
-    birthday = DateField("Birthday", format="%d %m %Y",
+    birthday = DateField(_("Birthday"), format="%d %m %Y",
                          widget=SelectDateWidget(),
                          widget=SelectDateWidget(),
                          validators=[Optional()])
                          validators=[Optional()])
 
 
-    gender = SelectField("Gender", default="None", choices=[
+    gender = SelectField(_("Gender"), default="None", choices=[
         ("None", ""),
         ("None", ""),
-        ("Male", "Male"),
-        ("Female", "Female")])
+        ("Male", _("Male")),
+        ("Female", _("Female"))])
 
 
-    location = StringField("Location", validators=[
+    location = StringField(_("Location"), validators=[
         Optional()])
         Optional()])
 
 
-    website = StringField("Website", validators=[
+    website = StringField(_("Website"), validators=[
         Optional(), URL()])
         Optional(), URL()])
 
 
-    avatar = StringField("Avatar", validators=[
+    avatar = StringField(_("Avatar"), validators=[
         Optional(), URL()])
         Optional(), URL()])
 
 
-    signature = TextAreaField("Forum Signature", validators=[
+    signature = TextAreaField(_("Forum Signature"), validators=[
         Optional(), Length(min=0, max=250)])
         Optional(), Length(min=0, max=250)])
 
 
-    notes = TextAreaField("Notes", validators=[
+    notes = TextAreaField(_("Notes"), validators=[
         Optional(), Length(min=0, max=5000)])
         Optional(), Length(min=0, max=5000)])
 
 
     primary_group = QuerySelectField(
     primary_group = QuerySelectField(
-        "Primary Group",
+        _("Primary Group"),
         query_factory=select_primary_group,
         query_factory=select_primary_group,
         get_label="name")
         get_label="name")
 
 
     secondary_groups = QuerySelectMultipleField(
     secondary_groups = QuerySelectMultipleField(
-        "Secondary Groups",
+        _("Secondary Groups"),
         # TODO: Template rendering errors "NoneType is not callable"
         # TODO: Template rendering errors "NoneType is not callable"
         #       without this, figure out why.
         #       without this, figure out why.
         query_factory=select_primary_group,
         query_factory=select_primary_group,
@@ -99,7 +100,7 @@ class UserForm(Form):
             user = User.query.filter(User.username.like(field.data)).first()
             user = User.query.filter(User.username.like(field.data)).first()
 
 
         if user:
         if user:
-            raise ValidationError("This username is taken")
+            raise ValidationError(_("This username is taken"))
 
 
     def validate_email(self, field):
     def validate_email(self, field):
         if hasattr(self, "user"):
         if hasattr(self, "user"):
@@ -113,7 +114,7 @@ class UserForm(Form):
             user = User.query.filter(User.email.like(field.data)).first()
             user = User.query.filter(User.email.like(field.data)).first()
 
 
         if user:
         if user:
-            raise ValidationError("This email is taken")
+            raise ValidationError(_("This email is taken"))
 
 
     def save(self):
     def save(self):
         user = User(**self.data)
         user = User(**self.data)
@@ -132,64 +133,65 @@ class EditUserForm(UserForm):
 
 
 
 
 class GroupForm(Form):
 class GroupForm(Form):
-    name = StringField("Group Name", validators=[
-        DataRequired(message="Group name required")])
+    name = StringField(_("Group Name"), validators=[
+        DataRequired(message=_("Group name required"))])
 
 
-    description = TextAreaField("Description", validators=[
+    description = TextAreaField(_("Description"), validators=[
         Optional()])
         Optional()])
 
 
     admin = BooleanField(
     admin = BooleanField(
-        "Is Admin Group?",
-        description="With this option the group has access to the admin panel."
+        _("Is Admin Group?"),
+        description=_("With this option the group has access to "
+                      "the admin panel.")
     )
     )
     super_mod = BooleanField(
     super_mod = BooleanField(
-        "Is Super Moderator Group?",
-        description="Check this if the users in this group are allowed to \
-                     moderate every forum"
+        _("Is Super Moderator Group?"),
+        description=_("Check this if the users in this group are allowed to "
+                      "moderate every forum")
     )
     )
     mod = BooleanField(
     mod = BooleanField(
-        "Is Moderator Group?",
-        description="Check this if the users in this group are allowed to \
-                     moderate specified forums"
+        _("Is Moderator Group?"),
+        description=_("Check this if the users in this group are allowed to "
+                      "moderate specified forums")
     )
     )
     banned = BooleanField(
     banned = BooleanField(
-        "Is Banned Group?",
-        description="Only one Banned group is allowed"
+        _("Is Banned Group?"),
+        description=_("Only one Banned group is allowed")
     )
     )
     guest = BooleanField(
     guest = BooleanField(
-        "Is Guest Group?",
-        description="Only one Guest group is allowed"
+        _("Is Guest Group?"),
+        description=_("Only one Guest group is allowed")
     )
     )
     editpost = BooleanField(
     editpost = BooleanField(
-        "Can edit posts",
-        description="Check this if the users in this group can edit posts"
+        _("Can edit posts"),
+        description=_("Check this if the users in this group can edit posts")
     )
     )
     deletepost = BooleanField(
     deletepost = BooleanField(
-        "Can delete posts",
-        description="Check this is the users in this group can delete posts"
+        _("Can delete posts"),
+        description=_("Check this is the users in this group can delete posts")
     )
     )
     deletetopic = BooleanField(
     deletetopic = BooleanField(
-        "Can delete topics",
-        description="Check this is the users in this group can delete topics"
+        _("Can delete topics"),
+        description=_("Check this is the users in this group can delete topics")
     )
     )
     posttopic = BooleanField(
     posttopic = BooleanField(
-        "Can create topics",
-        description="Check this is the users in this group can create topics"
+        _("Can create topics"),
+        description=_("Check this is the users in this group can create topics")
     )
     )
     postreply = BooleanField(
     postreply = BooleanField(
-        "Can post replies",
-        description="Check this is the users in this group can post replies"
+        _("Can post replies"),
+        description=_("Check this is the users in this group can post replies")
     )
     )
 
 
     mod_edituser = BooleanField(
     mod_edituser = BooleanField(
-        "Moderators can edit user profiles",
-        description=("Allow moderators to edit a another users profile "
-                     "including password and email changes.")
+        _("Moderators can edit user profiles"),
+        description=_("Allow moderators to edit a another users profile "
+                      "including password and email changes.")
     )
     )
 
 
     mod_banuser = BooleanField(
     mod_banuser = BooleanField(
-        "Moderators can ban users",
-        description="Allow moderators to ban other users"
+        _("Moderators can ban users"),
+        description=_("Allow moderators to ban other users")
     )
     )
 
 
     def validate_name(self, field):
     def validate_name(self, field):
@@ -204,7 +206,7 @@ class GroupForm(Form):
             group = Group.query.filter(Group.name.like(field.data)).first()
             group = Group.query.filter(Group.name.like(field.data)).first()
 
 
         if group:
         if group:
-            raise ValidationError("This name is taken")
+            raise ValidationError(_("This name is taken"))
 
 
     def validate_banned(self, field):
     def validate_banned(self, field):
         if hasattr(self, "group"):
         if hasattr(self, "group"):
@@ -218,7 +220,7 @@ class GroupForm(Form):
             group = Group.query.filter_by(banned=True).count()
             group = Group.query.filter_by(banned=True).count()
 
 
         if field.data and group > 0:
         if field.data and group > 0:
-            raise ValidationError("There is already a Banned group")
+            raise ValidationError(_("There is already a Banned group"))
 
 
     def validate_guest(self, field):
     def validate_guest(self, field):
         if hasattr(self, "group"):
         if hasattr(self, "group"):
@@ -232,7 +234,7 @@ class GroupForm(Form):
             group = Group.query.filter_by(guest=True).count()
             group = Group.query.filter_by(guest=True).count()
 
 
         if field.data and group > 0:
         if field.data and group > 0:
-            raise ValidationError("There is already a Guest group")
+            raise ValidationError(_("There is already a Guest group"))
 
 
     def save(self):
     def save(self):
         group = Group(**self.data)
         group = Group(**self.data)
@@ -252,61 +254,62 @@ class AddGroupForm(GroupForm):
 
 
 class ForumForm(Form):
 class ForumForm(Form):
     title = StringField(
     title = StringField(
-        "Forum Title",
-        validators=[DataRequired(message="Forum title required")]
+        _("Forum Title"),
+        validators=[DataRequired(message=_("Forum title required"))]
     )
     )
 
 
     description = TextAreaField(
     description = TextAreaField(
-        "Description",
+        _("Description"),
         validators=[Optional()],
         validators=[Optional()],
-        description="You can format your description with BBCode."
+        description=_("You can format your description with BBCode.")
     )
     )
 
 
     position = IntegerField(
     position = IntegerField(
-        "Position",
+        _("Position"),
         default=1,
         default=1,
-        validators=[DataRequired(message="Forum position required")]
+        validators=[DataRequired(message=_("Forum position required"))]
     )
     )
 
 
     category = QuerySelectField(
     category = QuerySelectField(
-        "Category",
+        _("Category"),
         query_factory=selectable_categories,
         query_factory=selectable_categories,
         allow_blank=False,
         allow_blank=False,
         get_label="title",
         get_label="title",
-        description="The category that contains this forum."
+        description=_("The category that contains this forum.")
     )
     )
 
 
     external = StringField(
     external = StringField(
-        "External link",
+        _("External link"),
         validators=[Optional(), URL()],
         validators=[Optional(), URL()],
-        description="A link to a website i.e. 'http://flaskbb.org'"
+        description=_("A link to a website i.e. 'http://flaskbb.org'")
     )
     )
 
 
     moderators = StringField(
     moderators = StringField(
-        "Moderators",
-        description="Comma seperated usernames. Leave it blank if you do not \
-                     want to set any moderators."
+        _("Moderators"),
+        description=_("Comma seperated usernames. Leave it blank if you do not "
+                      "want to set any moderators.")
     )
     )
 
 
     show_moderators = BooleanField(
     show_moderators = BooleanField(
-        "Show Moderators",
-        description="Do you want show the moderators on the index page?"
+        _("Show Moderators"),
+        description=_("Do you want show the moderators on the index page?")
     )
     )
 
 
     locked = BooleanField(
     locked = BooleanField(
-        "Locked?",
-        description="Disable new posts and topics in this forum."
+        _("Locked?"),
+        description=_("Disable new posts and topics in this forum.")
     )
     )
 
 
     def validate_external(self, field):
     def validate_external(self, field):
         if hasattr(self, "forum"):
         if hasattr(self, "forum"):
             if self.forum.topics:
             if self.forum.topics:
-                raise ValidationError("You cannot convert a forum that \
-                                       contain topics in a external link")
+                raise ValidationError(_("You cannot convert a forum that "
+                                        "contain topics in a external link"))
 
 
     def validate_show_moderators(self, field):
     def validate_show_moderators(self, field):
         if field.data and not self.moderators.data:
         if field.data and not self.moderators.data:
-            raise ValidationError("You also need to specify some moderators.")
+            raise ValidationError(_("You also need to specify some "
+                                    "moderators."))
 
 
     def validate_moderators(self, field):
     def validate_moderators(self, field):
         approved_moderators = list()
         approved_moderators = list()
@@ -325,12 +328,15 @@ class ForumForm(Form):
                     if not (user.get_permissions()["mod"] or
                     if not (user.get_permissions()["mod"] or
                             user.get_permissions()["admin"] or
                             user.get_permissions()["admin"] or
                             user.get_permissions()["super_mod"]):
                             user.get_permissions()["super_mod"]):
-                        raise ValidationError("%s is not in a moderators \
-                            group" % user.username)
+                        raise ValidationError(
+                            _("%(user)s is not in a moderators group",
+                              user=user.username)
+                        )
                     else:
                     else:
                         approved_moderators.append(user)
                         approved_moderators.append(user)
                 else:
                 else:
-                    raise ValidationError("User %s not found" % moderator)
+                    raise ValidationError(_("User %(moderator)s not found",
+                                            moderator=moderator))
             field.data = approved_moderators
             field.data = approved_moderators
 
 
         else:
         else:
@@ -365,19 +371,19 @@ class AddForumForm(ForumForm):
 
 
 
 
 class CategoryForm(Form):
 class CategoryForm(Form):
-    title = StringField("Category title", validators=[
-        DataRequired(message="Category title required")])
+    title = StringField(_("Category title"), validators=[
+        DataRequired(message=_("Category title required"))])
 
 
     description = TextAreaField(
     description = TextAreaField(
-        "Description",
+        _("Description"),
         validators=[Optional()],
         validators=[Optional()],
-        description="You can format your description with BBCode."
+        description=_("You can format your description with BBCode.")
     )
     )
 
 
     position = IntegerField(
     position = IntegerField(
-        "Position",
+        _("Position"),
         default=1,
         default=1,
-        validators=[DataRequired(message="Category position required")]
+        validators=[DataRequired(message=_("Category position required"))]
     )
     )
 
 
     def save(self):
     def save(self):

+ 0 - 1
flaskbb/management/models.py

@@ -8,7 +8,6 @@
     :copyright: (c) 2014 by the FlaskBB Team.
     :copyright: (c) 2014 by the FlaskBB Team.
     :license: BSD, see LICENSE for more details.
     :license: BSD, see LICENSE for more details.
 """
 """
-import sys
 from wtforms import (TextField, IntegerField, FloatField, BooleanField,
 from wtforms import (TextField, IntegerField, FloatField, BooleanField,
                      SelectField, SelectMultipleField, validators)
                      SelectField, SelectMultipleField, validators)
 from flask.ext.wtf import Form
 from flask.ext.wtf import Form

+ 47 - 44
flaskbb/management/views.py

@@ -16,6 +16,7 @@ from flask import (Blueprint, current_app, request, redirect, url_for, flash,
                    __version__ as flask_version)
                    __version__ as flask_version)
 from flask.ext.login import current_user
 from flask.ext.login import current_user
 from flask.ext.plugins import get_all_plugins, get_plugin, get_plugin_from_all
 from flask.ext.plugins import get_all_plugins, get_plugin, get_plugin_from_all
+from flask.ext.babel import gettext as _
 
 
 from flaskbb import __version__ as flaskbb_version
 from flaskbb import __version__ as flaskbb_version
 from flaskbb._compat import iteritems
 from flaskbb._compat import iteritems
@@ -120,7 +121,7 @@ def edit_user(user_id):
     user = User.query.filter_by(id=user_id).first_or_404()
     user = User.query.filter_by(id=user_id).first_or_404()
 
 
     if not can_edit_user(current_user):
     if not can_edit_user(current_user):
-        flash("You are not allowed to edit this user.", "danger")
+        flash(_("You are not allowed to edit this user."), "danger")
         return redirect(url_for("management.users"))
         return redirect(url_for("management.users"))
 
 
     secondary_group_query = Group.query.filter(
     secondary_group_query = Group.query.filter(
@@ -140,11 +141,11 @@ def edit_user(user_id):
 
 
         user.save(groups=form.secondary_groups.data)
         user.save(groups=form.secondary_groups.data)
 
 
-        flash("User successfully edited", "success")
+        flash(_("User successfully edited"), "success")
         return redirect(url_for("management.edit_user", user_id=user.id))
         return redirect(url_for("management.edit_user", user_id=user.id))
 
 
     return render_template("management/user_form.html", form=form,
     return render_template("management/user_form.html", form=form,
-                           title="Edit User")
+                           title=_("Edit User"))
 
 
 
 
 @management.route("/users/<int:user_id>/delete")
 @management.route("/users/<int:user_id>/delete")
@@ -152,7 +153,7 @@ def edit_user(user_id):
 def delete_user(user_id):
 def delete_user(user_id):
     user = User.query.filter_by(id=user_id).first_or_404()
     user = User.query.filter_by(id=user_id).first_or_404()
     user.delete()
     user.delete()
-    flash("User successfully deleted", "success")
+    flash(_("User successfully deleted"), "success")
     return redirect(url_for("management.users"))
     return redirect(url_for("management.users"))
 
 
 
 
@@ -162,11 +163,11 @@ def add_user():
     form = AddUserForm()
     form = AddUserForm()
     if form.validate_on_submit():
     if form.validate_on_submit():
         form.save()
         form.save()
-        flash("User successfully added.", "success")
+        flash(_("User successfully added."), "success")
         return redirect(url_for("management.users"))
         return redirect(url_for("management.users"))
 
 
     return render_template("management/user_form.html", form=form,
     return render_template("management/user_form.html", form=form,
-                           title="Add User")
+                           title=_("Add User"))
 
 
 
 
 @management.route("/users/banned")
 @management.route("/users/banned")
@@ -195,7 +196,7 @@ def banned_users():
 @moderator_required
 @moderator_required
 def ban_user(user_id):
 def ban_user(user_id):
     if not can_ban_user(current_user):
     if not can_ban_user(current_user):
-        flash("You do not have the permissions to ban this user.")
+        flash(_("You do not have the permissions to ban this user."), "danger")
         return redirect(url_for("management.overview"))
         return redirect(url_for("management.overview"))
 
 
     user = User.query.filter_by(id=user_id).first_or_404()
     user = User.query.filter_by(id=user_id).first_or_404()
@@ -205,13 +206,13 @@ def ban_user(user_id):
             (current_user.permissions['mod'] or
             (current_user.permissions['mod'] or
              current_user.permissions['super_mod']):
              current_user.permissions['super_mod']):
 
 
-        flash("A moderator cannot ban an admin user.", "danger")
+        flash(_("A moderator cannot ban an admin user."), "danger")
         return redirect(url_for("management.overview"))
         return redirect(url_for("management.overview"))
 
 
     if user.ban():
     if user.ban():
-        flash("User was banned successfully.", "success")
+        flash(_("User was banned successfully."), "success")
     else:
     else:
-        flash("Could not ban user.", "danger")
+        flash(_("Could not ban user."), "danger")
 
 
     return redirect(url_for("management.banned_users"))
     return redirect(url_for("management.banned_users"))
 
 
@@ -220,15 +221,16 @@ def ban_user(user_id):
 @moderator_required
 @moderator_required
 def unban_user(user_id):
 def unban_user(user_id):
     if not can_ban_user(current_user):
     if not can_ban_user(current_user):
-        flash("You do not have the permissions to unban this user.")
+        flash(_("You do not have the permissions to unban this user."),
+              "danger")
         return redirect(url_for("management.overview"))
         return redirect(url_for("management.overview"))
 
 
     user = User.query.filter_by(id=user_id).first_or_404()
     user = User.query.filter_by(id=user_id).first_or_404()
 
 
     if user.unban():
     if user.unban():
-        flash("User is now unbanned.", "success")
+        flash(_("User is now unbanned."), "success")
     else:
     else:
-        flash("Could not unban user.", "danger")
+        flash(_("Could not unban user."), "danger")
 
 
     return redirect(url_for("management.banned_users"))
     return redirect(url_for("management.banned_users"))
 
 
@@ -266,13 +268,14 @@ def report_markread(report_id=None):
 
 
         report = Report.query.filter_by(id=report_id).first_or_404()
         report = Report.query.filter_by(id=report_id).first_or_404()
         if report.zapped:
         if report.zapped:
-            flash("Report %s is already marked as read" % report.id, "success")
+            flash(_("Report %(id)s is already marked as read", id=report.id),
+                  "success")
             return redirect(url_for("management.reports"))
             return redirect(url_for("management.reports"))
 
 
         report.zapped_by = current_user.id
         report.zapped_by = current_user.id
         report.zapped = datetime.utcnow()
         report.zapped = datetime.utcnow()
         report.save()
         report.save()
-        flash("Report %s marked as read" % report.id, "success")
+        flash(_("Report %(id)s marked as read", id=report.id), "success")
         return redirect(url_for("management.reports"))
         return redirect(url_for("management.reports"))
 
 
     # mark all as read
     # mark all as read
@@ -286,7 +289,7 @@ def report_markread(report_id=None):
     db.session.add_all(report_list)
     db.session.add_all(report_list)
     db.session.commit()
     db.session.commit()
 
 
-    flash("All reports were marked as read", "success")
+    flash(_("All reports were marked as read"), "success")
     return redirect(url_for("management.reports"))
     return redirect(url_for("management.reports"))
 
 
 
 
@@ -317,11 +320,11 @@ def edit_group(group_id):
         if group.guest:
         if group.guest:
             Guest.invalidate_cache()
             Guest.invalidate_cache()
 
 
-        flash("Group successfully edited.", "success")
+        flash(_("Group successfully edited."), "success")
         return redirect(url_for("management.groups", group_id=group.id))
         return redirect(url_for("management.groups", group_id=group.id))
 
 
     return render_template("management/group_form.html", form=form,
     return render_template("management/group_form.html", form=form,
-                           title="Edit Group")
+                           title=_("Edit Group"))
 
 
 
 
 @management.route("/groups/<int:group_id>/delete")
 @management.route("/groups/<int:group_id>/delete")
@@ -329,7 +332,7 @@ def edit_group(group_id):
 def delete_group(group_id):
 def delete_group(group_id):
     group = Group.query.filter_by(id=group_id).first_or_404()
     group = Group.query.filter_by(id=group_id).first_or_404()
     group.delete()
     group.delete()
-    flash("Group successfully deleted.", "success")
+    flash(_("Group successfully deleted."), "success")
     return redirect(url_for("management.groups"))
     return redirect(url_for("management.groups"))
 
 
 
 
@@ -339,11 +342,11 @@ def add_group():
     form = AddGroupForm()
     form = AddGroupForm()
     if form.validate_on_submit():
     if form.validate_on_submit():
         form.save()
         form.save()
-        flash("Group successfully added.", "success")
+        flash(_("Group successfully added."), "success")
         return redirect(url_for("management.groups"))
         return redirect(url_for("management.groups"))
 
 
     return render_template("management/group_form.html", form=form,
     return render_template("management/group_form.html", form=form,
-                           title="Add Group")
+                           title=_("Add Group"))
 
 
 
 
 # Forums and Categories
 # Forums and Categories
@@ -364,7 +367,7 @@ def edit_forum(forum_id):
         form.populate_obj(forum)
         form.populate_obj(forum)
         forum.save(moderators=form.moderators.data)
         forum.save(moderators=form.moderators.data)
 
 
-        flash("Forum successfully edited.", "success")
+        flash(_("Forum successfully edited."), "success")
         return redirect(url_for("management.edit_forum", forum_id=forum.id))
         return redirect(url_for("management.edit_forum", forum_id=forum.id))
     else:
     else:
         if forum.moderators:
         if forum.moderators:
@@ -375,7 +378,7 @@ def edit_forum(forum_id):
             form.moderators.data = None
             form.moderators.data = None
 
 
     return render_template("management/forum_form.html", form=form,
     return render_template("management/forum_form.html", form=form,
-                           title="Edit Forum")
+                           title=_("Edit Forum"))
 
 
 
 
 @management.route("/forums/<int:forum_id>/delete")
 @management.route("/forums/<int:forum_id>/delete")
@@ -388,7 +391,7 @@ def delete_forum(forum_id):
 
 
     forum.delete(involved_users)
     forum.delete(involved_users)
 
 
-    flash("Forum successfully deleted.", "success")
+    flash(_("Forum successfully deleted."), "success")
     return redirect(url_for("management.forums"))
     return redirect(url_for("management.forums"))
 
 
 
 
@@ -400,7 +403,7 @@ def add_forum(category_id=None):
 
 
     if form.validate_on_submit():
     if form.validate_on_submit():
         form.save()
         form.save()
-        flash("Forum successfully added.", "success")
+        flash(_("Forum successfully added."), "success")
         return redirect(url_for("management.forums"))
         return redirect(url_for("management.forums"))
     else:
     else:
         if category_id:
         if category_id:
@@ -408,7 +411,7 @@ def add_forum(category_id=None):
             form.category.data = category
             form.category.data = category
 
 
     return render_template("management/forum_form.html", form=form,
     return render_template("management/forum_form.html", form=form,
-                           title="Add Forum")
+                           title=_("Add Forum"))
 
 
 
 
 @management.route("/category/add", methods=["GET", "POST"])
 @management.route("/category/add", methods=["GET", "POST"])
@@ -418,11 +421,11 @@ def add_category():
 
 
     if form.validate_on_submit():
     if form.validate_on_submit():
         form.save()
         form.save()
-        flash("Category successfully created.", "success")
+        flash(_("Category successfully created."), "success")
         return redirect(url_for("management.forums"))
         return redirect(url_for("management.forums"))
 
 
     return render_template("management/category_form.html", form=form,
     return render_template("management/category_form.html", form=form,
-                           title="Add Category")
+                           title=_("Add Category"))
 
 
 
 
 @management.route("/category/<int:category_id>/edit", methods=["GET", "POST"])
 @management.route("/category/<int:category_id>/edit", methods=["GET", "POST"])
@@ -437,7 +440,7 @@ def edit_category(category_id):
         category.save()
         category.save()
 
 
     return render_template("management/category_form.html", form=form,
     return render_template("management/category_form.html", form=form,
-                           title="Edit Category")
+                           title=_("Edit Category"))
 
 
 
 
 @management.route("/category/<int:category_id>/delete", methods=["GET", "POST"])
 @management.route("/category/<int:category_id>/delete", methods=["GET", "POST"])
@@ -450,7 +453,7 @@ def delete_category(category_id):
                                        Post.user_id == User.id).all()
                                        Post.user_id == User.id).all()
 
 
     category.delete(involved_users)
     category.delete(involved_users)
-    flash("Category with all associated forums deleted.", "success")
+    flash(_("Category with all associated forums deleted."), "success")
     return redirect(url_for("management.forums"))
     return redirect(url_for("management.forums"))
 
 
 
 
@@ -476,13 +479,13 @@ def enable_plugin(plugin):
 
 
         os.remove(disabled_file)
         os.remove(disabled_file)
 
 
-        flash("Plugin should be enabled. Please reload your app.", "success")
+        flash(_("Plugin is enabled. Please reload your app."), "success")
 
 
-        flash("If you are using a host which doesn't support writting on the "
-              "disk, this won't work - than you need to delete the "
-              "'DISABLED' file by yourself.", "info")
+        flash(_("If you are using a host which doesn't support writting on the "
+                "disk, this won't work - than you need to delete the "
+                "'DISABLED' file by yourself."), "info")
     else:
     else:
-        flash("Plugin is not enabled", "danger")
+        flash(_("Plugin is not enabled"), "danger")
 
 
     return redirect(url_for("management.plugins"))
     return redirect(url_for("management.plugins"))
 
 
@@ -493,7 +496,7 @@ def disable_plugin(plugin):
     try:
     try:
         plugin = get_plugin(plugin)
         plugin = get_plugin(plugin)
     except KeyError:
     except KeyError:
-        flash("Plugin {} not found".format(plugin), "danger")
+        flash(_("Plugin %(plugin)s not found", plugin=plugin.name), "danger")
         return redirect(url_for("management.plugins"))
         return redirect(url_for("management.plugins"))
 
 
     plugin_dir = os.path.join(
     plugin_dir = os.path.join(
@@ -505,11 +508,11 @@ def disable_plugin(plugin):
 
 
     open(disabled_file, "a").close()
     open(disabled_file, "a").close()
 
 
-    flash("Plugin should be disabled. Please reload your app.", "success")
+    flash(_("Plugin is disabled. Please reload your app."), "success")
 
 
-    flash("If you are using a host which doesn't "
-          "support writting on the disk, this won't work - than you need to "
-          "create a 'DISABLED' file by yourself.", "info")
+    flash(_("If you are using a host which doesn't "
+            "support writting on the disk, this won't work - than you need to "
+            "create a 'DISABLED' file by yourself."), "info")
 
 
     return redirect(url_for("management.plugins"))
     return redirect(url_for("management.plugins"))
 
 
@@ -522,9 +525,9 @@ def uninstall_plugin(plugin):
         plugin.uninstall()
         plugin.uninstall()
         Setting.invalidate_cache()
         Setting.invalidate_cache()
 
 
-        flash("Plugin {} has been uninstalled.".format(plugin.name), "success")
+        flash(_("Plugin has been uninstalled."), "success")
     else:
     else:
-        flash("Cannot uninstall Plugin {}".format(plugin.name), "danger")
+        flash(_("Cannot uninstall Plugin"), "danger")
 
 
     return redirect(url_for("management.plugins"))
     return redirect(url_for("management.plugins"))
 
 
@@ -537,8 +540,8 @@ def install_plugin(plugin):
         plugin.install()
         plugin.install()
         Setting.invalidate_cache()
         Setting.invalidate_cache()
 
 
-        flash("Plugin {} has been installed.".format(plugin.name), "success")
+        flash(_("Plugin has been installed."), "success")
     else:
     else:
-        flash("Cannot install Plugin {}".format(plugin.name), "danger")
+        flash(_("Cannot install Plugin"), "danger")
 
 
     return redirect(url_for("management.plugins"))
     return redirect(url_for("management.plugins"))

+ 3 - 3
flaskbb/templates/auth/forgot_password.html

@@ -1,18 +1,18 @@
-{% set page_title = "Reset Password" %}
+{% set page_title = _("Reset Password") %}
 
 
 {% extends theme("layout.html") %}
 {% extends theme("layout.html") %}
 {% block content %}
 {% block content %}
 {% from theme("macros.html") import horizontal_field %}
 {% from theme("macros.html") import horizontal_field %}
 
 
 <form class="form-horizontal" role="form" method="POST">
 <form class="form-horizontal" role="form" method="POST">
-    <h2>Reset Password</h2>
+    <h2>{% trans %}Reset Password{% endtrans %}</h2>
     <hr>
     <hr>
         {{ form.hidden_tag() }}
         {{ form.hidden_tag() }}
         {{ horizontal_field(form.email) }}
         {{ horizontal_field(form.email) }}
 
 
     <div class="form-group">
     <div class="form-group">
         <div class="col-sm-offset-3 col-sm-9">
         <div class="col-sm-offset-3 col-sm-9">
-            <button type="submit" class="btn btn-primary">Reset Password</button>
+            <button type="submit" class="btn btn-primary">{% trans %}Reset Password{% endtrans %}</button>
         </div>
         </div>
     </div>
     </div>
 </form>
 </form>

+ 4 - 4
flaskbb/templates/auth/login.html

@@ -1,11 +1,11 @@
-{% set page_title = "Login" %}
+{% set page_title = _("Login") %}
 
 
 {% extends theme("layout.html") %}
 {% extends theme("layout.html") %}
 {% from theme("macros.html") import horizontal_field %}
 {% from theme("macros.html") import horizontal_field %}
 {% block content %}
 {% block content %}
 
 
 <form class="form-horizontal" role="form" method="POST">
 <form class="form-horizontal" role="form" method="POST">
-    <h2>Login</h2>
+    <h2>{% trans %}Login{% endtrans %}</h2>
     <hr>
     <hr>
     {{ form.hidden_tag() }}
     {{ form.hidden_tag() }}
     {{ horizontal_field(form.login)}}
     {{ horizontal_field(form.login)}}
@@ -15,7 +15,7 @@
         <div class="col-sm-offset-3 col-sm-3">
         <div class="col-sm-offset-3 col-sm-3">
             <div class="checkbox">
             <div class="checkbox">
                 <label>
                 <label>
-                    {{ form.remember_me }} Remember Me
+                    {{ form.remember_me }} {{ form.remember_me.label }}
                 </label>
                 </label>
             </div>
             </div>
         </div>
         </div>
@@ -23,7 +23,7 @@
 
 
     <div class="form-group">
     <div class="form-group">
         <div class="col-sm-offset-3 col-sm-9">
         <div class="col-sm-offset-3 col-sm-9">
-            <button type="submit" class="btn btn-success">Login</button>
+            <button type="submit" class="btn btn-success">{% trans %}Login{% endtrans %}</button>
         </div>
         </div>
     </div>
     </div>
 </form>
 </form>

+ 3 - 3
flaskbb/templates/auth/reauth.html

@@ -1,4 +1,4 @@
-{% set page_title = "Refresh Login" %}
+{% set page_title = _("Refresh Login") %}
 {% set active_forum_nav=True %}
 {% set active_forum_nav=True %}
 
 
 {% extends theme("layout.html") %}
 {% extends theme("layout.html") %}
@@ -6,10 +6,10 @@
 {% from theme("macros.html") import form_input_field %}
 {% from theme("macros.html") import form_input_field %}
 
 
 <form class="form-signin" action="" method="POST">
 <form class="form-signin" action="" method="POST">
-    <h2 class="form-signin-heading">Refresh Login</h2>
+    <h2 class="form-signin-heading">{% trans %}Refresh Login{% endtrans %}</h2>
     {{ form.hidden_tag() }}
     {{ form.hidden_tag() }}
     {{ form_input_field(form.password)}}
     {{ form_input_field(form.password)}}
-    <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
+    <button class="btn btn-lg btn-primary btn-block" type="submit">{% trans %}Sign in{% endtrans %}</button>
 </form>
 </form>
 
 
 {% endblock %}
 {% endblock %}

+ 4 - 4
flaskbb/templates/auth/register.html

@@ -1,11 +1,11 @@
-{% set page_title = "Register" %}
+{% set page_title = _("Register") %}
 
 
 {% extends theme("layout.html") %}
 {% extends theme("layout.html") %}
 {% block content %}
 {% block content %}
 {% from theme("macros.html") import horizontal_field %}
 {% from theme("macros.html") import horizontal_field %}
 
 
 <form class="form-horizontal" role="form" method="POST">
 <form class="form-horizontal" role="form" method="POST">
-    <h2>Register</h2>
+    <h2>{% trans %}Register{% endtrans %}</h2>
     <hr>
     <hr>
     {{ form.hidden_tag() }}
     {{ form.hidden_tag() }}
     {{ horizontal_field(form.username)}}
     {{ horizontal_field(form.username)}}
@@ -21,7 +21,7 @@
         <div class="col-lg-offset-2 col-lg-3">
         <div class="col-lg-offset-2 col-lg-3">
             <div class="checkbox">
             <div class="checkbox">
                 <label>
                 <label>
-                    <input type="checkbox"> {{ form.accept_tos }} I accept the <a href="#">Terms of Service</a>
+                    <input type="checkbox"> {{ form.accept_tos }} {{ form.accept_tos.label }}
                 </label>
                 </label>
             </div>
             </div>
         </div>
         </div>
@@ -29,7 +29,7 @@
 
 
     <div class="form-group">
     <div class="form-group">
         <div class="col-lg-offset-2 col-lg-10">
         <div class="col-lg-offset-2 col-lg-10">
-            <button type="submit" class="btn btn-success">Register</button>
+            <button type="submit" class="btn btn-success">{% trans %}Register{% endtrans %}</button>
         </div>
         </div>
     </div>
     </div>
 </form>
 </form>

+ 3 - 3
flaskbb/templates/auth/reset_password.html

@@ -1,11 +1,11 @@
-{% set page_title = "Reset Password" %}
+{% set page_title = _("Reset Password") %}
 
 
 {% extends theme("layout.html") %}
 {% extends theme("layout.html") %}
 {% block content %}
 {% block content %}
 {% from theme("macros.html") import horizontal_field %}
 {% from theme("macros.html") import horizontal_field %}
 
 
 <form class="form-horizontal" role="form" method="POST">
 <form class="form-horizontal" role="form" method="POST">
-    <h2>Reset Password</h2>
+    <h2>{% trans %}Reset Password{% endtrans %}</h2>
     <hr>
     <hr>
         {{ form.hidden_tag() }}
         {{ form.hidden_tag() }}
         {{ form.token }}
         {{ form.token }}
@@ -15,7 +15,7 @@
 
 
     <div class="form-group">
     <div class="form-group">
         <div class="col-lg-offset-2 col-lg-10">
         <div class="col-lg-offset-2 col-lg-10">
-            <button type="submit" class="btn btn-primary">Reset Password</button>
+            <button type="submit" class="btn btn-primary">{% trans %}Reset Password{% endtrans %}</button>
         </div>
         </div>
     </div>
     </div>
 </form>
 </form>

+ 4 - 4
flaskbb/templates/email/reset_password.html

@@ -1,5 +1,5 @@
-<p>Dear {{ user.username }},</p>
-<p>To reset your password click on the following link:</p>
+<p>{% trans user=user.username %}Dear {{ user }},{% endtrans %}</p>
+<p>{% trans %}To reset your password click on the following link:{% endtrans %}</p>
 <p><a href="{{ url_for('auth.reset_password', token=token, _external=True) }}">{{ url_for('auth.reset_password', token=token, _external=True) }}</a></p>
 <p><a href="{{ url_for('auth.reset_password', token=token, _external=True) }}">{{ url_for('auth.reset_password', token=token, _external=True) }}</a></p>
-<p>Sincerely,</p>
-<p>The Administration</p>
+<p>{% trans %}Sincerely,{% endtrans %}</p>
+<p>{% trans %}The Administration{% endtrans %}</p>

+ 5 - 3
flaskbb/templates/email/reset_password.txt

@@ -1,9 +1,11 @@
-Dear {{ user.username }},
+{{ set link = url_for('auth.reset_password', token=token, _external=True) }}
+
+{% trans user=user.username, link=link %}Dear {{ user }},
 
 
 To reset your password click on the following link:
 To reset your password click on the following link:
 
 
-{{ url_for('auth.reset_password', token=token, _external=True) }}
+{{ link }}
 
 
 Sincerely,
 Sincerely,
-
 The Administration
 The Administration
+{% endtrans %}

+ 4 - 4
flaskbb/templates/errors/forbidden_page.html

@@ -1,12 +1,12 @@
-{% set page_title = "No Access - 403" %}
+{% set page_title = _("No Access - 403") %}
 
 
 {% extends theme("layout.html") %}
 {% extends theme("layout.html") %}
 {% block content %}
 {% block content %}
 
 
 <div class="well">
 <div class="well">
-    <h1>Forbidden Page</h1>
-    <p>You do not have the permission to view this page.</p>
-    <p><a href="{{url_for('forum.index')}}">Back to the Forums</a></p>
+    <h1>{% trans %}Forbidden Page{% endtrans %}</h1>
+    <p>{% trans %}You do not have the permission to view this page.{% endtrans %}</p>
+    <p><a href="{{url_for('forum.index')}}">{% trans %}Back to the Forums{% endtrans %}</a></p>
 </div>
 </div>
 
 
 {% endblock %}
 {% endblock %}

+ 4 - 4
flaskbb/templates/errors/page_not_found.html

@@ -1,12 +1,12 @@
-{% set page_title = "Oh noes! 404" %}
+{% set page_title = _("Oh noes! 404") %}
 
 
 {% extends theme("layout.html") %}
 {% extends theme("layout.html") %}
 {% block content %}
 {% block content %}
 
 
 <div class="well">
 <div class="well">
-    <h1>Oops, Page not found!</h1>
-    <p>The page you were looking for does not exist.</p>
-    <p><a href="{{url_for('forum.index')}}">Back to the Forums</a></p>
+    <h1>{% trans %}Oops, Page not found!{% endtrans %}</h1>
+    <p>{% trans %}The page you were looking for does not exist.{% endtrans %}</p>
+    <p><a href="{{url_for('forum.index')}}">{% trans %}Back to the Forums{% endtrans %}</a></p>
 </div>
 </div>
 <hr>
 <hr>
 
 

+ 3 - 3
flaskbb/templates/errors/server_error.html

@@ -1,11 +1,11 @@
-{% set page_title = "Server Error - 500" %}
+{% set page_title = _("Server Error - 500") %}
 
 
 {% extends theme("layout.html") %}
 {% extends theme("layout.html") %}
 {% block content %}
 {% block content %}
 
 
 <div class="well">
 <div class="well">
-    <h1>Server Error</h1>
-    <p>Something went wrong!</p>
+    <h1>{% trans %}Server Error{% endtrans %}</h1>
+    <p>{% trans %}Something went wrong!{% endtrans %}</p>
 </div>
 </div>
 
 
 {% endblock %}
 {% endblock %}

+ 1 - 1
flaskbb/templates/forum/category.html

@@ -5,7 +5,7 @@
 {% block content %}
 {% block content %}
 
 
 <ol class="breadcrumb">
 <ol class="breadcrumb">
-    <li><a href="{{ url_for('forum.index') }}">Forum</a></li>
+    <li><a href="{{ url_for('forum.index') }}">{% trans %}Forum{% endtrans %}</a></li>
     <li class="active">{{ category.title }}</li>
     <li class="active">{{ category.title }}</li>
 </ol>
 </ol>
 
 

+ 5 - 5
flaskbb/templates/forum/category_layout.html

@@ -8,10 +8,10 @@
     </thead>
     </thead>
     <tbody class="forumbody">
     <tbody class="forumbody">
         <tr class="forum_stats">
         <tr class="forum_stats">
-            <td colspan="2"><strong>Forum</strong></td>
-            <td width="85" align="center" style="white-space: nowrap"><strong>Topics</strong></td>
-            <td width="85" align="center" style="white-space: nowrap"><strong>Posts</strong></td>
-            <td width="200" align="center" style="white-space: nowrap"><strong>Last Post</strong></td>
+            <td colspan="2"><strong>{% trans %}Forum{% endtrans %}</strong></td>
+            <td width="85" align="center" style="white-space: nowrap"><strong>{% trans %}Topics{% endtrans %}</strong></td>
+            <td width="85" align="center" style="white-space: nowrap"><strong>{% trans %}Posts{% endtrans %}</strong></td>
+            <td width="200" align="center" style="white-space: nowrap"><strong>{% trans %}Last Post{% endtrans %}</strong></td>
         </tr>
         </tr>
 
 
         {% for forum, forumsread in forums %}
         {% for forum, forumsread in forums %}
@@ -57,7 +57,7 @@
                     {% endautoescape %}
                     {% endautoescape %}
                     {% if forum.show_moderators %}
                     {% if forum.show_moderators %}
                     <div class="forum-moderators">
                     <div class="forum-moderators">
-                        Moderators:
+                        {% trans %}Moderators{% endtrans %}:
                         {% for moderator in forum.moderators %}
                         {% for moderator in forum.moderators %}
                         <a href="{{ url_for('user.profile', username=moderator.username) }}">{{ moderator.username }}</a>{% if not loop.last %}, {% endif %}
                         <a href="{{ url_for('user.profile', username=moderator.username) }}">{{ moderator.username }}</a>{% if not loop.last %}, {% endif %}
                         {% endfor %}
                         {% endfor %}

+ 25 - 19
flaskbb/templates/forum/forum.html

@@ -6,7 +6,7 @@
 {% from theme('macros.html') import render_pagination, topic_pages %}
 {% from theme('macros.html') import render_pagination, topic_pages %}
 
 
 <ol class="breadcrumb">
 <ol class="breadcrumb">
-    <li><a href="{{ url_for('forum.index') }}">Forum</a></li>
+    <li><a href="{{ url_for('forum.index') }}">{% trans %}Forum{% endtrans %}</a></li>
     <li><a href="{{ forum.category.url }}">{{ forum.category.title }}</a></li>
     <li><a href="{{ forum.category.url }}">{{ forum.category.title }}</a></li>
     <li class="active">{{ forum.title }}</li>
     <li class="active">{{ forum.title }}</li>
 </ol>
 </ol>
@@ -19,16 +19,16 @@
 <div class="pull-right" style="padding-bottom: 10px">
 <div class="pull-right" style="padding-bottom: 10px">
     <div class="btn-group">
     <div class="btn-group">
         <a href="{{ url_for('forum.markread', forum_id=forum.id, slug=forum.slug) }}" class="btn btn-default">
         <a href="{{ url_for('forum.markread', forum_id=forum.id, slug=forum.slug) }}" class="btn btn-default">
-            <span class="fa fa-check"></span> Mark as Read
+            <span class="fa fa-check"></span> {% trans %}Mark as Read{% endtrans %}
         </a>
         </a>
 
 
         {% if forum.locked %}
         {% if forum.locked %}
         <span class="btn btn-primary">
         <span class="btn btn-primary">
-            <span class="fa fa-lock"></span> Locked
+            <span class="fa fa-lock"></span> {% trans %}Locked{% endtrans %}
         </span>
         </span>
         {% else %}
         {% else %}
         <a href="{{ url_for('forum.new_topic', forum_id=forum.id, slug=forum.slug) }}" class="btn btn-primary">
         <a href="{{ url_for('forum.new_topic', forum_id=forum.id, slug=forum.slug) }}" class="btn btn-primary">
-            <span class="fa fa-pencil"></span> New Topic
+            <span class="fa fa-pencil"></span> {% trans %}New Topic{% endtrans %}
         </a>
         </a>
         {% endif %}
         {% endif %}
 
 
@@ -47,13 +47,13 @@
 
 
     <tbody>
     <tbody>
         <tr>
         <tr>
-            <td colspan="2">Topic</td>
+            <td colspan="2">{% trans %}Topic{% endtrans %}</td>
 
 
-            <td>Posts</td>
+            <td>{% trans %}Posts{% endtrans %}</td>
 
 
-            <td>Views</td>
+            <td>{% trans %}Views{% endtrans %}</td>
 
 
-            <td>Last Post</td>
+            <td>{% trans %}Last Post{% endtrans %}</td>
         </tr>
         </tr>
 
 
         {% for topic, topicread in topics.items %}
         {% for topic, topicread in topics.items %}
@@ -82,11 +82,14 @@
                     <!-- Topic Pagination -->
                     <!-- Topic Pagination -->
                     {{ topic_pages(topic, flaskbb_config["POSTS_PER_PAGE"]) }}
                     {{ topic_pages(topic, flaskbb_config["POSTS_PER_PAGE"]) }}
                     <br />
                     <br />
-                    {% if topic.user_id %}
-                    <small>by <a href="{{ topic.user.url }}">{{ topic.user.username }}</a></small>
-                    {% else %}
-                    <small>by {{ topic.username }}</small>
-                    {% endif %}
+                    <small>
+                        {% trans %}by{% endtrans %}
+                        {% if topic.user_id %}
+                         <a href="{{ topic.user.url }}">{{ topic.user.username }}</a>
+                        {% else %}
+                        {{ topic.username }}
+                        {% endif %}
+                    </small>
                 </div>
                 </div>
             </td>
             </td>
             <td>
             <td>
@@ -98,17 +101,20 @@
             <td>
             <td>
                 <a href="{{ topic.last_post.url }}">{{ topic.last_post.date_created|time_since }}</a><br />
                 <a href="{{ topic.last_post.url }}">{{ topic.last_post.date_created|time_since }}</a><br />
 
 
-                {% if topic.last_post.user_id %}
-                <small>by <a href="{{ topic.last_post.user.url }}">{{ topic.last_post.user.username }}</a></small>
-                {% else %}
-                <small>{{ topic.last_post.username }}</small>
-                {% endif %}
+                <small>
+                    {% trans %}by{% endtrans %}
+                    {% if topic.last_post.user_id %}
+                    <a href="{{ topic.last_post.user.url }}">{{ topic.last_post.user.username }}</a>
+                    {% else %}
+                    {{ topic.last_post.username }}
+                    {% endif %}
+                </small>
             </td>
             </td>
         </tr>
         </tr>
         {% else %}
         {% else %}
         <tr>
         <tr>
             <td colspan="5">
             <td colspan="5">
-                No Topics so far.
+                {% trans %}No Topics so far.{% endtrans %}
             </td>
             </td>
         </tr>
         </tr>
         {% endfor %}
         {% endfor %}

+ 9 - 9
flaskbb/templates/forum/index.html

@@ -2,7 +2,7 @@
 {% block content %}
 {% block content %}
 
 
 <ol class="breadcrumb">
 <ol class="breadcrumb">
-    <li><a href="{{ url_for('forum.index') }}">Forum</a></li>
+    <li><a href="{{ url_for('forum.index') }}">{% trans %}Forum{% endtrans %}</a></li>
 </ol>
 </ol>
 
 
 {% for category, forums in categories %}
 {% for category, forums in categories %}
@@ -14,23 +14,23 @@
     <thead>
     <thead>
         <tr>
         <tr>
             <td colspan="2">
             <td colspan="2">
-                <strong>Board Statistics</strong>
-                [<a href="{{ url_for('forum.who_is_online') }}" onclick="window.open(this.href, 'wio_window','width=500,height=500'); return false;">Who is online?</a>]
+                <strong>{% trans %}Board Statistics{% endtrans %}</strong>
+                [<a href="{{ url_for('forum.who_is_online') }}" onclick="window.open(this.href, 'wio_window','width=500,height=500'); return false;">{% trans %}Who is online?{% endtrans %}</a>]
             </td>
             </td>
         </tr>
         </tr>
     </thead>
     </thead>
     <tbody>
     <tbody>
         <tr>
         <tr>
             <td>
             <td>
-                Total number of registered users: <strong>{{ user_count }}</strong> <br />
-                Total number of topics: <strong>{{ topic_count }}</strong> <br />
-                Total number of posts: <strong>{{ post_count }}</strong> <br />
+                {% trans %}Total number of registered users{% endtrans %}: <strong>{{ user_count }}</strong> <br />
+                {% trans %}Total number of topics{% endtrans %}: <strong>{{ topic_count }}</strong> <br />
+                {% trans %}Total number of posts{% endtrans %}: <strong>{{ post_count }}</strong> <br />
             </td>
             </td>
             <td>
             <td>
-                Newest registered user: {% if newest_user %}<a href="{{ newest_user.url }}">{{ newest_user.username }}</a>{% else %}No users{% endif %}<br />
-                Registered users online: <strong>{{ online_users }}</strong> <br />
+                {% trans %}Newest registered user{% endtrans %}: {% if newest_user %}<a href="{{ newest_user.url }}">{{ newest_user.username }}</a>{% else %}{% trans %}No users{% endtrans %}{% endif %}<br />
+                {% trans %}Registered users online{% endtrans %}: <strong>{{ online_users }}</strong> <br />
                 {% if config["REDIS_ENABLED"] %}
                 {% if config["REDIS_ENABLED"] %}
-                Guests online: <strong>{{ online_guests }}</strong> <br />
+                {% trans %}Guests online{% endtrans %}: <strong>{{ online_guests }}</strong> <br />
                 {% endif %}
                 {% endif %}
             </td>
             </td>
         </tr>
         </tr>

+ 8 - 8
flaskbb/templates/forum/memberlist.html

@@ -1,12 +1,12 @@
-{% set page_title = "Memberlist" %}
+{% set page_title = _("Memberlist") %}
 
 
 {% extends theme("layout.html") %}
 {% extends theme("layout.html") %}
 {% block content %}
 {% block content %}
 {% from theme('macros.html') import render_pagination, group_field %}
 {% from theme('macros.html') import render_pagination, group_field %}
 
 
 <ul class="breadcrumb">
 <ul class="breadcrumb">
-    <li><a href="{{ url_for('forum.index') }}">Forum</a></li>
-    <li class="active">Memberlist</li>
+    <li><a href="{{ url_for('forum.index') }}">{% trans %}Forum{% endtrans %}</a></li>
+    <li class="active">{% trans %}Memberlist{% endtrans %}</li>
 </ul>
 </ul>
 
 
 <div class="pull-left" style="padding-bottom: 10px">
 <div class="pull-left" style="padding-bottom: 10px">
@@ -18,7 +18,7 @@
           {{ search_form.hidden_tag() }}
           {{ search_form.hidden_tag() }}
           {{ group_field(search_form.search_query) }}
           {{ group_field(search_form.search_query) }}
           <span class="input-group-btn">
           <span class="input-group-btn">
-            <button class="btn btn-primary" type="submit">Search</button>
+            <button class="btn btn-primary" type="submit">{% trans %}Search{% endtrans %}</button>
           </span>
           </span>
       </div>
       </div>
   </form>
   </form>
@@ -28,10 +28,10 @@
     <thead>
     <thead>
         <tr>
         <tr>
             <th>#</th>
             <th>#</th>
-            <th>Username</th>
-            <th>Posts</th>
-            <th>Date registered</th>
-            <th>Group</th>
+            <th>{% trans %}Username{% endtrans %}</th>
+            <th>{% trans %}Posts{% endtrans %}</th>
+            <th>{% trans %}Date registered{% endtrans %}</th>
+            <th>{% trans %}Group{% endtrans %}</th>
         </tr>
         </tr>
     </thead>
     </thead>
     <tbody>
     <tbody>

+ 7 - 7
flaskbb/templates/forum/new_post.html

@@ -1,4 +1,4 @@
-{% set page_title = "New Post" %}
+{% set page_title = _("New Post") %}
 {% set active_forum_nav=True %}
 {% set active_forum_nav=True %}
 
 
 {% extends theme("layout.html") %}
 {% extends theme("layout.html") %}
@@ -6,20 +6,20 @@
 {% from theme("macros.html") import render_field %}
 {% from theme("macros.html") import render_field %}
 
 
 <ul class="breadcrumb">
 <ul class="breadcrumb">
-    <li><a href="{{ url_for('forum.index') }}">Forum</a></li>
+    <li><a href="{{ url_for('forum.index') }}">{% trans %}Forum{% endtrans %}</a></li>
     <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">New Post</li>
+    <li class="active">{% trans %}New Post{% endtrans %}</li>
 </ul>
 </ul>
 
 
 <form class="form" role="form" method="post">
 <form class="form" role="form" method="post">
     {{ form.hidden_tag() }}
     {{ form.hidden_tag() }}
-    <h3>New Post</h3>
+    <h3>{% trans %}New Post{% endtrans %}</h3>
 
 
     {% if preview %}
     {% if preview %}
     <div class="form-group">
     <div class="form-group">
         <div class="col-sm-12">
         <div class="col-sm-12">
-            <label>Preview</label>
+            <label>{% trans %}Preview{% endtrans %}</label>
             <div class="form-control preview-body">
             <div class="form-control preview-body">
                 {% autoescape false %}
                 {% autoescape false %}
                 {{ preview|markup }}
                 {{ preview|markup }}
@@ -31,8 +31,8 @@
 
 
     {{ render_field(form.content, div_class="col-sm-12", rows=12) }}
     {{ render_field(form.content, div_class="col-sm-12", rows=12) }}
 
 
-    <button type="submit" class="btn btn-success" name="button" value="reply">Reply</button>
-    <button type="submit" class="btn btn-success" name="button" value="preview">Preview</button>
+    <button type="submit" class="btn btn-success" name="button" value="reply">{% trans %}Reply{% endtrans %}</button>
+    <button type="submit" class="btn btn-success" name="button" value="preview">{% trans %}Preview{% endtrans %}</button>
 </form>
 </form>
 
 
 {% endblock %}
 {% endblock %}

+ 7 - 7
flaskbb/templates/forum/new_topic.html

@@ -1,4 +1,4 @@
-{% set page_title = "New Topic" %}
+{% set page_title = _("New Topic") %}
 {% set active_forum_nav=True %}
 {% set active_forum_nav=True %}
 
 
 {% extends theme("layout.html") %}
 {% extends theme("layout.html") %}
@@ -6,19 +6,19 @@
 {% from theme("macros.html") import render_field %}
 {% from theme("macros.html") import render_field %}
 
 
 <ul class="breadcrumb">
 <ul class="breadcrumb">
-    <li><a href="{{ url_for('forum.index') }}">Forum</a></li>
+    <li><a href="{{ url_for('forum.index') }}">{% trans %}Forum{% endtrans %}</a></li>
     <li><a href="{{ forum.url }}">{{ forum.title }}</a></li>
     <li><a href="{{ forum.url }}">{{ forum.title }}</a></li>
-    <li class="active">New Topic</li>
+    <li class="active">{% trans %}New Topic{% endtrans %}</li>
 </ul>
 </ul>
 
 
 <form class="form" role="form" method="post">
 <form class="form" role="form" method="post">
     {{ form.hidden_tag() }}
     {{ form.hidden_tag() }}
-    <h3>New Topic</h3>
+    <h3>{% trans %}New Topic{% endtrans %}</h3>
 
 
     {% if preview %}
     {% if preview %}
     <div class="form-group">
     <div class="form-group">
         <div class="col-sm-12">
         <div class="col-sm-12">
-            <label>Preview</label>
+            <label>{% trans %}Preview{% endtrans %}</label>
             <div class="form-control preview-body">
             <div class="form-control preview-body">
                 {% autoescape false %}
                 {% autoescape false %}
                 {{ preview|markup }}
                 {{ preview|markup }}
@@ -31,8 +31,8 @@
     {{ render_field(form.title, div_class="col-sm-12") }}
     {{ render_field(form.title, div_class="col-sm-12") }}
     {{ render_field(form.content, div_class="col-sm-12", rows=12) }}
     {{ render_field(form.content, div_class="col-sm-12", rows=12) }}
 
 
-    <button type="submit" class="btn btn-success" name="button" value="reply">Reply</button>
-    <button type="submit" class="btn btn-success" name="button" value="preview">Preview</button>
+    <button type="submit" class="btn btn-success" name="button" value="reply">{% trans %}Post Topic{% endtrans %}</button>
+    <button type="submit" class="btn btn-success" name="button" value="preview">{% trans %}Preview{% endtrans %}</button>
 </form>
 </form>
 
 
 {% endblock %}
 {% endblock %}

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

@@ -1,4 +1,4 @@
-{% set page_title = "Online Users" %}
+{% set page_title = _("Online Users") %}
 
 
 {% extends theme("layout.html") %}
 {% extends theme("layout.html") %}
 
 
@@ -7,7 +7,7 @@
 
 
 {% block content %}
 {% block content %}
 
 
-<legend>Online Users</legend>
+<legend>{% trans %}Online Users{% endtrans %}</legend>
 {% for user in online_users %}
 {% for user in online_users %}
     {% if config["REDIS_ENABLED"] %}
     {% if config["REDIS_ENABLED"] %}
     <a href="{{ url_for('user.profile', username=user) }}">{{ user }}<a>{% if not loop.last %}, {% endif %}
     <a href="{{ url_for('user.profile', username=user) }}">{{ user }}<a>{% if not loop.last %}, {% endif %}

+ 4 - 4
flaskbb/templates/forum/report_post.html

@@ -1,4 +1,4 @@
-{% set page_title = "Report Post" %}
+{% set page_title = _("Report Post") %}
 
 
 {% extends theme("layout.html") %}
 {% extends theme("layout.html") %}
 
 
@@ -10,11 +10,11 @@
 
 
 <form class="form" role="form" method="post">
 <form class="form" role="form" method="post">
     {{ form.hidden_tag() }}
     {{ form.hidden_tag() }}
-    <h3>Report Post</h3>
+    <h3>{% trans %}Report Post{% endtrans %}</h3>
 
 
     {{ render_field(form.reason) }}
     {{ render_field(form.reason) }}
 
 
-    <button type="submit" class="btn btn-success">Report</button>
-    <a class="btn btn-info" href="#" onclick="window.close();return false;">Close</a>
+    <button type="submit" class="btn btn-success">{% trans %}Report{% endtrans %}</button>
+    <a class="btn btn-info" href="#" onclick="window.close();return false;">{% trans %}Close{% endtrans %}</a>
 </form>
 </form>
 {% endblock %}
 {% endblock %}

+ 6 - 6
flaskbb/templates/forum/search_form.html

@@ -1,16 +1,16 @@
-{% set page_title = "Search" %}
+{% set page_title = _("Search") %}
 
 
 {% extends theme("layout.html") %}
 {% extends theme("layout.html") %}
 {% from theme("macros.html") import horizontal_field %}
 {% from theme("macros.html") import horizontal_field %}
 {% block content %}
 {% block content %}
 
 
     <ul class="breadcrumb">
     <ul class="breadcrumb">
-        <li><a href="{{ url_for('forum.index') }}">Forum</a></li>
-        <li class="active">Search</li>
+        <li><a href="{{ url_for('forum.index') }}">{% trans %}Forum{% endtrans %}</a></li>
+        <li class="active">{% trans %}Search{% endtrans %}</li>
     </ul>
     </ul>
 
 
     <form class="form-horizontal" role="form" method="post">
     <form class="form-horizontal" role="form" method="post">
-        <h2>Search</h2>
+        <h2>{% trans %}Search{% endtrans %}</h2>
         <hr>
         <hr>
         {{ form.hidden_tag() }}
         {{ form.hidden_tag() }}
         {{ horizontal_field(form.search_types)}}
         {{ horizontal_field(form.search_types)}}
@@ -18,9 +18,9 @@
 
 
         <div class="form-group">
         <div class="form-group">
             <div class="col-sm-offset-3 col-sm-9">
             <div class="col-sm-offset-3 col-sm-9">
-                <button type="submit" class="btn btn-success">Search</button>
+                <button type="submit" class="btn btn-success">{% trans %}Search{% endtrans %}</button>
             </div>
             </div>
         </div>
         </div>
     </form>
     </form>
 
 
-{% endblock %}
+{% endblock %}

+ 40 - 32
flaskbb/templates/forum/search_result.html

@@ -1,16 +1,16 @@
-{% set page_title = "Search" %}
+{% set page_title = _("Search") %}
 
 
 {% extends theme("layout.html") %}
 {% extends theme("layout.html") %}
 {% block content %}
 {% block content %}
     {% from theme('macros.html') import render_pagination, group_field, topic_pages %}
     {% from theme('macros.html') import render_pagination, group_field, topic_pages %}
 
 
     <ul class="breadcrumb">
     <ul class="breadcrumb">
-        <li><a href="{{ url_for('forum.index') }}">Forum</a></li>
-        <li class="active">Search</li>
+        <li><a href="{{ url_for('forum.index') }}">{% trans %}Forum{% endtrans %}</a></li>
+        <li class="active">{% trans %}Search{% endtrans %}</li>
     </ul>
     </ul>
 
 
     {% if result['post'] %}
     {% if result['post'] %}
-        <h3>Posts</h3>
+        <h3>{% trans %}Posts{% endtrans %}</h3>
 
 
         <table class="table table-bordered">
         <table class="table table-bordered">
             <tbody>
             <tbody>
@@ -40,8 +40,8 @@
                                 </td>
                                 </td>
 
 
                                 <td class="pull-right">
                                 <td class="pull-right">
-                                    Posts: {{ post.user.post_count }}<br />
-                                    Registered since: {{ post.user.date_joined|format_date('%b %d %Y') }}<br />
+                                    {% trans %}Posts{% endtrans %}: {{ post.user.post_count }}<br />
+                                    {% trans %}Registered since{% endtrans %}: {{ post.user.date_joined|format_date('%b %d %Y') }}<br />
                                 </td>
                                 </td>
                             {% else %}
                             {% else %}
                                 <td>
                                 <td>
@@ -66,7 +66,7 @@
             </tr>
             </tr>
             {% else %}
             {% else %}
             <tr>
             <tr>
-                <td>No posts found matching your search criteria</td>
+                <td>{% trans %}No posts found matching your search criteria{% endtrans %}</td>
             </tr>
             </tr>
             {% endfor %}
             {% endfor %}
             </tbody>
             </tbody>
@@ -74,16 +74,16 @@
     {% endif %}
     {% endif %}
 
 
     {% if result['user'] %}
     {% if result['user'] %}
-        <h3>Users</h3>
+        <h3>{% trans %}Users{% endtrans %}</h3>
 
 
         <table class="table table-bordered">
         <table class="table table-bordered">
             <thead>
             <thead>
             <tr>
             <tr>
                 <th>#</th>
                 <th>#</th>
-                <th>Username</th>
-                <th>Posts</th>
-                <th>Date registered</th>
-                <th>Group</th>
+                <th>{% trans %}Username{% endtrans %}</th>
+                <th>{% trans %}Posts{% endtrans %}</th>
+                <th>{% trans %}Date registered{% endtrans %}</th>
+                <th>{% trans %}Group{% endtrans %}</th>
             </tr>
             </tr>
             </thead>
             </thead>
             <tbody>
             <tbody>
@@ -97,7 +97,7 @@
                 </tr>
                 </tr>
             {% else %}
             {% else %}
                 <tr>
                 <tr>
-                    <td colspan="5">No users found matching your search criteria</td>
+                    <td colspan="5">{% trans %}No users found matching your search criteria{% endtrans %}</td>
                 </tr>
                 </tr>
             {% endfor %}
             {% endfor %}
             </tbody>
             </tbody>
@@ -105,18 +105,18 @@
     {% endif %}
     {% endif %}
 
 
     {% if result['topic'] %}
     {% if result['topic'] %}
-        <h3>Topics</h3>
+        <h3>{% trans %}Topics{% endtrans %}</h3>
 
 
         <table class="table table-bordered">
         <table class="table table-bordered">
             <thead>
             <thead>
             <tr>
             <tr>
-                <th colspan="2">Topic</th>
+                <th colspan="2">{% trans %}Topic{% endtrans %}</th>
 
 
-                <th>Posts</th>
+                <th>{% trans %}Posts{% endtrans %}</th>
 
 
-                <th>Views</th>
+                <th>{% trans %}Views{% endtrans %}</th>
 
 
-                <th>Last Post</th>
+                <th>{% trans %}Last Post{% endtrans %}</th>
             </tr>
             </tr>
             </thead>
             </thead>
 
 
@@ -137,11 +137,15 @@
                             <!-- Topic Pagination -->
                             <!-- Topic Pagination -->
                             {{ topic_pages(topic, flaskbb_config["POSTS_PER_PAGE"]) }}
                             {{ topic_pages(topic, flaskbb_config["POSTS_PER_PAGE"]) }}
                             <br />
                             <br />
+
+                            <small>
+                            {% trans %}by{% endtrans %}
                             {% if topic.user_id %}
                             {% if topic.user_id %}
-                                <small>by <a href="{{ topic.user.url }}">{{ topic.user.username }}</a></small>
+                                <a href="{{ topic.user.url }}">{{ topic.user.username }}</a>
                             {% else %}
                             {% else %}
-                                <small>by {{ topic.username }}</small>
+                                {{ topic.username }}
                             {% endif %}
                             {% endif %}
+                            </small>
                         </div>
                         </div>
                     </td>
                     </td>
                     <td>
                     <td>
@@ -153,16 +157,19 @@
                     <td>
                     <td>
                         <a href="{{ topic.last_post.url }}">{{ topic.last_post.date_created|time_since }}</a><br />
                         <a href="{{ topic.last_post.url }}">{{ topic.last_post.date_created|time_since }}</a><br />
 
 
+                        <small>
+                        {% trans %}by{% endtrans %}
                         {% if topic.last_post.user_id %}
                         {% if topic.last_post.user_id %}
-                            <small>by <a href="{{ topic.last_post.user.url }}">{{ topic.last_post.user.username }}</a></small>
+                            <a href="{{ topic.last_post.user.url }}">{{ topic.last_post.user.username }}</a>
                         {% else %}
                         {% else %}
-                            <small>{{ topic.last_post.username }}</small>
+                            {{ topic.last_post.username }}
                         {% endif %}
                         {% endif %}
+                        </small>
                     </td>
                     </td>
                 </tr>
                 </tr>
             {% else %}
             {% else %}
                 <tr>
                 <tr>
-                    <td colspan="5">No topics found matching your search criteria</td>
+                    <td colspan="5">{% trans %}No topics found matching your search criteria{% trans %}</td>
                 </tr>
                 </tr>
             {% endfor %}
             {% endfor %}
             </tbody>
             </tbody>
@@ -170,15 +177,15 @@
     {% endif %}
     {% endif %}
 
 
     {% if result['forum'] %}
     {% if result['forum'] %}
-        <h3>Forums</h3>
+        <h3>{% trans %}Forums{% endtrans %}</h3>
 
 
         <table class="table table-bordered">
         <table class="table table-bordered">
             <thead class="categoryhead">
             <thead class="categoryhead">
             <tr>
             <tr>
-                <th colspan="2"><strong>Forum</strong></th>
-                <th width="85" align="center" style="white-space: nowrap"><strong>Topics</strong></th>
-                <th width="85" align="center" style="white-space: nowrap"><strong>Posts</strong></th>
-                <th width="200" align="center" style="white-space: nowrap"><strong>Last Post</strong></th>
+                <th colspan="2"><strong>{% trans %}Forum{% endtrans %}</strong></th>
+                <th width="85" align="center" style="white-space: nowrap"><strong>{% trans %}Topics{% endtrans %}</strong></th>
+                <th width="85" align="center" style="white-space: nowrap"><strong>{% trans %}Posts{% endtrans %}</strong></th>
+                <th width="200" align="center" style="white-space: nowrap"><strong>{% trans %}Last Post{% endtrans %}</strong></th>
             </tr>
             </tr>
             </thead>
             </thead>
             <tbody class="forumbody">
             <tbody class="forumbody">
@@ -223,7 +230,7 @@
                         {% endautoescape %}
                         {% endautoescape %}
                         {% if forum.show_moderators %}
                         {% if forum.show_moderators %}
                             <div class="forum-moderators">
                             <div class="forum-moderators">
-                                Moderators:
+                                {% trans %}Moderators{% endtrans %}:
                                 {% for moderator in forum.moderators %}
                                 {% for moderator in forum.moderators %}
                                     <a href="{{ url_for('user.profile', username=moderator.username) }}">{{ moderator.username }}</a>{% if not loop.last %}, {% endif %}
                                     <a href="{{ url_for('user.profile', username=moderator.username) }}">{{ moderator.username }}</a>{% if not loop.last %}, {% endif %}
                                 {% endfor %}
                                 {% endfor %}
@@ -243,14 +250,15 @@
                         <br />
                         <br />
                         {{ forum.last_post.date_created|time_since }}<br />
                         {{ forum.last_post.date_created|time_since }}<br />
 
 
+                        {% trans %}by{% endtrans %}
                         {% if forum.last_post.user_id %}
                         {% if forum.last_post.user_id %}
-                            by <a href="{{ url_for('user.profile', username=forum.last_post.user.username) }}">{{ forum.last_post.user.username }}</a>
+                            <a href="{{ url_for('user.profile', username=forum.last_post.user.username) }}">{{ forum.last_post.user.username }}</a>
                         {% else %}
                         {% else %}
                             {{ forum.last_post.username }}
                             {{ forum.last_post.username }}
                         {% endif %}
                         {% endif %}
 
 
                     {% else %}
                     {% else %}
-                        No posts
+                        {% trans %}No posts{% endtrans %}
                     {% endif %}
                     {% endif %}
                     {% endif %}
                     {% endif %}
                 </td>
                 </td>
@@ -258,7 +266,7 @@
             {% else %}
             {% else %}
             <tr>
             <tr>
                 <td colspan="5">
                 <td colspan="5">
-                    No forums found matching your search criteria
+                    {% trans %}No forums found matching your search criteria{% endtrans %}
                 </td>
                 </td>
             </tr>
             </tr>
             {% endfor %}
             {% endfor %}

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

@@ -1,12 +1,12 @@
 {% extends theme("layout.html") %}
 {% extends theme("layout.html") %}
-{% set page_title = topic.title ~ " - Topic" %}
+{% set page_title = _("%(title)s - Topic", title=topic.title) %}
 {% set active_forum_nav=True %}
 {% set active_forum_nav=True %}
 
 
 {% block content %}
 {% block content %}
 {% from theme('macros.html') import render_pagination, form_field %}
 {% from theme('macros.html') import render_pagination, form_field %}
 
 
 <ol class="breadcrumb">
 <ol class="breadcrumb">
-    <li><a href="{{ url_for('forum.index') }}">Forum</a></li>
+    <li><a href="{{ url_for('forum.index') }}">{% trans %}Forum{% endtrans %}</a></li>
     <li><a href="{{ topic.forum.category.url }}">{{ topic.forum.category.title }}</a></li>
     <li><a href="{{ topic.forum.category.url }}">{{ topic.forum.category.title }}</a></li>
     <li><a href="{{ topic.forum.url }}">{{ topic.forum.title }}</a></li>
     <li><a href="{{ topic.forum.url }}">{{ topic.forum.title }}</a></li>
     <li class="active">{{ topic.title }}</li>
     <li class="active">{{ topic.title }}</li>
@@ -32,7 +32,7 @@
                         ">{{ post.date_created|format_date('%d %B %Y') }}</a>
                         ">{{ post.date_created|format_date('%d %B %Y') }}</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_date }} by
+                        ({% trans %}Last modified{% endtrans %}: {{ post.date_modified|format_date }} {% trans %}by{% endtrans %}
                         <a href="{{ url_for('user.profile', username=post.modified_by) }}">
                         <a href="{{ url_for('user.profile', username=post.modified_by) }}">
                             {{ post.modified_by }}
                             {{ post.modified_by }}
                         </a>.)
                         </a>.)
@@ -67,14 +67,14 @@
                     </td>
                     </td>
 
 
                     <td class="pull-right">
                     <td class="pull-right">
-                        Posts: {{ user.post_count }}<br />
-                        Registered since: {{ user.date_joined|format_date('%b %d %Y') }}<br />
+                        {% trans %}Posts{% endtrans %}: {{ user.post_count }}<br />
+                        {% trans %}Registered since{% endtrans %}: {{ user.date_joined|format_date('%b %d %Y') }}<br />
                     </td>
                     </td>
                 {% else %}
                 {% else %}
                     <td>
                     <td>
                         <strong>{{ post.username }}</strong>
                         <strong>{{ post.username }}</strong>
                         <br />
                         <br />
-                        Guest
+                        {% trans %}Guest{% endtrans %}
                     </td>
                     </td>
                 {% endif %}
                 {% endif %}
                 </tr>
                 </tr>
@@ -103,36 +103,36 @@
             <td>
             <td>
                 <span class="pull-left">
                 <span class="pull-left">
                     {% if current_user.is_authenticated() and post.user_id and post.user_id != current_user.id %}
                     {% if current_user.is_authenticated() and post.user_id and post.user_id != current_user.id %}
-                    <a href="{{ url_for('user.new_message', to_user=post.user.username) }}">PM</a>
+                    <a href="{{ url_for('user.new_message', to_user=post.user.username) }}">{% trans %}PM{% endtrans %}</a>
                     {% endif %}
                     {% endif %}
                     {% if user.website %}
                     {% if user.website %}
-                    {% if current_user.is_authenticated() %}| {% endif %}<a href="{{ user.website }}">Website</a>
+                    {% if current_user.is_authenticated() %}| {% endif %}<a href="{{ user.website }}">{% trans %}Website{% endtrans %}</a>
                     {% endif %}
                     {% endif %}
                 </span>
                 </span>
 
 
                 <span class="pull-right">
                 <span class="pull-right">
                     {% if current_user.is_authenticated() %}
                     {% if current_user.is_authenticated() %}
                     <a href="{{ url_for('forum.report_post', post_id=post.id) }}" onclick="window.open(this.href, 'wio_window','width=500,height=500'); return false;">
                     <a href="{{ url_for('forum.report_post', post_id=post.id) }}" onclick="window.open(this.href, 'wio_window','width=500,height=500'); return false;">
-                        Report
+                        {% trans %}Report{% endtrans %}
                     </a> |
                     </a> |
                     {% endif %}
                     {% endif %}
                     {% if current_user|edit_post(post) %}
                     {% if current_user|edit_post(post) %}
-                    <a href="{{ url_for('forum.edit_post', post_id=post.id) }}">Edit</a> |
+                    <a href="{{ url_for('forum.edit_post', post_id=post.id) }}">{% trans %}Edit{% 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) %}
-                        <a href="{{ url_for('forum.delete_topic', topic_id=topic.id, slug=topic.slug) }}">Delete</a> |
+                        <a href="{{ url_for('forum.delete_topic', topic_id=topic.id, slug=topic.slug) }}">{% trans %}Delete{% endtrans %}</a> |
                         {% endif %}
                         {% endif %}
                     {% else %}
                     {% else %}
                         {% if current_user|delete_post(post) %}
                         {% if current_user|delete_post(post) %}
-                        <a href="{{ url_for('forum.delete_post', post_id=post.id) }}">Delete</a> |
+                        <a href="{{ url_for('forum.delete_post', post_id=post.id) }}">{% trans %}Delete{% endtrans %}</a> |
                         {% endif %}
                         {% endif %}
                     {% endif %}
                     {% endif %}
                     {% if current_user|post_reply(topic) %}
                     {% if current_user|post_reply(topic) %}
                         <!-- Quick quote -->
                         <!-- Quick quote -->
-                        <a href="#" class="quote_btn" data-post-id="{{ post.id }}">Quote</a> |
+                        <a href="#" class="quote_btn" data-post-id="{{ post.id }}">{% trans %}Quote{% endtrans %}</a> |
                         <!-- Full quote/reply -->
                         <!-- Full quote/reply -->
-                        <a href="{{ url_for('forum.reply_post', topic_id=topic.id, post_id=post.id) }}">Reply</a>
+                        <a href="{{ url_for('forum.reply_post', topic_id=topic.id, post_id=post.id) }}">{% trans %}Reply{% endtrans %}</a>
                     {% endif %}
                     {% endif %}
                 </span>
                 </span>
             </td>
             </td>
@@ -150,7 +150,7 @@
 
 
         {{ render_field(form.content, div_class="col-sm-12 reply-content", rows=5) }}
         {{ render_field(form.content, div_class="col-sm-12 reply-content", rows=5) }}
 
 
-        <button type="submit" class="btn btn-success">Reply!</button>
+        <button type="submit" class="btn btn-success">{% trans %}Reply{% endtrans %}</button>
     </form>
     </form>
 {% endif %}
 {% endif %}
 
 

+ 8 - 8
flaskbb/templates/forum/topic_controls.html

@@ -6,26 +6,26 @@
     <div class="btn btn-group">
     <div class="btn btn-group">
         {% if current_user|delete_topic(topic) %}
         {% if current_user|delete_topic(topic) %}
         <a href="{{ url_for('forum.delete_topic', topic_id=topic.id, slug=topic.slug) }}" class="btn btn-danger">
         <a href="{{ url_for('forum.delete_topic', topic_id=topic.id, slug=topic.slug) }}" class="btn btn-danger">
-            <span class="fa fa-trash-o"></span> Delete Topic
+            <span class="fa fa-trash-o"></span> {% trans %}Delete Topic{% endtrans %}
         </a>
         </a>
         {% endif %}
         {% endif %}
         {% if current_user|can_moderate(topic.forum) %}
         {% if current_user|can_moderate(topic.forum) %}
             {% if not topic.locked %}
             {% if not topic.locked %}
             <a href="{{ url_for('forum.lock_topic', topic_id=topic.id, slug=topic.slug) }}" class="btn btn-warning">
             <a href="{{ url_for('forum.lock_topic', topic_id=topic.id, slug=topic.slug) }}" class="btn btn-warning">
-                <span class="fa fa-lock"></span> Lock Topic
+                <span class="fa fa-lock"></span> {% trans %}Lock Topic{% endtrans %}
             </a>
             </a>
             {% else %}
             {% else %}
             <a href="{{ url_for('forum.unlock_topic', topic_id=topic.id, slug=topic.slug) }}" class="btn btn-warning">
             <a href="{{ url_for('forum.unlock_topic', topic_id=topic.id, slug=topic.slug) }}" class="btn btn-warning">
-                <span class="fa fa-unlock"></span> Unlock Topic
+                <span class="fa fa-unlock"></span> {% trans %}Unlock Topic{% endtrans %}
             </a>
             </a>
             {% endif %}
             {% endif %}
             {% if not topic.important %}
             {% if not topic.important %}
             <a href="{{ url_for('forum.highlight_topic', topic_id=topic.id, slug=topic.slug) }}" class="btn btn-success">
             <a href="{{ url_for('forum.highlight_topic', topic_id=topic.id, slug=topic.slug) }}" class="btn btn-success">
-                    <span class="fa fa-star"></span> Highlight Topic
+                    <span class="fa fa-star"></span> {% trans %}Highlight Topic{% endtrans %}
             </a>
             </a>
             {% else %}
             {% else %}
             <a href="{{ url_for('forum.trivialize_topic', topic_id=topic.id, slug=topic.slug) }}" class="btn btn-success">
             <a href="{{ url_for('forum.trivialize_topic', topic_id=topic.id, slug=topic.slug) }}" class="btn btn-success">
-                <span class="fa fa-star-o"></span> Trivialize Topic
+                <span class="fa fa-star-o"></span> {% trans %}Trivialize Topic{% endtrans %}
             </a>
             </a>
             {% endif %}
             {% endif %}
         {% endif %}
         {% endif %}
@@ -35,17 +35,17 @@
     <div class="btn btn-group">
     <div class="btn btn-group">
         {% if current_user.is_tracking_topic(topic) %}
         {% if current_user.is_tracking_topic(topic) %}
         <a href="{{ url_for('forum.untrack_topic', topic_id=topic.id, slug=topic.slug) }}" class="btn btn-default"><span class="fa fa-tag">
         <a href="{{ url_for('forum.untrack_topic', topic_id=topic.id, slug=topic.slug) }}" class="btn btn-default"><span class="fa fa-tag">
-            </span> Untrack Topic
+            </span> {% trans %}Untrack Topic{% endtrans %}
         </a>
         </a>
         {% else %}
         {% else %}
         <a href="{{ url_for('forum.track_topic', topic_id=topic.id, slug=topic.slug) }}" class="btn btn-default">
         <a href="{{ url_for('forum.track_topic', topic_id=topic.id, slug=topic.slug) }}" class="btn btn-default">
-            <span class="fa fa-tag"></span> Track Topic
+            <span class="fa fa-tag"></span> {% trans %}Track Topic{% endtrans %}
         </a>
         </a>
         {% endif %}
         {% endif %}
 
 
         {% if current_user|post_reply(topic) %}
         {% if current_user|post_reply(topic) %}
         <a href="{{ url_for('forum.new_post', topic_id=topic.id, slug=topic.slug) }}" class="btn btn-primary">
         <a href="{{ url_for('forum.new_post', topic_id=topic.id, slug=topic.slug) }}" class="btn btn-primary">
-            <span class="fa fa-pencil"></span> Reply
+            <span class="fa fa-pencil"></span> {% trans %}Reply{% endtrans %}
         </a>
         </a>
         {% endif %}
         {% endif %}
     </div>
     </div>

+ 25 - 19
flaskbb/templates/forum/topictracker.html

@@ -1,4 +1,4 @@
-{% set page_title = "Topic Tracker" %}
+{% set page_title = _("Topic Tracker") %}
 {% set active_forum_nav=True %}
 {% set active_forum_nav=True %}
 
 
 {% extends theme("layout.html") %}
 {% extends theme("layout.html") %}
@@ -6,8 +6,8 @@
 
 
 {% block content %}
 {% block content %}
 <ul class="breadcrumb">
 <ul class="breadcrumb">
-    <li><a href="{{ url_for('forum.index') }}">Forum</a></li>
-    <li class="active">Tracked Topics</li>
+    <li><a href="{{ url_for('forum.index') }}">{% trans %}Forum{% endtrans %}</a></li>
+    <li class="active">{% trans %}Tracked Topics{% endtrans %}</li>
 </ul>
 </ul>
 
 
 <div class="pull-left" style="padding-bottom: 10px">
 <div class="pull-left" style="padding-bottom: 10px">
@@ -19,19 +19,19 @@
     <thead>
     <thead>
         <tr>
         <tr>
             <th colspan="5">
             <th colspan="5">
-                Topic Tracker
+                {% trans %}Topic Tracker{% endtrans %}
             </th>
             </th>
         </tr>
         </tr>
     </thead>
     </thead>
     <tbody>
     <tbody>
         <tr>
         <tr>
-            <td colspan="2">Thread</td>
+            <td colspan="2">{% trans %}Topic{% endtrans %}</td>
 
 
-            <td>Posts</td>
+            <td>{% trans %}Posts{% endtrans %}</td>
 
 
-            <td>Views</td>
+            <td>{% trans %}Views{% endtrans %}</td>
 
 
-            <td>Last Post</td>
+            <td>{% trans %}Last Post{% endtrans %}</td>
         </tr>
         </tr>
 
 
         {% for topic, topicread in topics.items %}
         {% for topic, topicread in topics.items %}
@@ -48,11 +48,14 @@
             <td>
             <td>
                 <div>
                 <div>
                     <a href="{{ topic.url }}">{{ topic.title }}</a> <br />
                     <a href="{{ topic.url }}">{{ topic.title }}</a> <br />
-                    {% if topic.user_id %}
-                    <small>by <a href="{{ topic.user.url }}">{{ topic.user.username }}</a></small>
-                    {% else %}
-                    <small>by {{ topic.username }}</small>
-                    {% endif %}
+                    <small>
+                        {% trans %}by{% endtrans %}
+                        {% if topic.user_id %}
+                        <a href="{{ topic.user.url }}">{{ topic.user.username }}</a>
+                        {% else %}
+                        {{ topic.username }}
+                        {% endif %}
+                    </small>
                 </div>
                 </div>
             </td>
             </td>
             <td>
             <td>
@@ -63,17 +66,20 @@
             </td>
             </td>
             <td>
             <td>
                 <a href="{{ topic.last_post.url }}">{{ topic.last_post.date_created|time_since }}</a><br />
                 <a href="{{ topic.last_post.url }}">{{ topic.last_post.date_created|time_since }}</a><br />
-                {% if topic.last_post.user_id %}
-                <small>by <a href="{{ topic.last_post.user.url }}">{{ topic.last_post.user.username }}</a></small>
-                {% else %}
-                {{ topic.last_post.username }}
-                {% endif %}
+                <small>
+                    {% trans %}by{% endtrans %}
+                    {% if topic.last_post.user_id %}
+                    <a href="{{ topic.last_post.user.url }}">{{ topic.last_post.user.username }}</a>
+                    {% else %}
+                    {{ topic.last_post.username }}
+                    {% endif %}
+                </small>
             </td>
             </td>
         </tr>
         </tr>
         {% else %}
         {% else %}
         <tr>
         <tr>
             <td colspan="5">
             <td colspan="5">
-                No Topics so far.
+                {% trans %}No Topics so far.{% endtrans %}
             </td>
             </td>
         </tr>
         </tr>
         {% endfor %}
         {% endfor %}

+ 12 - 12
flaskbb/templates/layout.html

@@ -46,9 +46,9 @@
                             {{ emit_event("before-first-navigation-element") }}
                             {{ emit_event("before-first-navigation-element") }}
 
 
                             {# active_forum_nav is set in {forum, category, topic}.html and new_{topic, post}.html #}
                             {# active_forum_nav is set in {forum, category, topic}.html and new_{topic, post}.html #}
-                            {{ topnav(endpoint='forum.index', name='Forum', icon='fa fa-comment', active=active_forum_nav) }}
-                            {{ topnav(endpoint='forum.memberlist', name='Memberlist', icon='fa fa-user') }}
-                            {{ topnav(endpoint='forum.search', name='Search', icon='fa fa-search') }}
+                            {{ topnav(endpoint='forum.index', name=_('Forum'), icon='fa fa-comment', active=active_forum_nav) }}
+                            {{ topnav(endpoint='forum.memberlist', name=_('Memberlist'), icon='fa fa-user') }}
+                            {{ topnav(endpoint='forum.search', name=_('Search'), icon='fa fa-search') }}
 
 
                             {{ emit_event("after-last-navigation-element") }}
                             {{ emit_event("after-last-navigation-element") }}
                         </ul>
                         </ul>
@@ -62,16 +62,16 @@
                                 <span class="caret"></span>
                                 <span class="caret"></span>
                             </button>
                             </button>
                             <ul class="dropdown-menu" role="menu">
                             <ul class="dropdown-menu" role="menu">
-                                <li><a href="{{ url_for('forum.topictracker') }}"><span class="fa fa-book"></span> Topic Tracker</a></li>
+                                <li><a href="{{ url_for('forum.topictracker') }}"><span class="fa fa-book"></span> {% trans %}Topic Tracker{% endtrans %}</a></li>
                                 <li class="divider"></li>
                                 <li class="divider"></li>
 
 
-                                <li><a href="{{ url_for('user.settings') }}"><span class="fa fa-cogs"></span> Settings</a></li>
+                                <li><a href="{{ url_for('user.settings') }}"><span class="fa fa-cogs"></span> {% trans %}Settings{% endtrans %}</a></li>
                                 {% if current_user|is_admin_or_moderator %}
                                 {% if current_user|is_admin_or_moderator %}
-                                <li><a href="{{ url_for('management.overview') }}"><span class="fa fa-cog"></span>Management</a></li>
+                                <li><a href="{{ url_for('management.overview') }}"><span class="fa fa-cog"></span> {% trans %}Management{% endtrans %}</a></li>
                                 <li class="divider"></li>
                                 <li class="divider"></li>
                                 {% endif %}
                                 {% endif %}
 
 
-                                <li><a href="{{ url_for('auth.logout') }}"><span class="fa fa-power-off"></span> Logout</a></li>
+                                <li><a href="{{ url_for('auth.logout') }}"><span class="fa fa-power-off"></span> {% trans %}Logout{% endtrans %}</a></li>
                             </ul>
                             </ul>
                         </div>
                         </div>
 
 
@@ -80,21 +80,21 @@
                                 <span class="fa fa-envelope"></span> <span class="badge">{{ current_user.pm_unread }}</span>
                                 <span class="fa fa-envelope"></span> <span class="badge">{{ current_user.pm_unread }}</span>
                             </button>
                             </button>
                             <ul class="dropdown-menu" role="menu">
                             <ul class="dropdown-menu" role="menu">
-                                <li><a href="{{ url_for('user.inbox') }}"><span class="fa fa-envelope"></span> Inbox</a></li>
-                                <li><a href="{{ url_for('user.new_message') }}"><span class="fa fa-pencil"></span> New Message</a></li>
+                                <li><a href="{{ url_for('user.inbox') }}"><span class="fa fa-envelope"></span> {% trans %}Inbox{% endtrans %}</a></li>
+                                <li><a href="{{ url_for('user.new_message') }}"><span class="fa fa-pencil"></span> {% trans %}New Message{% endtrans %}</a></li>
                             </ul>
                             </ul>
                         </div>
                         </div>
                     {% else %}
                     {% else %}
                         <div class="btn-group navbar-btn navbar-right">
                         <div class="btn-group navbar-btn navbar-right">
                             <a class="btn btn-primary" href="{{ url_for('auth.login') }}">
                             <a class="btn btn-primary" href="{{ url_for('auth.login') }}">
-                                <span class="fa fa-user"></span> Login
+                                <span class="fa fa-user"></span> {% trans %}Login{% endtrans %}
                             </a>
                             </a>
                             <button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown">
                             <button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown">
                                 <span class="caret"></span>
                                 <span class="caret"></span>
                             </button>
                             </button>
                             <ul class="dropdown-menu" role="menu">
                             <ul class="dropdown-menu" role="menu">
-                                <li><a href="{{ url_for('auth.register') }}">Register</a></li>
-                                <li><a href="{{ url_for('auth.forgot_password') }}">Reset Password</a></li>
+                                <li><a href="{{ url_for('auth.register') }}">{% trans %}Register{% endtrans %}</a></li>
+                                <li><a href="{{ url_for('auth.forgot_password') }}">{% trans %}Reset Password{% endtrans %}</a></li>
                             </ul>
                             </ul>
                         </div>
                         </div>
                     {% endif %}
                     {% endif %}

+ 1 - 1
flaskbb/templates/macros.html

@@ -174,7 +174,7 @@
 
 
 {% macro render_pagination(page_obj, url) %}
 {% macro render_pagination(page_obj, url) %}
 <ul class="pagination" style="margin: 0; float:right">
 <ul class="pagination" style="margin: 0; float:right">
-    <li><span class="pages-label">Pages: </span></li>
+    <li><span class="pages-label">{% trans %}Pages{% endtrans %}: </span></li>
     {%- for page in page_obj.iter_pages() %}
     {%- for page in page_obj.iter_pages() %}
         {% if page %}
         {% if page %}
             {% if page != page_obj.page %}
             {% if page != page_obj.page %}

+ 13 - 13
flaskbb/templates/management/banned_users.html

@@ -1,4 +1,4 @@
-{% set page_title = "Banned Users" %}
+{% set page_title = _("Banned Users") %}
 {% set active_management_user_nav=True %}
 {% set active_management_user_nav=True %}
 
 
 {% extends theme("management/management_layout.html") %}
 {% extends theme("management/management_layout.html") %}
@@ -7,17 +7,17 @@
 
 
 <div class="col-md-3">
 <div class="col-md-3">
     <ul class="nav nav-pills nav-stacked">
     <ul class="nav nav-pills nav-stacked">
-        {{ navlink('management.users', "Manage Users") }}
-        {{ navlink('management.banned_users', 'Banned Users') }}
+        {{ navlink('management.users', _("Manage Users")) }}
+        {{ navlink('management.banned_users', _('Banned Users')) }}
 
 
         {% if current_user|is_admin %}
         {% if current_user|is_admin %}
-            {{ navlink('management.add_user', "Add User") }}
+            {{ navlink('management.add_user', _("Add User")) }}
         {% endif %}
         {% endif %}
     </ul>
     </ul>
 </div><!--/.col-md-3 -->
 </div><!--/.col-md-3 -->
 
 
 <div class="col-md-9">
 <div class="col-md-9">
-    <legend>Banned Users</legend>
+    <legend>{% trans %}Banned Users{% endtrans %}</legend>
 
 
     <div class="pull-left" style="padding-bottom: 10px">
     <div class="pull-left" style="padding-bottom: 10px">
         {{ render_pagination(users, url_for('management.users')) }}
         {{ render_pagination(users, url_for('management.users')) }}
@@ -28,7 +28,7 @@
                 {{ search_form.hidden_tag() }}
                 {{ search_form.hidden_tag() }}
                 {{ group_field(search_form.search_query) }}
                 {{ group_field(search_form.search_query) }}
                 <span class="input-group-btn">
                 <span class="input-group-btn">
-                    <button class="btn btn-primary" type="submit">Search</button>
+                    <button class="btn btn-primary" type="submit">{% trans %}Search{% endtrans %}</button>
                 </span>
                 </span>
             </div>
             </div>
         </form>
         </form>
@@ -38,11 +38,11 @@
         <thead>
         <thead>
             <tr>
             <tr>
                 <th>#</th>
                 <th>#</th>
-                <th>Username</th>
-                <th>Posts</th>
-                <th>Date registered</th>
-                <th>Group</th>
-                <th>Manage</th>
+                <th>{% trans %}Username{% endtrans %}</th>
+                <th>{% trans %}Posts{% endtrans %}</th>
+                <th>{% trans %}Date registered{% endtrans %}</th>
+                <th>{% trans %}Group{% endtrans %}</th>
+                <th>{% trans %}Manage{% endtrans %}</th>
             </tr>
             </tr>
         </thead>
         </thead>
         <tbody>
         <tbody>
@@ -55,14 +55,14 @@
                     <td>{{ user.primary_group.name }}</td>
                     <td>{{ user.primary_group.name }}</td>
                     <td>
                     <td>
                         {% if current_user|can_ban_user and user.permissions['banned'] %}
                         {% if current_user|can_ban_user and user.permissions['banned'] %}
-                            <a href="{{ url_for('management.unban_user', user_id = user.id) }}">Unban</a>
+                            <a href="{{ url_for('management.unban_user', user_id = user.id) }}">{% trans %}Unban{% endtrans %}</a>
                         {% endif %}
                         {% endif %}
                     </td>
                     </td>
                 </tr>
                 </tr>
             {% else %}
             {% else %}
                 <tr>
                 <tr>
                     <td colspan="6">
                     <td colspan="6">
-                        No users found matching your search query
+                        {% trans %}No users found matching your search query{% endtrans %}
                     </td>
                     </td>
                 </tr>
                 </tr>
             {% endfor %}
             {% endfor %}

+ 4 - 4
flaskbb/templates/management/category_form.html

@@ -7,9 +7,9 @@
 
 
 <div class="col-md-3">
 <div class="col-md-3">
     <ul class="nav nav-pills nav-stacked">
     <ul class="nav nav-pills nav-stacked">
-        {{ navlink('management.forums', "Manage Forums") }}
-        {{ navlink('management.add_forum', "Add Forum") }}
-        {{ navlink('management.add_category', "Add Category") }}
+        {{ navlink('management.forums', _("Manage Forums")) }}
+        {{ navlink('management.add_forum', _("Add Forum")) }}
+        {{ navlink('management.add_category', _("Add Category")) }}
     </ul>
     </ul>
 </div>
 </div>
 
 
@@ -24,7 +24,7 @@
 
 
             <div class="form-group">
             <div class="form-group">
                 <div class="col-lg-offset-0 col-lg-9">
                 <div class="col-lg-offset-0 col-lg-9">
-                    <button type="submit" class="btn btn-success">Save</button>
+                    <button type="submit" class="btn btn-success">{% trans %}Save{% endtrans %}</button>
                 </div>
                 </div>
             </div>
             </div>
     </form>
     </form>

+ 4 - 4
flaskbb/templates/management/forum_form.html

@@ -7,9 +7,9 @@
 
 
 <div class="col-md-3">
 <div class="col-md-3">
     <ul class="nav nav-pills nav-stacked">
     <ul class="nav nav-pills nav-stacked">
-        {{ navlink('management.forums', "Manage Forums") }}
-        {{ navlink('management.add_forum', "Add Forum") }}
-        {{ navlink('management.add_category', "Add Category") }}
+        {{ navlink('management.forums', _("Manage Forums")) }}
+        {{ navlink('management.add_forum', _("Add Forum")) }}
+        {{ navlink('management.add_category', _("Add Category")) }}
     </ul>
     </ul>
 </div>
 </div>
 
 
@@ -32,7 +32,7 @@
 
 
             <div class="form-group">
             <div class="form-group">
                 <div class="col-lg-offset-0 col-lg-9">
                 <div class="col-lg-offset-0 col-lg-9">
-                    <button type="submit" class="btn btn-success">Save</button>
+                    <button type="submit" class="btn btn-success">{% trans %}Save{% endtrans %}</button>
                 </div>
                 </div>
             </div>
             </div>
     </form>
     </form>

+ 12 - 12
flaskbb/templates/management/forums.html

@@ -1,4 +1,4 @@
-{% set page_title = "Forums" %}
+{% set page_title = _("Forums") %}
 
 
 {% extends theme("management/management_layout.html") %}
 {% extends theme("management/management_layout.html") %}
 {% block management_content %}
 {% block management_content %}
@@ -6,15 +6,15 @@
 
 
 <div class="col-md-3">
 <div class="col-md-3">
     <ul class="nav nav-pills nav-stacked">
     <ul class="nav nav-pills nav-stacked">
-        {{ navlink('management.forums', "Manage Forums") }}
-        {{ navlink('management.add_forum', "Add Forum") }}
-        {{ navlink('management.add_category', "Add Category") }}
+        {{ navlink('management.forums', _("Manage Forums")) }}
+        {{ navlink('management.add_forum', _("Add Forum")) }}
+        {{ navlink('management.add_category', _("Add Category")) }}
     </ul>
     </ul>
 </div>
 </div>
 
 
 
 
 <div class="col-md-9">
 <div class="col-md-9">
-    <legend>Manage Forums</legend>
+    <legend>{% trans %}Manage Forums{% endtrans %}</legend>
 
 
     {% for category in categories %}
     {% for category in categories %}
     <table class="table table-bordered">
     <table class="table table-bordered">
@@ -24,16 +24,16 @@
                     <div><strong><a href="{{ url_for('forum.view_category', category_id=category.id) }}">{{ category.title }}</a></strong></div>
                     <div><strong><a href="{{ url_for('forum.view_category', category_id=category.id) }}">{{ category.title }}</a></strong></div>
                 </td>
                 </td>
                 <td valign="top" align="center" style="white-space: nowrap">
                 <td valign="top" align="center" style="white-space: nowrap">
-                    <a href="{{ url_for('management.add_forum', category_id=category.id) }}">Add Forum</a> |
-                    <a href="{{ url_for('management.edit_category', category_id = category.id) }}">Edit</a> |
-                    <a href="{{ url_for('management.delete_category', category_id = category.id) }}">Delete</a>
+                    <a href="{{ url_for('management.add_forum', category_id=category.id) }}">{% trans %}Add Forum{% endtrans %}</a> |
+                    <a href="{{ url_for('management.edit_category', category_id = category.id) }}">{% trans %}Edit{% endtrans %}</a> |
+                    <a href="{{ url_for('management.delete_category', category_id = category.id) }}">{% trans %}Delete{% endtrans %}</a>
                 </td>
                 </td>
             </tr>
             </tr>
         </thead>
         </thead>
         <tbody class="forumbody">
         <tbody class="forumbody">
             <tr class="forum_stats">
             <tr class="forum_stats">
-                <td colspan="2"><strong>Forum</strong></td>
-                <td width="85" align="center" style="white-space: nowrap"><strong>Management</strong></td>
+                <td colspan="2"><strong>{% trans %}Forum{% endtrans %}</strong></td>
+                <td width="85" align="center" style="white-space: nowrap"><strong>{% trans %}Management{% endtrans %}</strong></td>
             </tr>
             </tr>
 
 
             {% for forum in category.forums %}
             {% for forum in category.forums %}
@@ -53,8 +53,8 @@
                 </td>
                 </td>
 
 
                 <td valign="top" align="center" style="white-space: nowrap">
                 <td valign="top" align="center" style="white-space: nowrap">
-                    <a href="{{ url_for('management.edit_forum', forum_id = forum.id) }}">Edit</a> |
-                    <a href="{{ url_for('management.delete_forum', forum_id = forum.id) }}">Delete</a>
+                    <a href="{{ url_for('management.edit_forum', forum_id = forum.id) }}">{% trans %}Edit{% endtrans %}</a> |
+                    <a href="{{ url_for('management.delete_forum', forum_id = forum.id) }}">{% trans %}Delete{% endtrans %}</a>
                 </td>
                 </td>
             </tr>
             </tr>
             {% endfor %}
             {% endfor %}

+ 3 - 3
flaskbb/templates/management/group_form.html

@@ -7,8 +7,8 @@
 
 
 <div class="col-md-3">
 <div class="col-md-3">
     <ul class="nav nav-pills nav-stacked">
     <ul class="nav nav-pills nav-stacked">
-        {{ navlink('management.groups', "Manage Groups") }}
-        {{ navlink('management.add_group', "Add Group") }}
+        {{ navlink('management.groups', _("Manage Groups")) }}
+        {{ navlink('management.add_group', _("Add Group")) }}
     </ul>
     </ul>
 </div>
 </div>
 
 
@@ -38,7 +38,7 @@
 
 
             <div class="form-group">
             <div class="form-group">
                 <div class="col-lg-offset-0 col-lg-9">
                 <div class="col-lg-offset-0 col-lg-9">
-                    <button type="submit" class="btn btn-success">Save</button>
+                    <button type="submit" class="btn btn-success">{% trans %}Save{% endtrans %}</button>
                 </div>
                 </div>
             </div>
             </div>
     </form>
     </form>

+ 9 - 9
flaskbb/templates/management/groups.html

@@ -1,4 +1,4 @@
-{% set page_title = "Groups" %}
+{% set page_title = _("Groups") %}
 
 
 {% extends theme("management/management_layout.html") %}
 {% extends theme("management/management_layout.html") %}
 {% block management_content %}
 {% block management_content %}
@@ -6,13 +6,13 @@
 
 
 <div class="col-md-3">
 <div class="col-md-3">
     <ul class="nav nav-pills nav-stacked">
     <ul class="nav nav-pills nav-stacked">
-        {{ navlink('management.groups', "Manage Groups") }}
-        {{ navlink('management.add_group', "Add Group") }}
+        {{ navlink('management.groups', _("Manage Groups")) }}
+        {{ navlink('management.add_group', _("Add Group")) }}
     </ul>
     </ul>
 </div>
 </div>
 
 
 <div class="col-md-9">
 <div class="col-md-9">
-    <legend>Manage Groups</legend>
+    <legend>{% trans %}Manage Groups{% endtrans %}</legend>
 
 
     <div class="pull-left" style="padding-bottom: 10px">
     <div class="pull-left" style="padding-bottom: 10px">
         {{ render_pagination(groups, url_for('management.groups')) }}
         {{ render_pagination(groups, url_for('management.groups')) }}
@@ -22,9 +22,9 @@
         <thead>
         <thead>
             <tr>
             <tr>
                 <th>#</th>
                 <th>#</th>
-                <th>Group Name</th>
-                <th>Description</th>
-                <th>Manage</th>
+                <th>{% trans %}Group Name{% endtrans %}</th>
+                <th>{% trans %}Description{% endtrans %}</th>
+                <th>{% trans %}Manage{% endtrans %}</th>
             </tr>
             </tr>
         </thead>
         </thead>
         <tbody>
         <tbody>
@@ -34,8 +34,8 @@
                 <td><a href="#">{{ group.name }}</a></td>
                 <td><a href="#">{{ group.name }}</a></td>
                 <td>{{ group.description }}</td>
                 <td>{{ group.description }}</td>
                 <td>
                 <td>
-                    <a href="{{ url_for('management.edit_group', group_id = group.id) }}">Edit</a> |
-                    <a href="{{ url_for('management.delete_group', group_id = group.id) }}">Delete</a>
+                    <a href="{{ url_for('management.edit_group', group_id = group.id) }}">{% trans %}Edit{% endtrans %}</a> |
+                    <a href="{{ url_for('management.delete_group', group_id = group.id) }}">{% trans %}Delete{% endtrans %}</a>
                 </td>
                 </td>
             </tr>
             </tr>
             {% endfor %}
             {% endfor %}

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

@@ -4,15 +4,15 @@
 
 
 <div class="col-md-12" style="padding-bottom: 10px">
 <div class="col-md-12" style="padding-bottom: 10px">
     <ul class="nav nav-tabs nav-justified">
     <ul class="nav nav-tabs nav-justified">
-    {{ navlink('management.overview', 'Overview') }}
-    {{ navlink('management.users', 'Users', active=active_management_user_nav) }}
-    {{ navlink('management.unread_reports', 'Reports', active=active_management_report_nav) }}
+    {{ navlink('management.overview', _('Overview')) }}
+    {{ navlink('management.users', _('Users'), active=active_management_user_nav) }}
+    {{ navlink('management.unread_reports', _('Reports'), active=active_management_report_nav) }}
 
 
     {% if current_user|is_admin %}
     {% if current_user|is_admin %}
-        {{ navlink('management.settings', 'Settings') }}
-        {{ navlink('management.groups', 'Groups', active=active_management_group_nav) }}
-        {{ navlink('management.forums', 'Forums', active=active_management_forum_nav) }}
-        {{ navlink('management.plugins', 'Plugins') }}
+        {{ navlink('management.settings', _('Settings')) }}
+        {{ navlink('management.groups', _('Groups'), active=active_management_group_nav) }}
+        {{ navlink('management.forums', _('Forums'), active=active_management_forum_nav) }}
+        {{ navlink('management.plugins', _('Plugins')) }}
     {% endif %}
     {% endif %}
     </ul>
     </ul>
 </div>
 </div>

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

@@ -1,4 +1,4 @@
-{% set page_title = "Overview" %}
+{% set page_title = _("Overview") %}
 
 
 {% extends theme("management/management_layout.html") %}
 {% extends theme("management/management_layout.html") %}
 {% block management_content %}
 {% block management_content %}
@@ -7,26 +7,26 @@
     <table class="table table-bordered">
     <table class="table table-bordered">
         <thead>
         <thead>
             <tr>
             <tr>
-                <th colspan="4">Global Statistics</th>
+                <th colspan="4">{% trans %}Global Statistics{% endtrans %}</th>
             </tr>
             </tr>
         </thead>
         </thead>
         <tbody>
         <tbody>
             <tr>
             <tr>
-                <td><b>FlaskBB Version</b></td>
+                <td><b>{% trans %}FlaskBB Version{% endtrans %}</b></td>
                 <td>{{ flaskbb_version }}</td>
                 <td>{{ flaskbb_version }}</td>
-                <td><b>Posts</b></td>
+                <td><b>{% trans %}Posts{% endtrans %}</b></td>
                 <td>{{ post_count }}</td>
                 <td>{{ post_count }}</td>
             </tr>
             </tr>
             <tr>
             <tr>
-                <td><b>Python Version</b></td>
+                <td><b>{% trans %}Python Version{% endtrans %}</b></td>
                 <td>{{ python_version }}</td>
                 <td>{{ python_version }}</td>
-                <td><b>Topics</b></td>
+                <td><b>{% trans %}Topics{% endtrans %}</b></td>
                 <td>{{ topic_count }}</td>
                 <td>{{ topic_count }}</td>
             </tr>
             </tr>
             <tr>
             <tr>
-                <td><b>Flask Version</b></td>
+                <td><b>{% trans %}Flask Version{% endtrans %}</b></td>
                 <td>{{ flask_version }}</td>
                 <td>{{ flask_version }}</td>
-                <td><b>Users</b></td>
+                <td><b>{% trans %}Users{% endtrans %}</b></td>
                 <td>{{ user_count }}</td>
                 <td>{{ user_count }}</td>
             </tr>
             </tr>
         </tbody>
         </tbody>

+ 11 - 11
flaskbb/templates/management/plugins.html

@@ -1,17 +1,17 @@
-{% set page_title = "Plugins" %}
+{% set page_title = _("Plugins") %}
 
 
 {% extends theme("management/management_layout.html") %}
 {% extends theme("management/management_layout.html") %}
 {% block management_content %}
 {% block management_content %}
 {% from theme('macros.html') import render_pagination %}
 {% from theme('macros.html') import render_pagination %}
 
 
-<legend>Manage Plugins</legend>
+<legend>{% trans %}Manage Plugins{% endtrans %}</legend>
 
 
 <table class="table table-bordered">
 <table class="table table-bordered">
     <thead>
     <thead>
         <tr>
         <tr>
-            <th>Plugin</th>
-            <th>Information</th>
-            <th>Manage</th>
+            <th>{% trans %}Plugin{% endtrans %}</th>
+            <th>{% trans %}Information{% endtrans %}</th>
+            <th>{% trans %}Manage{% endtrans %}</th>
         </tr>
         </tr>
     </thead>
     </thead>
     <tbody>
     <tbody>
@@ -25,24 +25,24 @@
             {% endif %}
             {% endif %}
             </td>
             </td>
             <td>
             <td>
-                Version: <i>{{ plugin.version }}</i> <br />
+                {% trans %}Version{% endtrans %}: <i>{{ plugin.version }}</i> <br />
                 {{ plugin.description }} <br />
                 {{ plugin.description }} <br />
-                by  <i>{{ plugin.author }}</i> 
+                {% trans %}by{% endtrans %}  <i>{{ plugin.author }}</i>
             </td>
             </td>
             <td>
             <td>
                 {% if not plugin.enabled %}
                 {% if not plugin.enabled %}
-                <a href="{{ url_for('management.enable_plugin', plugin=plugin.identifier) }}">Enable</a>
+                <a href="{{ url_for('management.enable_plugin', plugin=plugin.identifier) }}">{% trans %}Enable{% endtrans %}</a>
                 {% else %}
                 {% else %}
-                <a href="{{ url_for('management.disable_plugin', plugin=plugin.identifier) }}">Disable</a>
+                <a href="{{ url_for('management.disable_plugin', plugin=plugin.identifier) }}">{% trans %}Disable{% endtrans %}</a>
                 {% endif %}
                 {% endif %}
 
 
                 {% set uninstallable = plugin.uninstallable %}
                 {% set uninstallable = plugin.uninstallable %}
                 {% if plugin.installable and not uninstallable %}
                 {% if plugin.installable and not uninstallable %}
                 <br />
                 <br />
-                <a href="{{ url_for('management.install_plugin', plugin=plugin.identifier) }}">Install</a>
+                <a href="{{ url_for('management.install_plugin', plugin=plugin.identifier) }}">{% trans %}Install{% endtrans %}</a>
                 {% endif %}
                 {% endif %}
                 {% if uninstallable %}
                 {% if uninstallable %}
-                <a href="{{ url_for('management.uninstall_plugin', plugin=plugin.identifier) }}">Uninstall</a>
+                <a href="{{ url_for('management.uninstall_plugin', plugin=plugin.identifier) }}">{% trans %}Uninstall{% endtrans %}</a>
                 {% endif %}
                 {% endif %}
             </td>
             </td>
         </tr>
         </tr>

+ 10 - 10
flaskbb/templates/management/reports.html

@@ -1,4 +1,4 @@
-{% set page_title = "Reports" %}
+{% set page_title = _("Reports") %}
 {% set active_management_report_nav=True %}
 {% set active_management_report_nav=True %}
 
 
 {% extends theme("management/management_layout.html") %}
 {% extends theme("management/management_layout.html") %}
@@ -7,13 +7,13 @@
 
 
 <div class="col-md-3">
 <div class="col-md-3">
     <ul class="nav nav-pills nav-stacked">
     <ul class="nav nav-pills nav-stacked">
-        {{ navlink('management.unread_reports', "Show unread reports") }}
-        {{ navlink('management.reports', "Show all reports") }}
+        {{ navlink('management.unread_reports', _("Show unread reports")) }}
+        {{ navlink('management.reports', _("Show all reports")) }}
     </ul>
     </ul>
 </div>
 </div>
 
 
 <div class="col-md-9">
 <div class="col-md-9">
-    <legend>All Reports</legend>
+    <legend>{% trans %}All Reports{% endtrans %}</legend>
 
 
     <div class="pull-left" style="padding-bottom: 10px">
     <div class="pull-left" style="padding-bottom: 10px">
         {{ render_pagination(reports, url_for('management.reports')) }}
         {{ render_pagination(reports, url_for('management.reports')) }}
@@ -23,11 +23,11 @@
         <thead>
         <thead>
             <tr>
             <tr>
                 <th>#</th>
                 <th>#</th>
-                <th>Poster</th>
-                <th>Topic</th>
-                <th>Reporter</th>
-                <th>Reason</th>
-                <th>Reported</th>
+                <th>{% trans %}Poster{% endtrans %}</th>
+                <th>{% trans %}Topic{% endtrans %}</th>
+                <th>{% trans %}Reporter{% endtrans %}</th>
+                <th>{% trans %}Reason{% endtrans %}</th>
+                <th>{% trans %}Reported{% endtrans %}</th>
             </tr>
             </tr>
         </thead>
         </thead>
         <tbody>
         <tbody>
@@ -42,7 +42,7 @@
             </tr>
             </tr>
             {% else %}
             {% else %}
             <tr>
             <tr>
-                <td colspan="6">No reports.</td>
+                <td colspan="6">{% trans %}No reports.{% endtrans %}</td>
             </tr>
             </tr>
             {% endfor %}
             {% endfor %}
         </tbody>
         </tbody>

+ 1 - 1
flaskbb/templates/management/settings.html

@@ -36,7 +36,7 @@
         {% endif %}
         {% endif %}
     {%  endfor %}
     {%  endfor %}
 
 
-    <button type="submit" class="btn btn-success">Save</button>
+    <button type="submit" class="btn btn-success">{% trans %}Save{% endtrans %}</button>
 
 
 </form>
 </form>
 </div>
 </div>

+ 12 - 12
flaskbb/templates/management/unread_reports.html

@@ -1,4 +1,4 @@
-{% set page_title = "Unread Reports" %}
+{% set page_title = _("Unread Reports") %}
 {% set active_management_report_nav=True %}
 {% set active_management_report_nav=True %}
 
 
 {% extends theme("management/management_layout.html") %}
 {% extends theme("management/management_layout.html") %}
@@ -7,13 +7,13 @@
 
 
 <div class="col-md-3">
 <div class="col-md-3">
     <ul class="nav nav-pills nav-stacked">
     <ul class="nav nav-pills nav-stacked">
-        {{ navlink('management.unread_reports', "Show unread reports") }}
-        {{ navlink('management.reports', "Show all reports") }}
+        {{ navlink('management.unread_reports', _("Show unread reports")) }}
+        {{ navlink('management.reports', _("Show all reports")) }}
     </ul>
     </ul>
 </div>
 </div>
 
 
 <div class="col-md-9">
 <div class="col-md-9">
-    <legend>Unread Reports</legend>
+    <legend>{% trans %}Unread Reports{% endtrans %}</legend>
 
 
     <div class="pull-left" style="padding-bottom: 10px">
     <div class="pull-left" style="padding-bottom: 10px">
         {{ render_pagination(reports, url_for('management.unread_reports')) }}
         {{ render_pagination(reports, url_for('management.unread_reports')) }}
@@ -23,12 +23,12 @@
         <thead>
         <thead>
             <tr>
             <tr>
                 <th>#</th>
                 <th>#</th>
-                <th>Poster</th>
-                <th>Topic</th>
-                <th>Reporter</th>
-                <th>Reason</th>
-                <th>Reported</th>
-                <th><a href="{{ url_for('management.report_markread') }}">Mark all as Read</a></th>
+                <th>{% trans %}Poster{% endtrans %}</th>
+                <th>{% trans %}Topic{% endtrans %}</th>
+                <th>{% trans %}Reporter{% endtrans %}</th>
+                <th>{% trans %}Reason{% endtrans %}</th>
+                <th>{% trans %}Reported{% endtrans %}</th>
+                <th><a href="{{ url_for('management.report_markread') }}">{% trans %}Mark all as Read{% endtrans %}</a></th>
             </tr>
             </tr>
         </thead>
         </thead>
         <tbody>
         <tbody>
@@ -41,12 +41,12 @@
                 <td>{{ report.reason }}</td>
                 <td>{{ report.reason }}</td>
                 <td>{{ report.reported|time_since }}</td>
                 <td>{{ report.reported|time_since }}</td>
                 <td>
                 <td>
-                    <a href="{{ url_for('management.report_markread', report_id=report.id) }}">Mark as Read</a>
+                    <a href="{{ url_for('management.report_markread', report_id=report.id) }}">{% trans %}Mark as Read{% endtrans %}</a>
                 </td>
                 </td>
             </tr>
             </tr>
             {% else %}
             {% else %}
             <tr>
             <tr>
-                <td colspan="7">No unread reports.</td>
+                <td colspan="7">{% trans %}No unread reports.{% endtrans %}</td>
             </tr>
             </tr>
             {% endfor %}
             {% endfor %}
         </tbody>
         </tbody>

+ 4 - 4
flaskbb/templates/management/user_form.html

@@ -7,11 +7,11 @@
 
 
 <div class="col-md-3">
 <div class="col-md-3">
     <ul class="nav nav-pills nav-stacked">
     <ul class="nav nav-pills nav-stacked">
-        {{ navlink('management.users', "Manage Users") }}
-        {{ navlink('management.banned_users', 'Banned Users') }}
+        {{ navlink('management.users', _("Manage Users")) }}
+        {{ navlink('management.banned_users', _('Banned Users')) }}
 
 
         {% if current_user|is_admin %}
         {% if current_user|is_admin %}
-            {{ navlink('management.add_user', "Add User") }}
+            {{ navlink('management.add_user', _("Add User")) }}
         {% endif %}
         {% endif %}
     </ul>
     </ul>
 </div><!--/.col-md-3 -->
 </div><!--/.col-md-3 -->
@@ -36,7 +36,7 @@
 
 
             <div class="form-group">
             <div class="form-group">
                 <div class="col-sm-offset-3 col-sm-9">
                 <div class="col-sm-offset-3 col-sm-9">
-                    <button type="submit" class="btn btn-success">Save</button>
+                    <button type="submit" class="btn btn-success">{% trans %}Save{% endtrans %}</button>
                 </div>
                 </div>
             </div>
             </div>
     </form>
     </form>

+ 18 - 15
flaskbb/templates/management/users.html

@@ -1,4 +1,4 @@
-{% set page_title = "Users" %}
+{% set page_title = _("Users") %}
 {% set active_management_user_nav=True %}
 {% set active_management_user_nav=True %}
 
 
 {% extends theme("management/management_layout.html") %}
 {% extends theme("management/management_layout.html") %}
@@ -7,17 +7,17 @@
 
 
 <div class="col-md-3">
 <div class="col-md-3">
     <ul class="nav nav-pills nav-stacked">
     <ul class="nav nav-pills nav-stacked">
-        {{ navlink('management.users', "Manage Users") }}
-        {{ navlink('management.banned_users', 'Banned Users') }}
+        {{ navlink('management.users', _("Manage Users")) }}
+        {{ navlink('management.banned_users', _('Banned Users')) }}
 
 
         {% if current_user|is_admin %}
         {% if current_user|is_admin %}
-            {{ navlink('management.add_user', "Add User") }}
+            {{ navlink('management.add_user', _("Add User")) }}
         {% endif %}
         {% endif %}
     </ul>
     </ul>
 </div><!--/.col-md-3 -->
 </div><!--/.col-md-3 -->
 
 
 <div class="col-md-9">
 <div class="col-md-9">
-    <legend>Manage Users</legend>
+    <legend>{% trans %}Manage Users{% endtrans %}</legend>
 
 
     <div class="pull-left" style="padding-bottom: 10px">
     <div class="pull-left" style="padding-bottom: 10px">
         {{ render_pagination(users, url_for('management.users')) }}
         {{ render_pagination(users, url_for('management.users')) }}
@@ -28,7 +28,7 @@
                 {{ search_form.hidden_tag() }}
                 {{ search_form.hidden_tag() }}
                 {{ group_field(search_form.search_query) }}
                 {{ group_field(search_form.search_query) }}
                 <span class="input-group-btn">
                 <span class="input-group-btn">
-                    <button class="btn btn-primary" type="submit">Search</button>
+                    <button class="btn btn-primary" type="submit">{% trans %}Search{% endtrans %}</button>
                 </span>
                 </span>
             </div>
             </div>
         </form>
         </form>
@@ -38,11 +38,11 @@
         <thead>
         <thead>
             <tr>
             <tr>
                 <th>#</th>
                 <th>#</th>
-                <th>Username</th>
-                <th>Posts</th>
-                <th>Date registered</th>
-                <th>Group</th>
-                <th>Manage</th>
+                <th>{% trans %}Username{% endtrans %}</th>
+                <th>{% trans %}Posts{% endtrans %}</th>
+                <th>{% trans %}Date registered{% endtrans %}</th>
+                <th>{% trans %}Group{% endtrans %}</th>
+                <th>{% trans %}Manage{% endtrans %}</th>
             </tr>
             </tr>
         </thead>
         </thead>
         <tbody>
         <tbody>
@@ -55,23 +55,26 @@
                     <td>{{ user.primary_group.name }}</td>
                     <td>{{ user.primary_group.name }}</td>
                     <td>
                     <td>
                         {% if current_user|can_edit_user and not user|is_admin or current_user|is_admin %}
                         {% if current_user|can_edit_user and not user|is_admin or current_user|is_admin %}
-                            <a href="{{ url_for('management.edit_user', user_id = user.id) }}">Edit</a>
+                            <a href="{{ url_for('management.edit_user', user_id = user.id) }}">{% trans %}Edit{% endtrans %}</a>
                         {% endif %}
                         {% endif %}
 
 
                         {% if current_user|can_ban_user and not user.permissions['banned'] %}
                         {% if current_user|can_ban_user and not user.permissions['banned'] %}
-                            | <a href="{{ url_for('management.ban_user', user_id = user.id) }}">Ban</a>
+                            | <a href="{{ url_for('management.ban_user', user_id = user.id) }}">{% trans %}Ban{% endtrans %}</a>
                         {% endif %}
                         {% endif %}
 
 
+                        {% if current_user|can_ban_user and user.permissions['banned'] %}
+                            | <a href="{{ url_for('management.unban_user', user_id = user.id) }}">{% trans %}Unban{% endtrans %}</a>
+                        {% endif %}
 
 
                         {% if current_user|is_admin %}
                         {% if current_user|is_admin %}
-                            | <a href="{{ url_for('management.delete_user', user_id = user.id) }}">Delete</a>
+                            | <a href="{{ url_for('management.delete_user', user_id = user.id) }}">{% trans %}Delete{% endtrans %}</a>
                         {% endif %}
                         {% endif %}
                     </td>
                     </td>
                 </tr>
                 </tr>
             {% else %}
             {% else %}
                 <tr>
                 <tr>
                     <td colspan="6">
                     <td colspan="6">
-                        No users found matching your search query
+                        {% trans %}No users found matching your search query{% endtrans %}
                     </td>
                     </td>
                 </tr>
                 </tr>
             {% endfor %}
             {% endfor %}

+ 9 - 9
flaskbb/templates/message/drafts.html

@@ -1,31 +1,31 @@
-{% set page_title = "Drafts" %}
+{% set page_title = _("Drafts") %}
 
 
 {% extends theme("message/message_layout.html") %}
 {% extends theme("message/message_layout.html") %}
 {% block message_content %}
 {% block message_content %}
 <table class="table table-bordered">
 <table class="table table-bordered">
     <thead>
     <thead>
         <tr>
         <tr>
-            <th>To</th>
-            <th>Subject</th>
-            <th>Date</th>
-            <th>Options</th>
+            <th>{% trans %}To{% endtrans %}</th>
+            <th>{% trans %}Subject{% endtrans %}</th>
+            <th>{% trans %}Date{% endtrans %}</th>
+            <th>{% trans %}Options{% endtrans %}</th>
         </tr>
         </tr>
     </thead>
     </thead>
     <tbody>
     <tbody>
         {% for message in messages %}
         {% for message in messages %}
         <tr>
         <tr>
             <td><a href="{{ url_for('user.profile', username=message.to_user.username) }}">{{ message.to_user.username }}</a></td>
             <td><a href="{{ url_for('user.profile', username=message.to_user.username) }}">{{ message.to_user.username }}</a></td>
-            <td><a href="{{ url_for('user.view_message', message_id=message.id) }}">{% if message.subject %}{{ message.subject }}{% else %}(No Subject){% endif %}</a></td>
+            <td><a href="{{ url_for('user.view_message', message_id=message.id) }}">{% if message.subject %}{{ message.subject }}{% else %}({% trans %}No Subject{% endtrans %}){% endif %}</a></td>
             <td>{{ message.date_created|format_date('%d %B %Y') }}</td>
             <td>{{ message.date_created|format_date('%d %B %Y') }}</td>
             <td>
             <td>
-                <a href="{{ url_for('user.edit_message', message_id=message.id) }}">Edit</a> |
-                <a href="{{ url_for('user.move_message', message_id=message.id) }}">Delete</a>
+                <a href="{{ url_for('user.edit_message', message_id=message.id) }}">{% trans %}Edit{% endtrans %}</a> |
+                <a href="{{ url_for('user.move_message', message_id=message.id) }}">{% trans %}Delete{% endtrans %}</a>
             </td>
             </td>
         </tr>
         </tr>
         {% else %}
         {% else %}
         <tr>
         <tr>
             <td colspan="4">
             <td colspan="4">
-                This message folder is empty.
+                {% trans %}This message folder is empty.{% endtrans %}
             </td>
             </td>
         </tr>
         </tr>
         {% endfor %}
         {% endfor %}

+ 8 - 8
flaskbb/templates/message/inbox.html

@@ -1,14 +1,14 @@
-{% set page_title = "Inbox" %}
+{% set page_title = _("Inbox") %}
 
 
 {% extends theme("message/message_layout.html") %}
 {% extends theme("message/message_layout.html") %}
 {% block message_content %}
 {% block message_content %}
 <table class="table table-bordered">
 <table class="table table-bordered">
     <thead>
     <thead>
         <tr>
         <tr>
-            <th>From</th>
-            <th>Subject</th>
-            <th>Date</th>
-            <th>Options</th>
+            <th>{% trans %}From{% endtrans %}</th>
+            <th>{% trans %}Subject{% endtrans %}</th>
+            <th>{% trans %}Date{% endtrans %}</th>
+            <th>{% trans %}Options{% endtrans %}</th>
         </tr>
         </tr>
     </thead>
     </thead>
     <tbody>
     <tbody>
@@ -17,7 +17,7 @@
         {% if message.from_user %}
         {% if message.from_user %}
             <td><a href="{{ url_for('user.profile', username=message.from_user.username) }}">{{ message.from_user.username }}</a></td>
             <td><a href="{{ url_for('user.profile', username=message.from_user.username) }}">{{ message.from_user.username }}</a></td>
         {% else %}
         {% else %}
-            <td>[deleted]</td>
+            <td>[{% trans %}deleted{% endtrans %}]</td>
         {% endif %}
         {% endif %}
             <td>
             <td>
                 <a href="{{ url_for('user.view_message', message_id=message.id) }}">
                 <a href="{{ url_for('user.view_message', message_id=message.id) }}">
@@ -25,12 +25,12 @@
                 </a>
                 </a>
             </td>
             </td>
             <td>{{ message.date_created|time_since }}</td>
             <td>{{ message.date_created|time_since }}</td>
-            <td><a href="{{ url_for('user.move_message', message_id=message.id) }}">Delete</a></td>
+            <td><a href="{{ url_for('user.move_message', message_id=message.id) }}">{% trans %}Delete{% endtrans %}</a></td>
         </tr>
         </tr>
         {% else %}
         {% else %}
         <tr>
         <tr>
             <td colspan="4">
             <td colspan="4">
-                This message folder is empty.
+                {% trans %}This message folder is empty.{% endtrans %}
             </td>
             </td>
         </tr>
         </tr>
         {% endfor %}
         {% endfor %}

+ 2 - 2
flaskbb/templates/message/message_form.html

@@ -13,8 +13,8 @@
 
 
     <div class="form-group row">
     <div class="form-group row">
         <div class="col-sm-offset-3 col-lg-9">
         <div class="col-sm-offset-3 col-lg-9">
-            <button class="btn btn-success" type="submit" name="send_message">Send Message</button>
-            <button class="btn btn-info" type="submit" name="save_message">Save as Draft</button>
+            <button class="btn btn-success" type="submit" name="send_message">{% trans %}Send Message{% endtrans %}</button>
+            <button class="btn btn-info" type="submit" name="save_message">{% trans %}Save as Draft{% endtrans %}</button>
         </div>
         </div>
     </div>
     </div>
 </form>
 </form>

+ 7 - 7
flaskbb/templates/message/message_layout.html

@@ -3,20 +3,20 @@
 {%- from theme('macros.html') import navlink with context -%}
 {%- from theme('macros.html') import navlink with context -%}
 
 
 <ul class="breadcrumb">
 <ul class="breadcrumb">
-    <li><a href="{{ url_for('forum.index') }}">Forum</a></li>
+    <li><a href="{{ url_for('forum.index') }}">{% trans %}Forum{% endtrans %}</a></li>
     <li><a href="{{ url_for('user.profile', username=current_user.username) }}">{{ current_user.username }}</a></li>
     <li><a href="{{ url_for('user.profile', username=current_user.username) }}">{{ current_user.username }}</a></li>
-    <li class="active">Private Message</li>
+    <li class="active">{% trans %}Private Message{% endtrans %}</li>
 </ul>
 </ul>
 
 
 <div class="row">
 <div class="row">
     <div class="col-sm-3">
     <div class="col-sm-3">
         <div class="sidebar">
         <div class="sidebar">
             <ul class="nav sidenav">
             <ul class="nav sidenav">
-                <li class="nav-header">Options | <small><a href="{{ url_for('user.new_message') }}">New PM</a></small></li>
-                {{ navlink('user.inbox', 'Inbox') }}
-                {{ navlink('user.sent', 'Sent') }}
-                {{ navlink('user.drafts', 'Drafts') }}
-                {{ navlink('user.trash', 'Trash') }}
+                <li class="nav-header">{% trans %}Options{% endtrans %} | <small><a href="{{ url_for('user.new_message') }}">{% trans %}New PM{% endtrans %}</a></small></li>
+                {{ navlink('user.inbox', _('Inbox')) }}
+                {{ navlink('user.sent', _('Sent')) }}
+                {{ navlink('user.drafts', _('Drafts')) }}
+                {{ navlink('user.trash', _('Trash')) }}
             </ul>
             </ul>
         </div><!--/.sidebar -->
         </div><!--/.sidebar -->
     </div><!--/.col-sm-3 -->
     </div><!--/.col-sm-3 -->

+ 8 - 8
flaskbb/templates/message/sent.html

@@ -1,14 +1,14 @@
-{% set page_title = "Sent Messages" %}
+{% set page_title = _("Sent Messages") %}
 
 
 {% extends theme("message/message_layout.html") %}
 {% extends theme("message/message_layout.html") %}
 {% block message_content %}
 {% block message_content %}
 <table class="table table-bordered">
 <table class="table table-bordered">
     <thead>
     <thead>
         <tr>
         <tr>
-            <th>To</th>
-            <th>Subject</th>
-            <th>Date</th>
-            <th>Options</th>
+            <th>{% trans %}To{% endtrans %}</th>
+            <th>{% trans %}Subject{% endtrans %}</th>
+            <th>{% trans %}Date{% endtrans %}</th>
+            <th>{% trans %}Options{% endtrans %}</th>
         </tr>
         </tr>
     </thead>
     </thead>
     <tbody>
     <tbody>
@@ -17,16 +17,16 @@
         {% if message.to_user %}
         {% if message.to_user %}
             <td><a href="{{ url_for('user.profile', username=message.to_user.username) }}">{{ message.to_user.username }}</a></td>
             <td><a href="{{ url_for('user.profile', username=message.to_user.username) }}">{{ message.to_user.username }}</a></td>
         {% else %}
         {% else %}
-            <td>[deleted]</td>
+            <td>[{% trans %}deleted{% endtrans %}]</td>
         {% endif %}
         {% endif %}
             <td><a href="{{ url_for('user.view_message', message_id=message.id) }}">{{ message.subject }}</a></td>
             <td><a href="{{ url_for('user.view_message', message_id=message.id) }}">{{ message.subject }}</a></td>
             <td>{{ message.date_created|time_since }}</td>
             <td>{{ message.date_created|time_since }}</td>
-            <td><a href="{{ url_for('user.move_message', message_id=message.id) }}">Delete</a></td>
+            <td><a href="{{ url_for('user.move_message', message_id=message.id) }}">{% trans %}Delete{% endtrans %}</a></td>
         </tr>
         </tr>
         {% else %}
         {% else %}
         <tr>
         <tr>
             <td colspan="4">
             <td colspan="4">
-                This message folder is empty.
+                {% trans %}This message folder is empty.{% endtrans %}
             </td>
             </td>
         </tr>
         </tr>
         {% endfor %}
         {% endfor %}

+ 10 - 10
flaskbb/templates/message/trash.html

@@ -1,31 +1,31 @@
-{% set page_title = "Trash" %}
+{% set page_title = _("Trash") %}
 
 
 {% extends theme("message/message_layout.html") %}
 {% extends theme("message/message_layout.html") %}
 {% block message_content %}
 {% block message_content %}
 <table class="table table-bordered">
 <table class="table table-bordered">
     <thead>
     <thead>
         <tr>
         <tr>
-            <th>To</th>
-            <th>Subject</th>
-            <th>Date</th>
-            <th>Options</th>
+            <th>{% trans %}To{% endtrans %}</th>
+            <th>{% trans %}Subject{% endtrans %}</th>
+            <th>{% trans %}Date{% endtrans %}</th>
+            <th>{% trans %}Options{% endtrans %}</th>
         </tr>
         </tr>
     </thead>
     </thead>
     <tbody>
     <tbody>
         {% for message in messages %}
         {% for message in messages %}
         <tr>
         <tr>
-            <td>{% if message.to_user %}<a href="{{ url_for('user.profile', username=message.to_user.username) }}">{{ message.to_user.username }}</a>{% else %} (No User) {% endif %}</td>
-            <td><a href="{{ url_for('user.view_message', message_id=message.id) }}">{% if message.subject %}{{ message.subject }}{% else %}(No Subject){% endif %}</a></td>
+            <td>{% if message.to_user %}<a href="{{ url_for('user.profile', username=message.to_user.username) }}">{{ message.to_user.username }}</a>{% else %} ({% trans %}No User{% endtrans %}) {% endif %}</td>
+            <td><a href="{{ url_for('user.view_message', message_id=message.id) }}">{% if message.subject %}{{ message.subject }}{% else %}({% trans %}No Subject{% endtrans %}){% endif %}</a></td>
             <td>{{ message.date_created|format_date }}</td>
             <td>{{ message.date_created|format_date }}</td>
             <td>
             <td>
-                <a href="{{ url_for('user.restore_message', message_id=message.id) }}">Restore</a> |
-                <a href="{{ url_for('user.delete_message', message_id=message.id) }}">Delete</a>
+                <a href="{{ url_for('user.restore_message', message_id=message.id) }}">{% trans %}Restore{% endtrans %}</a> |
+                <a href="{{ url_for('user.delete_message', message_id=message.id) }}">{% trans %}Delete{% endtrans %}</a>
             </td>
             </td>
         </tr>
         </tr>
         {% else %}
         {% else %}
         <tr>
         <tr>
             <td colspan="4">
             <td colspan="4">
-                This message folder is empty.
+                {% trans %}This message folder is empty.{% endtrans %}
             </td>
             </td>
         </tr>
         </tr>
         {% endfor %}
         {% endfor %}

+ 4 - 4
flaskbb/templates/message/view_message.html

@@ -26,11 +26,11 @@
                     </td>
                     </td>
 
 
                     <td class="pull-right">
                     <td class="pull-right">
-                        Posts: {{ message.from_user.post_count }}<br />
-                        Registered since: {{ message.from_user.date_joined|format_date('%b %d %Y') }}<br />
+                        {% trans %}Posts{% endtrans %}: {{ message.from_user.post_count }}<br />
+                        {% trans %}Registered since{% endtrans %}: {{ message.from_user.date_joined|format_date('%b %d %Y') }}<br />
                     </td>
                     </td>
                 {% else %}
                 {% else %}
-                    [deleted]
+                    [{% trans %}deleted{% endtrans %}]
                 {% endif %}
                 {% endif %}
                 </tr>
                 </tr>
 
 
@@ -46,7 +46,7 @@
                         {{ message.message|markup }}
                         {{ message.message|markup }}
                         {% endautoescape %}
                         {% endautoescape %}
                     {% else %}
                     {% else %}
-                        (No Message)
+                        ({% trans %}No Message{% endtrans %})
                     {% endif %}
                     {% endif %}
                 </div>
                 </div>
             </td>
             </td>

+ 2 - 2
flaskbb/templates/user/all_posts.html

@@ -3,9 +3,9 @@
 
 
 {% block content %}
 {% block content %}
 <ul class="breadcrumb">
 <ul class="breadcrumb">
-    <li><a href="{{ url_for('forum.index') }}">Forum</a></li>
+    <li><a href="{{ url_for('forum.index') }}">{% trans %}Forum{% endtrans %}</a></li>
     <li ><a href="{{ user.url }}">{{ user.username }}</a></li>
     <li ><a href="{{ user.url }}">{{ user.username }}</a></li>
-    <li class="active">All Posts</li>
+    <li class="active">{% trans %}All Posts{% endtrans %}</li>
 </ul>
 </ul>
 
 
 <div class="pull-left" style="padding-bottom: 10px">
 <div class="pull-left" style="padding-bottom: 10px">

+ 23 - 9
flaskbb/templates/user/all_topics.html

@@ -3,9 +3,9 @@
 
 
 {% block content %}
 {% block content %}
 <ul class="breadcrumb">
 <ul class="breadcrumb">
-    <li><a href="{{ url_for('forum.index') }}">Forum</a></li>
+    <li><a href="{{ url_for('forum.index') }}">{% trans %}Forum{% endtrans %}</a></li>
     <li ><a href="{{ url_for('user.profile', username=user.username) }}">{{ user.username }}</a></li>
     <li ><a href="{{ url_for('user.profile', username=user.username) }}">{{ user.username }}</a></li>
-    <li class="active">All Topics</li>
+    <li class="active">{% trans %}All Topics{% endtrans %}</li>
 </ul>
 </ul>
 
 
 <div class="pull-left">
 <div class="pull-left">
@@ -17,19 +17,19 @@
     <thead>
     <thead>
         <tr>
         <tr>
             <th colspan="5">
             <th colspan="5">
-                All Topics created by {{ user.username }}
+                {% trans %}All Topics created by{% endtrans %} {{ user.username }}
             </th>
             </th>
         </tr>
         </tr>
     </thead>
     </thead>
     <tbody>
     <tbody>
         <tr>
         <tr>
-            <td colspan="2">Thread</td>
+            <td colspan="2">{% trans %}Topic{% endtrans %}</td>
 
 
-            <td>Posts</td>
+            <td>{% trans %}Posts{% endtrans %}</td>
 
 
-            <td>Views</td>
+            <td>{% trans %}Views{% endtrans %}</td>
 
 
-            <td>Last Post</td>
+            <td>{% trans %}Last Post{% endtrans %}</td>
         </tr>
         </tr>
 
 
         {% for topic in topics.items %}
         {% for topic in topics.items %}
@@ -38,7 +38,14 @@
             <td>
             <td>
                 <div>
                 <div>
                     <a href="{{ topic.url }}">{{ topic.title }}</a> <br />
                     <a href="{{ topic.url }}">{{ topic.title }}</a> <br />
-                    <small>by <a href="{{ topic.user.url }}">{{ topic.user.username }}</a></small>
+                    <small>
+                        {% trans %}by{% endtrans %}
+                        {% if topic.user_id %}
+                         <a href="{{ topic.user.url }}">{{ topic.user.username }}</a>
+                        {% else %}
+                        {{ topic.username }}
+                        {% endif %}
+                    </small>
                 </div>
                 </div>
             </td>
             </td>
             <td>
             <td>
@@ -49,7 +56,14 @@
             </td>
             </td>
             <td>
             <td>
                 <a href="{{ topic.last_post.url }}">{{ topic.last_post.date_created|time_since }}</a><br />
                 <a href="{{ topic.last_post.url }}">{{ topic.last_post.date_created|time_since }}</a><br />
-                <small>by <a href="{{ topic.last_post.user.username }}">{{ topic.last_post.user.username }}</a></small>
+                <small>
+                    {% trans %}by{% endtrans %}
+                    {% if topic.last_post.user_id %}
+                    <a href="{{ topic.last_post.user.url }}">{{ topic.last_post.user.username }}</a>
+                    {% else %}
+                    {{ topic.last_post.username }}
+                    {% endif %}
+                </small>
             </td>
             </td>
         </tr>
         </tr>
         {% else %}
         {% else %}

+ 2 - 2
flaskbb/templates/user/change_email.html

@@ -3,7 +3,7 @@
 
 
 {% block settings_content %}
 {% block settings_content %}
 <form class="form-horizontal" role="form" method="POST">
 <form class="form-horizontal" role="form" method="POST">
-    <legend>Change E-Mail Adress</legend>
+    <legend>{% trans %}Change E-Mail Adress{% endtrans %}</legend>
     {{ form.hidden_tag() }}
     {{ form.hidden_tag() }}
     {{ horizontal_field(form.old_email)}}
     {{ horizontal_field(form.old_email)}}
     {{ horizontal_field(form.new_email)}}
     {{ horizontal_field(form.new_email)}}
@@ -11,7 +11,7 @@
 
 
     <div class="form-group row">
     <div class="form-group row">
         <div class="col-sm-offset-3 col-sm-9">
         <div class="col-sm-offset-3 col-sm-9">
-            <button type="submit" class="btn btn-success">Save</button>
+            <button type="submit" class="btn btn-success">{% trans %}Save{% endtrans %}</button>
         </div>
         </div>
     </div>
     </div>
 </form>
 </form>

+ 2 - 2
flaskbb/templates/user/change_password.html

@@ -3,7 +3,7 @@
 
 
 {% block settings_content %}
 {% block settings_content %}
 <form class="form-horizontal" role="form" method="POST">
 <form class="form-horizontal" role="form" method="POST">
-    <legend>Change Password</legend>
+    <legend>{% trans %}Change Password{% endtrans %}</legend>
     {{ form.hidden_tag() }}
     {{ form.hidden_tag() }}
     {{ horizontal_field(form.old_password)}}
     {{ horizontal_field(form.old_password)}}
     {{ horizontal_field(form.new_password)}}
     {{ horizontal_field(form.new_password)}}
@@ -11,7 +11,7 @@
 
 
     <div class="form-group row">
     <div class="form-group row">
         <div class="col-sm-offset-3 col-sm-9">
         <div class="col-sm-offset-3 col-sm-9">
-            <button type="submit" class="btn btn-success">Save</button>
+            <button type="submit" class="btn btn-success">{% trans %}Save{% endtrans %}</button>
         </div>
         </div>
     </div>
     </div>
 </form>
 </form>

+ 2 - 2
flaskbb/templates/user/change_user_details.html

@@ -3,7 +3,7 @@
 
 
 {% block settings_content %}
 {% block settings_content %}
 <form class="form-horizontal" role="form" method="POST">
 <form class="form-horizontal" role="form" method="POST">
-    <legend class="">Change User Details</legend>
+    <legend class="">{% trans %}Change User Details{% endtrans %}</legend>
     {{ form.hidden_tag() }}
     {{ form.hidden_tag() }}
     {{ horizontal_field(form.birthday) }}
     {{ horizontal_field(form.birthday) }}
     {{ horizontal_field(form.gender) }}
     {{ horizontal_field(form.gender) }}
@@ -15,7 +15,7 @@
 
 
     <div class="form-group row">
     <div class="form-group row">
         <div class="col-sm-offset-3 col-sm-9">
         <div class="col-sm-offset-3 col-sm-9">
-            <button type="submit" class="btn btn-success">Save</button>
+            <button type="submit" class="btn btn-success">{% trans %}Save{% endtrans %}</button>
         </div>
         </div>
     </div>
     </div>
 </form>
 </form>

+ 2 - 2
flaskbb/templates/user/general_settings.html

@@ -3,13 +3,13 @@
 
 
 {% block settings_content %}
 {% block settings_content %}
 <form class="form-horizontal" role="form" method="POST">
 <form class="form-horizontal" role="form" method="POST">
-    <legend class="">General Settings</legend>
+    <legend class="">{% trans %}General Settings{% endtrans %}</legend>
     {{ form.hidden_tag() }}
     {{ form.hidden_tag() }}
     {{ horizontal_field(form.theme) }}
     {{ horizontal_field(form.theme) }}
     {{ horizontal_field(form.language) }}
     {{ horizontal_field(form.language) }}
     <div class="form-group row">
     <div class="form-group row">
         <div class="col-sm-offset-3 col-sm-9">
         <div class="col-sm-offset-3 col-sm-9">
-            <button type="submit" class="btn btn-success">Save</button>
+            <button type="submit" class="btn btn-success">{% trans %}Save{% endtrans %}</button>
         </div>
         </div>
     </div>
     </div>
 </form>
 </form>

+ 17 - 17
flaskbb/templates/user/profile.html

@@ -1,15 +1,15 @@
 {% extends theme("layout.html") %}
 {% extends theme("layout.html") %}
 {% block content %}
 {% block content %}
 <ul class="breadcrumb">
 <ul class="breadcrumb">
-    <li><a href="{{ url_for('forum.index') }}">Forum</a></li>
+    <li><a href="{{ url_for('forum.index') }}">{% trans %}Forum{% endtrans %}</a></li>
     <li class="active">{{ user.username }}</li>
     <li class="active">{{ user.username }}</li>
 </ul>
 </ul>
 
 
 <table class="table table-bordered">
 <table class="table table-bordered">
     <thead>
     <thead>
       <th><a href="{{ user.url }}">{{ user.username }}</a></th>
       <th><a href="{{ user.url }}">{{ user.username }}</a></th>
-      <th>Info</th>
-      <th>User Stats</th>
+      <th>{% trans %}Info{% endtrans %}</th>
+      <th>{% trans %}User Stats{% endtrans %}</th>
     </thead>
     </thead>
     <tbody>
     <tbody>
         <tr>
         <tr>
@@ -25,8 +25,8 @@
                 {% else %}
                 {% else %}
                 <tr><td><span class="label label-default">Offline</span></td></tr>
                 <tr><td><span class="label label-default">Offline</span></td></tr>
                 {% endif %}
                 {% endif %}
-                <tr><td><a href="{{ url_for('user.view_all_topics', username=user.username) }}">All Topics</a></td></tr>
-                <tr><td><a href="{{ url_for('user.view_all_posts', username=user.username) }}">All Posts</a></td></tr>
+                <tr><td><a href="{{ url_for('user.view_all_topics', username=user.username) }}">{% trans %}All Topics{% endtrans %}</a></td></tr>
+                <tr><td><a href="{{ url_for('user.view_all_posts', username=user.username) }}">{% trans %}All Posts{% endtrans %}</a></td></tr>
               </tbody>
               </tbody>
             </table>
             </table>
           </td>
           </td>
@@ -37,7 +37,7 @@
                 {{ user.notes|markup }}
                 {{ user.notes|markup }}
                 {% endautoescape %}
                 {% endautoescape %}
             {% else %}
             {% else %}
-                User has not added any notes about him.
+                {% trans %}User has not added any notes about him.{% endtrans %}
             {% endif %}
             {% endif %}
           </td>
           </td>
 
 
@@ -45,37 +45,37 @@
             <table class="table table-borderless">
             <table class="table table-borderless">
               <tbody>
               <tbody>
                 <tr>
                 <tr>
-                  <td align="right">Group:</td>
+                  <td align="right">{% trans %}Group{% endtrans %}:</td>
                   <td>{{ user.primary_group.name }}</td>
                   <td>{{ user.primary_group.name }}</td>
                 </tr>
                 </tr>
                 <tr>
                 <tr>
-                  <td align="right">Joined:</td>
+                  <td align="right">{% trans %}Joined{% endtrans %}:</td>
                   <td>{{ user.date_joined|format_date('%b %d %Y') }}</td>
                   <td>{{ user.date_joined|format_date('%b %d %Y') }}</td>
                 </tr>
                 </tr>
                 <tr>
                 <tr>
-                  <td align="right">Posts:</td>
+                  <td align="right">{% trans %}Posts{% endtrans %}:</td>
                   <td>{{ user.post_count }} ({{ user.posts_per_day }} per day)</td>
                   <td>{{ user.post_count }} ({{ user.posts_per_day }} per day)</td>
                 </tr>
                 </tr>
                 <tr>
                 <tr>
-                  <td align="right">Last seen:</td>
-                  <td>{%- if user.lastseen -%} {{ user.lastseen|time_since }} {%- else -%} Never seen {%- endif -%}</td>
+                  <td align="right">{% trans %}Last seen{% endtrans %}:</td>
+                  <td>{%- if user.lastseen -%} {{ user.lastseen|time_since }} {%- else -%} {% trans %}Never seen{% endtrans %} {%- endif -%}</td>
                 </tr>
                 </tr>
                 <tr>
                 <tr>
-                  <td align="right">Last post:</td>
+                  <td align="right">{% trans %}Last post{% endtrans %}:</td>
                   <td>{%- if user.last_post -%}
                   <td>{%- if user.last_post -%}
                       <a href="{{ user.last_post.url }}">{{ user.last_post.date_created|time_since }}</a>
                       <a href="{{ user.last_post.url }}">{{ user.last_post.date_created|time_since }}</a>
                       {%- else -%}
                       {%- else -%}
-                        Never
+                        {% trans %}Never{% endtrans %}
                       {%- endif -%}
                       {%- endif -%}
                   </td>
                   </td>
                 </tr>
                 </tr>
                 <tr>
                 <tr>
-                  <td align="right">Location:</td>
-                  <td>{%- if user.location -%} {{ user.location }} {%- else -%} No Info {%- endif -%}</td>
+                  <td align="right">{% trans %}Location{% endtrans %}:</td>
+                  <td>{%- if user.location -%} {{ user.location }} {%- else -%} {% trans %}No Info{% endtrans %} {%- endif -%}</td>
                 </tr>
                 </tr>
                 <tr>
                 <tr>
-                  <td align="right">Birthday:</td>
-                  <td>{% if user.birthday %} {{ user.birthday|format_date('%b %d %Y') }} {% else %} No Info {% endif %} {% if user.gender %} ({{ user.gender }}) {% endif %}</td>
+                  <td align="right">{% trans %}Birthday{% endtrans %}:</td>
+                  <td>{% if user.birthday %} {{ user.birthday|format_date('%b %d %Y') }} {% else %} {% trans %}No Info{% endtrans %} {% endif %} {% if user.gender %} ({{ user.gender }}) {% endif %}</td>
                 </tr>
                 </tr>
               </tbody>
               </tbody>
             </table>
             </table>

+ 7 - 7
flaskbb/templates/user/settings_layout.html

@@ -3,20 +3,20 @@
 {%- from theme('macros.html') import navlink with context -%}
 {%- from theme('macros.html') import navlink with context -%}
 
 
 <ul class="breadcrumb">
 <ul class="breadcrumb">
-    <li><a href="{{ url_for('forum.index') }}">Forum</a></li>
+    <li><a href="{{ url_for('forum.index') }}">{% trans %}Forum{% endtrans %}</a></li>
     <li><a href="{{ current_user.url }}">{{ current_user.username }}</a></li>
     <li><a href="{{ current_user.url }}">{{ current_user.username }}</a></li>
-    <li class="active">Settings</li>
+    <li class="active">{% trans %}Settings{% endtrans %}</li>
 </ul>
 </ul>
 
 
 <div class="row">
 <div class="row">
     <div class="col-sm-3">
     <div class="col-sm-3">
         <div class="sidebar">
         <div class="sidebar">
             <ul class="nav sidenav">
             <ul class="nav sidenav">
-                <li class="nav-header">Account Settings</li>
-                {{ navlink('user.settings', 'General Settings') }}
-                {{ navlink('user.change_user_details', 'Change User Details') }}
-                {{ navlink('user.change_email', 'Change E-Mail Address') }}
-                {{ navlink('user.change_password', 'Change Password') }}
+                <li class="nav-header">{% trans %}Account Settings{% endtrans %}</li>
+                {{ navlink('user.settings', _('General Settings')) }}
+                {{ navlink('user.change_user_details', _('Change User Details')) }}
+                {{ navlink('user.change_email', _('Change E-Mail Address')) }}
+                {{ navlink('user.change_password', _('Change Password')) }}
             </ul>
             </ul>
         </div> <!--/.sidebar -->
         </div> <!--/.sidebar -->
     </div><!--/.col-sm-3 -->
     </div><!--/.col-sm-3 -->

+ 17 - 17
flaskbb/themes/bootstrap2/templates/layout.html

@@ -29,9 +29,9 @@
     <body>
     <body>
         <div id="wrap">
         <div id="wrap">
         {% block navigation %}
         {% block navigation %}
-        {%- from "macros.html" import topnav with context -%}
+        {%- from theme("macros.html") import topnav with context -%}
         <!-- Navigation -->
         <!-- Navigation -->
-            <nav class="navbar navbar-default navbar-inverse navbar-static-top">
+            <nav class="navbar navbar-default navbar-static-top">
                 <div class="container">
                 <div class="container">
                     <div class="navbar-header">
                     <div class="navbar-header">
                         <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
                         <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
@@ -44,14 +44,14 @@
                     </div>
                     </div>
                     <div class="collapse navbar-collapse navbar-ex1-collapse">
                     <div class="collapse navbar-collapse navbar-ex1-collapse">
                         <ul class="nav navbar-nav">
                         <ul class="nav navbar-nav">
-                            {{ emit_event("before-first-navigation-element") | safe }}
+                            {{ emit_event("before-first-navigation-element") }}
 
 
                             {# active_forum_nav is set in {forum, category, topic}.html and new_{topic, post}.html #}
                             {# active_forum_nav is set in {forum, category, topic}.html and new_{topic, post}.html #}
-                            {{ topnav(endpoint='forum.index', name='Forum', icon='fa fa-comment', active=active_forum_nav) }}
-                            {{ topnav(endpoint='forum.memberlist', name='Memberlist', icon='fa fa-user') }}
-                            {{ topnav(endpoint='forum.search', name='Search', icon='fa fa-search') }}
+                            {{ topnav(endpoint='forum.index', name=_('Forum'), icon='fa fa-comment', active=active_forum_nav) }}
+                            {{ topnav(endpoint='forum.memberlist', name=_('Memberlist'), icon='fa fa-user') }}
+                            {{ topnav(endpoint='forum.search', name=_('Search'), icon='fa fa-search') }}
 
 
-                            {{ emit_event("after-last-navigation-element") | safe }}
+                            {{ emit_event("after-last-navigation-element") }}
                         </ul>
                         </ul>
 
 
                     {% if current_user and current_user.is_authenticated() %}
                     {% if current_user and current_user.is_authenticated() %}
@@ -63,16 +63,16 @@
                                 <span class="caret"></span>
                                 <span class="caret"></span>
                             </button>
                             </button>
                             <ul class="dropdown-menu" role="menu">
                             <ul class="dropdown-menu" role="menu">
-                                <li><a href="{{ url_for('forum.topictracker') }}"><span class="fa fa-book"></span> Topic Tracker</a></li>
+                                <li><a href="{{ url_for('forum.topictracker') }}"><span class="fa fa-book"></span> {% trans %}Topic Tracker{% endtrans %}</a></li>
                                 <li class="divider"></li>
                                 <li class="divider"></li>
 
 
-                                <li><a href="{{ url_for('user.settings') }}"><span class="fa fa-cogs"></span> Settings</a></li>
+                                <li><a href="{{ url_for('user.settings') }}"><span class="fa fa-cogs"></span> {% trans %}Settings{% endtrans %}</a></li>
                                 {% if current_user|is_admin_or_moderator %}
                                 {% if current_user|is_admin_or_moderator %}
-                                <li><a href="{{ url_for('management.overview') }}"><span class="fa fa-cog"></span> Management</a></li>
+                                <li><a href="{{ url_for('management.overview') }}"><span class="fa fa-cog"></span> {% trans %}Management{% endtrans %}</a></li>
                                 <li class="divider"></li>
                                 <li class="divider"></li>
                                 {% endif %}
                                 {% endif %}
 
 
-                                <li><a href="{{ url_for('auth.logout') }}"><span class="fa fa-power-off"></span> Logout</a></li>
+                                <li><a href="{{ url_for('auth.logout') }}"><span class="fa fa-power-off"></span> {% trans %}Logout{% endtrans %}</a></li>
                             </ul>
                             </ul>
                         </div>
                         </div>
 
 
@@ -81,21 +81,21 @@
                                 <span class="fa fa-envelope"></span> <span class="badge">{{ current_user.pm_unread }}</span>
                                 <span class="fa fa-envelope"></span> <span class="badge">{{ current_user.pm_unread }}</span>
                             </button>
                             </button>
                             <ul class="dropdown-menu" role="menu">
                             <ul class="dropdown-menu" role="menu">
-                                <li><a href="{{ url_for('user.inbox') }}"><span class="fa fa-envelope"></span> Inbox</a></li>
-                                <li><a href="{{ url_for('user.new_message') }}"><span class="fa fa-pencil"></span> New Message</a></li>
+                                <li><a href="{{ url_for('user.inbox') }}"><span class="fa fa-envelope"></span> {% trans %}Inbox{% endtrans %}</a></li>
+                                <li><a href="{{ url_for('user.new_message') }}"><span class="fa fa-pencil"></span> {% trans %}New Message{% endtrans %}</a></li>
                             </ul>
                             </ul>
                         </div>
                         </div>
                     {% else %}
                     {% else %}
                         <div class="btn-group navbar-btn navbar-right">
                         <div class="btn-group navbar-btn navbar-right">
                             <a class="btn btn-primary" href="{{ url_for('auth.login') }}">
                             <a class="btn btn-primary" href="{{ url_for('auth.login') }}">
-                                <span class="fa fa-user"></span> Login
+                                <span class="fa fa-user"></span> {% trans %}Login{% endtrans %}
                             </a>
                             </a>
                             <button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown">
                             <button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown">
                                 <span class="caret"></span>
                                 <span class="caret"></span>
                             </button>
                             </button>
                             <ul class="dropdown-menu" role="menu">
                             <ul class="dropdown-menu" role="menu">
-                                <li><a href="{{ url_for('auth.register') }}">Register</a></li>
-                                <li><a href="{{ url_for('auth.forgot_password') }}">Reset Password</a></li>
+                                <li><a href="{{ url_for('auth.register') }}">{% trans %}Register{% endtrans %}</a></li>
+                                <li><a href="{{ url_for('auth.forgot_password') }}">{% trans %}Reset Password{% endtrans %}</a></li>
                             </ul>
                             </ul>
                         </div>
                         </div>
                     {% endif %}
                     {% endif %}
@@ -107,7 +107,7 @@
 
 
             <div class="container">
             <div class="container">
                 {% block messages %}
                 {% block messages %}
-                    {% include 'flashed_messages.html' %}
+                    {% include theme('flashed_messages.html') %}
                 {% endblock %}
                 {% endblock %}
 
 
                 {% block content %}
                 {% block content %}

+ 16 - 16
flaskbb/themes/bootstrap3/templates/layout.html

@@ -28,7 +28,7 @@
     <body>
     <body>
         <div id="wrap">
         <div id="wrap">
         {% block navigation %}
         {% block navigation %}
-        {%- from "macros.html" import topnav with context -%}
+        {%- from theme("macros.html") import topnav with context -%}
         <!-- Navigation -->
         <!-- Navigation -->
             <nav class="navbar navbar-default navbar-static-top">
             <nav class="navbar navbar-default navbar-static-top">
                 <div class="container">
                 <div class="container">
@@ -43,14 +43,14 @@
                     </div>
                     </div>
                     <div class="collapse navbar-collapse navbar-ex1-collapse">
                     <div class="collapse navbar-collapse navbar-ex1-collapse">
                         <ul class="nav navbar-nav">
                         <ul class="nav navbar-nav">
-                            {{ emit_event("before-first-navigation-element") | safe }}
+                            {{ emit_event("before-first-navigation-element") }}
 
 
                             {# active_forum_nav is set in {forum, category, topic}.html and new_{topic, post}.html #}
                             {# active_forum_nav is set in {forum, category, topic}.html and new_{topic, post}.html #}
-                            {{ topnav(endpoint='forum.index', name='Forum', icon='fa fa-comment', active=active_forum_nav) }}
-                            {{ topnav(endpoint='forum.memberlist', name='Memberlist', icon='fa fa-user') }}
-                            {{ topnav(endpoint='forum.search', name='Search', icon='fa fa-search') }}
+                            {{ topnav(endpoint='forum.index', name=_('Forum'), icon='fa fa-comment', active=active_forum_nav) }}
+                            {{ topnav(endpoint='forum.memberlist', name=_('Memberlist'), icon='fa fa-user') }}
+                            {{ topnav(endpoint='forum.search', name=_('Search'), icon='fa fa-search') }}
 
 
-                            {{ emit_event("after-last-navigation-element") | safe }}
+                            {{ emit_event("after-last-navigation-element") }}
                         </ul>
                         </ul>
 
 
                     {% if current_user and current_user.is_authenticated() %}
                     {% if current_user and current_user.is_authenticated() %}
@@ -62,16 +62,16 @@
                                 <span class="caret"></span>
                                 <span class="caret"></span>
                             </button>
                             </button>
                             <ul class="dropdown-menu" role="menu">
                             <ul class="dropdown-menu" role="menu">
-                                <li><a href="{{ url_for('forum.topictracker') }}"><span class="fa fa-book"></span> Topic Tracker</a></li>
+                                <li><a href="{{ url_for('forum.topictracker') }}"><span class="fa fa-book"></span> {% trans %}Topic Tracker{% endtrans %}</a></li>
                                 <li class="divider"></li>
                                 <li class="divider"></li>
 
 
-                                <li><a href="{{ url_for('user.settings') }}"><span class="fa fa-cogs"></span> Settings</a></li>
+                                <li><a href="{{ url_for('user.settings') }}"><span class="fa fa-cogs"></span> {% trans %}Settings{% endtrans %}</a></li>
                                 {% if current_user|is_admin_or_moderator %}
                                 {% if current_user|is_admin_or_moderator %}
-                                <li><a href="{{ url_for('management.overview') }}"><span class="fa fa-cog"></span> Management</a></li>
+                                <li><a href="{{ url_for('management.overview') }}"><span class="fa fa-cog"></span> {% trans %}Management{% endtrans %}</a></li>
                                 <li class="divider"></li>
                                 <li class="divider"></li>
                                 {% endif %}
                                 {% endif %}
 
 
-                                <li><a href="{{ url_for('auth.logout') }}"><span class="fa fa-power-off"></span> Logout</a></li>
+                                <li><a href="{{ url_for('auth.logout') }}"><span class="fa fa-power-off"></span> {% trans %}Logout{% endtrans %}</a></li>
                             </ul>
                             </ul>
                         </div>
                         </div>
 
 
@@ -80,21 +80,21 @@
                                 <span class="fa fa-envelope"></span> <span class="badge">{{ current_user.pm_unread }}</span>
                                 <span class="fa fa-envelope"></span> <span class="badge">{{ current_user.pm_unread }}</span>
                             </button>
                             </button>
                             <ul class="dropdown-menu" role="menu">
                             <ul class="dropdown-menu" role="menu">
-                                <li><a href="{{ url_for('user.inbox') }}"><span class="fa fa-envelope"></span> Inbox</a></li>
-                                <li><a href="{{ url_for('user.new_message') }}"><span class="fa fa-pencil"></span> New Message</a></li>
+                                <li><a href="{{ url_for('user.inbox') }}"><span class="fa fa-envelope"></span> {% trans %}Inbox{% endtrans %}</a></li>
+                                <li><a href="{{ url_for('user.new_message') }}"><span class="fa fa-pencil"></span> {% trans %}New Message{% endtrans %}</a></li>
                             </ul>
                             </ul>
                         </div>
                         </div>
                     {% else %}
                     {% else %}
                         <div class="btn-group navbar-btn navbar-right">
                         <div class="btn-group navbar-btn navbar-right">
                             <a class="btn btn-primary" href="{{ url_for('auth.login') }}">
                             <a class="btn btn-primary" href="{{ url_for('auth.login') }}">
-                                <span class="fa fa-user"></span> Login
+                                <span class="fa fa-user"></span> {% trans %}Login{% endtrans %}
                             </a>
                             </a>
                             <button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown">
                             <button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown">
                                 <span class="caret"></span>
                                 <span class="caret"></span>
                             </button>
                             </button>
                             <ul class="dropdown-menu" role="menu">
                             <ul class="dropdown-menu" role="menu">
-                                <li><a href="{{ url_for('auth.register') }}">Register</a></li>
-                                <li><a href="{{ url_for('auth.forgot_password') }}">Reset Password</a></li>
+                                <li><a href="{{ url_for('auth.register') }}">{% trans %}Register{% endtrans %}</a></li>
+                                <li><a href="{{ url_for('auth.forgot_password') }}">{% trans %}Reset Password{% endtrans %}</a></li>
                             </ul>
                             </ul>
                         </div>
                         </div>
                     {% endif %}
                     {% endif %}
@@ -106,7 +106,7 @@
 
 
             <div class="container">
             <div class="container">
                 {% block messages %}
                 {% block messages %}
-                    {% include 'flashed_messages.html' %}
+                    {% include theme('flashed_messages.html') %}
                 {% endblock %}
                 {% endblock %}
 
 
                 {% block content %}
                 {% block content %}

+ 1538 - 1
flaskbb/translations/en/LC_MESSAGES/messages.po

@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version:  0.1-dev\n"
 "Project-Id-Version:  0.1-dev\n"
 "Report-Msgid-Bugs-To: http://github.com/flaskbb/issues\n"
 "Report-Msgid-Bugs-To: http://github.com/flaskbb/issues\n"
-"POT-Creation-Date: 2015-01-03 20:37+0100\n"
+"POT-Creation-Date: 2015-01-04 12:23+0100\n"
 "PO-Revision-Date: 2015-01-03 13:45+0100\n"
 "PO-Revision-Date: 2015-01-03 13:45+0100\n"
 "Last-Translator: Peter Justin <sh4nks7@gmail.com>\n"
 "Last-Translator: Peter Justin <sh4nks7@gmail.com>\n"
 "Language-Team: FlaskBB Team\n"
 "Language-Team: FlaskBB Team\n"
@@ -17,6 +17,224 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Generated-By: Babel 1.3\n"
 "Generated-By: Babel 1.3\n"
 
 
+#: flaskbb/email.py:20
+msgid "Password Reset"
+msgstr ""
+
+#: flaskbb/auth/forms.py:23 flaskbb/management/forms.py:28
+msgid "You can only use letters, numbers or dashes"
+msgstr ""
+
+#: flaskbb/auth/forms.py:27
+msgid "Username or E-Mail"
+msgstr ""
+
+#: flaskbb/auth/forms.py:28
+msgid "You must provide an email adress or username"
+msgstr ""
+
+#: flaskbb/auth/forms.py:31 flaskbb/auth/forms.py:46 flaskbb/auth/forms.py:79
+#: flaskbb/auth/forms.py:96
+msgid "Password"
+msgstr ""
+
+#: flaskbb/auth/forms.py:32 flaskbb/auth/forms.py:47 flaskbb/user/forms.py:66
+#: flaskbb/user/forms.py:69 flaskbb/user/forms.py:72
+msgid "Password required"
+msgstr ""
+
+#: flaskbb/auth/forms.py:34
+msgid "Remember Me"
+msgstr ""
+
+#: flaskbb/auth/forms.py:38 flaskbb/management/forms.py:44
+#: flaskbb/templates/forum/memberlist.html:31
+#: flaskbb/templates/management/banned_users.html:41
+#: flaskbb/templates/management/users.html:41
+msgid "Username"
+msgstr ""
+
+#: flaskbb/auth/forms.py:39
+msgid "Username required"
+msgstr ""
+
+#: flaskbb/auth/forms.py:42 flaskbb/auth/forms.py:84 flaskbb/auth/forms.py:92
+#: flaskbb/management/forms.py:48
+msgid "E-Mail"
+msgstr ""
+
+#: flaskbb/auth/forms.py:43
+msgid "E-Mail required"
+msgstr ""
+
+#: flaskbb/auth/forms.py:44 flaskbb/user/forms.py:40 flaskbb/user/forms.py:44
+#: flaskbb/user/forms.py:48
+msgid "This E-Mail is invalid"
+msgstr ""
+
+#: flaskbb/auth/forms.py:49
+msgid "Confirm Password"
+msgstr ""
+
+#: flaskbb/auth/forms.py:50
+msgid "Confirm Password required"
+msgstr ""
+
+#: flaskbb/auth/forms.py:51 flaskbb/auth/forms.py:101 flaskbb/user/forms.py:73
+msgid "Passwords do not match"
+msgstr ""
+
+#: flaskbb/auth/forms.py:53
+msgid "I accept the Terms of Service"
+msgstr ""
+
+#: flaskbb/auth/forms.py:58 flaskbb/management/forms.py:103
+msgid "This username is taken"
+msgstr ""
+
+#: flaskbb/auth/forms.py:63 flaskbb/management/forms.py:117
+#: flaskbb/user/forms.py:61
+msgid "This email is taken"
+msgstr ""
+
+#: flaskbb/auth/forms.py:75
+msgid "Captcha"
+msgstr ""
+
+#: flaskbb/auth/forms.py:99
+msgid "Confirm password"
+msgstr ""
+
+#: flaskbb/auth/forms.py:106
+msgid "Wrong E-Mail."
+msgstr ""
+
+#: flaskbb/auth/views.py:45
+msgid "Wrong username or password"
+msgstr ""
+
+#: flaskbb/auth/views.py:60
+msgid "Reauthenticated"
+msgstr ""
+
+#: flaskbb/auth/views.py:96
+msgid "Thanks for registering"
+msgstr ""
+
+#: flaskbb/auth/views.py:118
+msgid "E-Mail sent! Please check your inbox."
+msgstr ""
+
+#: flaskbb/auth/views.py:121
+msgid ""
+"You have entered an username or email that is not linked                 "
+"with your account"
+msgstr ""
+
+#: flaskbb/auth/views.py:141
+msgid "Your password token is invalid."
+msgstr ""
+
+#: flaskbb/auth/views.py:145
+msgid "Your password is expired."
+msgstr ""
+
+#: flaskbb/auth/views.py:151
+msgid "Your password has been updated."
+msgstr ""
+
+#: flaskbb/forum/forms.py:22
+msgid "Quickreply"
+msgstr ""
+
+#: flaskbb/forum/forms.py:23 flaskbb/forum/forms.py:32
+#: flaskbb/forum/forms.py:50
+msgid "You cannot post a reply without content."
+msgstr ""
+
+#: flaskbb/forum/forms.py:31 flaskbb/forum/forms.py:49
+#: flaskbb/forum/forms.py:89
+msgid "Content"
+msgstr ""
+
+#: flaskbb/forum/forms.py:34 flaskbb/forum/forms.py:52
+msgid "Track this topic"
+msgstr ""
+
+#: flaskbb/forum/forms.py:46
+msgid "Topic Title"
+msgstr ""
+
+#: flaskbb/forum/forms.py:47
+msgid "A topic title is required"
+msgstr ""
+
+#: flaskbb/forum/forms.py:65 flaskbb/templates/management/reports.html:29
+#: flaskbb/templates/management/unread_reports.html:29
+msgid "Reason"
+msgstr ""
+
+#: flaskbb/forum/forms.py:66
+msgid "Please insert a reason why you want to report this post."
+msgstr ""
+
+#: flaskbb/forum/forms.py:76 flaskbb/templates/layout.html:51
+#: flaskbb/templates/forum/memberlist.html:21
+#: flaskbb/templates/forum/search_form.html:1
+#: flaskbb/templates/forum/search_form.html:9
+#: flaskbb/templates/forum/search_form.html:13
+#: flaskbb/templates/forum/search_form.html:21
+#: flaskbb/templates/management/banned_users.html:31
+#: flaskbb/templates/management/users.html:31
+#: flaskbb/themes/bootstrap2/templates/layout.html:52
+#: flaskbb/themes/bootstrap3/templates/layout.html:51
+msgid "Search"
+msgstr ""
+
+#: flaskbb/forum/forms.py:86
+msgid "Criteria"
+msgstr ""
+
+#: flaskbb/forum/forms.py:90
+msgid "Post"
+msgstr ""
+
+#: flaskbb/forum/forms.py:90 flaskbb/templates/forum/forum.html:50
+#: flaskbb/templates/forum/topictracker.html:28
+#: flaskbb/templates/management/reports.html:27
+#: flaskbb/templates/management/unread_reports.html:27
+#: flaskbb/templates/user/all_topics.html:26
+msgid "Topic"
+msgstr ""
+
+#: flaskbb/forum/forms.py:91 flaskbb/templates/layout.html:49
+#: flaskbb/templates/forum/category.html:8
+#: flaskbb/templates/forum/category_layout.html:11
+#: flaskbb/templates/forum/forum.html:9 flaskbb/templates/forum/index.html:5
+#: flaskbb/templates/forum/memberlist.html:8
+#: flaskbb/templates/forum/new_post.html:9
+#: flaskbb/templates/forum/new_topic.html:9
+#: flaskbb/templates/forum/search_form.html:8
+#: flaskbb/templates/forum/topic.html:9
+#: flaskbb/templates/forum/topictracker.html:9
+#: flaskbb/templates/management/forums.html:35
+#: flaskbb/templates/message/message_layout.html:6
+#: flaskbb/templates/user/all_posts.html:6
+#: flaskbb/templates/user/all_topics.html:6
+#: flaskbb/templates/user/profile.html:4
+#: flaskbb/templates/user/settings_layout.html:6
+#: flaskbb/themes/bootstrap2/templates/layout.html:50
+#: flaskbb/themes/bootstrap3/templates/layout.html:49
+msgid "Forum"
+msgstr ""
+
+#: flaskbb/forum/forms.py:91
+#: flaskbb/templates/management/management_layout.html:8
+#: flaskbb/templates/management/overview.html:29
+#: flaskbb/templates/management/users.html:1
+msgid "Users"
+msgstr ""
+
 #: flaskbb/forum/views.py:160
 #: flaskbb/forum/views.py:160
 msgid "You do not have the permissions to create a new topic."
 msgid "You do not have the permissions to create a new topic."
 msgstr ""
 msgstr ""
@@ -83,3 +301,1322 @@ msgstr ""
 msgid "Thanks for reporting!"
 msgid "Thanks for reporting!"
 msgstr ""
 msgstr ""
 
 
+#: flaskbb/management/forms.py:45 flaskbb/user/forms.py:104
+msgid "A username is required."
+msgstr ""
+
+#: flaskbb/management/forms.py:49
+msgid "A E-Mail address is required."
+msgstr ""
+
+#: flaskbb/management/forms.py:50
+msgid "This email is invalid"
+msgstr ""
+
+#: flaskbb/management/forms.py:55 flaskbb/templates/user/profile.html:77
+msgid "Birthday"
+msgstr ""
+
+#: flaskbb/management/forms.py:59 flaskbb/user/forms.py:81
+msgid "Gender"
+msgstr ""
+
+#: flaskbb/management/forms.py:61 flaskbb/user/forms.py:83
+msgid "Male"
+msgstr ""
+
+#: flaskbb/management/forms.py:62 flaskbb/user/forms.py:84
+msgid "Female"
+msgstr ""
+
+#: flaskbb/management/forms.py:64 flaskbb/templates/user/profile.html:73
+#: flaskbb/user/forms.py:86
+msgid "Location"
+msgstr ""
+
+#: flaskbb/management/forms.py:67 flaskbb/templates/forum/topic.html:109
+#: flaskbb/user/forms.py:89
+msgid "Website"
+msgstr ""
+
+#: flaskbb/management/forms.py:70 flaskbb/user/forms.py:92
+msgid "Avatar"
+msgstr ""
+
+#: flaskbb/management/forms.py:73 flaskbb/user/forms.py:95
+msgid "Forum Signature"
+msgstr ""
+
+#: flaskbb/management/forms.py:76 flaskbb/user/forms.py:98
+msgid "Notes"
+msgstr ""
+
+#: flaskbb/management/forms.py:80
+msgid "Primary Group"
+msgstr ""
+
+#: flaskbb/management/forms.py:85
+msgid "Secondary Groups"
+msgstr ""
+
+#: flaskbb/management/forms.py:136 flaskbb/templates/management/groups.html:25
+msgid "Group Name"
+msgstr ""
+
+#: flaskbb/management/forms.py:137
+msgid "Group name required"
+msgstr ""
+
+#: flaskbb/management/forms.py:139 flaskbb/management/forms.py:262
+#: flaskbb/management/forms.py:378 flaskbb/templates/management/groups.html:26
+msgid "Description"
+msgstr ""
+
+#: flaskbb/management/forms.py:143
+msgid "Is Admin Group?"
+msgstr ""
+
+#: flaskbb/management/forms.py:144
+msgid "With this option the group has access to the admin panel."
+msgstr ""
+
+#: flaskbb/management/forms.py:148
+msgid "Is Super Moderator Group?"
+msgstr ""
+
+#: flaskbb/management/forms.py:149
+msgid "Check this if the users in this group are allowed to moderate every forum"
+msgstr ""
+
+#: flaskbb/management/forms.py:153
+msgid "Is Moderator Group?"
+msgstr ""
+
+#: flaskbb/management/forms.py:154
+msgid ""
+"Check this if the users in this group are allowed to moderate specified "
+"forums"
+msgstr ""
+
+#: flaskbb/management/forms.py:158
+msgid "Is Banned Group?"
+msgstr ""
+
+#: flaskbb/management/forms.py:159
+msgid "Only one Banned group is allowed"
+msgstr ""
+
+#: flaskbb/management/forms.py:162
+msgid "Is Guest Group?"
+msgstr ""
+
+#: flaskbb/management/forms.py:163
+msgid "Only one Guest group is allowed"
+msgstr ""
+
+#: flaskbb/management/forms.py:166
+msgid "Can edit posts"
+msgstr ""
+
+#: flaskbb/management/forms.py:167
+msgid "Check this if the users in this group can edit posts"
+msgstr ""
+
+#: flaskbb/management/forms.py:170
+msgid "Can delete posts"
+msgstr ""
+
+#: flaskbb/management/forms.py:171
+msgid "Check this is the users in this group can delete posts"
+msgstr ""
+
+#: flaskbb/management/forms.py:174
+msgid "Can delete topics"
+msgstr ""
+
+#: flaskbb/management/forms.py:175
+msgid "Check this is the users in this group can delete topics"
+msgstr ""
+
+#: flaskbb/management/forms.py:178
+msgid "Can create topics"
+msgstr ""
+
+#: flaskbb/management/forms.py:179
+msgid "Check this is the users in this group can create topics"
+msgstr ""
+
+#: flaskbb/management/forms.py:182
+msgid "Can post replies"
+msgstr ""
+
+#: flaskbb/management/forms.py:183
+msgid "Check this is the users in this group can post replies"
+msgstr ""
+
+#: flaskbb/management/forms.py:187
+msgid "Moderators can edit user profiles"
+msgstr ""
+
+#: flaskbb/management/forms.py:188
+msgid ""
+"Allow moderators to edit a another users profile including password and "
+"email changes."
+msgstr ""
+
+#: flaskbb/management/forms.py:193
+msgid "Moderators can ban users"
+msgstr ""
+
+#: flaskbb/management/forms.py:194
+msgid "Allow moderators to ban other users"
+msgstr ""
+
+#: flaskbb/management/forms.py:209
+msgid "This name is taken"
+msgstr ""
+
+#: flaskbb/management/forms.py:223
+msgid "There is already a Banned group"
+msgstr ""
+
+#: flaskbb/management/forms.py:237
+msgid "There is already a Guest group"
+msgstr ""
+
+#: flaskbb/management/forms.py:257
+msgid "Forum Title"
+msgstr ""
+
+#: flaskbb/management/forms.py:258
+msgid "Forum title required"
+msgstr ""
+
+#: flaskbb/management/forms.py:264 flaskbb/management/forms.py:380
+msgid "You can format your description with BBCode."
+msgstr ""
+
+#: flaskbb/management/forms.py:268 flaskbb/management/forms.py:384
+msgid "Position"
+msgstr ""
+
+#: flaskbb/management/forms.py:270
+msgid "Forum position required"
+msgstr ""
+
+#: flaskbb/management/forms.py:274
+msgid "Category"
+msgstr ""
+
+#: flaskbb/management/forms.py:278
+msgid "The category that contains this forum."
+msgstr ""
+
+#: flaskbb/management/forms.py:282
+msgid "External link"
+msgstr ""
+
+#: flaskbb/management/forms.py:284
+msgid "A link to a website i.e. 'http://flaskbb.org'"
+msgstr ""
+
+#: flaskbb/management/forms.py:288
+#: flaskbb/templates/forum/category_layout.html:60
+msgid "Moderators"
+msgstr ""
+
+#: flaskbb/management/forms.py:289
+msgid ""
+"Comma seperated usernames. Leave it blank if you do not want to set any "
+"moderators."
+msgstr ""
+
+#: flaskbb/management/forms.py:294
+msgid "Show Moderators"
+msgstr ""
+
+#: flaskbb/management/forms.py:295
+msgid "Do you want show the moderators on the index page?"
+msgstr ""
+
+#: flaskbb/management/forms.py:299
+msgid "Locked?"
+msgstr ""
+
+#: flaskbb/management/forms.py:300
+msgid "Disable new posts and topics in this forum."
+msgstr ""
+
+#: flaskbb/management/forms.py:306
+msgid "You cannot convert a forum that contain topics in a external link"
+msgstr ""
+
+#: flaskbb/management/forms.py:311
+msgid "You also need to specify some moderators."
+msgstr ""
+
+#: flaskbb/management/forms.py:332
+#, python-format
+msgid "%(user)s is not in a moderators group"
+msgstr ""
+
+#: flaskbb/management/forms.py:338
+#, python-format
+msgid "User %(moderator)s not found"
+msgstr ""
+
+#: flaskbb/management/forms.py:374
+msgid "Category title"
+msgstr ""
+
+#: flaskbb/management/forms.py:375
+msgid "Category title required"
+msgstr ""
+
+#: flaskbb/management/forms.py:386
+msgid "Category position required"
+msgstr ""
+
+#: flaskbb/management/views.py:124
+msgid "You are not allowed to edit this user."
+msgstr ""
+
+#: flaskbb/management/views.py:144
+msgid "User successfully edited"
+msgstr ""
+
+#: flaskbb/management/views.py:148
+msgid "Edit User"
+msgstr ""
+
+#: flaskbb/management/views.py:156
+msgid "User successfully deleted"
+msgstr ""
+
+#: flaskbb/management/views.py:166
+msgid "User successfully added."
+msgstr ""
+
+#: flaskbb/management/views.py:170
+#: flaskbb/templates/management/banned_users.html:14
+#: flaskbb/templates/management/user_form.html:14
+#: flaskbb/templates/management/users.html:14
+msgid "Add User"
+msgstr ""
+
+#: flaskbb/management/views.py:199
+msgid "You do not have the permissions to ban this user."
+msgstr ""
+
+#: flaskbb/management/views.py:209
+msgid "A moderator cannot ban an admin user."
+msgstr ""
+
+#: flaskbb/management/views.py:213
+msgid "User was banned successfully."
+msgstr ""
+
+#: flaskbb/management/views.py:215
+msgid "Could not ban user."
+msgstr ""
+
+#: flaskbb/management/views.py:224
+msgid "You do not have the permissions to unban this user."
+msgstr ""
+
+#: flaskbb/management/views.py:231
+msgid "User is now unbanned."
+msgstr ""
+
+#: flaskbb/management/views.py:233
+msgid "Could not unban user."
+msgstr ""
+
+#: flaskbb/management/views.py:271
+#, python-format
+msgid "Report %(id)s is already marked as read"
+msgstr ""
+
+#: flaskbb/management/views.py:278
+#, python-format
+msgid "Report %(id)s marked as read"
+msgstr ""
+
+#: flaskbb/management/views.py:292
+msgid "All reports were marked as read"
+msgstr ""
+
+#: flaskbb/management/views.py:323
+msgid "Group successfully edited."
+msgstr ""
+
+#: flaskbb/management/views.py:327
+msgid "Edit Group"
+msgstr ""
+
+#: flaskbb/management/views.py:335
+msgid "Group successfully deleted."
+msgstr ""
+
+#: flaskbb/management/views.py:345
+msgid "Group successfully added."
+msgstr ""
+
+#: flaskbb/management/views.py:349
+#: flaskbb/templates/management/group_form.html:11
+#: flaskbb/templates/management/groups.html:10
+msgid "Add Group"
+msgstr ""
+
+#: flaskbb/management/views.py:370
+msgid "Forum successfully edited."
+msgstr ""
+
+#: flaskbb/management/views.py:381
+msgid "Edit Forum"
+msgstr ""
+
+#: flaskbb/management/views.py:394
+msgid "Forum successfully deleted."
+msgstr ""
+
+#: flaskbb/management/views.py:406
+msgid "Forum successfully added."
+msgstr ""
+
+#: flaskbb/management/views.py:414
+#: flaskbb/templates/management/category_form.html:11
+#: flaskbb/templates/management/forum_form.html:11
+#: flaskbb/templates/management/forums.html:10
+#: flaskbb/templates/management/forums.html:27
+msgid "Add Forum"
+msgstr ""
+
+#: flaskbb/management/views.py:424
+msgid "Category successfully created."
+msgstr ""
+
+#: flaskbb/management/views.py:428
+#: flaskbb/templates/management/category_form.html:12
+#: flaskbb/templates/management/forum_form.html:12
+#: flaskbb/templates/management/forums.html:11
+msgid "Add Category"
+msgstr ""
+
+#: flaskbb/management/views.py:443
+msgid "Edit Category"
+msgstr ""
+
+#: flaskbb/management/views.py:456
+msgid "Category with all associated forums deleted."
+msgstr ""
+
+#: flaskbb/management/views.py:482
+msgid "Plugin is enabled. Please reload your app."
+msgstr ""
+
+#: flaskbb/management/views.py:484
+msgid ""
+"If you are using a host which doesn't support writting on the disk, this "
+"won't work - than you need to delete the 'DISABLED' file by yourself."
+msgstr ""
+
+#: flaskbb/management/views.py:488
+msgid "Plugin is not enabled"
+msgstr ""
+
+#: flaskbb/management/views.py:499
+#, python-format
+msgid "Plugin %(plugin)s not found"
+msgstr ""
+
+#: flaskbb/management/views.py:511
+msgid "Plugin is disabled. Please reload your app."
+msgstr ""
+
+#: flaskbb/management/views.py:513
+msgid ""
+"If you are using a host which doesn't support writting on the disk, this "
+"won't work - than you need to create a 'DISABLED' file by yourself."
+msgstr ""
+
+#: flaskbb/management/views.py:528
+msgid "Plugin has been uninstalled."
+msgstr ""
+
+#: flaskbb/management/views.py:530
+msgid "Cannot uninstall Plugin"
+msgstr ""
+
+#: flaskbb/management/views.py:543
+msgid "Plugin has been installed."
+msgstr ""
+
+#: flaskbb/management/views.py:545
+msgid "Cannot install Plugin"
+msgstr ""
+
+#: flaskbb/templates/layout.html:50 flaskbb/templates/forum/memberlist.html:1
+#: flaskbb/templates/forum/memberlist.html:9
+#: flaskbb/themes/bootstrap2/templates/layout.html:51
+#: flaskbb/themes/bootstrap3/templates/layout.html:50
+msgid "Memberlist"
+msgstr ""
+
+#: flaskbb/templates/layout.html:65 flaskbb/templates/forum/topictracker.html:1
+#: flaskbb/templates/forum/topictracker.html:22
+#: flaskbb/themes/bootstrap2/templates/layout.html:66
+#: flaskbb/themes/bootstrap3/templates/layout.html:65
+msgid "Topic Tracker"
+msgstr ""
+
+#: flaskbb/templates/layout.html:68
+#: flaskbb/templates/management/management_layout.html:12
+#: flaskbb/templates/user/settings_layout.html:8
+#: flaskbb/themes/bootstrap2/templates/layout.html:69
+#: flaskbb/themes/bootstrap3/templates/layout.html:68
+msgid "Settings"
+msgstr ""
+
+#: flaskbb/templates/layout.html:70 flaskbb/templates/management/forums.html:36
+#: flaskbb/themes/bootstrap2/templates/layout.html:71
+#: flaskbb/themes/bootstrap3/templates/layout.html:70
+msgid "Management"
+msgstr ""
+
+#: flaskbb/templates/layout.html:74
+#: flaskbb/themes/bootstrap2/templates/layout.html:75
+#: flaskbb/themes/bootstrap3/templates/layout.html:74
+msgid "Logout"
+msgstr ""
+
+#: flaskbb/templates/layout.html:83 flaskbb/templates/message/inbox.html:1
+#: flaskbb/templates/message/message_layout.html:16
+#: flaskbb/themes/bootstrap2/templates/layout.html:84
+#: flaskbb/themes/bootstrap3/templates/layout.html:83
+msgid "Inbox"
+msgstr ""
+
+#: flaskbb/templates/layout.html:84
+#: flaskbb/themes/bootstrap2/templates/layout.html:85
+#: flaskbb/themes/bootstrap3/templates/layout.html:84
+msgid "New Message"
+msgstr ""
+
+#: flaskbb/templates/layout.html:90 flaskbb/templates/auth/login.html:1
+#: flaskbb/templates/auth/login.html:8 flaskbb/templates/auth/login.html:26
+#: flaskbb/themes/bootstrap2/templates/layout.html:91
+#: flaskbb/themes/bootstrap3/templates/layout.html:90
+msgid "Login"
+msgstr ""
+
+#: flaskbb/templates/layout.html:96 flaskbb/templates/auth/register.html:1
+#: flaskbb/templates/auth/register.html:8
+#: flaskbb/templates/auth/register.html:32
+#: flaskbb/themes/bootstrap2/templates/layout.html:97
+#: flaskbb/themes/bootstrap3/templates/layout.html:96
+msgid "Register"
+msgstr ""
+
+#: flaskbb/templates/layout.html:97
+#: flaskbb/templates/auth/forgot_password.html:1
+#: flaskbb/templates/auth/forgot_password.html:8
+#: flaskbb/templates/auth/forgot_password.html:15
+#: flaskbb/templates/auth/reset_password.html:1
+#: flaskbb/templates/auth/reset_password.html:8
+#: flaskbb/templates/auth/reset_password.html:18
+#: flaskbb/themes/bootstrap2/templates/layout.html:98
+#: flaskbb/themes/bootstrap3/templates/layout.html:97
+msgid "Reset Password"
+msgstr ""
+
+#: flaskbb/templates/macros.html:177
+msgid "Pages"
+msgstr ""
+
+#: flaskbb/templates/auth/reauth.html:1 flaskbb/templates/auth/reauth.html:9
+msgid "Refresh Login"
+msgstr ""
+
+#: flaskbb/templates/auth/reauth.html:12
+msgid "Sign in"
+msgstr ""
+
+#: flaskbb/templates/email/reset_password.html:1
+#, python-format
+msgid "Dear %(user)s,"
+msgstr ""
+
+#: flaskbb/templates/email/reset_password.html:2
+msgid "To reset your password click on the following link:"
+msgstr ""
+
+#: flaskbb/templates/email/reset_password.html:4
+msgid "Sincerely,"
+msgstr ""
+
+#: flaskbb/templates/email/reset_password.html:5
+msgid "The Administration"
+msgstr ""
+
+#: flaskbb/templates/errors/forbidden_page.html:1
+msgid "No Access - 403"
+msgstr ""
+
+#: flaskbb/templates/errors/forbidden_page.html:7
+msgid "Forbidden Page"
+msgstr ""
+
+#: flaskbb/templates/errors/forbidden_page.html:8
+msgid "You do not have the permission to view this page."
+msgstr ""
+
+#: flaskbb/templates/errors/forbidden_page.html:9
+#: flaskbb/templates/errors/page_not_found.html:9
+msgid "Back to the Forums"
+msgstr ""
+
+#: flaskbb/templates/errors/page_not_found.html:1
+msgid "Oh noes! 404"
+msgstr ""
+
+#: flaskbb/templates/errors/page_not_found.html:7
+msgid "Oops, Page not found!"
+msgstr ""
+
+#: flaskbb/templates/errors/page_not_found.html:8
+msgid "The page you were looking for does not exist."
+msgstr ""
+
+#: flaskbb/templates/errors/server_error.html:1
+msgid "Server Error - 500"
+msgstr ""
+
+#: flaskbb/templates/errors/server_error.html:7
+msgid "Server Error"
+msgstr ""
+
+#: flaskbb/templates/errors/server_error.html:8
+msgid "Something went wrong!"
+msgstr ""
+
+#: flaskbb/templates/forum/category_layout.html:12
+#: flaskbb/templates/management/overview.html:23
+msgid "Topics"
+msgstr ""
+
+#: flaskbb/templates/forum/category_layout.html:13
+#: flaskbb/templates/forum/forum.html:52
+#: flaskbb/templates/forum/memberlist.html:32
+#: flaskbb/templates/forum/topic.html:70
+#: flaskbb/templates/forum/topictracker.html:30
+#: flaskbb/templates/management/banned_users.html:42
+#: flaskbb/templates/management/overview.html:17
+#: flaskbb/templates/management/users.html:42
+#: flaskbb/templates/message/view_message.html:29
+#: flaskbb/templates/user/all_topics.html:28
+#: flaskbb/templates/user/profile.html:56
+msgid "Posts"
+msgstr ""
+
+#: flaskbb/templates/forum/category_layout.html:14
+#: flaskbb/templates/forum/forum.html:56
+#: flaskbb/templates/forum/topictracker.html:34
+#: flaskbb/templates/user/all_topics.html:32
+msgid "Last Post"
+msgstr ""
+
+#: flaskbb/templates/forum/forum.html:22
+#: flaskbb/templates/management/unread_reports.html:44
+msgid "Mark as Read"
+msgstr ""
+
+#: flaskbb/templates/forum/forum.html:27
+msgid "Locked"
+msgstr ""
+
+#: flaskbb/templates/forum/forum.html:31
+#: flaskbb/templates/forum/new_topic.html:1
+#: flaskbb/templates/forum/new_topic.html:11
+#: flaskbb/templates/forum/new_topic.html:16
+msgid "New Topic"
+msgstr ""
+
+#: flaskbb/templates/forum/forum.html:54
+#: flaskbb/templates/forum/topictracker.html:32
+#: flaskbb/templates/user/all_topics.html:30
+msgid "Views"
+msgstr ""
+
+#: flaskbb/templates/forum/forum.html:86 flaskbb/templates/forum/forum.html:105
+#: flaskbb/templates/forum/topic.html:35
+#: flaskbb/templates/forum/topictracker.html:52
+#: flaskbb/templates/forum/topictracker.html:70
+#: flaskbb/templates/management/plugins.html:30
+#: flaskbb/templates/user/all_topics.html:42
+#: flaskbb/templates/user/all_topics.html:60
+msgid "by"
+msgstr ""
+
+#: flaskbb/templates/forum/forum.html:117
+#: flaskbb/templates/forum/topictracker.html:82
+msgid "No Topics so far."
+msgstr ""
+
+#: flaskbb/templates/forum/index.html:17
+msgid "Board Statistics"
+msgstr ""
+
+#: flaskbb/templates/forum/index.html:18
+msgid "Who is online?"
+msgstr ""
+
+#: flaskbb/templates/forum/index.html:25
+msgid "Total number of registered users"
+msgstr ""
+
+#: flaskbb/templates/forum/index.html:26
+msgid "Total number of topics"
+msgstr ""
+
+#: flaskbb/templates/forum/index.html:27
+msgid "Total number of posts"
+msgstr ""
+
+#: flaskbb/templates/forum/index.html:30
+msgid "Newest registered user"
+msgstr ""
+
+#: flaskbb/templates/forum/index.html:30
+msgid "No users"
+msgstr ""
+
+#: flaskbb/templates/forum/index.html:31
+msgid "Registered users online"
+msgstr ""
+
+#: flaskbb/templates/forum/index.html:33
+msgid "Guests online"
+msgstr ""
+
+#: flaskbb/templates/forum/memberlist.html:33
+#: flaskbb/templates/management/banned_users.html:43
+#: flaskbb/templates/management/users.html:43
+msgid "Date registered"
+msgstr ""
+
+#: flaskbb/templates/forum/memberlist.html:34
+#: flaskbb/templates/management/banned_users.html:44
+#: flaskbb/templates/management/users.html:44
+#: flaskbb/templates/user/profile.html:48
+msgid "Group"
+msgstr ""
+
+#: flaskbb/templates/forum/new_post.html:1
+#: flaskbb/templates/forum/new_post.html:12
+#: flaskbb/templates/forum/new_post.html:17
+msgid "New Post"
+msgstr ""
+
+#: flaskbb/templates/forum/new_post.html:22
+#: flaskbb/templates/forum/new_post.html:35
+#: flaskbb/templates/forum/new_topic.html:21
+#: flaskbb/templates/forum/new_topic.html:35
+msgid "Preview"
+msgstr ""
+
+#: flaskbb/templates/forum/new_post.html:34
+#: flaskbb/templates/forum/topic.html:135
+#: flaskbb/templates/forum/topic.html:153
+#: flaskbb/templates/forum/topic_controls.html:48
+msgid "Reply"
+msgstr ""
+
+#: flaskbb/templates/forum/new_topic.html:34
+msgid "Post Topic"
+msgstr ""
+
+#: flaskbb/templates/forum/online_users.html:1
+#: flaskbb/templates/forum/online_users.html:10
+msgid "Online Users"
+msgstr ""
+
+#: flaskbb/templates/forum/report_post.html:1
+#: flaskbb/templates/forum/report_post.html:13
+msgid "Report Post"
+msgstr ""
+
+#: flaskbb/templates/forum/report_post.html:17
+#: flaskbb/templates/forum/topic.html:116
+msgid "Report"
+msgstr ""
+
+#: flaskbb/templates/forum/report_post.html:18
+msgid "Close"
+msgstr ""
+
+#: flaskbb/templates/forum/topic.html:2
+#, python-format
+msgid "%(title)s - Topic"
+msgstr ""
+
+#: flaskbb/templates/forum/topic.html:35
+msgid "Last modified"
+msgstr ""
+
+#: flaskbb/templates/forum/topic.html:71
+#: flaskbb/templates/message/view_message.html:30
+msgid "Registered since"
+msgstr ""
+
+#: flaskbb/templates/forum/topic.html:77
+msgid "Guest"
+msgstr ""
+
+#: flaskbb/templates/forum/topic.html:106
+msgid "PM"
+msgstr ""
+
+#: flaskbb/templates/forum/topic.html:120
+#: flaskbb/templates/management/forums.html:28
+#: flaskbb/templates/management/forums.html:56
+#: flaskbb/templates/management/groups.html:37
+#: flaskbb/templates/management/users.html:58
+#: flaskbb/templates/message/drafts.html:21
+msgid "Edit"
+msgstr ""
+
+#: flaskbb/templates/forum/topic.html:124
+#: flaskbb/templates/forum/topic.html:128
+#: flaskbb/templates/management/forums.html:29
+#: flaskbb/templates/management/forums.html:57
+#: flaskbb/templates/management/groups.html:38
+#: flaskbb/templates/management/users.html:70
+#: flaskbb/templates/message/drafts.html:22
+#: flaskbb/templates/message/inbox.html:28
+#: flaskbb/templates/message/sent.html:24
+#: flaskbb/templates/message/trash.html:22
+msgid "Delete"
+msgstr ""
+
+#: flaskbb/templates/forum/topic.html:133
+msgid "Quote"
+msgstr ""
+
+#: flaskbb/templates/forum/topic_controls.html:9
+msgid "Delete Topic"
+msgstr ""
+
+#: flaskbb/templates/forum/topic_controls.html:15
+msgid "Lock Topic"
+msgstr ""
+
+#: flaskbb/templates/forum/topic_controls.html:19
+msgid "Unlock Topic"
+msgstr ""
+
+#: flaskbb/templates/forum/topic_controls.html:24
+msgid "Highlight Topic"
+msgstr ""
+
+#: flaskbb/templates/forum/topic_controls.html:28
+msgid "Trivialize Topic"
+msgstr ""
+
+#: flaskbb/templates/forum/topic_controls.html:38
+msgid "Untrack Topic"
+msgstr ""
+
+#: flaskbb/templates/forum/topic_controls.html:42
+msgid "Track Topic"
+msgstr ""
+
+#: flaskbb/templates/forum/topictracker.html:10
+msgid "Tracked Topics"
+msgstr ""
+
+#: flaskbb/templates/management/banned_users.html:1
+#: flaskbb/templates/management/banned_users.html:11
+#: flaskbb/templates/management/banned_users.html:20
+#: flaskbb/templates/management/user_form.html:11
+#: flaskbb/templates/management/users.html:11
+msgid "Banned Users"
+msgstr ""
+
+#: flaskbb/templates/management/banned_users.html:10
+#: flaskbb/templates/management/user_form.html:10
+#: flaskbb/templates/management/users.html:10
+#: flaskbb/templates/management/users.html:20
+msgid "Manage Users"
+msgstr ""
+
+#: flaskbb/templates/management/banned_users.html:45
+#: flaskbb/templates/management/groups.html:27
+#: flaskbb/templates/management/plugins.html:14
+#: flaskbb/templates/management/users.html:45
+msgid "Manage"
+msgstr ""
+
+#: flaskbb/templates/management/banned_users.html:58
+#: flaskbb/templates/management/users.html:66
+msgid "Unban"
+msgstr ""
+
+#: flaskbb/templates/management/banned_users.html:65
+#: flaskbb/templates/management/users.html:77
+msgid "No users found matching your search query"
+msgstr ""
+
+#: flaskbb/templates/management/category_form.html:10
+#: flaskbb/templates/management/forum_form.html:10
+#: flaskbb/templates/management/forums.html:9
+#: flaskbb/templates/management/forums.html:17
+msgid "Manage Forums"
+msgstr ""
+
+#: flaskbb/templates/management/category_form.html:27
+#: flaskbb/templates/management/forum_form.html:35
+#: flaskbb/templates/management/group_form.html:41
+#: flaskbb/templates/management/settings.html:39
+#: flaskbb/templates/management/user_form.html:39
+#: flaskbb/templates/user/change_email.html:14
+#: flaskbb/templates/user/change_password.html:14
+#: flaskbb/templates/user/change_user_details.html:18
+#: flaskbb/templates/user/general_settings.html:12
+msgid "Save"
+msgstr ""
+
+#: flaskbb/templates/management/forums.html:1
+#: flaskbb/templates/management/management_layout.html:14
+msgid "Forums"
+msgstr ""
+
+#: flaskbb/templates/management/group_form.html:10
+#: flaskbb/templates/management/groups.html:9
+#: flaskbb/templates/management/groups.html:15
+msgid "Manage Groups"
+msgstr ""
+
+#: flaskbb/templates/management/groups.html:1
+#: flaskbb/templates/management/management_layout.html:13
+msgid "Groups"
+msgstr ""
+
+#: flaskbb/templates/management/management_layout.html:7
+#: flaskbb/templates/management/overview.html:1
+msgid "Overview"
+msgstr ""
+
+#: flaskbb/templates/management/management_layout.html:9
+#: flaskbb/templates/management/reports.html:1
+msgid "Reports"
+msgstr ""
+
+#: flaskbb/templates/management/management_layout.html:15
+#: flaskbb/templates/management/plugins.html:1
+msgid "Plugins"
+msgstr ""
+
+#: flaskbb/templates/management/overview.html:10
+msgid "Global Statistics"
+msgstr ""
+
+#: flaskbb/templates/management/overview.html:15
+msgid "FlaskBB Version"
+msgstr ""
+
+#: flaskbb/templates/management/overview.html:21
+msgid "Python Version"
+msgstr ""
+
+#: flaskbb/templates/management/overview.html:27
+msgid "Flask Version"
+msgstr ""
+
+#: flaskbb/templates/management/plugins.html:7
+msgid "Manage Plugins"
+msgstr ""
+
+#: flaskbb/templates/management/plugins.html:12
+msgid "Plugin"
+msgstr ""
+
+#: flaskbb/templates/management/plugins.html:13
+msgid "Information"
+msgstr ""
+
+#: flaskbb/templates/management/plugins.html:28
+msgid "Version"
+msgstr ""
+
+#: flaskbb/templates/management/plugins.html:34
+msgid "Enable"
+msgstr ""
+
+#: flaskbb/templates/management/plugins.html:36
+msgid "Disable"
+msgstr ""
+
+#: flaskbb/templates/management/plugins.html:42
+msgid "Install"
+msgstr ""
+
+#: flaskbb/templates/management/plugins.html:45
+msgid "Uninstall"
+msgstr ""
+
+#: flaskbb/templates/management/reports.html:10
+#: flaskbb/templates/management/unread_reports.html:10
+msgid "Show unread reports"
+msgstr ""
+
+#: flaskbb/templates/management/reports.html:11
+#: flaskbb/templates/management/unread_reports.html:11
+msgid "Show all reports"
+msgstr ""
+
+#: flaskbb/templates/management/reports.html:16
+msgid "All Reports"
+msgstr ""
+
+#: flaskbb/templates/management/reports.html:26
+#: flaskbb/templates/management/unread_reports.html:26
+msgid "Poster"
+msgstr ""
+
+#: flaskbb/templates/management/reports.html:28
+#: flaskbb/templates/management/unread_reports.html:28
+msgid "Reporter"
+msgstr ""
+
+#: flaskbb/templates/management/reports.html:30
+#: flaskbb/templates/management/unread_reports.html:30
+msgid "Reported"
+msgstr ""
+
+#: flaskbb/templates/management/reports.html:45
+msgid "No reports."
+msgstr ""
+
+#: flaskbb/templates/management/unread_reports.html:1
+#: flaskbb/templates/management/unread_reports.html:16
+msgid "Unread Reports"
+msgstr ""
+
+#: flaskbb/templates/management/unread_reports.html:31
+msgid "Mark all as Read"
+msgstr ""
+
+#: flaskbb/templates/management/unread_reports.html:49
+msgid "No unread reports."
+msgstr ""
+
+#: flaskbb/templates/management/users.html:62
+msgid "Ban"
+msgstr ""
+
+#: flaskbb/templates/message/drafts.html:1
+#: flaskbb/templates/message/message_layout.html:18
+msgid "Drafts"
+msgstr ""
+
+#: flaskbb/templates/message/drafts.html:8
+#: flaskbb/templates/message/sent.html:8 flaskbb/templates/message/trash.html:8
+msgid "To"
+msgstr ""
+
+#: flaskbb/templates/message/drafts.html:9
+#: flaskbb/templates/message/inbox.html:9 flaskbb/templates/message/sent.html:9
+#: flaskbb/templates/message/trash.html:9 flaskbb/user/forms.py:105
+msgid "Subject"
+msgstr ""
+
+#: flaskbb/templates/message/drafts.html:10
+#: flaskbb/templates/message/inbox.html:10
+#: flaskbb/templates/message/sent.html:10
+#: flaskbb/templates/message/trash.html:10
+msgid "Date"
+msgstr ""
+
+#: flaskbb/templates/message/drafts.html:11
+#: flaskbb/templates/message/inbox.html:11
+#: flaskbb/templates/message/message_layout.html:15
+#: flaskbb/templates/message/sent.html:11
+#: flaskbb/templates/message/trash.html:11
+msgid "Options"
+msgstr ""
+
+#: flaskbb/templates/message/drafts.html:18
+#: flaskbb/templates/message/trash.html:18
+msgid "No Subject"
+msgstr ""
+
+#: flaskbb/templates/message/drafts.html:28
+#: flaskbb/templates/message/inbox.html:33
+#: flaskbb/templates/message/sent.html:29
+#: flaskbb/templates/message/trash.html:28
+msgid "This message folder is empty."
+msgstr ""
+
+#: flaskbb/templates/message/inbox.html:8
+msgid "From"
+msgstr ""
+
+#: flaskbb/templates/message/inbox.html:20
+#: flaskbb/templates/message/sent.html:20
+#: flaskbb/templates/message/view_message.html:33
+msgid "deleted"
+msgstr ""
+
+#: flaskbb/templates/message/message_form.html:16
+msgid "Send Message"
+msgstr ""
+
+#: flaskbb/templates/message/message_form.html:17
+msgid "Save as Draft"
+msgstr ""
+
+#: flaskbb/templates/message/message_layout.html:8
+msgid "Private Message"
+msgstr ""
+
+#: flaskbb/templates/message/message_layout.html:15
+msgid "New PM"
+msgstr ""
+
+#: flaskbb/templates/message/message_layout.html:17
+msgid "Sent"
+msgstr ""
+
+#: flaskbb/templates/message/message_layout.html:19
+#: flaskbb/templates/message/trash.html:1
+msgid "Trash"
+msgstr ""
+
+#: flaskbb/templates/message/sent.html:1
+msgid "Sent Messages"
+msgstr ""
+
+#: flaskbb/templates/message/trash.html:17
+msgid "No User"
+msgstr ""
+
+#: flaskbb/templates/message/trash.html:21
+msgid "Restore"
+msgstr ""
+
+#: flaskbb/templates/message/view_message.html:49
+msgid "No Message"
+msgstr ""
+
+#: flaskbb/templates/user/all_posts.html:8
+#: flaskbb/templates/user/profile.html:29
+msgid "All Posts"
+msgstr ""
+
+#: flaskbb/templates/user/all_topics.html:8
+#: flaskbb/templates/user/profile.html:28
+msgid "All Topics"
+msgstr ""
+
+#: flaskbb/templates/user/all_topics.html:20
+msgid "All Topics created by"
+msgstr ""
+
+#: flaskbb/templates/user/change_email.html:6
+msgid "Change E-Mail Adress"
+msgstr ""
+
+#: flaskbb/templates/user/change_password.html:6
+#: flaskbb/templates/user/settings_layout.html:19
+msgid "Change Password"
+msgstr ""
+
+#: flaskbb/templates/user/change_user_details.html:6
+#: flaskbb/templates/user/settings_layout.html:17
+msgid "Change User Details"
+msgstr ""
+
+#: flaskbb/templates/user/general_settings.html:6
+#: flaskbb/templates/user/settings_layout.html:16
+msgid "General Settings"
+msgstr ""
+
+#: flaskbb/templates/user/profile.html:11
+msgid "Info"
+msgstr ""
+
+#: flaskbb/templates/user/profile.html:12
+msgid "User Stats"
+msgstr ""
+
+#: flaskbb/templates/user/profile.html:40
+msgid "User has not added any notes about him."
+msgstr ""
+
+#: flaskbb/templates/user/profile.html:52
+msgid "Joined"
+msgstr ""
+
+#: flaskbb/templates/user/profile.html:60
+msgid "Last seen"
+msgstr ""
+
+#: flaskbb/templates/user/profile.html:61
+msgid "Never seen"
+msgstr ""
+
+#: flaskbb/templates/user/profile.html:64
+msgid "Last post"
+msgstr ""
+
+#: flaskbb/templates/user/profile.html:68
+msgid "Never"
+msgstr ""
+
+#: flaskbb/templates/user/profile.html:74
+#: flaskbb/templates/user/profile.html:78
+msgid "No Info"
+msgstr ""
+
+#: flaskbb/templates/user/settings_layout.html:15
+msgid "Account Settings"
+msgstr ""
+
+#: flaskbb/templates/user/settings_layout.html:18
+msgid "Change E-Mail Address"
+msgstr ""
+
+#: flaskbb/user/forms.py:27
+msgid "Only jpg, jpeg, png and gifs are allowed!"
+msgstr ""
+
+#: flaskbb/user/forms.py:33
+msgid "Language"
+msgstr ""
+
+#: flaskbb/user/forms.py:34
+msgid "Theme"
+msgstr ""
+
+#: flaskbb/user/forms.py:38
+msgid "Old E-Mail Address"
+msgstr ""
+
+#: flaskbb/user/forms.py:39 flaskbb/user/forms.py:43
+msgid "E-Mail address required"
+msgstr ""
+
+#: flaskbb/user/forms.py:42
+msgid "New E-Mail Address"
+msgstr ""
+
+#: flaskbb/user/forms.py:46
+msgid "Confirm E-Mail Address"
+msgstr ""
+
+#: flaskbb/user/forms.py:47
+msgid "E-Mail adress required"
+msgstr ""
+
+#: flaskbb/user/forms.py:49
+msgid "E-Mails do not match"
+msgstr ""
+
+#: flaskbb/user/forms.py:65
+msgid "Old Password"
+msgstr ""
+
+#: flaskbb/user/forms.py:68
+msgid "New Password"
+msgstr ""
+
+#: flaskbb/user/forms.py:71
+msgid "Confirm New Password"
+msgstr ""
+
+#: flaskbb/user/forms.py:78
+msgid "Your Birthday"
+msgstr ""
+
+#: flaskbb/user/forms.py:103
+msgid "To User"
+msgstr ""
+
+#: flaskbb/user/forms.py:106
+msgid "A subject is required."
+msgstr ""
+
+#: flaskbb/user/forms.py:107
+msgid "Message"
+msgstr ""
+
+#: flaskbb/user/forms.py:108
+msgid "A message is required."
+msgstr ""
+
+#: flaskbb/user/forms.py:113
+msgid "The username you entered doesn't exist"
+msgstr ""
+
+#: flaskbb/user/forms.py:115
+msgid "You cannot send a PM to yourself."
+msgstr ""
+
+#: flaskbb/user/views.py:69
+msgid "Your settings have been updated!"
+msgstr ""
+
+#: flaskbb/user/views.py:85
+msgid "Your password have been updated!"
+msgstr ""
+
+#: flaskbb/user/views.py:97
+msgid "Your email have been updated!"
+msgstr ""
+
+#: flaskbb/user/views.py:110
+msgid "Your details have been updated!"
+msgstr ""
+
+#: flaskbb/user/views.py:183 flaskbb/user/views.py:230
+msgid "Message saved!"
+msgstr ""
+
+#: flaskbb/user/views.py:201 flaskbb/user/views.py:247
+msgid "Message sent!"
+msgstr ""
+
+#: flaskbb/user/views.py:207
+msgid "Compose Message"
+msgstr ""
+
+#: flaskbb/user/views.py:216
+msgid "You cannot edit a sent message"
+msgstr ""
+
+#: flaskbb/user/views.py:255
+msgid "Edit Message"
+msgstr ""
+
+#: flaskbb/user/views.py:264
+msgid "Message moved to Trash!"
+msgstr ""
+
+#: flaskbb/user/views.py:274
+msgid "Message restored from Trash!"
+msgstr ""
+
+#: flaskbb/user/views.py:283
+msgid "Message deleted!"
+msgstr ""
+
+#~ msgid "Email adress required"
+#~ msgstr ""
+
+#~ msgid "Accept Terms of Service"
+#~ msgstr ""
+
+#~ msgid "%(title) - Topic"
+#~ msgstr ""
+

+ 39 - 38
flaskbb/user/forms.py

@@ -14,6 +14,7 @@ from wtforms import (StringField, PasswordField, DateField, TextAreaField,
                      SelectField, ValidationError)
                      SelectField, ValidationError)
 from wtforms.validators import (Length, DataRequired, Email, EqualTo, regexp,
 from wtforms.validators import (Length, DataRequired, Email, EqualTo, regexp,
                                 Optional, URL)
                                 Optional, URL)
+from flask.ext.babel import lazy_gettext as _
 
 
 from flaskbb.user.models import User, PrivateMessage
 from flaskbb.user.models import User, PrivateMessage
 from flaskbb.extensions import db
 from flaskbb.extensions import db
@@ -23,29 +24,29 @@ from flaskbb.utils.widgets import SelectDateWidget
 IMG_RE = r'^[^/\\]\.(?:jpg|gif|png)'
 IMG_RE = r'^[^/\\]\.(?:jpg|gif|png)'
 
 
 is_image = regexp(IMG_RE,
 is_image = regexp(IMG_RE,
-                  message=("Only jpg, jpeg, png and gifs are allowed!"))
+                  message=_("Only jpg, jpeg, png and gifs are allowed!"))
 
 
 
 
 class GeneralSettingsForm(Form):
 class GeneralSettingsForm(Form):
     # The choices for those fields will be generated in the user view
     # The choices for those fields will be generated in the user view
     # because we cannot access the current_app outside of the context
     # because we cannot access the current_app outside of the context
-    language = SelectField("Language")
-    theme = SelectField("Theme")
+    language = SelectField(_("Language"))
+    theme = SelectField(_("Theme"))
 
 
 
 
 class ChangeEmailForm(Form):
 class ChangeEmailForm(Form):
-    old_email = StringField("Old E-Mail Address", validators=[
-        DataRequired(message="Email address required"),
-        Email(message="This email is invalid")])
+    old_email = StringField(_("Old E-Mail Address"), validators=[
+        DataRequired(message=_("E-Mail address required")),
+        Email(message=_("This E-Mail is invalid"))])
 
 
-    new_email = StringField("New E-Mail Address", validators=[
-        DataRequired(message="Email address required"),
-        Email(message="This email is invalid")])
+    new_email = StringField(_("New E-Mail Address"), validators=[
+        DataRequired(message=_("E-Mail address required")),
+        Email(message=_("This E-Mail is invalid"))])
 
 
-    confirm_new_email = StringField("Confirm E-Mail Address", validators=[
-        DataRequired(message="Email adress required"),
-        Email(message="This email is invalid"),
-        EqualTo("new_email", message="E-Mails do not match")])
+    confirm_new_email = StringField(_("Confirm E-Mail Address"), validators=[
+        DataRequired(message=_("E-Mail adress required")),
+        Email(message=_("This E-Mail is invalid")),
+        EqualTo("new_email", message=_("E-Mails do not match"))])
 
 
     def __init__(self, user, *args, **kwargs):
     def __init__(self, user, *args, **kwargs):
         self.user = user
         self.user = user
@@ -57,61 +58,61 @@ class ChangeEmailForm(Form):
                                  User.email.like(field.data),
                                  User.email.like(field.data),
                                  db.not_(User.id == self.user.id))).first()
                                  db.not_(User.id == self.user.id))).first()
         if user:
         if user:
-            raise ValidationError("This email is taken")
+            raise ValidationError(_("This email is taken"))
 
 
 
 
 class ChangePasswordForm(Form):
 class ChangePasswordForm(Form):
-    old_password = PasswordField("Old Password", validators=[
-        DataRequired(message="Password required")])
+    old_password = PasswordField(_("Old Password"), validators=[
+        DataRequired(message=_("Password required"))])
 
 
-    new_password = PasswordField("New Password", validators=[
-        DataRequired(message="Password required")])
+    new_password = PasswordField(_("New Password"), validators=[
+        DataRequired(message=_("Password required"))])
 
 
-    confirm_new_password = PasswordField("Confirm New Password", validators=[
-        DataRequired(message="Password required"),
-        EqualTo("new_password", message="Passwords do not match")])
+    confirm_new_password = PasswordField(_("Confirm New Password"), validators=[
+        DataRequired(message=_("Password required")),
+        EqualTo("new_password", message=_("Passwords do not match"))])
 
 
 
 
 class ChangeUserDetailsForm(Form):
 class ChangeUserDetailsForm(Form):
     # TODO: Better birthday field
     # TODO: Better birthday field
-    birthday = DateField("Your Birthday", format="%d %m %Y",
+    birthday = DateField(_("Your Birthday"), format="%d %m %Y",
                          widget=SelectDateWidget(), validators=[Optional()])
                          widget=SelectDateWidget(), validators=[Optional()])
 
 
-    gender = SelectField("Gender", default="None", choices=[
+    gender = SelectField(_("Gender"), default="None", choices=[
         ("None", ""),
         ("None", ""),
-        ("Male", "Male"),
-        ("Female", "Female")])
+        ("Male", _("Male")),
+        ("Female", _("Female"))])
 
 
-    location = StringField("Location", validators=[
+    location = StringField(_("Location"), validators=[
         Optional()])
         Optional()])
 
 
-    website = StringField("Website", validators=[
+    website = StringField(_("Website"), validators=[
         Optional(), URL()])
         Optional(), URL()])
 
 
-    avatar = StringField("Avatar", validators=[
+    avatar = StringField(_("Avatar"), validators=[
         Optional(), URL()])
         Optional(), URL()])
 
 
-    signature = TextAreaField("Forum Signature", validators=[
+    signature = TextAreaField(_("Forum Signature"), validators=[
         Optional()])
         Optional()])
 
 
-    notes = TextAreaField("Notes", validators=[
+    notes = TextAreaField(_("Notes"), validators=[
         Optional(), Length(min=0, max=5000)])
         Optional(), Length(min=0, max=5000)])
 
 
 
 
 class NewMessageForm(Form):
 class NewMessageForm(Form):
-    to_user = StringField("To User", validators=[
-        DataRequired(message="A username is required.")])
-    subject = StringField("Subject", validators=[
-        DataRequired(message="A subject is required.")])
-    message = TextAreaField("Message", validators=[
-        DataRequired(message="A message is required.")])
+    to_user = StringField(_("To User"), validators=[
+        DataRequired(message=_("A username is required."))])
+    subject = StringField(_("Subject"), validators=[
+        DataRequired(message=_("A subject is required."))])
+    message = TextAreaField(_("Message"), validators=[
+        DataRequired(message=_("A message is required."))])
 
 
     def validate_to_user(self, field):
     def validate_to_user(self, field):
         user = User.query.filter_by(username=field.data).first()
         user = User.query.filter_by(username=field.data).first()
         if not user:
         if not user:
-            raise ValidationError("The username you entered doesn't exist")
+            raise ValidationError(_("The username you entered doesn't exist"))
         if user.id == current_user.id:
         if user.id == current_user.id:
-            raise ValidationError("You cannot send a PM to yourself.")
+            raise ValidationError(_("You cannot send a PM to yourself."))
 
 
     def save(self, from_user, to_user, user_id, unread, as_draft=False):
     def save(self, from_user, to_user, user_id, unread, as_draft=False):
         message = PrivateMessage(
         message = PrivateMessage(

+ 15 - 14
flaskbb/user/views.py

@@ -14,6 +14,7 @@ from datetime import datetime
 from flask import Blueprint, flash, request, redirect, url_for
 from flask import Blueprint, flash, request, redirect, url_for
 from flask.ext.login import login_required, current_user
 from flask.ext.login import login_required, current_user
 from flask.ext.themes2 import get_themes_list
 from flask.ext.themes2 import get_themes_list
+from flask.ext.babel import gettext as _
 
 
 from flaskbb.extensions import db, babel
 from flaskbb.extensions import db, babel
 from flaskbb.utils.helpers import render_template
 from flaskbb.utils.helpers import render_template
@@ -65,7 +66,7 @@ def settings():
         current_user.language = form.language.data
         current_user.language = form.language.data
         current_user.save()
         current_user.save()
 
 
-        flash("Your settings have been updated!", "success")
+        flash(_("Your settings have been updated!"), "success")
     else:
     else:
         form.theme.data = current_user.theme
         form.theme.data = current_user.theme
         form.theme.data = current_user.language
         form.theme.data = current_user.language
@@ -81,7 +82,7 @@ def change_password():
         current_user.password = form.new_password.data
         current_user.password = form.new_password.data
         current_user.save()
         current_user.save()
 
 
-        flash("Your password have been updated!", "success")
+        flash(_("Your password have been updated!"), "success")
     return render_template("user/change_password.html", form=form)
     return render_template("user/change_password.html", form=form)
 
 
 
 
@@ -93,7 +94,7 @@ def change_email():
         current_user.email = form.new_email.data
         current_user.email = form.new_email.data
         current_user.save()
         current_user.save()
 
 
-        flash("Your email have been updated!", "success")
+        flash(_("Your email have been updated!"), "success")
     return render_template("user/change_email.html", form=form)
     return render_template("user/change_email.html", form=form)
 
 
 
 
@@ -106,7 +107,7 @@ def change_user_details():
         form.populate_obj(current_user)
         form.populate_obj(current_user)
         current_user.save()
         current_user.save()
 
 
-        flash("Your details have been updated!", "success")
+        flash(_("Your details have been updated!"), "success")
 
 
     return render_template("user/change_user_details.html", form=form)
     return render_template("user/change_user_details.html", form=form)
 
 
@@ -179,7 +180,7 @@ def new_message():
                       unread=False,
                       unread=False,
                       as_draft=True)
                       as_draft=True)
 
 
-            flash("Message saved!", "success")
+            flash(_("Message saved!"), "success")
             return redirect(url_for("user.drafts"))
             return redirect(url_for("user.drafts"))
 
 
         if "send_message" in request.form and form.validate():
         if "send_message" in request.form and form.validate():
@@ -197,13 +198,13 @@ def new_message():
                       user_id=to_user.id,
                       user_id=to_user.id,
                       unread=True)
                       unread=True)
 
 
-            flash("Message sent!", "success")
+            flash(_("Message sent!"), "success")
             return redirect(url_for("user.sent"))
             return redirect(url_for("user.sent"))
     else:
     else:
         form.to_user.data = to_user
         form.to_user.data = to_user
 
 
     return render_template("message/message_form.html", form=form,
     return render_template("message/message_form.html", form=form,
-                           title="Compose Message")
+                           title=_("Compose Message"))
 
 
 
 
 @user.route("/messages/<int:message_id>/edit", methods=["POST", "GET"])
 @user.route("/messages/<int:message_id>/edit", methods=["POST", "GET"])
@@ -212,7 +213,7 @@ def edit_message(message_id):
     message = PrivateMessage.query.filter_by(id=message_id).first_or_404()
     message = PrivateMessage.query.filter_by(id=message_id).first_or_404()
 
 
     if not message.draft:
     if not message.draft:
-        flash("You cannot edit a sent message", "danger")
+        flash(_("You cannot edit a sent message"), "danger")
         return redirect(url_for("user.inbox"))
         return redirect(url_for("user.inbox"))
 
 
     form = EditMessageForm()
     form = EditMessageForm()
@@ -226,7 +227,7 @@ def edit_message(message_id):
             message.to_user = to_user.id
             message.to_user = to_user.id
             message.save()
             message.save()
 
 
-            flash("Message saved!", "success")
+            flash(_("Message saved!"), "success")
             return redirect(url_for("user.drafts"))
             return redirect(url_for("user.drafts"))
 
 
         if "send_message" in request.form and form.validate():
         if "send_message" in request.form and form.validate():
@@ -243,7 +244,7 @@ def edit_message(message_id):
             message.date_created = datetime.utcnow()
             message.date_created = datetime.utcnow()
             message.save()
             message.save()
 
 
-            flash("Message sent!", "success")
+            flash(_("Message sent!"), "success")
             return redirect(url_for("user.sent"))
             return redirect(url_for("user.sent"))
     else:
     else:
         form.to_user.data = message.to_user.username
         form.to_user.data = message.to_user.username
@@ -251,7 +252,7 @@ def edit_message(message_id):
         form.message.data = message.message
         form.message.data = message.message
 
 
     return render_template("message/message_form.html", form=form,
     return render_template("message/message_form.html", form=form,
-                           title="Edit Message")
+                           title=_("Edit Message"))
 
 
 
 
 @user.route("/messages/<int:message_id>/move")
 @user.route("/messages/<int:message_id>/move")
@@ -260,7 +261,7 @@ def move_message(message_id):
     message = PrivateMessage.query.filter_by(id=message_id).first_or_404()
     message = PrivateMessage.query.filter_by(id=message_id).first_or_404()
     message.trash = True
     message.trash = True
     message.save()
     message.save()
-    flash("Message moved to Trash!", "success")
+    flash(_("Message moved to Trash!"), "success")
     return redirect(url_for("user.inbox"))
     return redirect(url_for("user.inbox"))
 
 
 
 
@@ -270,7 +271,7 @@ def restore_message(message_id):
     message = PrivateMessage.query.filter_by(id=message_id).first_or_404()
     message = PrivateMessage.query.filter_by(id=message_id).first_or_404()
     message.trash = False
     message.trash = False
     message.save()
     message.save()
-    flash("Message restored from Trash!", "success")
+    flash(_("Message restored from Trash!"), "success")
     return redirect(url_for("user.inbox"))
     return redirect(url_for("user.inbox"))
 
 
 
 
@@ -279,5 +280,5 @@ def restore_message(message_id):
 def delete_message(message_id):
 def delete_message(message_id):
     message = PrivateMessage.query.filter_by(id=message_id).first_or_404()
     message = PrivateMessage.query.filter_by(id=message_id).first_or_404()
     message.delete()
     message.delete()
-    flash("Message deleted!", "success")
+    flash(_("Message deleted!"), "success")
     return redirect(url_for("user.inbox"))
     return redirect(url_for("user.inbox"))