Inital translations implementation for embeds template

This commit is contained in:
Jeremy Zhang 2017-11-15 06:13:42 +00:00
parent d1b94ca904
commit f95cd7060c
8 changed files with 52 additions and 34 deletions

View File

@ -10,3 +10,4 @@ asyncio_extras
kombu kombu
redis redis
aioredis aioredis
Flask-Babel

3
webapp/babel.cfg Normal file
View File

@ -0,0 +1,3 @@
[python: **.py]
[jinja2: **/templates/**.html.j2]
extensions=jinja2.ext.autoescape,jinja2.ext.with_

View File

@ -2,7 +2,7 @@ from config import config
from .database import db from .database import db
from flask import Flask, render_template, request, session, url_for, redirect, jsonify from flask import Flask, render_template, request, session, url_for, redirect, jsonify
from flask_sslify import SSLify from flask_sslify import SSLify
from titanembeds.utils import rate_limiter, discord_api, socketio from titanembeds.utils import rate_limiter, discord_api, socketio, babel
from .blueprints import api, user, admin, embed, gateway from .blueprints import api, user, admin, embed, gateway
import os import os
from titanembeds.database import get_administrators_list from titanembeds.database import get_administrators_list
@ -33,6 +33,7 @@ db.init_app(app)
rate_limiter.init_app(app) rate_limiter.init_app(app)
sslify = SSLify(app, permanent=True) sslify = SSLify(app, permanent=True)
socketio.init_app(app, message_queue=config["redis-uri"], path='gateway', async_mode=config.get("websockets-mode", None)) socketio.init_app(app, message_queue=config["redis-uri"], path='gateway', async_mode=config.get("websockets-mode", None))
babel.init_app(app)
app.register_blueprint(api.api, url_prefix="/api", template_folder="/templates") app.register_blueprint(api.api, url_prefix="/api", template_folder="/templates")
app.register_blueprint(admin.admin, url_prefix="/admin", template_folder="/templates") app.register_blueprint(admin.admin, url_prefix="/admin", template_folder="/templates")

View File

@ -1,4 +1,5 @@
from flask import Blueprint, render_template, abort, redirect, url_for, session, request from flask import Blueprint, render_template, abort, redirect, url_for, session, request
from flask_babel import gettext
from titanembeds.utils import check_guild_existance, guild_query_unauth_users_bool, guild_accepts_visitors, guild_unauthcaptcha_enabled from titanembeds.utils import check_guild_existance, guild_query_unauth_users_bool, guild_accepts_visitors, guild_unauthcaptcha_enabled
from titanembeds.oauth import generate_guild_icon_url, generate_avatar_url from titanembeds.oauth import generate_guild_icon_url, generate_avatar_url
from titanembeds.database import db, Guilds, UserCSS from titanembeds.database import db, Guilds, UserCSS
@ -10,14 +11,14 @@ embed = Blueprint("embed", __name__)
def get_logingreeting(): def get_logingreeting():
greetings = [ greetings = [
"Let's get to know each other! My name is Titan, what's yours?", gettext("Let's get to know each other! My name is Titan, what's yours?"),
"Hello and welcome!", gettext("Hello and welcome!"),
"What brings you here today?", gettext("What brings you here today?"),
"....what do you expect this text to say?", gettext("....what do you expect this text to say?"),
"Aha! ..made you look!", gettext("Aha! ..made you look!"),
"Initiating launch sequence...", gettext("Initiating launch sequence..."),
"Captain, what's your option?", gettext("Captain, what's your option?"),
"Alright, here's the usual~", gettext("Alright, here's the usual~"),
] ]
return random.choice(greetings) return random.choice(greetings)

View File

@ -0,0 +1,10 @@
from titanembeds.utils import babel
from flask import request
LANGUAGES = {
'en-US': 'English'
}
@babel.localeselector
def get_locale():
return request.accept_languages.best_match(LANGUAGES.keys())

View File

@ -52,31 +52,31 @@
</div> </div>
</li> </li>
<li><a class="subheader">Actions</a></li> <li><a class="subheader">{{ _("Actions") }}</a></li>
<li><a href="{{ url_for("user.administrate_guild", guild_id=guild['id']) }}" class="waves-effect" target="_blank" id="administrate_link" style="display: none;">Manage Guild Embed</a></li> <li><a href="{{ url_for("user.administrate_guild", guild_id=guild['id']) }}" class="waves-effect" target="_blank" id="administrate_link" style="display: none;">{{ _("Manage Guild Embed") }}</a></li>
<li><a id="instant-inv" href="#" class="waves-effect" target="_blank">Open Server on Discordapp</a></li> <li><a id="instant-inv" href="#" class="waves-effect" target="_blank">{{ _("Open Server on Discordapp") }}</a></li>
<li><div class="divider"></div></li> <li><div class="divider"></div></li>
<li><a class="subheader">Channel Topic</a></li> <li><a class="subheader">{{ _("Channel Topic") }}</a></li>
<div id="channeltopic"></div> <div id="channeltopic"></div>
<li><div class="divider"></div></li> <li><div class="divider"></div></li>
<li><a class="subheader">Channels</a></li> <li><a class="subheader">{{ _("Channels") }}</a></li>
<span id="channels-list"></span> <span id="channels-list"></span>
</ul> </ul>
<ul id="members-nav" class="side-nav"> <ul id="members-nav" class="side-nav">
<li><a class="subheader">Online Server Members - <span id="discord-members-count"></span></a></li> <li><a class="subheader">{{ _("Online Server Members") }} - <span id="discord-members-count"></span></a></li>
<span id="discord-members"></span> <span id="discord-members"></span>
<li><div class="divider"></div></li> <li><div class="divider"></div></li>
<li><a class="subheader">Authenticated Embed Users - <span id="embed-discord-members-count"></span></a></li> <li><a class="subheader">{{ _("Authenticated Embed Users") }} - <span id="embed-discord-members-count"></span></a></li>
<span id="embed-discord-members"></span> <span id="embed-discord-members"></span>
<li><a class="subheader">Guest Embed Users - <span id="guest-members-count"></span></a></li> <li><a class="subheader">{{ _("Guest Embed Users") }} - <span id="guest-members-count"></span></a></li>
<span id="embed-unauth-users"></span> <span id="embed-unauth-users"></span>
</ul> </ul>
@ -96,20 +96,20 @@
{% endif %} {% endif %}
</div> </div>
<div class="col m9 s12"> <div class="col m9 s12">
<p class="flow-text">Please choose one of the following methods to authenticate!</p> <p class="flow-text">{{ _("Please choose one of the following methods to authenticate!") }}</p>
<div class="progress" id="loginProgress" style="display: none;"> <div class="progress" id="loginProgress" style="display: none;">
<div class="indeterminate"></div> <div class="indeterminate"></div>
</div> </div>
<div class="row"> <div class="row">
<div class="col s12 l4"> <div class="col s12 l4">
<a id="discordlogin_btn" href="{% if not same_target %}{{ url_for("embed.login_discord", _external=True) }}{% else %}{{ url_for("user.login_authenticated", redirect=request.url, _external=True) }}{% endif %}" class="waves-effect waves-light btn-large" {% if not same_target %}target="_blank"{% endif %}>Discord Login</a> <a id="discordlogin_btn" href="{% if not same_target %}{{ url_for("embed.login_discord", _external=True) }}{% else %}{{ url_for("user.login_authenticated", redirect=request.url, _external=True) }}{% endif %}" class="waves-effect waves-light btn-large" {% if not same_target %}target="_blank"{% endif %}>{{ _("Discord Login") }}</a>
<p>*You will be invited into this server.</p> <p>*{{ _("You will be invited into this server.") }}</p>
</div> </div>
{% if unauth_enabled %} {% if unauth_enabled %}
<div class="col s12 l8"> <div class="col s12 l8">
<p>Of course, you also have the option to login by picking a temporary username for your current browsing session.</p> <p>{{ _("Of course, you also have the option to login by picking a temporary username for your current browsing session.") }}</p>
<input id="custom_username_field" type="text" {% if session.unauthenticated and session.username %}value="{{ session['username'] }}"{% endif %}> <input id="custom_username_field" type="text" {% if session.unauthenticated and session.username %}value="{{ session['username'] }}"{% endif %}>
<label class="active" for="custom_username_field">Username (Hit ENTER/RETURN key to confirm)</label> <label class="active" for="custom_username_field">{{ _("Username (Hit ENTER/RETURN key to confirm)") }}</label>
</div> </div>
{% endif %} {% endif %}
</div> </div>
@ -121,16 +121,16 @@
<div id="userembedmodal" class="modal"> <div id="userembedmodal" class="modal">
<div class="modal-content"> <div class="modal-content">
{% if unauth_enabled %} {% if unauth_enabled %}
<h4>Change Username</h4> <h4>{{ _("Change Username") }}</h4>
<div class="row"> <div class="row">
<div> <div>
<p>(Guests Accounts Only)</p> <p>({{ _("Guests Accounts Only") }})</p>
<input id="change_username_field" type="text" {% if session.unauthenticated and session.username %}value="{{ session['username'] }}"{% else %}disabled{% endif %}> <input id="change_username_field" type="text" {% if session.unauthenticated and session.username %}value="{{ session['username'] }}"{% else %}disabled{% endif %}>
<label class="active" for="change_username_field">Change your username (Hit ENTER/RETURN key to confirm)</label> <label class="active" for="change_username_field">{{ _("Change your username (Hit ENTER/RETURN key to confirm)") }}</label>
</div> </div>
</div> </div>
{% endif %} {% endif %}
<h4>Theme</h4> <h4>{{ _("Theme") }}</h4>
<div class="row"> <div class="row">
<div class="input-field col s12"> <div class="input-field col s12">
<select id="theme-selector"> <select id="theme-selector">
@ -140,24 +140,24 @@
</select> </select>
<p> <p>
<input type="checkbox" class="filled-in" id="overwrite_theme_custom_css_checkbox" checked="checked" /> <input type="checkbox" class="filled-in" id="overwrite_theme_custom_css_checkbox" checked="checked" />
<label for="overwrite_theme_custom_css_checkbox">Overwrite Current Embed Theme w/ User CSS</label> <label for="overwrite_theme_custom_css_checkbox">{{ _("Overwrite Current Embed Theme w/ User CSS") }}</label>
</p> </p>
</div> </div>
</div> </div>
<h4>Notification Sound</h4> <h4>{{ _("Notification Sound") }}</h4>
<div class="row"> <div class="row">
<div class="input-field col s12"> <div class="input-field col s12">
<span> <span>
<input name="notification_sound_radiobtn" type="radio" id="notification_sound_radiobtn_newmsgs" value="newmsgs" /> <input name="notification_sound_radiobtn" type="radio" id="notification_sound_radiobtn_newmsgs" value="newmsgs" />
<label for="notification_sound_radiobtn_newmsgs">New Messages</label> <label for="notification_sound_radiobtn_newmsgs">{{ _("New Messages") }}</label>
</span> </span>
<span> <span>
<input name="notification_sound_radiobtn" type="radio" id="notification_sound_radiobtn_mentions" value="mentions" /> <input name="notification_sound_radiobtn" type="radio" id="notification_sound_radiobtn_mentions" value="mentions" />
<label for="notification_sound_radiobtn_mentions">Mentions</label> <label for="notification_sound_radiobtn_mentions">{{ _("Mentions") }}</label>
</span> </span>
<span> <span>
<input name="notification_sound_radiobtn" type="radio" id="notification_sound_radiobtn_nothing" value="nothing" /> <input name="notification_sound_radiobtn" type="radio" id="notification_sound_radiobtn_nothing" value="nothing" />
<label for="notification_sound_radiobtn_nothing">Nothing</label> <label for="notification_sound_radiobtn_nothing">{{ _("Nothing") }}</label>
</span> </span>
</div> </div>
</div> </div>
@ -175,7 +175,7 @@
<div id="emoji-picker"> <div id="emoji-picker">
<div id="emoji-picker-content"> <div id="emoji-picker-content">
<div class="row"> <div class="row">
<h6>Server Emoji</h6> <h6>{{ _("Server Emoji") }}</h6>
<div id="emoji-picker-emojis"></div> <div id="emoji-picker-emojis"></div>
</div> </div>
</div> </div>
@ -192,7 +192,7 @@
</div> </div>
<div id="messageboxouter" class="input-field inline"> <div id="messageboxouter" class="input-field inline">
<textarea placeholder="Enter message" id="messagebox" type="text" class="materialize-textarea" rows="1"></textarea> <textarea placeholder="Enter message" id="messagebox" type="text" class="materialize-textarea" rows="1"></textarea>
<span id="visitor_mode_message" style="display:none;"><span id="visitor_mode_message_note">Please login to post a message.</span> <a id="visitor_login_btn" class="waves-effect waves-light btn">Login</a></span> <span id="visitor_mode_message" style="display:none;"><span id="visitor_mode_message_note">{{ _("Please login to post a message.") }}</span> <a id="visitor_login_btn" class="waves-effect waves-light btn">{{ _("Login") }}</a></span>
</div> </div>
</div> </div>
</footer> </footer>

View File

View File

@ -2,6 +2,7 @@ from titanembeds.database import db, Guilds, UnauthenticatedUsers, Unauthenticat
from flask import request, session from flask import request, session
from flask_limiter import Limiter from flask_limiter import Limiter
from flask_socketio import SocketIO from flask_socketio import SocketIO
from flask_babel import Babel
from config import config from config import config
from sqlalchemy import and_ from sqlalchemy import and_
import random import random
@ -292,4 +293,5 @@ def guild_unauthcaptcha_enabled(guild_id):
return dbguild.unauth_captcha return dbguild.unauth_captcha
rate_limiter = Limiter(key_func=get_client_ipaddr) # Default limit by ip address rate_limiter = Limiter(key_func=get_client_ipaddr) # Default limit by ip address
socketio = SocketIO() socketio = SocketIO()
babel = Babel()