Merge branch 'dev-BetterCreditTranslation' into 'dev'

Fixing Credit PAge

See merge request crafty-controller/crafty-commander!189
This commit is contained in:
Iain Powrie 2022-03-05 17:53:52 +00:00
commit cc52fdeb83
11 changed files with 382 additions and 306 deletions

View File

@ -862,4 +862,13 @@ class Helpers:
return text[len(prefix):]
return text
@staticmethod
def getLangPage(text):
lang = text.split("_")[0]
region = text.split("_")[1]
if region == 'EN':
return 'en'
else:
return lang+"-"+region
helper = Helpers()

View File

@ -251,6 +251,7 @@ class PanelHandler(BaseHandler):
'error': error,
'time': formatted_time,
'lang': self.controller.users.get_user_lang_by_id(exec_user["user_id"]),
'lang_page': helper.getLangPage(self.controller.users.get_user_lang_by_id(exec_user["user_id"])),
'super_user': superuser,
'api_key': {
'name': api_key.name,
@ -375,8 +376,6 @@ class PanelHandler(BaseHandler):
user_order.remove(server_id)
page_data['servers'] = page_servers
#num players is set to zero here. If we poll all servers while dashboard is loading it takes FOREVER. We leave this to the
#async polling once dashboard is served.
page_data['num_players'] = 0
@ -1596,7 +1595,8 @@ class PanelHandler(BaseHandler):
user_id = self.controller.users.add_user(username, password=password0, email=email, enabled=enabled, superuser=superuser)
user_data = {
"roles": roles,
'lang': lang
'lang': lang,
'lang_page': helper.getLangPage(lang),
}
user_crafty_data = {
"permissions_mask": permissions_mask,
@ -1682,7 +1682,10 @@ class PanelHandler(BaseHandler):
else:
self.set_status(404)
page_data = {'lang': helper.get_setting('language')}
page_data = {
'lang': helper.get_setting('language'),
'lang_page': helper.getLangPage(helper.get_setting('language')),
}
self.render(
"public/404.html",
translate=self.translator.translate,
@ -1704,7 +1707,8 @@ class PanelHandler(BaseHandler):
'user_data': exec_user,
'hosts_data': self.controller.management.get_latest_hosts_stats(),
'show_contribute': helper.get_setting("show_contribute_link", True),
'lang': self.controller.users.get_user_lang_by_id(exec_user["user_id"])
'lang': self.controller.users.get_user_lang_by_id(exec_user["user_id"]),
'lang_page': helper.getLangPage(self.controller.users.get_user_lang_by_id(exec_user["user_id"])),
}
if page == "remove_apikey":

View File

@ -39,7 +39,11 @@ class PublicHandler(BaseHandler):
error = bleach.clean(self.get_argument('error', "Invalid Login!"))
error_msg = bleach.clean(self.get_argument('error_msg', ''))
page_data = {'version': helper.get_version_string(), 'error': error, 'lang': helper.get_setting('language')}
page_data = {
'version': helper.get_version_string(),
'error': error, 'lang': helper.get_setting('language'),
'lang_page': helper.getLangPage(helper.get_setting('language'))
}
# sensible defaults
template = "public/404.html"

View File

@ -75,6 +75,7 @@ class ServerHandler(BaseHandler):
'menu_servers': defined_servers,
'show_contribute': helper.get_setting("show_contribute_link", True),
'lang': self.controller.users.get_user_lang_by_id(exec_user["user_id"]),
'lang_page': helper.getLangPage(self.controller.users.get_user_lang_by_id(exec_user["user_id"])),
'api_key': {
'name': api_key.name,
'created': api_key.created,
@ -84,6 +85,7 @@ class ServerHandler(BaseHandler):
} if api_key is not None else None,
'superuser': superuser
}
if helper.get_setting("allow_nsfw_profile_pictures"):
rating = "x"
else:
@ -139,7 +141,8 @@ class ServerHandler(BaseHandler):
'version_data': "version_data_here", # TODO
'user_data': exec_user,
'show_contribute': helper.get_setting("show_contribute_link", True),
'lang': self.controller.users.get_user_lang_by_id(exec_user["user_id"])
'lang': self.controller.users.get_user_lang_by_id(exec_user["user_id"]),
'lang_page': helper.getLangPage(self.controller.users.get_user_lang_by_id(exec_user["user_id"]))
}
if page == "command":

