Add basic templates and locales
This commit is contained in:
parent
9a649317da
commit
2be49227e7
@ -0,0 +1 @@
|
||||
default_app_config = 'lg.apps.LgConfig'
|
@ -49,6 +49,8 @@ MIDDLEWARE = [
|
||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||
'django.contrib.messages.middleware.MessageMiddleware',
|
||||
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
||||
'django.middleware.locale.LocaleMiddleware',
|
||||
'django.contrib.sites.middleware.CurrentSiteMiddleware',
|
||||
]
|
||||
|
||||
ROOT_URLCONF = 'lglog.urls'
|
||||
@ -56,7 +58,7 @@ ROOT_URLCONF = 'lglog.urls'
|
||||
TEMPLATES = [
|
||||
{
|
||||
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
||||
'DIRS': [BASE_DIR / 'templates'],
|
||||
'DIRS': [BASE_DIR / 'lglog/templates'],
|
||||
'APP_DIRS': True,
|
||||
'OPTIONS': {
|
||||
'context_processors': [
|
||||
@ -105,7 +107,13 @@ AUTH_PASSWORD_VALIDATORS = [
|
||||
# Internationalization
|
||||
# https://docs.djangoproject.com/en/3.1/topics/i18n/
|
||||
|
||||
LANGUAGE_CODE = 'fr'
|
||||
LANGUAGE_CODE = 'en'
|
||||
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
LANGUAGES = [
|
||||
('en', _('English')),
|
||||
('fr', _('French')),
|
||||
]
|
||||
|
||||
TIME_ZONE = 'Europe/Paris'
|
||||
|
||||
|
107
lglog/templates/base.html
Normal file
107
lglog/templates/base.html
Normal file
@ -0,0 +1,107 @@
|
||||
{% load static i18n static %}
|
||||
|
||||
<!DOCTYPE html>
|
||||
{% get_current_language as LANGUAGE_CODE %}{% get_current_language_bidi as LANGUAGE_BIDI %}
|
||||
<html lang="{{ LANGUAGE_CODE|default:"en" }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %} class="position-relative h-100">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<title>
|
||||
{% block title %}{{ title }}{% endblock title %} - Historique loup-garou
|
||||
</title>
|
||||
<meta name="description" content="Historique du loup-garou">
|
||||
|
||||
{# Favicon #}
|
||||
<link rel="shortcut icon" href="{% static "favicon.ico" %}">
|
||||
<meta name="theme-color" content="#ffffff">
|
||||
{% if no_cache %}
|
||||
<meta name="turbolinks-cache-control" content="no-cache">
|
||||
{% endif %}
|
||||
|
||||
{# Bootstrap CSS #}
|
||||
<link rel="stylesheet"
|
||||
href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"
|
||||
integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"
|
||||
crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.13.0/css/all.css">
|
||||
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.13.0/css/v4-shims.css">
|
||||
|
||||
{# JQuery, Bootstrap and Turbolinks JavaScript #}
|
||||
<script src="https://code.jquery.com/jquery-3.4.1.min.js"
|
||||
integrity="sha384-vk5WoKIaW/vJyUAd9n/wmopsmNhiy+L2Z+SBxGYnUkunIxVxAv/UtMOhba/xskxh"
|
||||
crossorigin="anonymous"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"
|
||||
integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"
|
||||
crossorigin="anonymous"></script>
|
||||
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"
|
||||
integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6"
|
||||
crossorigin="anonymous"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/turbolinks/5.2.0/turbolinks.js"
|
||||
crossorigin="anonymous"></script>
|
||||
|
||||
{# Si un formulaire requiert des données supplémentaires (notamment JS), les données sont chargées #}
|
||||
{% if form.media %}
|
||||
{{ form.media }}
|
||||
{% endif %}
|
||||
|
||||
{% block extracss %}{% endblock %}
|
||||
</head>
|
||||
<body class="d-flex w-100 h-100 flex-column">
|
||||
<main class="mb-auto">
|
||||
<nav class="navbar navbar-expand-md navbar-light bg-light fixed-navbar shadow-sm">
|
||||
</nav>
|
||||
{% block fullcontent %}
|
||||
<div class="{% block containertype %}container{% endblock %} my-3">
|
||||
{% block contenttitle %}{% endblock %}
|
||||
<div id="messages"></div>
|
||||
<div id="content">
|
||||
{% block content %}
|
||||
<p>Default content...</p>
|
||||
{% endblock content %}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
</main>
|
||||
|
||||
<footer class="bg-light text-primary mt-auto py-2">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-10">
|
||||
<form action="{% url 'set_language' %}" method="post"
|
||||
class="form-inline">
|
||||
{% csrf_token %}
|
||||
<select title="language" name="language"
|
||||
class="form-control form-control-sm language"
|
||||
onchange="this.form.submit()">
|
||||
{% get_current_language as LANGUAGE_CODE %}
|
||||
{% get_available_languages as LANGUAGES %}
|
||||
{% for lang_code, lang_name in LANGUAGES %}
|
||||
<option value="{{ lang_code }}"
|
||||
{% if lang_code == LANGUAGE_CODE %}
|
||||
selected{% endif %}>
|
||||
{{ lang_name }} ({{ lang_code }})
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<noscript>
|
||||
<input type="submit">
|
||||
</noscript>
|
||||
</form>
|
||||
</div>
|
||||
<div class="col text-right">
|
||||
<a href="#" data-turbolinks="false" class="text-muted">
|
||||
<i class="fa fa-arrow-up" aria-hidden="true"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script>
|
||||
CSRF_TOKEN = "{{ csrf_token }}";
|
||||
$(".invalid-feedback").addClass("d-block");
|
||||
</script>
|
||||
|
||||
{% block extrajavascript %}{% endblock %}
|
||||
</body>
|
||||
</html>
|
24
lglog/templates/base_modal.html
Normal file
24
lglog/templates/base_modal.html
Normal file
@ -0,0 +1,24 @@
|
||||
{% load i18n %}
|
||||
|
||||
<div id="{{ modal_id }}Modal" class="modal fade" tabindex="-1" role="dialog">
|
||||
<div class="modal-dialog {{ modal_additional_class }}" role="document">
|
||||
<form id="{{ modal_id }}-form" method="{{ modal_form_method|default:"post" }}" action="{{ modal_action }}" enctype="{{ modal_enctype|default:"application/x-www-form-urlencoded" }}">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">{{ modal_title }}</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">{{ modal_content }}</div>
|
||||
<div class="modal-footer">
|
||||
{{ extra_modal_button }}
|
||||
{% if modal_button %}
|
||||
<button type="submit" class="btn btn-{{ modal_button_type|default:"primary" }}">{{ modal_button }}</button>
|
||||
{% endif %}
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">{% trans "Close" %}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
9
lglog/templates/index.html
Normal file
9
lglog/templates/index.html
Normal file
@ -0,0 +1,9 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% load i18n %}
|
||||
|
||||
{% block title %}{% trans "Index" %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
Historique de loup-garou
|
||||
{% endblock %}
|
@ -1,6 +1,13 @@
|
||||
from django.contrib import admin
|
||||
from django.urls import path
|
||||
from django.contrib.auth.views import LoginView
|
||||
from django.urls import path, include
|
||||
from django.views.generic import TemplateView
|
||||
|
||||
urlpatterns = [
|
||||
path('admin/', admin.site.urls),
|
||||
path('', TemplateView.as_view(template_name="index.html"), name="index"),
|
||||
path('admin/', admin.site.urls, name="admin"),
|
||||
path('admin/doc/', include('django.contrib.admindocs.urls')),
|
||||
path('i18n/', include('django.conf.urls.i18n')),
|
||||
path('accounts/login/', LoginView.as_view()),
|
||||
path('accounts/', include('django.contrib.auth.urls')),
|
||||
]
|
||||
|
212
locale/fr/LC_MESSAGES/django.po
Normal file
212
locale/fr/LC_MESSAGES/django.po
Normal file
@ -0,0 +1,212 @@
|
||||
# LG Log translation file
|
||||
# Copyright (C) 2020 ynerant
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# Yohann D'ANELLO <ynerant@crans.org>, 2020.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: 1.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-11-15 21:17+0100\n"
|
||||
"PO-Revision-Date: 2020-11-15 21:12+0100\n"
|
||||
"Last-Translator: Yohann D'ANELLO <ynerant@crans.org>\n"
|
||||
"Language-Team: FR <LL@li.org>\n"
|
||||
"Language: FR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
|
||||
#: lg/models.py:11
|
||||
msgid "user"
|
||||
msgstr "utilisateur"
|
||||
|
||||
#: lg/models.py:16
|
||||
msgid "dead"
|
||||
msgstr "mort"
|
||||
|
||||
#: lg/models.py:21
|
||||
msgid "infected"
|
||||
msgstr "infecté"
|
||||
|
||||
#: lg/models.py:26
|
||||
msgid "hacked"
|
||||
msgstr "hacké"
|
||||
|
||||
#: lg/models.py:31
|
||||
msgid "captain"
|
||||
msgstr "capitaine"
|
||||
|
||||
#: lg/models.py:50 lg/models.py:112
|
||||
msgid "player"
|
||||
msgstr "joueur"
|
||||
|
||||
#: lg/models.py:51
|
||||
msgid "players"
|
||||
msgstr "joueurs"
|
||||
|
||||
#: lg/models.py:59
|
||||
msgid "werewolf"
|
||||
msgstr "loup-garou"
|
||||
|
||||
#: lg/models.py:60
|
||||
msgid "werewolves"
|
||||
msgstr "loups-garous"
|
||||
|
||||
#: lg/models.py:68
|
||||
msgid "cupidon"
|
||||
msgstr "cupidon"
|
||||
|
||||
#: lg/models.py:69
|
||||
msgid "cupidons"
|
||||
msgstr "cupidons"
|
||||
|
||||
#: lg/models.py:77
|
||||
msgid "witch"
|
||||
msgstr "sorcière"
|
||||
|
||||
#: lg/models.py:78
|
||||
msgid "witches"
|
||||
msgstr "sorcières"
|
||||
|
||||
#: lg/models.py:86
|
||||
msgid "raven"
|
||||
msgstr "corbeau"
|
||||
|
||||
#: lg/models.py:87
|
||||
msgid "ravens"
|
||||
msgstr "corbeaux"
|
||||
|
||||
#: lg/models.py:95
|
||||
msgid "dove"
|
||||
msgstr "colombe"
|
||||
|
||||
#: lg/models.py:96
|
||||
msgid "doves"
|
||||
msgstr "colombes"
|
||||
|
||||
#: lg/models.py:104
|
||||
msgid "hacker"
|
||||
msgstr "hacker"
|
||||
|
||||
#: lg/models.py:105
|
||||
msgid "hackers"
|
||||
msgstr "hackers"
|
||||
|
||||
#: lg/models.py:117
|
||||
msgid "night"
|
||||
msgstr "nuit"
|
||||
|
||||
#: lg/models.py:124
|
||||
msgid "action"
|
||||
msgstr "action"
|
||||
|
||||
#: lg/models.py:125
|
||||
msgid "actions"
|
||||
msgstr "actions"
|
||||
|
||||
#: lg/models.py:133 lg/models.py:146 lg/models.py:153 lg/models.py:190
|
||||
#: lg/models.py:207 lg/models.py:224 lg/models.py:231 lg/models.py:261
|
||||
msgid "target"
|
||||
msgstr "cible"
|
||||
|
||||
#: lg/models.py:137
|
||||
msgid "werewolf action"
|
||||
msgstr "action de loup-garou"
|
||||
|
||||
#: lg/models.py:138
|
||||
msgid "werewolf actions"
|
||||
msgstr "actions de loup-garou"
|
||||
|
||||
#: lg/models.py:170
|
||||
msgid "saved"
|
||||
msgstr "sauvé"
|
||||
|
||||
#: lg/models.py:177
|
||||
msgid "killed"
|
||||
msgstr "tué"
|
||||
|
||||
#: lg/models.py:181
|
||||
msgid "witch action"
|
||||
msgstr "action de sorcière"
|
||||
|
||||
#: lg/models.py:182
|
||||
msgid "witch actions"
|
||||
msgstr "actions de sorcière"
|
||||
|
||||
#: lg/models.py:194 lg/models.py:211
|
||||
msgid "message"
|
||||
msgstr "message"
|
||||
|
||||
#: lg/models.py:198
|
||||
msgid "raven action"
|
||||
msgstr "action de corbeau"
|
||||
|
||||
#: lg/models.py:199
|
||||
msgid "raven actions"
|
||||
msgstr "actions de corbeau"
|
||||
|
||||
#: lg/models.py:215
|
||||
msgid "dove action"
|
||||
msgstr "action de colombe"
|
||||
|
||||
#: lg/models.py:216
|
||||
msgid "dove actions"
|
||||
msgstr "actions de colombe"
|
||||
|
||||
#: lg/models.py:241
|
||||
msgid "hacker action"
|
||||
msgstr "action de hacker"
|
||||
|
||||
#: lg/models.py:242
|
||||
msgid "hacker actions"
|
||||
msgstr "actions de hacker"
|
||||
|
||||
#: lg/models.py:247
|
||||
msgid "day"
|
||||
msgstr "jour"
|
||||
|
||||
#: lg/models.py:254
|
||||
msgid "voter"
|
||||
msgstr "voteur"
|
||||
|
||||
#: lg/models.py:274
|
||||
msgid "vote"
|
||||
msgstr "vote"
|
||||
|
||||
#: lg/models.py:275
|
||||
msgid "votes"
|
||||
msgstr "votes"
|
||||
|
||||
#: lg/models.py:280
|
||||
msgid "captain vote"
|
||||
msgstr "vote de capitaine"
|
||||
|
||||
#: lg/models.py:281
|
||||
msgid "captain votes"
|
||||
msgstr "votes de capitaine"
|
||||
|
||||
#: lg/models.py:309
|
||||
msgid "eject vote"
|
||||
msgstr "vote d'éjection"
|
||||
|
||||
#: lg/models.py:310
|
||||
msgid "eject votes"
|
||||
msgstr "votes d'éjection"
|
||||
|
||||
#: lglog/settings.py:112
|
||||
msgid "English"
|
||||
msgstr "Anglais"
|
||||
|
||||
#: lglog/settings.py:113
|
||||
msgid "French"
|
||||
msgstr "Français"
|
||||
|
||||
#: lglog/templates/base_modal.html:19
|
||||
msgid "Close"
|
||||
msgstr "Fermer"
|
||||
|
||||
#: lglog/templates/index.html:5
|
||||
msgid "Index"
|
||||
msgstr "Accueil"
|
Loading…
Reference in New Issue
Block a user