From 1b26acaaaeb3b0d2a385bb09e3d66a7623a952f0 Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Fri, 7 Jan 2022 21:55:33 +0000 Subject: [PATCH] Allow translating form labels --- app/blueprints/api/tokens.py | 7 ++-- app/blueprints/packages/packages.py | 11 +++--- app/blueprints/packages/releases.py | 54 +++++++++++++------------- app/blueprints/packages/reviews.py | 11 +++--- app/blueprints/packages/screenshots.py | 18 ++++----- app/blueprints/threads/__init__.py | 14 +++---- app/blueprints/users/account.py | 52 +++++++++++++------------ app/blueprints/users/settings.py | 26 ++++++------- 8 files changed, 100 insertions(+), 93 deletions(-) diff --git a/app/blueprints/api/tokens.py b/app/blueprints/api/tokens.py index f3a3c21..4e1b888 100644 --- a/app/blueprints/api/tokens.py +++ b/app/blueprints/api/tokens.py @@ -16,6 +16,7 @@ from flask import render_template, redirect, request, session, url_for, abort +from flask_babel import lazy_gettext from flask_login import login_required, current_user from flask_wtf import FlaskForm from wtforms import * @@ -29,10 +30,10 @@ from ..users.settings import get_setting_tabs class CreateAPIToken(FlaskForm): - name = StringField("Name", [InputRequired(), Length(1, 30)]) - package = QuerySelectField("Limit to package", allow_blank=True, + name = StringField(lazy_gettext("Name"), [InputRequired(), Length(1, 30)]) + package = QuerySelectField(lazy_gettext("Limit to package"), allow_blank=True, get_pk=lambda a: a.id, get_label=lambda a: a.title) - submit = SubmitField("Save") + submit = SubmitField(lazy_gettext("Save")) @bp.route("/user/tokens/") diff --git a/app/blueprints/packages/packages.py b/app/blueprints/packages/packages.py index 34c7d6e..be52ab8 100644 --- a/app/blueprints/packages/packages.py +++ b/app/blueprints/packages/packages.py @@ -446,8 +446,8 @@ def remove(package): class PackageMaintainersForm(FlaskForm): - maintainers_str = StringField("Maintainers (Comma-separated)", [Optional()]) - submit = SubmitField("Save") + maintainers_str = StringField(lazy_gettext("Maintainers (Comma-separated)"), [Optional()]) + submit = SubmitField(lazy_gettext("Save")) @bp.route("/packages///edit-maintainers/", methods=["GET", "POST"]) @@ -540,9 +540,10 @@ def audit(package): class PackageAliasForm(FlaskForm): - author = StringField("Author Name", [InputRequired(), Length(1, 50)]) - name = StringField("Name (Technical)", [InputRequired(), Length(1, 100), Regexp("^[a-z0-9_]+$", 0, "Lower case letters (a-z), digits (0-9), and underscores (_) only")]) - submit = SubmitField("Save") + author = StringField(lazy_gettext("Author Name"), [InputRequired(), Length(1, 50)]) + name = StringField(lazy_gettext("Name (Technical)"), [InputRequired(), Length(1, 100), + Regexp("^[a-z0-9_]+$", 0, lazy_gettext("Lower case letters (a-z), digits (0-9), and underscores (_) only"))]) + submit = SubmitField(lazy_gettext("Save")) @bp.route("/packages///aliases/") diff --git a/app/blueprints/packages/releases.py b/app/blueprints/packages/releases.py index 1153916..6ef7e64 100644 --- a/app/blueprints/packages/releases.py +++ b/app/blueprints/packages/releases.py @@ -16,7 +16,7 @@ from flask import * -from flask_babel import gettext +from flask_babel import gettext, lazy_gettext from flask_login import login_required from flask_wtf import FlaskForm from wtforms import * @@ -49,26 +49,26 @@ def get_mt_releases(is_max): class CreatePackageReleaseForm(FlaskForm): - title = StringField("Title", [InputRequired(), Length(1, 30)]) - uploadOpt = RadioField ("Method", choices=[("upload", "File Upload")], default="upload") - vcsLabel = StringField("Git reference (ie: commit hash, branch, or tag)", default=None) - fileUpload = FileField("File Upload") - min_rel = QuerySelectField("Minimum Minetest Version", [InputRequired()], + title = StringField(lazy_gettext("Title"), [InputRequired(), Length(1, 30)]) + uploadOpt = RadioField(lazy_gettext("Method"), choices=[("upload", "File Upload")], default="upload") + vcsLabel = StringField(lazy_gettext("Git reference (ie: commit hash, branch, or tag)"), default=None) + fileUpload = FileField(lazy_gettext("File Upload")) + min_rel = QuerySelectField(lazy_gettext("Minimum Minetest Version"), [InputRequired()], query_factory=lambda: get_mt_releases(False), get_pk=lambda a: a.id, get_label=lambda a: a.name) - max_rel = QuerySelectField("Maximum Minetest Version", [InputRequired()], + max_rel = QuerySelectField(lazy_gettext("Maximum Minetest Version"), [InputRequired()], query_factory=lambda: get_mt_releases(True), get_pk=lambda a: a.id, get_label=lambda a: a.name) - submit = SubmitField("Save") + submit = SubmitField(lazy_gettext("Save")) class EditPackageReleaseForm(FlaskForm): - title = StringField("Title", [InputRequired(), Length(1, 30)]) - url = StringField("URL", [Optional()]) - task_id = StringField("Task ID", filters = [lambda x: x or None]) - approved = BooleanField("Is Approved") - min_rel = QuerySelectField("Minimum Minetest Version", [InputRequired()], + title = StringField(lazy_gettext("Title"), [InputRequired(), Length(1, 30)]) + url = StringField(lazy_gettext("URL"), [Optional()]) + task_id = StringField(lazy_gettext("Task ID"), filters = [lambda x: x or None]) + approved = BooleanField(lazy_gettext("Is Approved")) + min_rel = QuerySelectField(lazy_gettext("Minimum Minetest Version"), [InputRequired()], query_factory=lambda: get_mt_releases(False), get_pk=lambda a: a.id, get_label=lambda a: a.name) - max_rel = QuerySelectField("Maximum Minetest Version", [InputRequired()], + max_rel = QuerySelectField(lazy_gettext("Maximum Minetest Version"), [InputRequired()], query_factory=lambda: get_mt_releases(True), get_pk=lambda a: a.id, get_label=lambda a: a.name) - submit = SubmitField("Save") + submit = SubmitField(lazy_gettext("Save")) @bp.route("/packages///releases/new/", methods=["GET", "POST"]) @@ -179,14 +179,14 @@ def edit_release(package, id): class BulkReleaseForm(FlaskForm): - set_min = BooleanField("Set Min") - min_rel = QuerySelectField("Minimum Minetest Version", [InputRequired()], + set_min = BooleanField(lazy_gettext("Set Min")) + min_rel = QuerySelectField(lazy_gettext("Minimum Minetest Version"), [InputRequired()], query_factory=lambda: get_mt_releases(False), get_pk=lambda a: a.id, get_label=lambda a: a.name) - set_max = BooleanField("Set Max") - max_rel = QuerySelectField("Maximum Minetest Version", [InputRequired()], + set_max = BooleanField(lazy_gettext("Set Max")) + max_rel = QuerySelectField(lazy_gettext("Maximum Minetest Version"), [InputRequired()], query_factory=lambda: get_mt_releases(True), get_pk=lambda a: a.id, get_label=lambda a: a.name) - only_change_none = BooleanField("Only change values previously set as none") - submit = SubmitField("Update") + only_change_none = BooleanField(lazy_gettext("Only change values previously set as none")) + submit = SubmitField(lazy_gettext("Update")) @bp.route("/packages///releases/bulk_change/", methods=["GET", "POST"]) @@ -235,12 +235,14 @@ def delete_release(package, id): class PackageUpdateConfigFrom(FlaskForm): - trigger = RadioField("Trigger", [InputRequired()], choices=PackageUpdateTrigger.choices(), coerce=PackageUpdateTrigger.coerce, + trigger = RadioField(lazy_gettext("Trigger"), [InputRequired()], choices=PackageUpdateTrigger.choices(), coerce=PackageUpdateTrigger.coerce, default=PackageUpdateTrigger.TAG) - ref = StringField("Branch name", [Optional()], default=None) - action = RadioField("Action", [InputRequired()], choices=[("notification", "Send notification and mark as outdated"), ("make_release", "Create release")], default="make_release") - submit = SubmitField("Save Settings") - disable = SubmitField("Disable Automation") + ref = StringField(lazy_gettext("Branch name"), [Optional()], default=None) + action = RadioField(lazy_gettext("Action"), [InputRequired()], + choices=[("notification", lazy_gettext("Send notification and mark as outdated")), ("make_release", lazy_gettext("Create release"))], + default="make_release") + submit = SubmitField(lazy_gettext("Save Settings")) + disable = SubmitField(lazy_gettext("Disable Automation")) def set_update_config(package, form): diff --git a/app/blueprints/packages/reviews.py b/app/blueprints/packages/reviews.py index 45ac001..28a69cd 100644 --- a/app/blueprints/packages/reviews.py +++ b/app/blueprints/packages/reviews.py @@ -15,7 +15,7 @@ # along with this program. If not, see . from collections import namedtuple -from flask_babel import gettext +from flask_babel import gettext, lazy_gettext from . import bp @@ -39,10 +39,11 @@ def list_reviews(): class ReviewForm(FlaskForm): - title = StringField("Title", [InputRequired(), Length(3,100)]) - comment = TextAreaField("Comment", [InputRequired(), Length(10, 2000)]) - recommends = RadioField("Private", [InputRequired()], choices=[("yes", "Yes"), ("no", "No")]) - submit = SubmitField("Save") + title = StringField(lazy_gettext("Title"), [InputRequired(), Length(3,100)]) + comment = TextAreaField(lazy_gettext("Comment"), [InputRequired(), Length(10, 2000)]) + recommends = RadioField(lazy_gettext("Private"), [InputRequired()], + choices=[("yes", lazy_gettext("Yes")), ("no", lazy_gettext("No"))]) + submit = SubmitField(lazy_gettext("Save")) @bp.route("/packages///review/", methods=["GET", "POST"]) @login_required diff --git a/app/blueprints/packages/screenshots.py b/app/blueprints/packages/screenshots.py index 8e3fc93..59bf6ab 100644 --- a/app/blueprints/packages/screenshots.py +++ b/app/blueprints/packages/screenshots.py @@ -16,7 +16,7 @@ from flask import * -from flask_babel import gettext +from flask_babel import gettext, lazy_gettext from flask_wtf import FlaskForm from flask_login import login_required from wtforms import * @@ -30,20 +30,20 @@ from app.logic.screenshots import do_create_screenshot, do_order_screenshots class CreateScreenshotForm(FlaskForm): - title = StringField("Title/Caption", [Optional(), Length(-1, 100)]) - fileUpload = FileField("File Upload", [InputRequired()]) - submit = SubmitField("Save") + title = StringField(lazy_gettext("Title/Caption"), [Optional(), Length(-1, 100)]) + fileUpload = FileField(lazy_gettext("File Upload"), [InputRequired()]) + submit = SubmitField(lazy_gettext("Save")) class EditScreenshotForm(FlaskForm): - title = StringField("Title/Caption", [Optional(), Length(-1, 100)]) - approved = BooleanField("Is Approved") - submit = SubmitField("Save") + title = StringField(lazy_gettext("Title/Caption"), [Optional(), Length(-1, 100)]) + approved = BooleanField(lazy_gettext("Is Approved")) + submit = SubmitField(lazy_gettext("Save")) class EditPackageScreenshotsForm(FlaskForm): - cover_image = QuerySelectField("Cover Image", [DataRequired()], allow_blank=True, get_pk=lambda a: a.id, get_label=lambda a: a.title) - submit = SubmitField("Save") + cover_image = QuerySelectField(lazy_gettext("Cover Image"), [DataRequired()], allow_blank=True, get_pk=lambda a: a.id, get_label=lambda a: a.title) + submit = SubmitField(lazy_gettext("Save")) @bp.route("/packages///screenshots/", methods=["GET", "POST"]) diff --git a/app/blueprints/threads/__init__.py b/app/blueprints/threads/__init__.py index fb48865..92536f0 100644 --- a/app/blueprints/threads/__init__.py +++ b/app/blueprints/threads/__init__.py @@ -14,7 +14,7 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . from flask import * -from flask_babel import gettext +from flask_babel import gettext, lazy_gettext from app.tasks.webhooktasks import post_discord_webhook @@ -171,8 +171,8 @@ def delete_reply(id): class CommentForm(FlaskForm): - comment = TextAreaField("Comment", [InputRequired(), Length(10, 2000)]) - submit = SubmitField("Comment") + comment = TextAreaField(lazy_gettext("Comment"), [InputRequired(), Length(10, 2000)]) + submit = SubmitField(lazy_gettext("Comment")) @bp.route("/threads//edit/", methods=["GET", "POST"]) @@ -259,10 +259,10 @@ def view(id): class ThreadForm(FlaskForm): - title = StringField("Title", [InputRequired(), Length(3,100)]) - comment = TextAreaField("Comment", [InputRequired(), Length(10, 2000)]) - private = BooleanField("Private") - submit = SubmitField("Open Thread") + title = StringField(lazy_gettext("Title"), [InputRequired(), Length(3,100)]) + comment = TextAreaField(lazy_gettext("Comment"), [InputRequired(), Length(10, 2000)]) + private = BooleanField(lazy_gettext("Private")) + submit = SubmitField(lazy_gettext("Open Thread")) @bp.route("/threads/new/", methods=["GET", "POST"]) diff --git a/app/blueprints/users/account.py b/app/blueprints/users/account.py index b98f8e5..c3aaa3f 100644 --- a/app/blueprints/users/account.py +++ b/app/blueprints/users/account.py @@ -17,7 +17,7 @@ from flask import * -from flask_babel import gettext +from flask_babel import gettext, lazy_gettext from flask_login import current_user, login_required, logout_user, login_user from flask_wtf import FlaskForm from sqlalchemy import or_ @@ -33,10 +33,10 @@ from . import bp class LoginForm(FlaskForm): - username = StringField("Username or email", [InputRequired()]) - password = PasswordField("Password", [InputRequired(), Length(6, 100)]) - remember_me = BooleanField("Remember me", default=True) - submit = SubmitField("Sign in") + username = StringField(lazy_gettext("Username or email"), [InputRequired()]) + password = PasswordField(lazy_gettext("Password"), [InputRequired(), Length(6, 100)]) + remember_me = BooleanField(lazy_gettext("Remember me"), default=True) + submit = SubmitField(lazy_gettext("Sign in")) def handle_login(form): @@ -99,14 +99,14 @@ def logout(): class RegisterForm(FlaskForm): - display_name = StringField("Display Name", [Optional(), Length(1, 20)], filters=[nonEmptyOrNone]) - username = StringField("Username", [InputRequired(), - Regexp("^[a-zA-Z0-9._-]+$", message="Only a-zA-Z0-9._ allowed")]) - email = StringField("Email", [InputRequired(), Email()]) - password = PasswordField("Password", [InputRequired(), Length(6, 100)]) - question = StringField("What is the result of the above calculation?", [InputRequired()]) - agree = BooleanField("I agree", [DataRequired()]) - submit = SubmitField("Register") + display_name = StringField(lazy_gettext("Display Name"), [Optional(), Length(1, 20)], filters=[nonEmptyOrNone]) + username = StringField(lazy_gettext("Username"), [InputRequired(), + Regexp("^[a-zA-Z0-9._-]+$", message=lazy_gettext("Only a-zA-Z0-9._ allowed"))]) + email = StringField(lazy_gettext("Email"), [InputRequired(), Email()]) + password = PasswordField(lazy_gettext("Password"), [InputRequired(), Length(6, 100)]) + question = StringField(lazy_gettext("What is the result of the above calculation?"), [InputRequired()]) + agree = BooleanField(lazy_gettext("I agree"), [DataRequired()]) + submit = SubmitField(lazy_gettext("Register")) def handle_register(form): @@ -181,8 +181,8 @@ def register(): class ForgotPasswordForm(FlaskForm): - email = StringField("Email", [InputRequired(), Email()]) - submit = SubmitField("Reset Password") + email = StringField(lazy_gettext("Email"), [InputRequired(), Email()]) + submit = SubmitField(lazy_gettext("Reset Password")) @bp.route("/user/forgot-password/", methods=["GET", "POST"]) def forgot_password(): @@ -230,16 +230,18 @@ def forgot_password(): class SetPasswordForm(FlaskForm): - email = StringField("Email", [Optional(), Email()]) - password = PasswordField("New password", [InputRequired(), Length(8, 100)]) - password2 = PasswordField("Verify password", [InputRequired(), Length(8, 100), validators.EqualTo('password', message='Passwords must match')]) - submit = SubmitField("Save") + email = StringField(lazy_gettext("Email"), [Optional(), Email()]) + password = PasswordField(lazy_gettext("New password"), [InputRequired(), Length(8, 100)]) + password2 = PasswordField(lazy_gettext("Verify password"), [InputRequired(), Length(8, 100), + validators.EqualTo('password', message=lazy_gettext('Passwords must match'))]) + submit = SubmitField(lazy_gettext("Save")) class ChangePasswordForm(FlaskForm): - old_password = PasswordField("Old password", [InputRequired(), Length(8, 100)]) - password = PasswordField("New password", [InputRequired(), Length(8, 100)]) - password2 = PasswordField("Verify password", [InputRequired(), Length(8, 100), validators.EqualTo('password', message='Passwords must match')]) - submit = SubmitField("Save") + old_password = PasswordField(lazy_gettext("Old password"), [InputRequired(), Length(8, 100)]) + password = PasswordField(lazy_gettext("New password"), [InputRequired(), Length(8, 100)]) + password2 = PasswordField(lazy_gettext("Verify password"), [InputRequired(), Length(8, 100), + validators.EqualTo('password', message=lazy_gettext('Passwords must match'))]) + submit = SubmitField(lazy_gettext("Save")) def handle_set_password(form): @@ -379,8 +381,8 @@ def verify_email(): class UnsubscribeForm(FlaskForm): - email = StringField("Email", [InputRequired(), Email()]) - submit = SubmitField("Send") + email = StringField(lazy_gettext("Email"), [InputRequired(), Email()]) + submit = SubmitField(lazy_gettext("Send")) def unsubscribe_verify(): diff --git a/app/blueprints/users/settings.py b/app/blueprints/users/settings.py index 65c0ab2..4e5b246 100644 --- a/app/blueprints/users/settings.py +++ b/app/blueprints/users/settings.py @@ -1,5 +1,5 @@ from flask import * -from flask_babel import gettext +from flask_babel import gettext, lazy_gettext from flask_login import current_user, login_required, logout_user from flask_wtf import FlaskForm from sqlalchemy import or_ @@ -38,10 +38,10 @@ def get_setting_tabs(user): class UserProfileForm(FlaskForm): - display_name = StringField("Display Name", [Optional(), Length(1, 20)], filters=[lambda x: nonEmptyOrNone(x)]) - website_url = StringField("Website URL", [Optional(), URL()], filters = [lambda x: x or None]) - donate_url = StringField("Donation URL", [Optional(), URL()], filters = [lambda x: x or None]) - submit = SubmitField("Save") + display_name = StringField(lazy_gettext("Display Name"), [Optional(), Length(1, 20)], filters=[lambda x: nonEmptyOrNone(x)]) + website_url = StringField(lazy_gettext("Website URL"), [Optional(), URL()], filters = [lambda x: x or None]) + donate_url = StringField(lazy_gettext("Donation URL"), [Optional(), URL()], filters = [lambda x: x or None]) + submit = SubmitField(lazy_gettext("Save")) def handle_profile_edit(form, user, username): @@ -102,8 +102,8 @@ def profile_edit(username): def make_settings_form(): attrs = { - "email": StringField("Email", [Optional(), Email()]), - "submit": SubmitField("Save") + "email": StringField(lazy_gettext("Email"), [Optional(), Email()]), + "submit": SubmitField(lazy_gettext("Save")) } for notificationType in NotificationType: @@ -195,13 +195,13 @@ def email_notifications(username=None): class UserAccountForm(FlaskForm): - username = StringField("Username", [Optional(), Length(1, 50)]) - display_name = StringField("Display name", [Optional(), Length(2, 100)]) - forums_username = StringField("Forums Username", [Optional(), Length(2, 50)]) - github_username = StringField("GitHub Username", [Optional(), Length(2, 50)]) - rank = SelectField("Rank", [Optional()], choices=UserRank.choices(), coerce=UserRank.coerce, + username = StringField(lazy_gettext("Username"), [Optional(), Length(1, 50)]) + display_name = StringField(lazy_gettext("Display name"), [Optional(), Length(2, 100)]) + forums_username = StringField(lazy_gettext("Forums Username"), [Optional(), Length(2, 50)]) + github_username = StringField(lazy_gettext("GitHub Username"), [Optional(), Length(2, 50)]) + rank = SelectField(lazy_gettext("Rank"), [Optional()], choices=UserRank.choices(), coerce=UserRank.coerce, default=UserRank.NEW_MEMBER) - submit = SubmitField("Save") + submit = SubmitField(lazy_gettext("Save")) @bp.route("/users//settings/account/", methods=["GET", "POST"])