View File

@ -9,6 +9,7 @@ class StatusHandler(BaseHandler):
def get(self):
page_data = {}
page_data['lang'] = helper.get_setting('language')
page_data['lang_page'] = helper.getLangPage(helper.get_setting('language'))
page_data['servers'] = self.controller.servers.get_all_servers_stats()
for srv in page_data['servers']:
server_data = srv.get('server_data', False)

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!-- Font Awesome Pro 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) --><path d="M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 96c48.6 0 88 39.4 88 88s-39.4 88-88 88-88-39.4-88-88 39.4-88 88-88zm0 344c-58.7 0-111.3-26.6-146.5-68.2 18.8-35.4 55.6-59.8 98.5-59.8 2.4 0 4.8.4 7.1 1.1 13 4.2 26.6 6.9 40.9 6.9 14.3 0 28-2.7 40.9-6.9 2.3-.7 4.7-1.1 7.1-1.1 42.9 0 79.7 24.4 98.5 59.8C359.3 421.4 306.7 448 248 448z" style="fill: #b9c0d3;"/></svg>

After

Width:  |  Height:  |  Size: 594 B

View File

@ -1,5 +1,5 @@
<!DOCTYPE html>
<html lang="en">
<html lang="{{ data['lang_page'] }}">
<head>
<!-- Required meta tags -->

View File

