mirror of
				https://github.com/TitanEmbeds/Titan.git
				synced 2025-11-03 23:37:09 +01:00 
			
		
		
		
	Inital translations implementation for embeds template
This commit is contained in:
		@@ -10,3 +10,4 @@ asyncio_extras
 | 
				
			|||||||
kombu
 | 
					kombu
 | 
				
			||||||
redis
 | 
					redis
 | 
				
			||||||
aioredis
 | 
					aioredis
 | 
				
			||||||
 | 
					Flask-Babel
 | 
				
			||||||
							
								
								
									
										3
									
								
								webapp/babel.cfg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								webapp/babel.cfg
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					[python: **.py]
 | 
				
			||||||
 | 
					[jinja2: **/templates/**.html.j2]
 | 
				
			||||||
 | 
					extensions=jinja2.ext.autoescape,jinja2.ext.with_
 | 
				
			||||||
@@ -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")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										10
									
								
								webapp/titanembeds/i18n.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								webapp/titanembeds/i18n.py
									
									
									
									
									
										Normal 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())
 | 
				
			||||||
@@ -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>
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										0
									
								
								webapp/titanembeds/translations/.gitkeep
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								webapp/titanembeds/translations/.gitkeep
									
									
									
									
									
										Normal 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()
 | 
				
			||||||
		Reference in New Issue
	
	Block a user