Merge branch 'i18n'

Add Catalan and Spanish locales.
This commit is contained in:
Santiago Lamora 2020-01-29 11:12:48 +01:00
commit 3414a095d8
12 changed files with 877 additions and 21 deletions

View File

@ -41,3 +41,29 @@ python manage.py runserver
6. Open [http://127.0.0.1:8000/](http://127.0.0.1:8000/) in your browser. 6. Open [http://127.0.0.1:8000/](http://127.0.0.1:8000/) in your browser.
7. If everything works, follow [Django deployment instructions](https://docs.djangoproject.com/en/2.2/howto/deployment/). 7. If everything works, follow [Django deployment instructions](https://docs.djangoproject.com/en/2.2/howto/deployment/).
## How to generate/update translations
1. Go to musician folder and run:
```bash
cd django-musician/musician
../manage.py makemessages
```
```bash
processing locale ca
processing locale es
```
2. Edit generated `.po` files and save it when you have finished.
```
musician/locale/ca/LC_MESSAGES/django.po # catalan
musician/locale/es/LC_MESSAGES/django.po # spanish
```
3. To able to use a `.po` file in an application, it needs to be compiled to the binary `.mo` file format.
```bash
../manage.py compilemessages
```
More detailed instrucions on [Django Translation docs](https://docs.djangoproject.com/en/2.2/topics/i18n/translation/)

View File

@ -0,0 +1,399 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-01-23 17:49+0100\n"
"PO-Revision-Date: 2020-01-28 17:27+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: ca\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"
"X-Generator: Poedit 2.2.4\n"
#: api.py:108 api.py:117
msgid "No domain found matching the query"
msgstr "No trobem cap domini que coincideixi amb la teva consulta"
#: mixins.py:14
msgid "Domains & websites"
msgstr "Dominis i llocs web"
#: mixins.py:15
msgid "Mails"
msgstr "Correus"
#. Translators: This message appears on the page title
#: mixins.py:16 views.py:226
msgid "Mailing lists"
msgstr "Llistes de correu"
#. Translators: This message appears on the page title
#: mixins.py:17 models.py:138 views.py:255
msgid "Databases"
msgstr "Bases de dades"
#: mixins.py:18
msgid "SaaS"
msgstr "SaaS"
#: models.py:139
#, fuzzy
msgid "Description details for databases page."
msgstr "Consulta la configuració de les teves bases de dades."
#. Translators: This message appears on the page title
#: models.py:200 views.py:169
msgid "Mail addresses"
msgstr "Adreces de correu"
#: models.py:201
#, fuzzy
msgid "Description details for mail addresses page."
msgstr "Consulta aquí totes les adreces de correu que tens actives."
#: models.py:243
msgid "Mailing list"
msgstr "Llista de correu"
#: models.py:244
#, fuzzy
msgid "Description details for mailinglist page."
msgstr "Consulta aquí els detalls de les teves llistes de correu."
#: models.py:267
msgid "Software as a Service (SaaS)"
msgstr "Software as a Service (SaaS)"
#: models.py:268
#, fuzzy
msgid "Description details for SaaS page."
msgstr ""
"Si tens algun servei SaaS (Software as a Service) contractat, aquí trobaràs "
"els seus detalls de configuració."
#: templates/auth/login.html:59
msgid "Log in"
msgstr "Accedeix"
#: templates/auth/login.html:67
msgid "Forgot your password? Click here to recover"
msgstr "Has oblidat la teva contrasenya? Fes click aquí per recuperar-la"
#: templates/auth/login.html:77
msgid "Forgot your password?"
msgstr "Has oblidat la teva contrasenya?"
#: templates/auth/login.html:83
#, python-format
msgid ""
"Send an email to <a href=\"mailto:%(support_email)s\">%(support_email)s</a> "
"including your username and we will provide instructions."
msgstr ""
"Envia un correu a <a href=\"mailto:%(support_email)s\">%(support_email)s</a> "
"indicant el teu nom dusuari/a i texplicarem què fer."
#: templates/musician/base.html:60
msgid "Settings"
msgstr "Configuració"
#: templates/musician/base.html:63 templates/musician/profile.html:6
msgid "Profile"
msgstr "Perfil"
#. Translators: This message appears on the page title
#: templates/musician/base.html:64 templates/musician/billing.html:6
#: views.py:147
msgid "Billing"
msgstr "Factures"
#: templates/musician/base.html:72
msgid "Log out"
msgstr "Surt"
#: templates/musician/billing.html:7
#, fuzzy
msgid "Billing page description."
msgstr "Consulta i descarrega les teves factures."
#: templates/musician/billing.html:19
msgid "Number"
msgstr "Número"
#: templates/musician/billing.html:20
msgid "Bill date"
msgstr "Data de la factura"
#: templates/musician/billing.html:21 templates/musician/databases.html:17
#: templates/musician/domain_detail.html:17 templates/musician/mail.html:22
msgid "Type"
msgstr "Tipus"
#: templates/musician/billing.html:22
msgid "Total"
msgstr "Total"
#: templates/musician/billing.html:23
msgid "Download PDF"
msgstr "Descarrega un PDF"
#: templates/musician/components/table_paginator.html:15
msgid "Previous"
msgstr "Prèvia"
#: templates/musician/components/table_paginator.html:29
msgid "Next"
msgstr "Següent"
#: templates/musician/dashboard.html:6
msgid "Welcome back"
msgstr "Hola de nou!"
#: templates/musician/dashboard.html:8
#, python-format
msgid "Last time you logged in was: %(last_login)s"
msgstr "El darrer cop que vas accedir va ser el dia: %(last_login)s"
#: templates/musician/dashboard.html:10
msgid "It's the first time you log into the system, welcome on board!"
msgstr "És el primer cop que accedeixes, et donem la benvinguda!"
#: templates/musician/dashboard.html:24
msgid "Notifications"
msgstr "Notificacions"
#: templates/musician/dashboard.html:28
msgid "There is no notifications at this time."
msgstr "No tens cap notificació."
#: templates/musician/dashboard.html:35
msgid "Your domains and websites"
msgstr "Els teus dominis i llocs web"
#: templates/musician/dashboard.html:36
#, fuzzy
msgid "Dashboard page description."
msgstr ""
"Aquest és el teu panell de gestió, des don podràs consultar la configuració "
"dels serveis que Pangea tofereix."
#: templates/musician/dashboard.html:51
msgid "view configuration"
msgstr "veure la configuració"
#: templates/musician/dashboard.html:58
msgid "Expiration date"
msgstr "Data de venciment"
#: templates/musician/dashboard.html:65
msgid "Mail"
msgstr "Correu"
#: templates/musician/dashboard.html:68
msgid "mail addresses created"
msgstr "adreces de correu creades"
#: templates/musician/dashboard.html:71
msgid "mail address left"
msgstr "adreces de correu per activar"
#: templates/musician/dashboard.html:77
msgid "Mail list"
msgstr "Llista de correu"
#. Translators: This message appears on the page title
#: templates/musician/dashboard.html:82 views.py:264
msgid "Software as a Service"
msgstr "Software as a Service"
#: templates/musician/dashboard.html:84
msgid "Nothing installed"
msgstr "No tens res instal·lat"
#: templates/musician/dashboard.html:89 views.py:42
msgid "Disk usage"
msgstr "Ús del disc"
#: templates/musician/dashboard.html:106
msgid "Configuration details"
msgstr "Detalls de configuració"
#: templates/musician/dashboard.html:113
msgid "FTP access:"
msgstr "Accés FTP:"
#. Translators: domain configuration detail modal
#: templates/musician/dashboard.html:115
msgid "Contact with the support team to get details concerning FTP access."
msgstr ""
"Contacteu-nos a <a href=“mailto:%(support_email)s”>%(support_email)s</a> per "
"saber com accedir al FTP."
#: templates/musician/dashboard.html:124
msgid "No website configured."
msgstr "No hi ha cap web configurada."
#: templates/musician/dashboard.html:126
msgid "Root directory:"
msgstr "Directori arrel:"
#: templates/musician/dashboard.html:127
msgid "Type:"
msgstr "Tipus:"
#: templates/musician/dashboard.html:132
msgid "View DNS records"
msgstr "Veure registres DNS"
#: templates/musician/databases.html:21
msgid "associated to"
msgstr "associada a"
#: templates/musician/databases.html:34
msgid "No users for this database."
msgstr "No hi ha persones usuàries daquesta base de dades."
#: templates/musician/databases.html:45
msgid "Open database manager"
msgstr "Obre el gestor de bases de dades"
#. Translators: database page when there isn't any database.
#. Translators: saas page when there isn't any saas.
#: templates/musician/databases.html:58 templates/musician/saas.html:49
msgid "Ooops! Looks like there is nothing here!"
msgstr "Mmmh, sembla que aquí no hi ha res!"
#: templates/musician/domain_detail.html:5
msgid "Go back"
msgstr "Tornar"
#: templates/musician/domain_detail.html:7
msgid "DNS settings for"
msgstr "Configuració DNS per a"
#: templates/musician/domain_detail.html:8
#, fuzzy
msgid "DNS settings page description."
msgstr "Consulta aquí la teva configuració DNS."
#: templates/musician/domain_detail.html:18
msgid "Value"
msgstr "Valor"
#: templates/musician/mail.html:6 templates/musician/mailinglists.html:6
msgid "Go to global"
msgstr "Totes les adreces"
#: templates/musician/mail.html:9 templates/musician/mailinglists.html:9
msgid "for"
msgstr "per a"
#: templates/musician/mail.html:20
msgid "Mail address"
msgstr "Adreça de correu"
#: templates/musician/mail.html:21
msgid "Aliases"
msgstr "Àlies"
#: templates/musician/mail.html:23
msgid "Type details"
msgstr "Detalls de cada tipus"
#: templates/musician/mailinglists.html:34
msgid "Active"
msgstr "Actiu"
#: templates/musician/mailinglists.html:36
msgid "Inactive"
msgstr "Inactiu"
#: templates/musician/profile.html:7
#, fuzzy
msgid "Little description on profile page."
msgstr "Canvia les teves dades daccés i opcions de perfil des daquí."
#: templates/musician/profile.html:11
msgid "User information"
msgstr "Informació dusuari/a"
#: templates/musician/profile.html:21
msgid "Preferred language:"
msgstr "Llenguatge preferit:"
#: templates/musician/profile.html:35
msgid "Billing information"
msgstr "Informació de facturació"
#: templates/musician/profile.html:49
msgid "payment method:"
msgstr "mètode de pagament:"
#: templates/musician/profile.html:60
msgid "Check your last bills"
msgstr "Consulta les teves darreres factures"
#: templates/musician/saas.html:18
msgid "Installed on"
msgstr "Instal·lat a"
#: templates/musician/saas.html:29
msgid "Service info"
msgstr "Informació del servei"
#: templates/musician/saas.html:30
msgid "active"
msgstr "actiu"
#: templates/musician/saas.html:37
msgid "Open service admin panel"
msgstr "Obre el panell dadministració del servei"
#. Translators: This message appears on the page title
#: views.py:32
msgid "Dashboard"
msgstr "Panell de gestió"
#: views.py:49
msgid "Traffic"
msgstr "Tràfic"
#: views.py:56
msgid "Mailbox usage"
msgstr "Ús despai a la bústia de correu"
#. Translators: This message appears on the page title
#: views.py:96
msgid "User profile"
msgstr "El teu perfil"
#. Translators: This message appears on the page title
#: views.py:154
msgid "Download bill"
msgstr "Descarrega la factura"
#. Translators: This message appears on the page title
#: views.py:272
msgid "Domain details"
msgstr "Detalls del domini"
#. Translators: This message appears on the page title
#: views.py:298
msgid "Login"
msgstr "Accés"
#~ msgid "databases created"
#~ msgstr "bases de dades creades"
#~ msgid "Username"
#~ msgstr "Nom dusuari/a"
#~ msgid "Password:"
#~ msgstr "Contrasenya:"

View File

@ -0,0 +1,399 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-01-23 17:49+0100\n"
"PO-Revision-Date: 2020-01-28 17:27+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: es\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"
"X-Generator: Poedit 2.2.4\n"
#: api.py:108 api.py:117
msgid "No domain found matching the query"
msgstr "No hay dominios que coincidan con tu búsqueda"
#: mixins.py:14
msgid "Domains & websites"
msgstr "Dominios y sitios web"
#: mixins.py:15
msgid "Mails"
msgstr "Correos"
#. Translators: This message appears on the page title
#: mixins.py:16 views.py:226
msgid "Mailing lists"
msgstr "Listas de correo"
#. Translators: This message appears on the page title
#: mixins.py:17 models.py:138 views.py:255
msgid "Databases"
msgstr "Bases de datos"
#: mixins.py:18
msgid "SaaS"
msgstr "SaaS"
#: models.py:139
#, fuzzy
msgid "Description details for databases page."
msgstr "Consulta la configuración de tus bases de datos."
#. Translators: This message appears on the page title
#: models.py:200 views.py:169
msgid "Mail addresses"
msgstr "Direcciones de correo"
#: models.py:201
#, fuzzy
msgid "Description details for mail addresses page."
msgstr "Consulta aquí todas las direcciones de correo que tienes activas."
#: models.py:243
msgid "Mailing list"
msgstr "Lista de correo"
#: models.py:244
#, fuzzy
msgid "Description details for mailinglist page."
msgstr "Consulta aquí los detalles de tus listas de correo."
#: models.py:267
msgid "Software as a Service (SaaS)"
msgstr "Software as a Service (SaaS)"
#: models.py:268
#, fuzzy
msgid "Description details for SaaS page."
msgstr ""
"Si tienes algún servicio SaaS (Software as a Service) contratado, aquí "
"encontrarás sus detalles de configuración."
#: templates/auth/login.html:59
msgid "Log in"
msgstr "Accede"
#: templates/auth/login.html:67
msgid "Forgot your password? Click here to recover"
msgstr "¿Olvidaste tu contraseña? Haz clic aquí para recuperarla"
#: templates/auth/login.html:77
msgid "Forgot your password?"
msgstr "¿Olvidaste tu contraseña?"
#: templates/auth/login.html:83
#, python-format
msgid ""
"Send an email to <a href=\"mailto:%(support_email)s\">%(support_email)s</a> "
"including your username and we will provide instructions."
msgstr ""
"Envía un correo a <a href=“mailto:%(support_email)s”>%(support_email)s</a> "
"indicando tu nombre de usuaria/o y te explicaremos qué hacer."
#: templates/musician/base.html:60
msgid "Settings"
msgstr "Configuración"
#: templates/musician/base.html:63 templates/musician/profile.html:6
msgid "Profile"
msgstr "Perfil"
#. Translators: This message appears on the page title
#: templates/musician/base.html:64 templates/musician/billing.html:6
#: views.py:147
msgid "Billing"
msgstr "Facturas"
#: templates/musician/base.html:72
msgid "Log out"
msgstr "Desconéctate"
#: templates/musician/billing.html:7
#, fuzzy
msgid "Billing page description."
msgstr "Consulta y descarga tus facturas."
#: templates/musician/billing.html:19
msgid "Number"
msgstr "Número"
#: templates/musician/billing.html:20
msgid "Bill date"
msgstr "Fecha de la factura"
#: templates/musician/billing.html:21 templates/musician/databases.html:17
#: templates/musician/domain_detail.html:17 templates/musician/mail.html:22
msgid "Type"
msgstr "Tipo"
#: templates/musician/billing.html:22
msgid "Total"
msgstr "Total"
#: templates/musician/billing.html:23
msgid "Download PDF"
msgstr "Descarga en PDF"
#: templates/musician/components/table_paginator.html:15
msgid "Previous"
msgstr "Previa"
#: templates/musician/components/table_paginator.html:29
msgid "Next"
msgstr "Siguiente"
#: templates/musician/dashboard.html:6
msgid "Welcome back"
msgstr "¡Hola de nuevo!"
#: templates/musician/dashboard.html:8
#, python-format
msgid "Last time you logged in was: %(last_login)s"
msgstr "La última vez que accediste fue el día: %(last_login)s"
#: templates/musician/dashboard.html:10
msgid "It's the first time you log into the system, welcome on board!"
msgstr "Es la primera vez que accedes: ¡te damos la bienvenida!"
#: templates/musician/dashboard.html:24
msgid "Notifications"
msgstr "Notificaciones"
#: templates/musician/dashboard.html:28
msgid "There is no notifications at this time."
msgstr "No tienes ninguna notificación."
#: templates/musician/dashboard.html:35
msgid "Your domains and websites"
msgstr "Tus dominios y sitios web"
#: templates/musician/dashboard.html:36
#, fuzzy
msgid "Dashboard page description."
msgstr ""
"Este es tu panel de gestión, desde donde podrás consultar la configuración "
"de los servicios que Pangea te ofrece."
#: templates/musician/dashboard.html:51
msgid "view configuration"
msgstr "ver la configuración"
#: templates/musician/dashboard.html:58
msgid "Expiration date"
msgstr "Fecha de vencimiento"
#: templates/musician/dashboard.html:65
msgid "Mail"
msgstr "Correo"
#: templates/musician/dashboard.html:68
msgid "mail addresses created"
msgstr "direcciones de correo creadas"
#: templates/musician/dashboard.html:71
msgid "mail address left"
msgstr "direcciones de correo por activar"
#: templates/musician/dashboard.html:77
msgid "Mail list"
msgstr "Lista de correo"
#. Translators: This message appears on the page title
#: templates/musician/dashboard.html:82 views.py:264
msgid "Software as a Service"
msgstr "Software as a Service"
#: templates/musician/dashboard.html:84
msgid "Nothing installed"
msgstr "No tienes nada instalado"
#: templates/musician/dashboard.html:89 views.py:42
msgid "Disk usage"
msgstr "Uso del disco"
#: templates/musician/dashboard.html:106
msgid "Configuration details"
msgstr "Detalles de configuración"
#: templates/musician/dashboard.html:113
msgid "FTP access:"
msgstr "Acceso FTP:"
#. Translators: domain configuration detail modal
#: templates/musician/dashboard.html:115
msgid "Contact with the support team to get details concerning FTP access."
msgstr ""
"Contactadnos a <a href=“mailto:%(support_email)s”>%(support_email)s</a> "
"para saber cómo acceder al FTP."
#: templates/musician/dashboard.html:124
msgid "No website configured."
msgstr "No hay ninguna web configurada."
#: templates/musician/dashboard.html:126
msgid "Root directory:"
msgstr "Directorio raíz:"
#: templates/musician/dashboard.html:127
msgid "Type:"
msgstr "Tipo:"
#: templates/musician/dashboard.html:132
msgid "View DNS records"
msgstr "Ver registros DNS"
#: templates/musician/databases.html:21
msgid "associated to"
msgstr "asociada a"
#: templates/musician/databases.html:34
msgid "No users for this database."
msgstr "No hay usuarias/os de esta base de datos."
#: templates/musician/databases.html:45
msgid "Open database manager"
msgstr "Abre el gestor de bases de datos"
#. Translators: database page when there isn't any database.
#. Translators: saas page when there isn't any saas.
#: templates/musician/databases.html:58 templates/musician/saas.html:49
msgid "Ooops! Looks like there is nothing here!"
msgstr "Mmmh… ¡parece que aquí no hay nada!"
#: templates/musician/domain_detail.html:5
msgid "Go back"
msgstr "Volver"
#: templates/musician/domain_detail.html:7
msgid "DNS settings for"
msgstr "Configuración DNS para"
#: templates/musician/domain_detail.html:8
#, fuzzy
msgid "DNS settings page description."
msgstr "Consulta aquí tu configuración DNS."
#: templates/musician/domain_detail.html:18
msgid "Value"
msgstr "Valor"
#: templates/musician/mail.html:6 templates/musician/mailinglists.html:6
msgid "Go to global"
msgstr "Todas las direcciones"
#: templates/musician/mail.html:9 templates/musician/mailinglists.html:9
msgid "for"
msgstr "para"
#: templates/musician/mail.html:20
msgid "Mail address"
msgstr "Dirección de correo"
#: templates/musician/mail.html:21
msgid "Aliases"
msgstr "Alias"
#: templates/musician/mail.html:23
msgid "Type details"
msgstr "Detalles de cada tipo"
#: templates/musician/mailinglists.html:34
msgid "Active"
msgstr "Activo"
#: templates/musician/mailinglists.html:36
msgid "Inactive"
msgstr "Inactivo"
#: templates/musician/profile.html:7
#, fuzzy
msgid "Little description on profile page."
msgstr "Cambia tus datos de acceso y opciones de perfil desde aquí."
#: templates/musician/profile.html:11
msgid "User information"
msgstr "Información de usuario/a"
#: templates/musician/profile.html:21
msgid "Preferred language:"
msgstr "Lenguaje preferido:"
#: templates/musician/profile.html:35
msgid "Billing information"
msgstr "Datos de facturación"
#: templates/musician/profile.html:49
msgid "payment method:"
msgstr "método de pago:"
#: templates/musician/profile.html:60
msgid "Check your last bills"
msgstr "Consulta tus últimas facturas"
#: templates/musician/saas.html:18
msgid "Installed on"
msgstr "Instalado en"
#: templates/musician/saas.html:29
msgid "Service info"
msgstr "Información del servicio"
#: templates/musician/saas.html:30
msgid "active"
msgstr "activo"
#: templates/musician/saas.html:37
msgid "Open service admin panel"
msgstr "Abre el panel de administración del servicio"
#. Translators: This message appears on the page title
#: views.py:32
msgid "Dashboard"
msgstr "Panel de gestión"
#: views.py:49
msgid "Traffic"
msgstr "Tráfico"
#: views.py:56
msgid "Mailbox usage"
msgstr "Uso de espacio en tu buzón de correo"
#. Translators: This message appears on the page title
#: views.py:96
msgid "User profile"
msgstr "Tu perfil"
#. Translators: This message appears on the page title
#: views.py:154
msgid "Download bill"
msgstr "Descarga la factura"
#. Translators: This message appears on the page title
#: views.py:272
msgid "Domain details"
msgstr "Detalles del dominio"
#. Translators: This message appears on the page title
#: views.py:298
msgid "Login"
msgstr "Accede"
#~ msgid "databases created"
#~ msgstr "bases de datos creadas"
#~ msgid "Username"
#~ msgstr "Nombre de usuario/a"
#~ msgid "Password:"
#~ msgstr "Contraseña:"

View File

@ -1,4 +1,5 @@
from django.contrib.auth.mixins import UserPassesTestMixin from django.contrib.auth.mixins import UserPassesTestMixin
from django.utils.translation import gettext_lazy as _
from django.views.generic.base import ContextMixin from django.views.generic.base import ContextMixin
from . import api, get_version from . import api, get_version
@ -10,11 +11,11 @@ class CustomContextMixin(ContextMixin):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
# generate services menu items # generate services menu items
services_menu = [ services_menu = [
{'icon': 'globe-europe', 'pattern_name': 'musician:dashboard', 'title': 'Domains & websites'}, {'icon': 'globe-europe', 'pattern_name': 'musician:dashboard', 'title': _('Domains & websites')},
{'icon': 'envelope', 'pattern_name': 'musician:mails', 'title': 'Mails'}, {'icon': 'envelope', 'pattern_name': 'musician:mails', 'title': _('Mails')},
{'icon': 'mail-bulk', 'pattern_name': 'musician:mailing-lists', 'title': 'Mailing lists'}, {'icon': 'mail-bulk', 'pattern_name': 'musician:mailing-lists', 'title': _('Mailing lists')},
{'icon': 'database', 'pattern_name': 'musician:databases', 'title': 'Databases'}, {'icon': 'database', 'pattern_name': 'musician:databases', 'title': _('Databases')},
{'icon': 'fire', 'pattern_name': 'musician:saas', 'title': 'SaaS'}, {'icon': 'fire', 'pattern_name': 'musician:saas', 'title': _('SaaS')},
] ]
context.update({ context.update({
'services_menu': services_menu, 'services_menu': services_menu,

View File

@ -136,6 +136,7 @@ class DatabaseUser(OrchestraModel):
class DatabaseService(OrchestraModel): class DatabaseService(OrchestraModel):
api_name = 'database' api_name = 'database'
verbose_name = _('Databases') verbose_name = _('Databases')
description = _('Description details for databases page.')
fields = ('name', 'type', 'users') fields = ('name', 'type', 'users')
param_defaults = { param_defaults = {
"id": None, "id": None,
@ -197,7 +198,7 @@ class DomainRecord(OrchestraModel):
class MailService(OrchestraModel): class MailService(OrchestraModel):
api_name = 'address' api_name = 'address'
verbose_name = _('Mail addresses') verbose_name = _('Mail addresses')
description = _('Litle description of what to be expected in this section to aid the user. Even a link to more help if there is one available.') description = _('Description details for mail addresses page.')
fields = ('mail_address', 'aliases', 'type', 'type_detail') fields = ('mail_address', 'aliases', 'type', 'type_detail')
param_defaults = {} param_defaults = {}
@ -240,7 +241,7 @@ class MailService(OrchestraModel):
class MailinglistService(OrchestraModel): class MailinglistService(OrchestraModel):
api_name = 'mailinglist' api_name = 'mailinglist'
verbose_name = _('Mailing list') verbose_name = _('Mailing list')
description = _('Litle description of what to be expected in this section to aid the user. Even a link to more help if there is one available.') description = _('Description details for mailinglist page.')
fields = ('name', 'status', 'address_name', 'admin_email', 'configure') fields = ('name', 'status', 'address_name', 'admin_email', 'configure')
param_defaults = { param_defaults = {
'name': None, 'name': None,
@ -264,7 +265,7 @@ class MailinglistService(OrchestraModel):
class SaasService(OrchestraModel): class SaasService(OrchestraModel):
api_name = 'saas' api_name = 'saas'
verbose_name = _('Software as a Service (SaaS)') verbose_name = _('Software as a Service (SaaS)')
description = _('Litle description of what to be expected in this section to aid the user. Even a link to more help if there is one available.') description = _('Description details for SaaS page.')
param_defaults = { param_defaults = {
'name': None, 'name': None,
'service': None, 'service': None,

View File

@ -64,9 +64,32 @@
</div> </div>
<!--/#login-content--> <!--/#login-content-->
<div id="login-footer"> <div id="login-footer">
<a href="#password_reset">{% trans "Forgot your password? Click here to recover" %}</a> <a href="#password_reset" data-toggle="modal" data-target="#forgotPasswordModal">{% trans "Forgot your password? Click here to recover" %}</a>
</div> </div>
</div><!-- /#login-wrapper --> </div><!-- /#login-wrapper -->
</div><!-- /.container-fluid --> </div><!-- /.jumbotron -->
<!-- Modal -->
<div class="modal fade" id="forgotPasswordModal" tabindex="-1" role="dialog" aria-labelledby="forgotPasswordModalLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="forgotPasswordModalLabel">{% trans "Forgot your password?" %}</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
{% blocktrans trimmed with support_email="suport@pangea.org" %}
Send an email to <a href="mailto:{{ support_email }}">{{ support_email }}</a> including your username and we will provide instructions.
{% endblocktrans %}
</div>
</div>
</div>
</div>
{% block script %}
{{ block.super }}
{% endblock %}
</body> </body>
{% endblock %} {% endblock %}

View File

@ -57,7 +57,7 @@
<button type="button" class="btn nav-link text-light w-100" data-toggle="dropdown"> <button type="button" class="btn nav-link text-light w-100" data-toggle="dropdown">
<img id="user-avatar" class="float-right" width="64" height="64" src="{% static "musician/images/default-profile-picture.png" %}" alt="user-profile-picture"/> <img id="user-avatar" class="float-right" width="64" height="64" src="{% static "musician/images/default-profile-picture.png" %}" alt="user-profile-picture"/>
<strong>{{ profile.username }}</strong><br/> <strong>{{ profile.username }}</strong><br/>
<i class="fas fa-cog"></i> Settings <i class="fas fa-cog"></i> {% trans "Settings" %}
</button> </button>
<div class="dropdown-menu"> <div class="dropdown-menu">
<a class="dropdown-item" href="{% url 'musician:profile' %}"><i class="fas fa-user-circle"></i> {% trans 'Profile' %}</a> <a class="dropdown-item" href="{% url 'musician:profile' %}"><i class="fas fa-user-circle"></i> {% trans 'Profile' %}</a>

View File

@ -4,7 +4,7 @@
{% block content %} {% block content %}
<h1 class="service-name">{% trans "Billing" %}</h1> <h1 class="service-name">{% trans "Billing" %}</h1>
<p class="service-description">{% trans "Little description of what billing section is." %}</p> <p class="service-description">{% trans "Billing page description." %}</p>
<table class="table service-list"> <table class="table service-list">
<colgroup> <colgroup>

View File

@ -33,7 +33,7 @@
<h1 class="service-name">{% trans "Your domains and websites" %}</h1> <h1 class="service-name">{% trans "Your domains and websites" %}</h1>
<p class="service-description">Little description of what to be expected...</p> <p class="service-description">{% trans "Dashboard page description." %}</p>
{% for domain in domains %} {% for domain in domains %}
<div class="card service-card"> <div class="card service-card">
@ -68,7 +68,7 @@
{{ domain.mails|length }} {% trans "mail addresses created" %} {{ domain.mails|length }} {% trans "mail addresses created" %}
{% if domain.addresses_left.alert_level %} {% if domain.addresses_left.alert_level %}
<br/> <br/>
<span class="text-{{ domain.addresses_left.alert_level }}">{{ domain.addresses_left.count }} mail address left</span> <span class="text-{{ domain.addresses_left.alert_level }}">{{ domain.addresses_left.count }} {% trans "mail address left" %}</span>
{% endif %} {% endif %}
</p> </p>
<a class="stretched-link" href="{% url 'musician:mails' %}?domain={{ domain.id }}"></a> <a class="stretched-link" href="{% url 'musician:mails' %}?domain={{ domain.id }}"></a>
@ -81,7 +81,7 @@
<div class="col-md-2 border-right"> <div class="col-md-2 border-right">
<h4>{% trans "Software as a Service" %}</h4> <h4>{% trans "Software as a Service" %}</h4>
<p class="card-text"><i class="fas fa-fire fa-3x"></i></p> <p class="card-text"><i class="fas fa-fire fa-3x"></i></p>
<p class="card-text text-dark">Nothing installed</p> <p class="card-text text-dark">{% trans "Nothing installed" %}</p>
<a class="stretched-link" href="{% url 'musician:saas' %}?domain={{ domain.id }}"></a> <a class="stretched-link" href="{% url 'musician:saas' %}?domain={{ domain.id }}"></a>
</div> </div>
<div class="col-md-1"></div> <div class="col-md-1"></div>
@ -103,7 +103,7 @@
<div class="modal-dialog modal-dialog-centered" role="document"> <div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title text-secondary" id="configDetailsModalLabel">Configuration details</h5> <h5 class="modal-title text-secondary" id="configDetailsModalLabel">{% trans "Configuration details" %}</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"> <button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span> <span aria-hidden="true">&times;</span>
</button> </button>
@ -122,8 +122,8 @@
<div class="domain-website pt-4"> <div class="domain-website pt-4">
<div id="no-website"><h6 class="pl-4">{% trans "No website configured." %}</h6></div> <div id="no-website"><h6 class="pl-4">{% trans "No website configured." %}</h6></div>
<div id="config-website"> <div id="config-website">
<label>Root directory:</label> <span id="config-root-path" class="font-weight-bold">root directory</span> <label>{% trans "Root directory:" %}</label> <span id="config-root-path" class="font-weight-bold">root directory</span>
<label>Type:</label><span id="config-webapp-type" class="font-weight-bold">type</span> <label>{% trans "Type:" %}</label><span id="config-webapp-type" class="font-weight-bold">type</span>
</div> </div>
</div> </div>
</div> </div>

View File

@ -5,7 +5,7 @@
<a class="btn-arrow-left" href="{% url 'musician:dashboard' %}">{% trans "Go back" %}</a> <a class="btn-arrow-left" href="{% url 'musician:dashboard' %}">{% trans "Go back" %}</a>
<h1 class="service-name">{% trans "DNS settings for" %} <span class="font-weight-light">{{ object.name }}</span></h1> <h1 class="service-name">{% trans "DNS settings for" %} <span class="font-weight-light">{{ object.name }}</span></h1>
<p class="service-description">Litle description of what to be expected in this section to aid the user. Even a link to more help if there is one available.</p> <p class="service-description">{% trans "DNS settings page description." %}</p>
<table class="table service-list"> <table class="table service-list">
<colgroup> <colgroup>

View File

@ -4,7 +4,7 @@
{% block content %} {% block content %}
<h1 class="service-name">{% trans "Profile" %}</h1> <h1 class="service-name">{% trans "Profile" %}</h1>
<p class="service-description">{% trans "Little description of what profile section is." %}</p> <p class="service-description">{% trans "Little description on profile page." %}</p>
<div class="card-deck"> <div class="card-deck">
<div class="card card-profile"> <div class="card card-profile">

View File

@ -130,6 +130,7 @@ SESSION_COOKIE_SECURE = config('SESSION_COOKIE_SECURE', default=True, cast=bool)
# Internationalization # Internationalization
# https://docs.djangoproject.com/en/2.2/topics/i18n/ # https://docs.djangoproject.com/en/2.2/topics/i18n/
# Fallback language
LANGUAGE_CODE = config('LANGUAGE_CODE', 'en-us') LANGUAGE_CODE = config('LANGUAGE_CODE', 'en-us')
LANGUAGES = [ LANGUAGES = [
@ -138,7 +139,7 @@ LANGUAGES = [
('es', _('Spanish')), ('es', _('Spanish')),
] ]
TIME_ZONE = 'UTC' TIME_ZONE = 'Europe/Madrid'
USE_I18N = True USE_I18N = True
@ -147,6 +148,12 @@ USE_L10N = True
USE_TZ = True USE_TZ = True
LANGUAGES = (
('ca', _('Catalan')),
('es', _('Spanish')),
('en', _('English')),
)
# Static files (CSS, JavaScript, Images) # Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.2/howto/static-files/ # https://docs.djangoproject.com/en/2.2/howto/static-files/