@ -3,18 +3,18 @@
{% block meta %}
{% end %}
{% block title %}Crafty Controller - Credits{% end %}
{% block title %}Crafty Controller - {{ translate('credits', 'pageTitle', data['lang']) }}{% end %}
{% block content %}
<div class="content-wrapper">
<!-- Page Title Header Starts-->
<!-- Page Title Header Starts-->
<div class="row page-title-header">
<div class="col-12">
<div class="page-header">
<h4 class="page-title">Credits
<small>Without these people, you wouldn't have Crafty</small>
<h4 class="page-title">{{ translate('credits', 'pageTitle', data['lang']) }}
<small>{{ translate('credits', 'pageDescription', data['lang']) }}</small>
</h4>
</div>
</div>
@ -22,309 +22,326 @@
</div>
<!-- Page Title Header Ends-->
<div class="row">
<div class="col-md-12 grid-margin">
<div class="card">
<div class="card-body">
<div class="card-header header-sm d-flex justify-content-between align-items-center">
<h4 class="card-title"><i class="far fa-code"></i> &nbsp;Development Team</h4>
</div>
<div class="row">
{% for person in data['staff']['development'] %}
<div class="col-md-6 mb-5">
<div class="card rounded shadow-none">
<div class="card-body">
<div class="row">
<div class="col-md-4">
<div class="user-avatar mb-auto">
{% if person['pic'] %}
<img src="{{ person['pic'] }}"
alt="profile image" class="profile-img img-lg rounded-circle">
{% end %}
</div>
<div class="wrapper">
<div class="wrapper d-flex align-items-center">
<h4 class="mb-0 font-weight-medium">{{ person['name'] }}</h4>
</div>
<div class="wrapper d-flex align-items-center font-weight-medium text-muted">
{% if person['loc'] %}
<i class="mdi mdi-map-marker-outline mr-2"></i>
<p class="mb-0 text-muted">{{ person['loc'] }}</p>
{% end %}
</div>
</div>
</div>
<div class="col-md-8">
<div class="wrapper d-flex align-items-start">
{% if person['tags'][0] %}
<span class="btn btn-sm btn-info mr-2">{{ person['tags'][0] }}</span>
{% end %}
{% if person['tags'][1] %}
{% if type(person['tags'][1]) is list %}
<a href="{{ person['tags'][1][1] }}" class="btn btn-sm btn-primary mr-2">{{ person['tags'][1][0] }}</a>
{% else %}
<span class="btn btn-sm btn-primary mr-2">{{ person['tags'][1] }}</span>
{% end %}
{% end %}
{% if person['tags'][2] %}
{% if type(person['tags'][2]) is list %}
<a href="{{ person['tags'][2][1] }}" class="btn btn-sm btn-inverse-success mr-2">{{ person['tags'][2][0] }}</a>
{% else %}
<span class="btn btn-sm btn-inverse-success mr-2">{{ person['tags'][2] }}</span>
{% end %}
{% end %}
</div>
<div class="wrapper align-items-start pt-3">
{% if person['title'] %}
<h5><strong>Crafty's {{ person['title'] }}</strong></h5>
{% end %}
<p>{{ person['blurb'] }}</p>
</div>
</div>
</div>
</div>
</div>
</div>
{% end %}
</div> <!-- end of user row -->
<div class="card-header header-sm d-flex justify-content-between align-items-center">
<h4 class="card-title"><i class="fa fa-book"></i> &nbsp;Support and Documentation Team</h4>
</div>
<div class="row">
{% for person in data['staff']['support'] %}
<div class="col-md-6 mb-5">
<div class="card rounded shadow-none">
<div class="card-body">
<div class="row">
<div class="col-md-4">
<div class="user-avatar mb-auto">
{% if person['pic'] %}
<img src="{{ person['pic'] }}"
alt="profile image" class="profile-img img-lg rounded-circle">
{% end %}
</div>
<div class="wrapper">
<div class="wrapper d-flex align-items-center">
<h4 class="mb-0 font-weight-medium">{{ person['name'] }}</h4>
</div>
<div class="wrapper d-flex align-items-center font-weight-medium text-muted">
{% if person['loc'] %}
<i class="mdi mdi-map-marker-outline mr-2"></i>
<p class="mb-0 text-muted">{{ person['loc'] }}</p>
{% end %}
</div>
</div>
</div>
<div class="col-md-8">
<div class="wrapper d-flex align-items-start">
{% if person['tags'][0] %}
<span class="btn btn-sm btn-info mr-2">{{ person['tags'][0] }}</span>
{% end %}
{% if person['tags'][1] %}
{% if type(person['tags'][1]) is list %}
<a href="{{ person['tags'][1][1] }}" class="btn btn-sm btn-primary mr-2">{{ person['tags'][1][0] }}</a>
{% else %}
<span class="btn btn-sm btn-primary mr-2">{{ person['tags'][1] }}</span>
{% end %}
{% end %}
{% if person['tags'][2] %}
{% if type(person['tags'][2]) is list %}
<a href="{{ person['tags'][2][1] }}" class="btn btn-sm btn-inverse-success mr-2">{{ person['tags'][2][0] }}</a>
{% else %}
<span class="btn btn-sm btn-inverse-success mr-2">{{ person['tags'][2] }}</span>
{% end %}
{% end %}
</div>
<div class="wrapper align-items-start pt-3">
{% if person['title'] %}
<h5><strong>{{ person['title'] }}</strong></h5>
{% end %}
<p>{{ person['blurb'] }}</p>
</div>
</div>
</div>
</div>
</div>
</div>
{% end %}
</div> <!-- end user row-->
<div class="card-header header-sm d-flex justify-content-between align-items-center">
<h4 class="card-title"><i class="far fa-server"></i> &nbsp;Retired Staff</h4>
</div>
<div class="row">
{% for person in data['staff']['retired'] %}
<div class="col-md-6 mb-5">
<div class="card rounded shadow-none">
<div class="card-body">
<div class="row">
<div class="col-md-4">
<div class="user-avatar mb-auto">
{% if person['pic'] %}
<img src="{{ person['pic'] }}"
alt="profile image" class="profile-img img-lg rounded-circle">
{% end %}
</div>
<div class="wrapper">
<div class="wrapper d-flex align-items-center">
<h4 class="mb-0 font-weight-medium">{{ person['name'] }}</h4>
</div>
<div class="wrapper d-flex align-items-center font-weight-medium text-muted">
{% if person['loc'] %}
<i class="mdi mdi-map-marker-outline mr-2"></i>
<p class="mb-0 text-muted">{{ person['loc'] }}</p>
{% end %}
</div>
</div>
</div>
<div class="col-md-8">
<div class="wrapper d-flex align-items-start">
{% if person['tags'][0] %}
<span class="btn btn-sm btn-info mr-2">{{ person['tags'][0] }}</span>
{% end %}
{% if person['tags'][1] %}
{% if type(person['tags'][1]) is list %}
<a href="{{ person['tags'][1][1] }}" class="btn btn-sm btn-primary mr-2">{{ person['tags'][1][0] }}</a>
{% else %}
<span class="btn btn-sm btn-primary mr-2">{{ person['tags'][1] }}</span>
{% end %}
{% end %}
{% if person['tags'][2] %}
{% if type(person['tags'][2]) is list %}
<a href="{{ person['tags'][2][1] }}" class="btn btn-sm btn-inverse-success mr-2">{{ person['tags'][2][0] }}</a>
{% else %}
<span class="btn btn-sm btn-inverse-success mr-2">{{ person['tags'][2] }}</span>
{% end %}
{% end %}
</div>
<div class="wrapper align-items-start pt-3">
{% if person['title'] %}
<h5><strong>{{ person['title'] }}</strong></h5>
{% end %}
<p>{{ person['blurb'] }}</p>
</div>
</div>
</div>
</div>
</div>
</div>
{% end %}
</div> <!-- end user row-->
</div>
</div>
<div class="card">
<div class="card-header header-sm d-flex justify-content-between align-items-center">
<h4 class="card-title"><i class="far fa-code"></i> &nbsp;{{ translate('credits', 'developmentTeam', data['lang']) }}</h4>
</div>
</div>
<div class="card-body">
<div class="row">
{% for person in data['staff']['development'] %}
<div class="col-lg-6 mb-5">
<div class="card rounded shadow-none">
<div class="row">
<div class="row">
<div class="col-md-4" style="max-width: fit-content;">
<div class="col-lg-6 grid-margin stretch-card">
<div class="card">
<div class="card-body">
<h4 class="card-title">Patreon Supporters</h4>
<p class="card-description"> A huge <code>thank you</code>&nbsp; to our Patreon supporters! | <span style="color: #9365B8">Last Update: {{ data["lastUpdate"] }}</span></p>
<table class="table table-hover">
<thead>
<tr>
<th>Name</th>
<th>Level</th>
</tr>
</thead>
<tbody>
{% for pat in data["patrons"] %}
<tr>
<td>{{ pat["name"] }}</td>
<td>
{% if pat["level"] == "Crafty Sustainer" %}
<span class="btn btn-sm btn-info mr-2">Sustainer</span>
{% elif pat["level"] == "Crafty Advocate" %}
<span class="btn btn-sm btn-primary mr-2">Advocate</span>
{% elif pat["level"] == "Crafty Supporter" %}
<span class="btn btn-sm btn-inverse-success mr-2">Supporter</span>
<div class="user-avatar mb-auto">
{% if person['pic'] %}
<img src="{{ person['pic'] }}" alt="profile image" class="profile-img img-lg rounded-circle">
{% else %}
<span class="btn btn-sm btn-secondary mr-2">Other</span>
<div alt="profil image" class="profile-img img-lg rounded-circle">
<img src="/static/assets/images/credits/user-circle-solid.svg" alt="profile image" class="profile-img img-lg rounded-circle">
</div>
{% end %}
</td>
</tr>
{% end %}
</div>
</tbody>
</table>
</div>
</div>
</div>
<div class="wrapper">
<div class="wrapper d-flex align-items-center">
<h4 class="mb-0 font-weight-medium">{{ person['name'] }}</h4>
</div>
<div class="col-lg-6 grid-margin stretch-card">
<div class="card">
<div class="card-body">
<h4 class="card-title">Language Translation</h4>
<p class="card-description"> A huge <code>thank you</code>&nbsp; to our community who translate! </p>
<table class="table table-hover">
<thead>
<tr>
<th>Name</th>
<th>Status</th>
</tr>
</thead>
<tbody>
{% for person in data['translations'] %}
<tr>
<td>{{ person }}</td>
<td>
{% for language in data['translations'][person] %}
<span class="btn btn-sm btn-inverse-success mr-2">{{ language }}</span>
<div class="wrapper d-flex align-items-center font-weight-medium text-muted">
{% if person['loc'] %}
<i class="mdi mdi-map-marker-outline mr-2"></i>
<p class="mb-0 text-muted">{{ person['loc'] }}</p>
{% end %}
</div>
</div>
</div>
<div class="col-md-8">
<div class="wrapper d-flex align-items-start">
{% if person['tags'][0] %}
<span class="btn btn-sm btn-info mr-2">{{ person['tags'][0] }}</span>
{% end %}
</td>
</tr>
{% end %}
</tbody>
</table>
{% if person['tags'][1] %}
{% if type(person['tags'][1]) is list %}
<a href="{{ person['tags'][1][1] }}" class="btn btn-sm btn-primary mr-2">{{ person['tags'][1][0] }}</a>
{% else %}
<span class="btn btn-sm btn-primary mr-2">{{ person['tags'][1] }}</span>
{% end %}
{% end %}
{% if person['tags'][2] %}
{% if type(person['tags'][2]) is list %}
<a href="{{ person['tags'][2][1] }}" class="btn btn-sm btn-inverse-success mr-2">{{ person['tags'][2][0] }}</a>
{% else %}
<span class="btn btn-sm btn-inverse-success mr-2">{{ person['tags'][2] }}</span>
{% end %}
{% end %}
</div>
<div class="wrapper align-items-start pt-3">
{% if person['title'] %}
<h5><strong>Crafty's {{ person['title'] }}</strong></h5>
{% end %}
<p>{{ person['blurb'] }}</p>
</div>
</div>
</div>
</div>
</div>
{% end %}
</div>
</div>
</div> <!-- end of user row -->
</div>
</div>
<!-- content-wrapper ends -->
{% end %}
<br />
{% block js %}
<script>
<div class="card">
<div class="card-header header-sm d-flex justify-content-between align-items-center">
<h4 class="card-title"><i class="fa fa-book"></i> &nbsp;{{ translate('credits', 'supportTeam', data['lang'])
}}</h4>
</div>
<div class="card-body">
<div class="row">
{% for person in data['staff']['support'] %}
<div class="col-lg-6 mb-5">
<div class="card rounded shadow-none">
$( document ).ready(function() {
console.log('ready for JS!')
<div class="row">
<div class="col-md-4" style="max-width: fit-content;">
});
</script>
<div class="user-avatar mb-auto">
{% if person['pic'] %}
<img src="{{ person['pic'] }}" alt="profile image" class="profile-img img-lg rounded-circle">
{% else %}
<div alt="profil image" class="profile-img img-lg rounded-circle">
<img src="/static/assets/images/credits/user-circle-solid.svg" alt="profile image" class="profile-img img-lg rounded-circle">
</div>
{% end %}
</div>
{% end %}
<div class="wrapper">
<div class="wrapper d-flex align-items-center">
<h4 class="mb-0 font-weight-medium">{{ person['name'] }}</h4>
</div>
<div class="wrapper d-flex align-items-center font-weight-medium text-muted">
{% if person['loc'] %}
<i class="mdi mdi-map-marker-outline mr-2"></i>
<p class="mb-0 text-muted">{{ person['loc'] }}</p>
{% end %}
</div>
</div>
</div>
<div class="col-md-8">
<div class="wrapper d-flex align-items-start">
{% if person['tags'][0] %}
<span class="btn btn-sm btn-info mr-2">{{ person['tags'][0] }}</span>
{% end %}
{% if person['tags'][1] %}
{% if type(person['tags'][1]) is list %}
<a href="{{ person['tags'][1][1] }}" class="btn btn-sm btn-primary mr-2">{{ person['tags'][1][0] }}</a>
{% else %}
<span class="btn btn-sm btn-primary mr-2">{{ person['tags'][1] }}</span>
{% end %}
{% end %}
{% if person['tags'][2] %}
{% if type(person['tags'][2]) is list %}
<a href="{{ person['tags'][2][1] }}" class="btn btn-sm btn-inverse-success mr-2">{{ person['tags'][2][0] }}</a>
{% else %}
<span class="btn btn-sm btn-inverse-success mr-2">{{ person['tags'][2] }}</span>
{% end %}
{% end %}
</div>
<div class="wrapper align-items-start pt-3">
{% if person['title'] %}
<h5><strong>{{ person['title'] }}</strong></h5>
{% end %}
<p>{{ person['blurb'] }}</p>
</div>
</div>
</div>
</div>
</div>
{% end %}
</div>
</div> <!-- end user row-->
</div>
<br />
<div class="card">
<div class="card-header header-sm d-flex justify-content-between align-items-center">
<h4 class="card-title"><i class="far fa-server"></i> &nbsp;{{ translate('credits', 'retiredStaff', data['lang']) }}</h4>
</div>
<div class="card-body">
<div class="row">
{% for person in data['staff']['retired'] %}
<div class="col-lg-6 mb-5">
<div class="card rounded shadow-none">
<div class="row">
<div class="col-md-4" style="max-width: fit-content;">
<div class="card-img-top user-avatar mb-auto">
{% if person['pic'] %}
<img src="{{ person['pic'] }}" alt="profile image" class="profile-img img-lg rounded-circle">
{% else %}
<div alt="profil image" class="profile-img img-lg rounded-circle">
<img src="/static/assets/images/credits/user-circle-solid.svg" alt="profile image">
</div>
{% end %}
</div>
<div class="wrapper">
<div class="wrapper d-flex align-items-center">
<h4 class="mb-0 font-weight-medium">{{ person['name'] }}</h4>
</div>
<div class="wrapper d-flex align-items-center font-weight-medium text-muted">
{% if person['loc'] %}
<i class="mdi mdi-map-marker-outline mr-2"></i>
<p class="mb-0 text-muted">{{ person['loc'] }}</p>
{% end %}
</div>
</div>
</div>
<div class="col-md-8">
<div class="wrapper d-flex align-items-start">
{% if person['tags'][0] %}
<span class="btn btn-sm btn-info mr-2">{{ person['tags'][0] }}</span>
{% end %}
{% if person['tags'][1] %}
{% if type(person['tags'][1]) is list %}
<a href="{{ person['tags'][1][1] }}" class="btn btn-sm btn-primary mr-2">{{ person['tags'][1][0] }}</a>
{% else %}
<span class="btn btn-sm btn-primary mr-2">{{ person['tags'][1] }}</span>
{% end %}
{% end %}
{% if person['tags'][2] %}
{% if type(person['tags'][2]) is list %}
<a href="{{ person['tags'][2][1] }}" class="btn btn-sm btn-inverse-success mr-2">{{ person['tags'][2][0] }}</a>
{% else %}
<span class="btn btn-sm btn-inverse-success mr-2">{{ person['tags'][2] }}</span>
{% end %}
{% end %}
</div>
<div class="wrapper align-items-start pt-3">
{% if person['title'] %}
<h5><strong>{{ person['title'] }}</strong></h5>
{% end %}
<p>{{ person['blurb'] }}</p>
</div>
</div>
</div>
</div>
</div>
{% end %}
</div> <!-- end user row-->
</div>
</div>
<br />
<div class="row">
<div class="col-lg-6 grid-margin stretch-card">
<div class="card">
<div class="card-header header-sm d-flex justify-content-between align-items-center">
<h4 class="card-title"><i class="fab fa-patreon"></i> {{ translate('credits', 'patreonSupporter',
data['lang'])
}}</h4>
</div>
<div class="card-body">
<p class="card-description"> {{ translate('credits', 'hugeDesc', data['lang']) }}
<code>{{ translate('credits', 'thankYou', data['lang']) }}</code>&nbsp; {{ translate('credits', 'patreonDesc', data['lang']) }} | <span style="color: #9365B8">{{ translate('credits', 'patreonUpdate', data['lang']) }} {{ data["lastUpdate"] }}</span>
</p>
<table class="table table-hover">
<thead>
<tr>
<th>{{ translate('credits', 'patreonName', data['lang']) }}</th>
<th>{{ translate('credits', 'patreonLevel', data['lang']) }}</th>
</tr>
</thead>
<tbody>
{% for pat in data["patrons"] %}
<tr>
<td>{{ pat["name"] }}</td>
<td>
{% if pat["level"] == "Crafty Sustainer" %}
<span class="btn btn-sm btn-info mr-2">Sustainer</span>
{% elif pat["level"] == "Crafty Advocate" %}
<span class="btn btn-sm btn-primary mr-2">Advocate</span>
{% elif pat["level"] == "Crafty Supporter" %}
<span class="btn btn-sm btn-inverse-success mr-2">Supporter</span>
{% else %}
<span class="btn btn-sm btn-secondary mr-2">{{ translate('credits', 'patreonOther', data['lang']) }}</span>
{% end %}
</td>
</tr>
{% end %}
</tbody>
</table>
</div>
</div>
</div>
<div class="col-lg-6 grid-margin stretch-card">
<div class="card">
<div class="card-header header-sm d-flex justify-content-between align-items-center">
<h4 class="card-title"><i class="far fa-language"></i> {{ translate('credits', 'translationTitle', data['lang']) }}</h4>
</div>
<div class="card-body">
<p class="card-text"> {{ translate('credits', 'hugeDesc', data['lang']) }}
<code>{{ translate('credits', 'thankYou', data['lang']) }}</code>&nbsp; {{ translate('credits', 'translationDesc', data['lang']) }}
</p>
<table class="table table-hover">
<thead>
<tr>
<th>{{ translate('credits', 'translationName', data['lang']) }}</th>
<th>{{ translate('credits', 'translator', data['lang']) }}</th>
</tr>
</thead>
<tbody>
{% for person in data['translations'] %}
<tr>
<td>{{ person }}</td>
<td class="pb-0">
<div class="row">
{% for language in data['translations'][person] %}
<span class="btn btn-sm btn-inverse-success mr-2" style="margin-bottom: 12px;">{{ language }}</span>
{% end %}
</div>
</td>
</tr>
{% end %}
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<!-- content-wrapper ends -->
{% end %}
{% block js %}
<script>
$(document).ready(function () {
console.log('ready for JS!')
});
</script>
{% end %}

View File

@ -1,5 +1,5 @@
<!DOCTYPE html>
<html lang="en">
<html lang="{{ data['lang_page'] }}">
<head>
<!-- Required meta tags -->

View File

@ -510,6 +510,24 @@
"superUser": "Super User",
"deleteKeyConfirmation": "Do you want to delete this API key? This cannot be undone.",
"deleteKeyConfirmationTitle": "Remove API key ${keyId}?"
},
"credits": {
"pageTitle": "Credits",
"pageDescription": "Without these people, you wouldn't have Crafty",
"developmentTeam": "Development Team",
"supportTeam": "Support and Documentation Team",
"retiredStaff": "Retired Staff",
"hugeDesc": "A huge",
"thankYou": "THANK YOU",
"patreonSupporter": "Patreon Supporters",
"patreonDesc": "to our Patreon supporters!",
"patreonUpdate": "Last Update:",
"patreonName": "Name",
"patreonLevel": "Level",
"patreonOther": "Other",
"translationTitle": "Language Translation",
"translationDesc": "to our community who translate!",
"translationName": "Name",
"translator": "Translators"
}
}

View File

@ -89,7 +89,7 @@
"allServers": "Tous les Serverus",
"server": "Serveur",
"actions": "Actions",
"world": "Monde",
"size": "Taille du Serveur",
"motd": "MOTD",
"version": "Version",
"status": "Statut",
@ -240,7 +240,7 @@
"options": "Options",
"restoring": "Restauration de la sauvegarde. Cela peut prendre un peu de temps. S'il vous plaît soyez patient.",
"restore": "Restaurer",
"confirmRestore": "Êtes-vous sûr de vouloir restaurer à partir de cette sauvegarde. Tous les fichiers du serveur actuel passeront à l'état de sauvegarde et seront irrécupérables.",,
"confirmRestore": "Êtes-vous sûr de vouloir restaurer à partir de cette sauvegarde. Tous les fichiers du serveur actuel passeront à l'état de sauvegarde et seront irrécupérables.",
"excludedBackups": "Dossiers Exclus : ",
"excludedChoose": "Choisir les dossiers à exclure de la sauvegarde",
"clickExclude": "Cliquer pour sélectionner les Exclusions",
@ -510,5 +510,24 @@
"superUser": "Super Utilisateur",
"deleteKeyConfirmation": "Es-tu sûr de vouloir supprimer cette clé API? Tu ne pourras plus revenir en arrière.",
"deleteKeyConfirmationTitle": "Supprimer la clé API ${keyId}?"
},
"credits": {
"pageTitle": "Crédits",
"pageDescription": "Sans ces personnes, vous n'auriez pas Crafty",
"developmentTeam": "Equipe de Développement",
"supportTeam": "Equipe de Support et de Documentation",
"retiredStaff": "Retraités de Crafty",
"hugeDesc": "Un Enorme",
"thankYou": "MERCI",
"patreonSupporter": "Soutiens Patreon",
"patreonDesc": "à nos Soutiens Patreon !",
"patreonUpdate": "Dernière mise à Jour :",
"patreonName": "Nom",
"patreonLevel": "Niveau",
"patreonOther": "Autre",
"translationTitle": "Traductions",
"translationDesc": "à notre communauté qui traduit Crafty !",
"translationName": "Langue",
"translator": "Traducteurs"
}
}