From 6004a7ede40f23bb57adc2f273790e70cc0b50ab Mon Sep 17 00:00:00 2001 From: Arvind Tiwari Date: Sat, 23 Sep 2017 01:03:43 +0530 Subject: [PATCH 001/111] new welcome email --- .../datacenterlight/emails/welcome_user.html | 45 +++++++++++++++++++ .../datacenterlight/emails/welcome_user.txt | 9 ++++ datacenterlight/urls.py | 12 +++-- hosting/views.py | 23 +++++++++- 4 files changed, 84 insertions(+), 5 deletions(-) create mode 100644 datacenterlight/templates/datacenterlight/emails/welcome_user.html create mode 100644 datacenterlight/templates/datacenterlight/emails/welcome_user.txt diff --git a/datacenterlight/templates/datacenterlight/emails/welcome_user.html b/datacenterlight/templates/datacenterlight/emails/welcome_user.html new file mode 100644 index 00000000..be90f9b8 --- /dev/null +++ b/datacenterlight/templates/datacenterlight/emails/welcome_user.html @@ -0,0 +1,45 @@ +{% load static i18n %} + + + + + + + {% trans "Welcome to Data Center Light!" %} + + + + + + + + + + + + + + + + + + + + + +
+ +
+

{% trans "Welcome to Data Center Light!" %}

+
+

+ {% blocktrans %}Thanks for joining us! We provide the most affordable virtual machines from the heart of Switzerland.
Try now, order a VM. VM price starts from only 15CHF per month.{% endblocktrans %} +

+
+ {% trans "ORDER VM" %} +
+

Your Data Center Light Team

+
+ + + \ No newline at end of file diff --git a/datacenterlight/templates/datacenterlight/emails/welcome_user.txt b/datacenterlight/templates/datacenterlight/emails/welcome_user.txt new file mode 100644 index 00000000..59fc242b --- /dev/null +++ b/datacenterlight/templates/datacenterlight/emails/welcome_user.txt @@ -0,0 +1,9 @@ +{% load static i18n %} + +{% trans "Welcome to Data Center Light!" %} + +{% blocktrans %}Thanks for joining us! We provide the most affordable virtual machines from the heart of Switzerland.
Try now, order a VM. VM price starts from only 15CHF per month.{% endblocktrans %} + +{{ base_url }}{% url 'hosting:create_virtual_machine' %} + +Your Data Center Light Team \ No newline at end of file diff --git a/datacenterlight/urls.py b/datacenterlight/urls.py index 772e691d..8f0bf646 100644 --- a/datacenterlight/urls.py +++ b/datacenterlight/urls.py @@ -1,11 +1,17 @@ from django.conf.urls import url -from .views import IndexView, BetaProgramView, LandingProgramView, \ - BetaAccessView, PricingView, SuccessView, \ - PaymentOrderView, OrderConfirmationView, \ +from .views import ( + IndexView, BetaProgramView, LandingProgramView, BetaAccessView, + PricingView, SuccessView, PaymentOrderView, OrderConfirmationView, WhyDataCenterLightView, ContactUsView +) + +from django.views.generic import TemplateView + urlpatterns = [ + url(r'^test/$', TemplateView.as_view( + template_name='datacenterlight/emails/welcome_user.html')), url(r'^$', IndexView.as_view(), name='index'), url(r'^t/$', IndexView.as_view(), name='index_t'), url(r'^g/$', IndexView.as_view(), name='index_g'), diff --git a/hosting/views.py b/hosting/views.py index e1d2feb2..4272afe9 100644 --- a/hosting/views.py +++ b/hosting/views.py @@ -255,12 +255,31 @@ class SignupValidatedView(SignupValidateView): login_url = '' + str(_('login')) + '' section_title = _('Account activation') + user = CustomUser.objects.filter( + validation_slug=self.kwargs['validate_slug']).first() + pre_valid = user.validated if validated: message = '{account_activation_string}
{login_string} {lurl}.'.format( account_activation_string=_( "Your account has been activated."), login_string=_("You can now"), lurl=login_url) + if not pre_valid: + email_data = { + 'subject': 'Welcome to Data Center Light!', + 'to': self.request.user.email, + 'context': { + 'base_url': "{0}://{1}".format( + self.request.scheme, + self.request.get_host() + ) + }, + 'template_name': 'welcome_user', + 'template_path': 'datacenterlight/emails/', + 'from_address': settings.DCL_SUPPORT_FROM_ADDRESS, + } + email = BaseEmail(**email_data) + email.send() else: home_url = '\n" "Language-Team: LANGUAGE \n" @@ -163,6 +163,18 @@ msgstr "" "den folgenden Link in die Adressleiste deines Browsers.\n" "%(base_url)s%(activation_link)s\n" +msgid "Welcome to Data Center Light!" +msgstr "Willkommen zu Data Center Light!" + +msgid "" +"Thanks for joining us! We provide the most affordable virtual machines from " +"the heart of Switzerland.
Try now, order a VM. VM price starts from only " +"15CHF per month." +msgstr "" + +msgid "ORDER VM" +msgstr "VM BESTELLEN" + msgid "Home" msgstr "Home" diff --git a/datacenterlight/templates/datacenterlight/emails/welcome_user.html b/datacenterlight/templates/datacenterlight/emails/welcome_user.html index be90f9b8..cbde6d3b 100644 --- a/datacenterlight/templates/datacenterlight/emails/welcome_user.html +++ b/datacenterlight/templates/datacenterlight/emails/welcome_user.html @@ -36,7 +36,7 @@ -

Your Data Center Light Team

+

{% trans "Your Data Center Light Team" %}

diff --git a/datacenterlight/templates/datacenterlight/emails/welcome_user.txt b/datacenterlight/templates/datacenterlight/emails/welcome_user.txt index 59fc242b..b2df2cd1 100644 --- a/datacenterlight/templates/datacenterlight/emails/welcome_user.txt +++ b/datacenterlight/templates/datacenterlight/emails/welcome_user.txt @@ -6,4 +6,4 @@ {{ base_url }}{% url 'hosting:create_virtual_machine' %} -Your Data Center Light Team \ No newline at end of file +{% trans "Your Data Center Light Team" %} \ No newline at end of file From 057a2c77a6ed649027a2b19bb977db69f6f21418 Mon Sep 17 00:00:00 2001 From: Arvind Tiwari Date: Sat, 23 Sep 2017 01:57:40 +0530 Subject: [PATCH 003/111] password reset email, user activation email redesigned --- alplora/locale/de/LC_MESSAGES/django.po | 75 +- .../locale/de/LC_MESSAGES/django.po | 46 +- .../emails/user_activation.html | 58 +- .../emails/user_activation.txt | 15 +- .../datacenterlight/emails/welcome_user.html | 7 +- .../datacenterlight/emails/welcome_user.txt | 5 +- datacenterlight/urls.py | 2 +- digitalglarus/locale/de/LC_MESSAGES/django.po | 1274 +---------------- hosting/locale/de/LC_MESSAGES/django.po | 83 +- .../hosting/emails/password_reset_email.html | 63 +- .../hosting/emails/password_reset_email.txt | 21 +- membership/locale/de/LC_MESSAGES/django.po | 25 +- ungleich_page/locale/de/LC_MESSAGES/django.po | 60 +- utils/locale/de/LC_MESSAGES/django.po | 5 +- 14 files changed, 279 insertions(+), 1460 deletions(-) diff --git a/alplora/locale/de/LC_MESSAGES/django.po b/alplora/locale/de/LC_MESSAGES/django.po index c39a4595..2669c811 100644 --- a/alplora/locale/de/LC_MESSAGES/django.po +++ b/alplora/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-05-30 13:47+0000\n" +"POT-Creation-Date: 2017-09-23 01:50+0530\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,137 +18,99 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: alplora/templates/alplora/contact.html:6 msgid "New message" msgstr "Neue Nachricht" -#: alplora/templates/alplora/contact.html:13 msgid "Name:" msgstr "Name:" -#: alplora/templates/alplora/contact.html:15 msgid "What is your name ?" msgstr "Was ist Dein Name?" -#: alplora/templates/alplora/contact.html:19 msgid "From:" msgstr "Von:" -#: alplora/templates/alplora/contact.html:21 msgid "You email" msgstr "Deine Email" -#: alplora/templates/alplora/contact.html:25 msgid "Message:" msgstr "Nachricht:" -#: alplora/templates/alplora/contact.html:27 msgid "Leave us your message" msgstr "Schreibe hier Deine Nachricht" -#: alplora/templates/alplora/contact.html:32 msgid "Close" msgstr "schliessen" -#: alplora/templates/alplora/contact.html:33 msgid "Send message" msgstr "Nachricht senden" -#: alplora/templates/alplora/contact_success.html:6 msgid "Message Sent" msgstr "Nachricht gesendet" -#: alplora/templates/alplora/contact_success.html:9 msgid "Thank you, we will contact you as soon as possible" msgstr "Dankeschön! Wir melden uns sobald wie möglich!" -#: alplora/templates/alplora/index.html:13 msgid "Find your animal anywhere, anytime" msgstr "Finde deine Tiere" -#: alplora/templates/alplora/index.html:99 -#: alplora/templates/alplora/index.html:463 msgid "About" msgstr "Über" -#: alplora/templates/alplora/index.html:102 -#: alplora/templates/alplora/index.html:248 -#: alplora/templates/alplora/index.html:469 msgid "Why Alplora?" msgstr "Warum Alplora?" -#: alplora/templates/alplora/index.html:105 -#: alplora/templates/alplora/index.html:466 msgid "Usecase" msgstr "" -#: alplora/templates/alplora/index.html:108 -#: alplora/templates/alplora/index.html:358 msgid "Testimonials" msgstr "Referenzen" -#: alplora/templates/alplora/index.html:111 -#: alplora/templates/alplora/index.html:423 -#: alplora/templates/alplora/index.html:477 msgid "Contact" msgstr "Kontakt" -#: alplora/templates/alplora/index.html:114 msgid "Login" msgstr "Login" -#: alplora/templates/alplora/index.html:137 msgid "Find your herd anytime, anywhere" msgstr "Finde deine Herde jederzeit und überall" -#: alplora/templates/alplora/index.html:138 msgid "Perfect fit for Swiss Alps" msgstr "Perfekt für die Schweizer Alpen" -#: alplora/templates/alplora/index.html:163 msgid "What is Alplora?" msgstr "Was ist Alplora?" -#: alplora/templates/alplora/index.html:164 msgid "" "Alplora is an animal tracker made for outdoor grazing animals in Swiss Alps." msgstr "" "Alplora ist ein Sender, der speziell für Weidetiere in den Schweizer Alpen " "entwickelt wurde." -#: alplora/templates/alplora/index.html:165 msgid "Alplora is just like a cattle bell, but much better." msgstr "Alplora ist wie eine Kuhglocke, nur viel besser." -#: alplora/templates/alplora/index.html:174 msgid "LOST" msgstr "VERLOREN" -#: alplora/templates/alplora/index.html:176 msgid "When an animal gets separated from the herd and is lost." msgstr "Wenn ein Tier sich von der Herde absondert und verloren geht." -#: alplora/templates/alplora/index.html:184 msgid "WOLF" msgstr "WOLF" -#: alplora/templates/alplora/index.html:186 msgid "When a wolf gets close to the herd." msgstr "Wenn ein Wolf sich der Herde nähert." -#: alplora/templates/alplora/index.html:193 msgid "INJURED" msgstr "VERLETZT" -#: alplora/templates/alplora/index.html:195 msgid "When one of the animals is hurt." msgstr "Wenn eins der Tiere verletzt ist." -#: alplora/templates/alplora/index.html:205 msgid "How does Alplora track my animals?" msgstr "Wie kann Alplora meine Tiere verfolgen und ausfindig machen ?" -#: alplora/templates/alplora/index.html:206 msgid "" "Each animal will be wearing a small tracker,

and the tracker will be " "sending a signal every 30 to 60 minutes." @@ -156,33 +118,27 @@ msgstr "" "Jedes Tier wird einen kleinen Sender tragen,

welcher alle 30 bis 60 " "Minuten ein Signal senden wird." -#: alplora/templates/alplora/index.html:215 msgid "Access app" msgstr "Zugang zur App" -#: alplora/templates/alplora/index.html:217 msgid "" "You can see the animal locations on a map by logging into our Alplora app." msgstr "" "Du kannst den Standort deiner Tiere jederzeit auf einer Karte verfolgen, " "indem du dich in unsere Alplora App einloggst." -#: alplora/templates/alplora/index.html:225 msgid "Get an alarm" msgstr "Erhalte ein Warnsignal" -#: alplora/templates/alplora/index.html:227 msgid "" "When certain signals for danger are detected, Alplora sends an alarm to you." msgstr "" "Wenn Anzeichen von Gefahr bestehen, sendet dir die Alplora App einen " "Warnsignal." -#: alplora/templates/alplora/index.html:235 msgid "Find your animal" msgstr "Finde deine Tiere" -#: alplora/templates/alplora/index.html:238 msgid "" "You can locate the animal in trouble on the realtime map and can take " "actions for keeping the animal safe." @@ -190,11 +146,9 @@ msgstr "" "Du kannst dein Tier in Notsituationen auf einer Echtzeit-Karte lokalisieren " "und hast die Möglichkeit es in Sicherheit zu bringen." -#: alplora/templates/alplora/index.html:255 msgid "Perfect fit for Swiss mountains" msgstr "Perfekt für die Schweizer Alpen" -#: alplora/templates/alplora/index.html:257 msgid "" "Alplora is made and tested for Swiss Alps. It is a perfect fit for Swiss " "environment." @@ -202,11 +156,9 @@ msgstr "" "Alplora wurde speziell für die Schweizer Alpen entwickelt und vor Ort " "getestet. Das Produkt passt perfekt in die Schweiz!" -#: alplora/templates/alplora/index.html:263 msgid "Energy efficient" msgstr "Energieeffizient" -#: alplora/templates/alplora/index.html:265 msgid "" "Alplora uses the latest wireless technology, our batteries last the whole " "alp season." @@ -214,11 +166,9 @@ msgstr "" "Alplora arbeitet mit den neuesten Technologien, so dass der Akku die gesamte " "Alpsaison überdauert." -#: alplora/templates/alplora/index.html:271 msgid "Made with love" msgstr "Mit Liebe gemacht" -#: alplora/templates/alplora/index.html:273 msgid "" "With a lot of love and respect for Swiss agriculture and nature, Alplora is " "made by a Swiss company." @@ -226,61 +176,49 @@ msgstr "" "Alplora wurde mit viel Liebe und Respekt für die Schweizer Natur und " "Landwirtschaft von einer Schweizer Firma entwickelt." -#: alplora/templates/alplora/index.html:285 msgid "Who needs Alplora?" msgstr "Wer benötigt Alplora?" -#: alplora/templates/alplora/index.html:301 msgid " Are your animals..." msgstr "Sind deine Tiere..." -#: alplora/templates/alplora/index.html:304 msgid "sheep, goats, cows or llamas living freely in the Alps?" msgstr "Schafe, Ziegen, Kühe oder Lamas, die frei in den Alpen leben?" -#: alplora/templates/alplora/index.html:306 msgid "wearing bells?" msgstr "solche, die Glocken tragen?" -#: alplora/templates/alplora/index.html:308 msgid "" "sometimes getting confused and going too far away from where they are " "supposed to be?" msgstr "" "manchmal verwirrt und entfernen sich zu weit von ihrem vorgesehenen Standort?" -#: alplora/templates/alplora/index.html:332 msgid "Do you..." msgstr "Möchtest du..." -#: alplora/templates/alplora/index.html:335 msgid "have animals which are staying outdoor during some time of the year?" msgstr "" "deine Tiere, die eine längere Zeit im Jahr unbeobachtet Draussen verbringen, " "schützen und überwachen können?" -#: alplora/templates/alplora/index.html:337 msgid "want to get an alarm when your animal is hurt, or in danger?" msgstr "" "alarmiert werden, wenn sich eines deiner Tiere verletzt oder in Gefahr " "befindet ?" -#: alplora/templates/alplora/index.html:339 msgid "want to see where your animals are on your cell phone map?" msgstr "" "mit deinem Smartphone auf einer Karte sehen können, wo sich deine Tiere " "befinden? " -#: alplora/templates/alplora/index.html:341 msgid "want to make sure 24/7 that your animals are safe?" msgstr "" "sicherstellen, dass sich deine Tiere rund um die Uhr in Sicherheit befinden?" -#: alplora/templates/alplora/index.html:359 msgid "What our customers say" msgstr "" -#: alplora/templates/alplora/index.html:379 msgid "" "“Alplora is an innovation in looking after my cows. I can check where my " "cows have been in the higher mountain all day while doing other works at the " @@ -292,11 +230,9 @@ msgstr "" "selben Zeit andereDinge auf dem Hof unten im Dorf erledigen. Dank Alplora " "kann ich meinen Kühenmehr Sicherheit gewährleisten." -#: alplora/templates/alplora/index.html:382 msgid "Farmer in canton Glarus" msgstr "Bauern im Kanton Glarus" -#: alplora/templates/alplora/index.html:388 msgid "" "\"Alplora is exactly what I was waiting for. I have lost my sheep almost " "every year. Finally I have a way when I want to locate them.\"" @@ -305,11 +241,9 @@ msgstr "" "Schafe fastjedes Jahr aus den Augen verloren. Nun habe ich endlich die " "Möglichkeit, sie zulokalisieren.\"" -#: alplora/templates/alplora/index.html:391 msgid "Owner of 50 sheep " msgstr "Besitzerin von 50 Schafen" -#: alplora/templates/alplora/index.html:397 msgid "" "\"I have a farm down all the way down in the village and y goats are always " "freely grazing in the Alps. There are times that I am worried about them but " @@ -323,30 +257,23 @@ msgstr "" "noch um meineanderen Tiere kümmern muss. Mit Alplora kann ich nun ohne " "Probleme beides tun.\"" -#: alplora/templates/alplora/index.html:401 msgid "Farmer at Berner Oberland" msgstr "Bauer aus dem Berner Oberland" -#: alplora/templates/alplora/index.html:418 msgid "How do I get Alplora?" msgstr "Wie kriege ich Zugriff zu Alplora?" -#: alplora/templates/alplora/index.html:419 msgid "Click the button below and leave us your contact." msgstr "Klicke unten auf Kontakt und hinterlasse uns deine Angaben." -#: alplora/templates/alplora/index.html:419 msgid "Team Alplora will contact you and visit you with a tracking device." msgstr "Das Alpora Team wird sich mit Dir schnellstens in Verbindung setzen." -#: alplora/templates/alplora/index.html:459 msgid "Home" msgstr "Startseite" -#: alplora/templates/alplora/index.html:472 msgid "Testimonials " msgstr "Referenzen" -#: alplora/views.py:24 msgid "Message Successfully Sent" msgstr "" diff --git a/datacenterlight/locale/de/LC_MESSAGES/django.po b/datacenterlight/locale/de/LC_MESSAGES/django.po index eb1584d3..dd57b3a4 100644 --- a/datacenterlight/locale/de/LC_MESSAGES/django.po +++ b/datacenterlight/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-09-23 01:05+0530\n" +"POT-Creation-Date: 2017-09-23 01:50+0530\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -132,44 +132,40 @@ msgstr "" msgid "Thank you!" msgstr "Vielen Dank!" -msgid "Account Activation" -msgstr "Account Aktivierung" +msgid "Data Center Light Account Activation" +msgstr "Data Center Light Account Aktivierung" #, python-format msgid "" -"\n" -"You can activate your Data Center Light account by
clicking here.
\n" -"You can also copy and paste the following link into the address bar of your " -"browser
\n" -"to activate your Data Center Light account.
\n" -"%(base_url)s%(activation_link)s\n" +"You can activate your Data Center Light account by clicking here." msgstr "" -"\n" -"Klicke hier um deinen Data " -"Center Light Account zu aktivieren oder kopiere den folgenden Link in die " -"Adressleiste deines Browsers.
\n" -"%(base_url)s%(activation_link)s\n" +"Klicke here um deinen Data Center " +"Light Account zu aktivieren." -#, python-format msgid "" -"You can activate your Data Center Light account by clicking here.\n" "You can also copy and paste the following link into the address bar of your " -"browser\n" -"to activate your Data Center Light account.\n" -"%(base_url)s%(activation_link)s\n" +"browser to activate your Data Center Light account." msgstr "" -"Klicke hier, um deinen Data Center Light Account zu aktivieren oder kopiere " -"den folgenden Link in die Adressleiste deines Browsers.\n" -"%(base_url)s%(activation_link)s\n" +"Kopiere den folgenden Link in die Adressleiste deines Browsers." + +msgid "" +"You can copy and paste the following link into the address bar of your " +"browser to activate your Data Center Light account." +msgstr "" +"Kopiere den folgenden Link in die Adressleiste deines Browsers." msgid "Welcome to Data Center Light!" msgstr "Willkommen zu Data Center Light!" msgid "" "Thanks for joining us! We provide the most affordable virtual machines from " -"the heart of Switzerland.
Try now, order a VM. VM price starts from only " -"15CHF per month." +"the heart of Switzerland." +msgstr "" + +msgid "Try now, order a VM. VM price starts from only 15CHF per month." msgstr "" msgid "ORDER VM" diff --git a/datacenterlight/templates/datacenterlight/emails/user_activation.html b/datacenterlight/templates/datacenterlight/emails/user_activation.html index 955eed18..9c8c0367 100644 --- a/datacenterlight/templates/datacenterlight/emails/user_activation.html +++ b/datacenterlight/templates/datacenterlight/emails/user_activation.html @@ -1,14 +1,44 @@ -{% extends "datacenterlight/emails/base_email_datacenterlight.html" %} -{% load static from staticfiles %} -{% load i18n %} -{% block email_head %} -{{dcl_text}} {% trans 'Account Activation' %} -{% endblock %} -{% block email_body %} -{% blocktrans %} -You can activate your Data Center Light account by clicking here.
-You can also copy and paste the following link into the address bar of your browser
-to activate your Data Center Light account.
-{{base_url}}{{activation_link}} -{% endblocktrans %} -{% endblock %} +{% load static i18n %} + + + + + + + {% trans "Data Center Light Account Activation" %} + + + + + + + + + + + + + + + + + + +
+ +
+

{% trans "Data Center Light Account Activation" %}

+
+

+ {% blocktrans %}You can activate your Data Center Light account by clicking here.{% endblocktrans %}
+ {% blocktrans %}You can also copy and paste the following link into the address bar of your browser to activate your Data Center Light account.{% endblocktrans %}
+

+

+ {{base_url}}{{activation_link}} +

+
+

{% trans "Your Data Center Light Team" %}

+
+ + + diff --git a/datacenterlight/templates/datacenterlight/emails/user_activation.txt b/datacenterlight/templates/datacenterlight/emails/user_activation.txt index 84ec50a9..13b3e7bf 100644 --- a/datacenterlight/templates/datacenterlight/emails/user_activation.txt +++ b/datacenterlight/templates/datacenterlight/emails/user_activation.txt @@ -1,10 +1,9 @@ -{% extends "datacenterlight/emails/base_email_datacenterlight.txt" %} {% load i18n %} -{% block email_head %}{{dcl_text}} {% trans 'Account Activation' %}{% endblock %} -{% block email_body %} -{% blocktrans %}You can activate your Data Center Light account by clicking here. -You can also copy and paste the following link into the address bar of your browser -to activate your Data Center Light account. + +{% trans "Data Center Light Account Activation" %} + +{% blocktrans %}You can copy and paste the following link into the address bar of your browser to activate your Data Center Light account.{% endblocktrans %} + {{base_url}}{{activation_link}} -{% endblocktrans %} -{% endblock %} + +{% trans "Your Data Center Light Team" %} \ No newline at end of file diff --git a/datacenterlight/templates/datacenterlight/emails/welcome_user.html b/datacenterlight/templates/datacenterlight/emails/welcome_user.html index cbde6d3b..f426de20 100644 --- a/datacenterlight/templates/datacenterlight/emails/welcome_user.html +++ b/datacenterlight/templates/datacenterlight/emails/welcome_user.html @@ -24,13 +24,14 @@ -

- {% blocktrans %}Thanks for joining us! We provide the most affordable virtual machines from the heart of Switzerland.
Try now, order a VM. VM price starts from only 15CHF per month.{% endblocktrans %} +

+ {% blocktrans %}Thanks for joining us! We provide the most affordable virtual machines from the heart of Switzerland.{% endblocktrans %}
+ {% blocktrans %}Try now, order a VM. VM price starts from only 15CHF per month.{% endblocktrans %}

- + {% trans "ORDER VM" %} diff --git a/datacenterlight/templates/datacenterlight/emails/welcome_user.txt b/datacenterlight/templates/datacenterlight/emails/welcome_user.txt index b2df2cd1..0e7820e6 100644 --- a/datacenterlight/templates/datacenterlight/emails/welcome_user.txt +++ b/datacenterlight/templates/datacenterlight/emails/welcome_user.txt @@ -1,8 +1,9 @@ -{% load static i18n %} +{% load i18n %} {% trans "Welcome to Data Center Light!" %} -{% blocktrans %}Thanks for joining us! We provide the most affordable virtual machines from the heart of Switzerland.
Try now, order a VM. VM price starts from only 15CHF per month.{% endblocktrans %} +{% blocktrans %}Thanks for joining us! We provide the most affordable virtual machines from the heart of Switzerland.{% endblocktrans %} +{% blocktrans %}Try now, order a VM. VM price starts from only 15CHF per month.{% endblocktrans %} {{ base_url }}{% url 'hosting:create_virtual_machine' %} diff --git a/datacenterlight/urls.py b/datacenterlight/urls.py index 8f0bf646..095a0645 100644 --- a/datacenterlight/urls.py +++ b/datacenterlight/urls.py @@ -11,7 +11,7 @@ from django.views.generic import TemplateView urlpatterns = [ url(r'^test/$', TemplateView.as_view( - template_name='datacenterlight/emails/welcome_user.html')), + template_name='hosting/emails/password_reset_email.html')), url(r'^$', IndexView.as_view(), name='index'), url(r'^t/$', IndexView.as_view(), name='index_t'), url(r'^g/$', IndexView.as_view(), name='index_g'), diff --git a/digitalglarus/locale/de/LC_MESSAGES/django.po b/digitalglarus/locale/de/LC_MESSAGES/django.po index f4193749..9ce67a57 100644 --- a/digitalglarus/locale/de/LC_MESSAGES/django.po +++ b/digitalglarus/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-07-16 17:50+0000\n" +"POT-Creation-Date: 2017-09-23 01:50+0530\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,1447 +18,331 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: cms_templates/djangocms_blog/_header_post_detail.html:21 -#: digitalglarus/templates/digitalglarus/post_detail.html:19 -#: ungleich/templates/ungleich/djangocms_blog/includes/blog_item.html:19 msgid "Posted on" msgstr "Veröffentlicht am" -#: cms_templates/djangocms_blog/post_list.html:11 -#: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:11 msgid "Articles by" msgstr "Artikel vom" -#: cms_templates/djangocms_blog/post_list.html:12 -#: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:12 msgid "Archive" msgstr "Archiv" -#: cms_templates/djangocms_blog/post_list.html:13 -#: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:13 msgid "Tag" msgstr "" -#: cms_templates/djangocms_blog/post_list.html:14 -#: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:14 msgid "Category" msgstr "Kategorie" -#: cms_templates/djangocms_blog/post_list.html:21 -#: digitalglarus/templates/glarus_blog/post_list.html:15 -#: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:22 msgid "No article found." msgstr "Keine Artikel gefunden" -#: cms_templates/djangocms_blog/post_list.html:24 -#: digitalglarus/templates/glarus_blog/post_list.html:18 -#: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:25 msgid "Back" msgstr "Zurück" -#: cms_templates/djangocms_blog/post_list.html:32 -#: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:33 msgid "Newer Posts" msgstr "Neuere Einträge" -#: cms_templates/djangocms_blog/post_list.html:39 -#: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:40 msgid "Older Posts" msgstr "Ältere Einträge" -#: cms_templates/includes/blog_item.html:31 -#: digitalglarus/templates/glarus_blog/includes/blog_item.html:32 msgid "read more" msgstr "weiterlesen" -#: cms_templates/includes/blog_meta.html:6 -#: digitalglarus/templates/glarus_blog/includes/blog_meta.html:6 msgid "by" msgstr "von" -#: digitalglarus/cms_plugins.py:9 -msgid "Digital Glarus Gallery" -msgstr "" - -#: digitalglarus/cms_plugins.py:22 -msgid "Digital Glarus Supporters" -msgstr "" - -#: digitalglarus/forms.py:34 digitalglarus/forms.py:69 nosystemd/forms.py:47 -#: utils/forms.py:107 -msgid "Street Address" -msgstr "Adresse" - -#: digitalglarus/forms.py:35 digitalglarus/forms.py:70 nosystemd/forms.py:48 -#: utils/forms.py:108 utils/forms.py:123 -msgid "City" -msgstr "Stadt" - -#: digitalglarus/forms.py:36 digitalglarus/forms.py:71 nosystemd/forms.py:49 -#: utils/forms.py:109 utils/forms.py:124 -msgid "Postal Code" -msgstr "Postleitzahl" - -#: digitalglarus/forms.py:37 digitalglarus/forms.py:72 nosystemd/forms.py:50 -#: utils/forms.py:110 utils/forms.py:125 -msgid "Country" -msgstr "Land" - -#: digitalglarus/templates/digitalglarus/login.html:88 -#: digitalglarus/templates/digitalglarus/login_hello.html:32 -#: nosystemd/templates/nosystemd/login.html:23 -msgid "You haven been logged out" -msgstr "Sie wurden abgemeldet" - -#: digitalglarus/templates/glarus_blog/post_list.html:23 -#: nosystemd/templates/nosystemd/donations.html:74 -msgid "previous" -msgstr "vorherige" - -#: digitalglarus/templates/glarus_blog/post_list.html:26 -#: dynamicweb/settings/base.py:192 templates/cms/__init__.py:10 -#: templates/cms/ungleichch/__init__.py:5 -msgid "Page" -msgstr "Seite" - -#: digitalglarus/templates/glarus_blog/post_list.html:26 -msgid "of" -msgstr "vom" - -#: digitalglarus/templates/glarus_blog/post_list.html:29 -#: nosystemd/templates/nosystemd/donations.html:80 -msgid "next" -msgstr "nächste" - -#: digitalglarus/templates/language_chooser.html:8 -#: ungleich/templates/cms/ungleichch/_header_base.html:23 -msgid "Change to language:" -msgstr "Sprache wechseln zu: " - -#: digitalglarus/templates/new_base_glarus.html:161 -#: digitalglarus/templates/new_base_glarus.html:184 -#: digitalglarus/templates/new_base_glarus_c.html:176 -#: digitalglarus/templates/new_base_glarus_c.html:199 -msgid "Bookings" -msgstr "" - -#: digitalglarus/templates/new_base_glarus.html:165 -#: digitalglarus/templates/new_base_glarus.html:188 -#: digitalglarus/templates/new_base_glarus_c.html:180 -#: digitalglarus/templates/new_base_glarus_c.html:203 -msgid "Membership" -msgstr "" - -#: digitalglarus/templates/new_base_glarus.html:171 -#: digitalglarus/templates/new_base_glarus.html:194 -#: digitalglarus/templates/new_base_glarus_c.html:186 -#: digitalglarus/templates/new_base_glarus_c.html:209 -#: nosystemd/templates/nosystemd/base.html:76 -msgid "Logout" -msgstr "" - -#: digitalglarus/urls.py:16 -msgid "booking/payment/edit/?$" -msgstr "" - -#: digitalglarus/urls.py:17 -msgid "^$" -msgstr "" - -#: digitalglarus/urls.py:19 -msgid "support-us/?$" -msgstr "" - -#: digitalglarus/urls.py:20 -msgid "contact/?$" -msgstr "kontakt/?$" - -#: digitalglarus/urls.py:21 -msgid "login/?$" -msgstr "" - -#: digitalglarus/urls.py:22 -msgid "signup/?$" -msgstr "" - -#: digitalglarus/urls.py:28 -msgid "history/?$" -msgstr "" - -#: digitalglarus/urls.py:29 -msgid "users/billing_address/?$" -msgstr "" - -#: digitalglarus/urls.py:31 -msgid "booking/?$" -msgstr "" - -#: digitalglarus/urls.py:32 -msgid "booking/payment/?$" -msgstr "" - -#: digitalglarus/urls.py:33 -msgid "booking/orders/(?P\\d+)/?$" -msgstr "" - -#: digitalglarus/urls.py:37 -msgid "booking/orders/?$" -msgstr "" - -#: digitalglarus/urls.py:39 -msgid "membership/payment/?$" -msgstr "" - -#: digitalglarus/urls.py:40 -msgid "membership/activated/?$" -msgstr "" - -#: digitalglarus/urls.py:42 -msgid "membership/deactivate/?$" -msgstr "" - -#: digitalglarus/urls.py:44 -msgid "membership/reactivate/?$" -msgstr "" - -#: digitalglarus/urls.py:46 -msgid "membership/deactivate/success/?$" -msgstr "" - -#: digitalglarus/urls.py:48 -msgid "membership/pricing/?$" -msgstr "" - -#: digitalglarus/urls.py:50 -msgid "membership/orders/(?P\\d+)/?$" -msgstr "" - -#: digitalglarus/urls.py:52 -#, fuzzy -#| msgid "supporters/?$" -msgid "membership/orders/?$" -msgstr "befurworter/?$" - -#: digitalglarus/urls.py:54 -msgid "supporters/?$" -msgstr "befurworter/?$" - -#: digitalglarus/views.py:715 -msgid "Message Successfully Sent" -msgstr "" - -#: dynamicweb/settings-test/__init__.py:181 msgid "US English" msgstr "" -#: dynamicweb/settings-test/__init__.py:182 msgid "German" msgstr "" -#: dynamicweb/settings-test/__init__.py:235 -#: dynamicweb/settings-test/__init__.py:244 dynamicweb/settings/base.py:280 -#: dynamicweb/settings/base.py:289 msgid "Content" msgstr "" -#: dynamicweb/settings/base.py:181 msgid "default" msgstr "" -#: dynamicweb/settings/base.py:182 msgid "2 Column" msgstr "" -#: dynamicweb/settings/base.py:183 msgid "3 Column" msgstr "" -#: dynamicweb/settings/base.py:184 templates/cms/__init__.py:4 -#: templates/cms/digitalglarus/__init__.py:4 msgid "DG.About" msgstr "" -#: dynamicweb/settings/base.py:185 templates/cms/__init__.py:5 -#: templates/cms/digitalglarus/__init__.py:5 #, fuzzy #| msgid "contact/?$" msgid "DG.Contact" msgstr "kontakt/?$" -#: dynamicweb/settings/base.py:186 templates/cms/__init__.py:6 -#: templates/cms/digitalglarus/__init__.py:6 msgid "DG.Home" msgstr "" -#: dynamicweb/settings/base.py:187 templates/cms/__init__.py:7 -#: templates/cms/digitalglarus/__init__.py:7 msgid "DG.CoWork" msgstr "" -#: dynamicweb/settings/base.py:189 msgid "DG.OneColumn" msgstr "" -#: dynamicweb/settings/base.py:191 templates/cms/__init__.py:9 -#: templates/cms/ungleichch/__init__.py:4 msgid "Blog" msgstr "" -#: dynamicweb/settings/base.py:221 +msgid "Page" +msgstr "Seite" + +msgid "Data Center Light" +msgstr "" + msgid "English" msgstr "" -#: dynamicweb/settings/base.py:222 msgid "Deutsch" msgstr "" -#: nosystemd/forms.py:46 msgid "Amount" msgstr "Betrag" -#: nosystemd/templates/nosystemd/base.html:70 +msgid "Street Address" +msgstr "Adresse" + +msgid "City" +msgstr "Stadt" + +msgid "Postal Code" +msgstr "Postleitzahl" + +msgid "Country" +msgstr "Land" + msgid "My Donations" msgstr "" -#: nosystemd/templates/nosystemd/confirm_reset_password.html:24 +msgid "Logout" +msgstr "" + msgid "Set your new password" msgstr "" -#: nosystemd/templates/nosystemd/confirm_reset_password.html:33 -#: nosystemd/templates/nosystemd/reset_password.html:25 msgid "Reset" msgstr "" -#: nosystemd/templates/nosystemd/confirm_reset_password.html:37 -#: nosystemd/templates/nosystemd/reset_password.html:29 -#: nosystemd/templates/nosystemd/signup.html:33 msgid "Already have an account ?" msgstr "" -#: nosystemd/templates/nosystemd/confirm_reset_password.html:37 msgid "Log in" msgstr "" -#: nosystemd/templates/nosystemd/donation_detail.html:15 msgid "Invoice" msgstr "" -#: nosystemd/templates/nosystemd/donation_detail.html:15 msgid "Donation #" msgstr "" -#: nosystemd/templates/nosystemd/donation_detail.html:20 msgid "Billing Address:" msgstr "" -#: nosystemd/templates/nosystemd/donation_detail.html:28 msgid "Date:" msgstr "" -#: nosystemd/templates/nosystemd/donation_detail.html:38 msgid "Payment Method:" msgstr "" -#: nosystemd/templates/nosystemd/donation_detail.html:49 msgid "Donation summary" msgstr "" -#: nosystemd/templates/nosystemd/donation_detail.html:52 -#: nosystemd/templates/nosystemd/donations.html:49 msgid "Donation" msgstr "" -#: nosystemd/templates/nosystemd/donation_detail.html:54 msgid "Total" msgstr "" -#: nosystemd/templates/nosystemd/donation_detail.html:60 msgid "Finish Configuration" msgstr "" -#: nosystemd/templates/nosystemd/donation_detail.html:68 msgid "" "Thanks for you donation, you can cancel your monthly donation at any time " "going to profile > subscription " msgstr "" -#: nosystemd/templates/nosystemd/donation_detail.html:74 msgid "View Donations" msgstr "" -#: nosystemd/templates/nosystemd/donations.html:28 -#: nosystemd/templates/nosystemd/donator_status.html:26 msgid "Cancel Donation" msgstr "" -#: nosystemd/templates/nosystemd/donations.html:35 msgid "Donate" msgstr "" -#: nosystemd/templates/nosystemd/donations.html:44 msgid "Donations Made" msgstr "" -#: nosystemd/templates/nosystemd/donations.html:50 msgid "Date" msgstr "" -#: nosystemd/templates/nosystemd/donations.html:62 msgid "View Detail" msgstr "" -#: nosystemd/templates/nosystemd/donator_status.html:28 +msgid "previous" +msgstr "vorherige" + +msgid "next" +msgstr "nächste" + msgid "Reanude Donation" msgstr "" -#: nosystemd/templates/nosystemd/emails/password_reset_email.html:2 -#: nosystemd/templates/nosystemd/emails/password_reset_email.txt:2 #, python-format msgid "" "You're receiving this email because you requested a password reset for your " "user account at %(site_name)s." msgstr "" -#: nosystemd/templates/nosystemd/emails/password_reset_email.html:4 -#: nosystemd/templates/nosystemd/emails/password_reset_email.txt:4 msgid "Please go to the following page and choose a new password:" msgstr "" -#: nosystemd/templates/nosystemd/emails/password_reset_email.html:9 -#: nosystemd/templates/nosystemd/emails/password_reset_email.txt:9 msgid "Thanks for using our site!" msgstr "" -#: nosystemd/templates/nosystemd/emails/password_reset_email.html:11 -#: nosystemd/templates/nosystemd/emails/password_reset_email.txt:11 #, python-format msgid "The %(site_name)s team" msgstr "" -#: nosystemd/templates/nosystemd/login.html:30 +msgid "You haven been logged out" +msgstr "Sie wurden abgemeldet" + msgid "Log in " msgstr "" -#: nosystemd/templates/nosystemd/login.html:40 -#: nosystemd/templates/nosystemd/reset_password.html:29 -#: nosystemd/templates/nosystemd/signup.html:33 msgid "Login" msgstr "" -#: nosystemd/templates/nosystemd/login.html:44 msgid "Don't have an account yet ? " msgstr "" -#: nosystemd/templates/nosystemd/login.html:44 -#: nosystemd/templates/nosystemd/signup.html:17 -#: nosystemd/templates/nosystemd/signup.html:29 msgid "Sign up" msgstr "" -#: nosystemd/templates/nosystemd/login.html:46 msgid "Forgot your password ? " msgstr "" -#: nosystemd/templates/nosystemd/reset_password.html:16 msgid "Reset your password" msgstr "" -#: templates/cms/__init__.py:8 templates/cms/digitalglarus/__init__.py:8 msgid "DG.Detail" msgstr "" -#: ungleich/cms_toolbar.py:23 msgid "Page Header" msgstr "" -#: ungleich/views.py:79 +msgid "Change to language:" +msgstr "Sprache wechseln zu: " + #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "" -#: utils/fields.py:6 -msgid "Andorra" +msgid "Digital Glarus Gallery" msgstr "" -#: utils/fields.py:7 -msgid "United Arab Emirates" +msgid "Digital Glarus Supporters" msgstr "" -#: utils/fields.py:8 -msgid "Afghanistan" -msgstr "" - -#: utils/fields.py:9 -msgid "Antigua & Barbuda" -msgstr "" - -#: utils/fields.py:10 -msgid "Anguilla" -msgstr "" - -#: utils/fields.py:11 -msgid "Albania" -msgstr "" - -#: utils/fields.py:12 -msgid "Armenia" -msgstr "" - -#: utils/fields.py:13 -msgid "Netherlands Antilles" -msgstr "" - -#: utils/fields.py:14 -msgid "Angola" -msgstr "" - -#: utils/fields.py:15 -msgid "Antarctica" -msgstr "" - -#: utils/fields.py:16 -msgid "Argentina" -msgstr "" - -#: utils/fields.py:17 -msgid "American Samoa" -msgstr "" - -#: utils/fields.py:18 -msgid "Austria" -msgstr "" - -#: utils/fields.py:19 -msgid "Australia" -msgstr "" - -#: utils/fields.py:20 -msgid "Aruba" -msgstr "" - -#: utils/fields.py:21 -msgid "Azerbaijan" -msgstr "" - -#: utils/fields.py:22 -msgid "Bosnia and Herzegovina" -msgstr "" - -#: utils/fields.py:23 -msgid "Barbados" -msgstr "" - -#: utils/fields.py:24 -msgid "Bangladesh" -msgstr "" - -#: utils/fields.py:25 -msgid "Belgium" -msgstr "" - -#: utils/fields.py:26 -msgid "Burkina Faso" -msgstr "" - -#: utils/fields.py:27 -msgid "Bulgaria" -msgstr "" - -#: utils/fields.py:28 -msgid "Bahrain" -msgstr "" - -#: utils/fields.py:29 -msgid "Burundi" -msgstr "" - -#: utils/fields.py:30 -msgid "Benin" -msgstr "" - -#: utils/fields.py:31 -msgid "Bermuda" -msgstr "" - -#: utils/fields.py:32 -msgid "Brunei Darussalam" -msgstr "" - -#: utils/fields.py:33 -msgid "Bolivia" -msgstr "" - -#: utils/fields.py:34 -msgid "Brazil" -msgstr "" - -#: utils/fields.py:35 -msgid "Bahama" -msgstr "" - -#: utils/fields.py:36 -msgid "Bhutan" -msgstr "" - -#: utils/fields.py:37 -msgid "Bouvet Island" -msgstr "" - -#: utils/fields.py:38 -msgid "Botswana" -msgstr "" - -#: utils/fields.py:39 -msgid "Belarus" -msgstr "" - -#: utils/fields.py:40 -msgid "Belize" -msgstr "" - -#: utils/fields.py:41 -msgid "Canada" -msgstr "" - -#: utils/fields.py:42 -msgid "Cocos (Keeling) Islands" -msgstr "" - -#: utils/fields.py:43 -msgid "Central African Republic" -msgstr "" - -#: utils/fields.py:44 -msgid "Congo" -msgstr "" - -#: utils/fields.py:45 -msgid "Switzerland" -msgstr "" - -#: utils/fields.py:46 -msgid "Ivory Coast" -msgstr "" - -#: utils/fields.py:47 -msgid "Cook Iislands" -msgstr "" - -#: utils/fields.py:48 -msgid "Chile" -msgstr "" - -#: utils/fields.py:49 -msgid "Cameroon" -msgstr "" - -#: utils/fields.py:50 -msgid "China" -msgstr "" - -#: utils/fields.py:51 -msgid "Colombia" -msgstr "" - -#: utils/fields.py:52 -msgid "Costa Rica" -msgstr "" - -#: utils/fields.py:53 -msgid "Cuba" -msgstr "" - -#: utils/fields.py:54 -msgid "Cape Verde" -msgstr "" - -#: utils/fields.py:55 -msgid "Christmas Island" -msgstr "" - -#: utils/fields.py:56 -msgid "Cyprus" -msgstr "" - -#: utils/fields.py:57 -msgid "Czech Republic" -msgstr "" - -#: utils/fields.py:58 -msgid "Germany" -msgstr "" - -#: utils/fields.py:59 -msgid "Djibouti" -msgstr "" - -#: utils/fields.py:60 -msgid "Denmark" -msgstr "" - -#: utils/fields.py:61 -msgid "Dominica" -msgstr "" - -#: utils/fields.py:62 -msgid "Dominican Republic" -msgstr "" - -#: utils/fields.py:63 -msgid "Algeria" -msgstr "" - -#: utils/fields.py:64 -msgid "Ecuador" -msgstr "" - -#: utils/fields.py:65 -msgid "Estonia" -msgstr "" - -#: utils/fields.py:66 -msgid "Egypt" -msgstr "" - -#: utils/fields.py:67 -msgid "Western Sahara" -msgstr "" - -#: utils/fields.py:68 -msgid "Eritrea" -msgstr "" - -#: utils/fields.py:69 -msgid "Spain" -msgstr "" - -#: utils/fields.py:70 -msgid "Ethiopia" -msgstr "" - -#: utils/fields.py:71 -msgid "Finland" -msgstr "" - -#: utils/fields.py:72 -msgid "Fiji" -msgstr "" - -#: utils/fields.py:73 -msgid "Falkland Islands (Malvinas)" -msgstr "" - -#: utils/fields.py:74 -msgid "Micronesia" -msgstr "" - -#: utils/fields.py:75 -msgid "Faroe Islands" -msgstr "" - -#: utils/fields.py:76 -msgid "France" -msgstr "" - -#: utils/fields.py:77 -msgid "France, Metropolitan" -msgstr "" - -#: utils/fields.py:78 -msgid "Gabon" -msgstr "" - -#: utils/fields.py:79 -msgid "United Kingdom (Great Britain)" -msgstr "" - -#: utils/fields.py:80 -msgid "Grenada" -msgstr "" - -#: utils/fields.py:81 -msgid "Georgia" -msgstr "" - -#: utils/fields.py:82 -msgid "French Guiana" -msgstr "" - -#: utils/fields.py:83 -msgid "Ghana" -msgstr "" - -#: utils/fields.py:84 -msgid "Gibraltar" -msgstr "" - -#: utils/fields.py:85 -msgid "Greenland" -msgstr "" - -#: utils/fields.py:86 -msgid "Gambia" -msgstr "" - -#: utils/fields.py:87 -msgid "Guinea" -msgstr "" - -#: utils/fields.py:88 -msgid "Guadeloupe" -msgstr "" - -#: utils/fields.py:89 -msgid "Equatorial Guinea" -msgstr "" - -#: utils/fields.py:90 -msgid "Greece" -msgstr "" - -#: utils/fields.py:91 -msgid "South Georgia and the South Sandwich Islands" -msgstr "" - -#: utils/fields.py:92 -msgid "Guatemala" -msgstr "" - -#: utils/fields.py:93 -msgid "Guam" -msgstr "" - -#: utils/fields.py:94 -msgid "Guinea-Bissau" -msgstr "" - -#: utils/fields.py:95 -msgid "Guyana" -msgstr "" - -#: utils/fields.py:96 -msgid "Hong Kong" -msgstr "" - -#: utils/fields.py:97 -msgid "Heard & McDonald Islands" -msgstr "" - -#: utils/fields.py:98 -msgid "Honduras" -msgstr "" - -#: utils/fields.py:99 -msgid "Croatia" -msgstr "" - -#: utils/fields.py:100 -msgid "Haiti" -msgstr "" - -#: utils/fields.py:101 -msgid "Hungary" -msgstr "" - -#: utils/fields.py:102 -msgid "Indonesia" -msgstr "" - -#: utils/fields.py:103 -msgid "Ireland" -msgstr "" - -#: utils/fields.py:104 -msgid "Israel" -msgstr "" - -#: utils/fields.py:105 -msgid "India" -msgstr "" - -#: utils/fields.py:106 -msgid "British Indian Ocean Territory" -msgstr "" - -#: utils/fields.py:107 -msgid "Iraq" -msgstr "" - -#: utils/fields.py:108 -msgid "Islamic Republic of Iran" -msgstr "" - -#: utils/fields.py:109 -msgid "Iceland" -msgstr "" - -#: utils/fields.py:110 -msgid "Italy" -msgstr "" - -#: utils/fields.py:111 -msgid "Jamaica" -msgstr "" - -#: utils/fields.py:112 -msgid "Jordan" -msgstr "" - -#: utils/fields.py:113 -msgid "Japan" -msgstr "" - -#: utils/fields.py:114 -msgid "Kenya" -msgstr "" - -#: utils/fields.py:115 -msgid "Kyrgyzstan" -msgstr "" +msgid "of" +msgstr "vom" -#: utils/fields.py:116 -msgid "Cambodia" +msgid "Bookings" msgstr "" -#: utils/fields.py:117 -msgid "Kiribati" +msgid "Membership" msgstr "" -#: utils/fields.py:118 -msgid "Comoros" +msgid "booking/payment/edit/?$" msgstr "" -#: utils/fields.py:119 -msgid "St. Kitts and Nevis" +msgid "^$" msgstr "" -#: utils/fields.py:120 -msgid "Korea, Democratic People's Republic of" +msgid "support-us/?$" msgstr "" -#: utils/fields.py:121 -msgid "Korea, Republic of" -msgstr "" - -#: utils/fields.py:122 -msgid "Kuwait" -msgstr "" - -#: utils/fields.py:123 -msgid "Cayman Islands" -msgstr "" - -#: utils/fields.py:124 -msgid "Kazakhstan" -msgstr "" - -#: utils/fields.py:125 -msgid "Lao People's Democratic Republic" -msgstr "" - -#: utils/fields.py:126 -msgid "Lebanon" -msgstr "" - -#: utils/fields.py:127 -msgid "Saint Lucia" -msgstr "" - -#: utils/fields.py:128 -msgid "Liechtenstein" -msgstr "" - -#: utils/fields.py:129 -msgid "Sri Lanka" -msgstr "" - -#: utils/fields.py:130 -msgid "Liberia" -msgstr "" - -#: utils/fields.py:131 -msgid "Lesotho" -msgstr "" - -#: utils/fields.py:132 -msgid "Lithuania" -msgstr "" - -#: utils/fields.py:133 -msgid "Luxembourg" -msgstr "" - -#: utils/fields.py:134 -msgid "Latvia" -msgstr "" - -#: utils/fields.py:135 -msgid "Libyan Arab Jamahiriya" -msgstr "" - -#: utils/fields.py:136 -msgid "Morocco" -msgstr "" - -#: utils/fields.py:137 -msgid "Monaco" -msgstr "" - -#: utils/fields.py:138 -msgid "Moldova, Republic of" -msgstr "" - -#: utils/fields.py:139 -msgid "Madagascar" -msgstr "" - -#: utils/fields.py:140 -msgid "Marshall Islands" -msgstr "" - -#: utils/fields.py:141 -msgid "Mali" -msgstr "" - -#: utils/fields.py:142 -msgid "Mongolia" -msgstr "" - -#: utils/fields.py:143 -msgid "Myanmar" -msgstr "" - -#: utils/fields.py:144 -msgid "Macau" -msgstr "" - -#: utils/fields.py:145 -msgid "Northern Mariana Islands" -msgstr "" - -#: utils/fields.py:146 -msgid "Martinique" -msgstr "" - -#: utils/fields.py:147 -msgid "Mauritania" -msgstr "" - -#: utils/fields.py:148 -msgid "Monserrat" -msgstr "" - -#: utils/fields.py:149 -msgid "Malta" -msgstr "" - -#: utils/fields.py:150 -msgid "Mauritius" -msgstr "" - -#: utils/fields.py:151 -msgid "Maldives" -msgstr "" - -#: utils/fields.py:152 -msgid "Malawi" -msgstr "" - -#: utils/fields.py:153 -msgid "Mexico" -msgstr "" - -#: utils/fields.py:154 -msgid "Malaysia" -msgstr "" - -#: utils/fields.py:155 -msgid "Mozambique" -msgstr "" - -#: utils/fields.py:156 -msgid "Namibia" -msgstr "" - -#: utils/fields.py:157 -msgid "New Caledonia" -msgstr "" - -#: utils/fields.py:158 -msgid "Niger" -msgstr "" - -#: utils/fields.py:159 -msgid "Norfolk Island" -msgstr "" - -#: utils/fields.py:160 -msgid "Nigeria" -msgstr "" - -#: utils/fields.py:161 -msgid "Nicaragua" -msgstr "" +msgid "contact/?$" +msgstr "kontakt/?$" -#: utils/fields.py:162 -msgid "Netherlands" +msgid "login/?$" msgstr "" -#: utils/fields.py:163 -msgid "Norway" +msgid "signup/?$" msgstr "" -#: utils/fields.py:164 -msgid "Nepal" +msgid "history/?$" msgstr "" -#: utils/fields.py:165 -msgid "Nauru" +msgid "users/billing_address/?$" msgstr "" -#: utils/fields.py:166 -msgid "Niue" +msgid "booking/?$" msgstr "" -#: utils/fields.py:167 -msgid "New Zealand" +msgid "booking/payment/?$" msgstr "" -#: utils/fields.py:168 -msgid "Oman" +msgid "booking/orders/(?P\\d+)/?$" msgstr "" -#: utils/fields.py:169 -msgid "Panama" +msgid "booking/orders/?$" msgstr "" -#: utils/fields.py:170 -msgid "Peru" +msgid "membership/payment/?$" msgstr "" -#: utils/fields.py:171 -msgid "French Polynesia" +msgid "membership/activated/?$" msgstr "" -#: utils/fields.py:172 -msgid "Papua New Guinea" +msgid "membership/deactivate/?$" msgstr "" -#: utils/fields.py:173 -msgid "Philippines" +msgid "membership/reactivate/?$" msgstr "" -#: utils/fields.py:174 -msgid "Pakistan" +msgid "membership/deactivate/success/?$" msgstr "" -#: utils/fields.py:175 -msgid "Poland" +msgid "membership/pricing/?$" msgstr "" -#: utils/fields.py:176 -msgid "St. Pierre & Miquelon" +msgid "membership/orders/(?P\\d+)/?$" msgstr "" -#: utils/fields.py:177 -msgid "Pitcairn" -msgstr "" - -#: utils/fields.py:178 -msgid "Puerto Rico" -msgstr "" - -#: utils/fields.py:179 -msgid "Portugal" -msgstr "" - -#: utils/fields.py:180 -msgid "Palau" -msgstr "" +#, fuzzy +#| msgid "supporters/?$" +msgid "membership/orders/?$" +msgstr "befurworter/?$" -#: utils/fields.py:181 -msgid "Paraguay" -msgstr "" - -#: utils/fields.py:182 -msgid "Qatar" -msgstr "" - -#: utils/fields.py:183 -msgid "Reunion" -msgstr "" - -#: utils/fields.py:184 -msgid "Romania" -msgstr "" +msgid "supporters/?$" +msgstr "befurworter/?$" -#: utils/fields.py:185 -msgid "Russian Federation" +msgid "Message Successfully Sent" msgstr "" -#: utils/fields.py:186 -msgid "Rwanda" -msgstr "" - -#: utils/fields.py:187 -msgid "Saudi Arabia" -msgstr "" - -#: utils/fields.py:188 -msgid "Solomon Islands" -msgstr "" - -#: utils/fields.py:189 -msgid "Seychelles" -msgstr "" - -#: utils/fields.py:190 -msgid "Sudan" -msgstr "" - -#: utils/fields.py:191 -msgid "Sweden" -msgstr "" - -#: utils/fields.py:192 -msgid "Singapore" -msgstr "" +#~ msgid "Enter your name or company name" +#~ msgstr "Geben Sie Ihren Namen oder der Ihrer Firma ein" -#: utils/fields.py:193 -msgid "St. Helena" -msgstr "" - -#: utils/fields.py:194 -msgid "Slovenia" -msgstr "" - -#: utils/fields.py:195 -msgid "Svalbard & Jan Mayen Islands" -msgstr "" - -#: utils/fields.py:196 -msgid "Slovakia" -msgstr "" - -#: utils/fields.py:197 -msgid "Sierra Leone" -msgstr "" - -#: utils/fields.py:198 -msgid "San Marino" -msgstr "" - -#: utils/fields.py:199 -msgid "Senegal" -msgstr "" - -#: utils/fields.py:200 -msgid "Somalia" -msgstr "" - -#: utils/fields.py:201 -msgid "Suriname" -msgstr "" - -#: utils/fields.py:202 -msgid "Sao Tome & Principe" -msgstr "" - -#: utils/fields.py:203 -msgid "El Salvador" -msgstr "" - -#: utils/fields.py:204 -msgid "Syrian Arab Republic" -msgstr "" - -#: utils/fields.py:205 -msgid "Swaziland" -msgstr "" - -#: utils/fields.py:206 -msgid "Turks & Caicos Islands" -msgstr "" - -#: utils/fields.py:207 -msgid "Chad" -msgstr "" - -#: utils/fields.py:208 -msgid "French Southern Territories" -msgstr "" - -#: utils/fields.py:209 -msgid "Togo" -msgstr "" - -#: utils/fields.py:210 -msgid "Thailand" -msgstr "" - -#: utils/fields.py:211 -msgid "Tajikistan" -msgstr "" - -#: utils/fields.py:212 -msgid "Tokelau" -msgstr "" - -#: utils/fields.py:213 -msgid "Turkmenistan" -msgstr "" - -#: utils/fields.py:214 -msgid "Tunisia" -msgstr "" - -#: utils/fields.py:215 -msgid "Tonga" -msgstr "" - -#: utils/fields.py:216 -msgid "East Timor" -msgstr "" - -#: utils/fields.py:217 -msgid "Turkey" -msgstr "" - -#: utils/fields.py:218 -msgid "Trinidad & Tobago" -msgstr "" - -#: utils/fields.py:219 -msgid "Tuvalu" -msgstr "" - -#: utils/fields.py:220 -msgid "Taiwan, Province of China" -msgstr "" - -#: utils/fields.py:221 -msgid "Tanzania, United Republic of" -msgstr "" - -#: utils/fields.py:222 -msgid "Ukraine" -msgstr "" - -#: utils/fields.py:223 -msgid "Uganda" -msgstr "" - -#: utils/fields.py:224 -msgid "United States Minor Outlying Islands" -msgstr "" - -#: utils/fields.py:225 -msgid "United States of America" -msgstr "" - -#: utils/fields.py:226 -msgid "Uruguay" -msgstr "" - -#: utils/fields.py:227 -msgid "Uzbekistan" -msgstr "" - -#: utils/fields.py:228 -msgid "Vatican City State (Holy See)" -msgstr "" - -#: utils/fields.py:229 -msgid "St. Vincent & the Grenadines" -msgstr "" - -#: utils/fields.py:230 -msgid "Venezuela" -msgstr "" - -#: utils/fields.py:231 -msgid "British Virgin Islands" -msgstr "" - -#: utils/fields.py:232 -msgid "United States Virgin Islands" -msgstr "" - -#: utils/fields.py:233 -msgid "Viet Nam" -msgstr "" - -#: utils/fields.py:234 -msgid "Vanuatu" -msgstr "" - -#: utils/fields.py:235 -msgid "Wallis & Futuna Islands" -msgstr "" - -#: utils/fields.py:236 -msgid "Samoa" -msgstr "" - -#: utils/fields.py:237 -msgid "Yemen" -msgstr "" - -#: utils/fields.py:238 -msgid "Mayotte" -msgstr "" - -#: utils/fields.py:239 -msgid "Yugoslavia" -msgstr "" - -#: utils/fields.py:240 -msgid "South Africa" -msgstr "" - -#: utils/fields.py:241 -msgid "Zambia" -msgstr "" - -#: utils/fields.py:242 -msgid "Zaire" -msgstr "" - -#: utils/fields.py:243 -msgid "Zimbabwe" -msgstr "" - -#: utils/fields.py:244 -msgid "Unknown or unspecified country" -msgstr "" - -#: utils/forms.py:21 -msgid "Enter your name or company name" -msgstr "Geben Sie Ihren Namen oder der Ihrer Firma ein" - -#: utils/forms.py:106 -msgid "Cardholder Name" -msgstr "Name des Kartenbesitzer" - -#: utils/forms.py:122 -msgid "Street Building" -msgstr "" +#~ msgid "Cardholder Name" +#~ msgstr "Name des Kartenbesitzer" -#: utils/forms.py:142 -msgid "Name" -msgstr "Name" +#~ msgid "Name" +#~ msgstr "Name" -#: utils/forms.py:143 -msgid "Email" -msgstr "Email" +#~ msgid "Email" +#~ msgstr "Email" -#: utils/forms.py:144 -msgid "Phone number" -msgstr "Telefon" +#~ msgid "Phone number" +#~ msgstr "Telefon" -#: utils/forms.py:145 -msgid "Message" -msgstr "Nachricht" +#~ msgid "Message" +#~ msgstr "Nachricht" #, fuzzy #~ msgid "Card number" diff --git a/hosting/locale/de/LC_MESSAGES/django.po b/hosting/locale/de/LC_MESSAGES/django.po index ede9b66f..79721e0a 100644 --- a/hosting/locale/de/LC_MESSAGES/django.po +++ b/hosting/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-09-20 20:23+0000\n" +"POT-Creation-Date: 2017-09-23 01:50+0530\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -215,39 +215,20 @@ msgstr "" msgid "Password Reset" msgstr "Passwort zurücksetzen" -#, python-format -msgid "" -"\n" -"You're receiving this email because you requested a password reset for your " -"user account at %(site_name)s.
\n" -"Please go to the following page and choose a new password: %(base_url)s" -"%(password_reset_url)s
\n" -"If you didn't request a new password, ignore this e-mail.
\n" -"Thank you!\n" +msgid "We received a request to reset your password." msgstr "" -"\n" -"Du erhälst diese E-Mail da du dein Passwort für deinen Account bei " -"%(site_name)s zurücksetzen möchtest.
\n" -"Bitte folge diesem Link und wähle ein neues Passwort: %(base_url)s" -"%(password_reset_url)s Solltest du kein neues Passwort angefordert haben, " -"dann ignoriere diese E-Mail.
\n" -"Dankeschön!\n" -#, python-format -msgid "" -"You're receiving this email because you requested a password reset for your " -"user account at %(site_name)s.\n" -"Please go to the following page and choose a new password: %(base_url)s" -"%(password_reset_url)s\n" -"If you didn't request a new password, ignore this e-mail.\n" -"Thank you!\n" +msgid "If you didn't make this request you can safely ignore this email." msgstr "" -"Du erhälst diese E-Mail da du dein Passwort für deinen Account bei " -"%(site_name)s zurücksetzen möchtest.\n" -"Bitte folge diesem Link und wähle ein neues Passwort: %(base_url)s" -"%(password_reset_url)s Solltest du kein neues Passwort angefordert haben, " -"dann ignoriere diese E-Mail.\n" -"Dankeschön!\n" + +msgid "Otherwise, click here to reset your password." +msgstr "" + +msgid "Thank you!" +msgstr "" + +msgid "Your Data Center Light Team" +msgstr "Dein Data Center Light Team" #, python-format msgid "" @@ -374,7 +355,6 @@ msgstr "" msgid "Place order" msgstr "Bestelle" - msgid "Processing..." msgstr "Abarbeitung..." @@ -646,8 +626,8 @@ msgid "" "Your VM will be up and running in a few moments. We will send you a " "confirmation email as soon as it is ready." msgstr "" -"Deine VM ist gleich bereit. Wir senden Dir eine Bestätigungsemail, " -"sobald Du auf sie zugreifen kannst." +"Deine VM ist gleich bereit. Wir senden Dir eine Bestätigungsemail, sobald Du " +"auf sie zugreifen kannst." msgid "In order to create a VM, you need to create/upload your SSH KEY first." msgstr "" @@ -665,12 +645,41 @@ msgstr "VM Kündigung" msgid "VM %(VM_ID)s terminated successfully" msgstr "VM %(VM_ID)s erfolgreich beendet" +#~ msgid "" +#~ "\n" +#~ "You're receiving this email because you requested a password reset for " +#~ "your user account at %(site_name)s.
\n" +#~ "Please go to the following page and choose a new password: %(base_url)s" +#~ "%(password_reset_url)s
\n" +#~ "If you didn't request a new password, ignore this e-mail.
\n" +#~ "Thank you!\n" +#~ msgstr "" +#~ "\n" +#~ "Du erhälst diese E-Mail da du dein Passwort für deinen Account bei " +#~ "%(site_name)s zurücksetzen möchtest.
\n" +#~ "Bitte folge diesem Link und wähle ein neues Passwort: %(base_url)s" +#~ "%(password_reset_url)s Solltest du kein neues Passwort angefordert haben, " +#~ "dann ignoriere diese E-Mail.
\n" +#~ "Dankeschön!\n" + +#~ msgid "" +#~ "You're receiving this email because you requested a password reset for " +#~ "your user account at %(site_name)s.\n" +#~ "Please go to the following page and choose a new password: %(base_url)s" +#~ "%(password_reset_url)s\n" +#~ "If you didn't request a new password, ignore this e-mail.\n" +#~ "Thank you!\n" +#~ msgstr "" +#~ "Du erhälst diese E-Mail da du dein Passwort für deinen Account bei " +#~ "%(site_name)s zurücksetzen möchtest.\n" +#~ "Bitte folge diesem Link und wähle ein neues Passwort: %(base_url)s" +#~ "%(password_reset_url)s Solltest du kein neues Passwort angefordert haben, " +#~ "dann ignoriere diese E-Mail.\n" +#~ "Dankeschön!\n" + #~ msgid "Finish Configuration" #~ msgstr "Konfiguration beenden" -#~ msgid "Your New VM %(vm_name)s at Data Center Light" -#~ msgstr "Deine neue VM %(vm_name)s bei Data Center Light" - #~ msgid "My Virtual Machines" #~ msgstr "Meine virtuellen Maschinen" diff --git a/hosting/templates/hosting/emails/password_reset_email.html b/hosting/templates/hosting/emails/password_reset_email.html index b83a08f2..f5929f33 100644 --- a/hosting/templates/hosting/emails/password_reset_email.html +++ b/hosting/templates/hosting/emails/password_reset_email.html @@ -1,14 +1,49 @@ -{% extends "datacenterlight/emails/base_email_datacenterlight.html" %} -{% load i18n %} -{% block email_head %} -{% trans 'Password Reset' %} -{% endblock %} -{% block email_body %} -{% url 'hosting:reset_password_confirm' uidb64=uid token=token as password_reset_url %} -{% blocktrans %} -You're receiving this email because you requested a password reset for your user account at {{site_name}}.
-Please go to the following page and choose a new password: {{base_url}}{{ password_reset_url }}
-If you didn't request a new password, ignore this e-mail.
-Thank you! -{% endblocktrans %} -{% endblock %} +{% load static i18n %} + + + + + + + {% trans "Password Reset" %} + + + + + + + + + + + + + + + + + + +
+ +
+

{% trans "Password Reset" %}

+
+

+ {% trans "We received a request to reset your password." %}
+ {% trans "If you didn't make this request you can safely ignore this email." %}
+ {% trans "Otherwise, click here to reset your password." %} +

+

+ {% url 'hosting:reset_password_confirm' uidb64=uid token=token as password_reset_url %} + {{base_url}}{{ password_reset_url }} +

+

+ {% trans "Thank you!" %} +

+
+

{% trans "Your Data Center Light Team" %}

+
+ + + \ No newline at end of file diff --git a/hosting/templates/hosting/emails/password_reset_email.txt b/hosting/templates/hosting/emails/password_reset_email.txt index 769166ed..af97c78a 100644 --- a/hosting/templates/hosting/emails/password_reset_email.txt +++ b/hosting/templates/hosting/emails/password_reset_email.txt @@ -1,11 +1,12 @@ -{% extends "datacenterlight/emails/base_email_datacenterlight.txt" %} -{% load i18n %} -{% block email_head %}{% trans 'Password Reset' %}{% endblock %} -{% block email_body %} +{% trans "Password Reset" %} + +{% trans "We received a request to reset your password." %} +{% trans "If you didn't make this request you can safely ignore this email." %} +{% trans "Otherwise, click here to reset your password." %} + {% url 'hosting:reset_password_confirm' uidb64=uid token=token as password_reset_url %} -{% blocktrans %}You're receiving this email because you requested a password reset for your user account at {{site_name}}. -Please go to the following page and choose a new password: {{base_url}}{{ password_reset_url }} -If you didn't request a new password, ignore this e-mail. -Thank you! -{% endblocktrans %} -{% endblock %} +{{base_url}}{{ password_reset_url }} + +{% trans "Thank you!" %} + +{% trans "Your Data Center Light Team" %} diff --git a/membership/locale/de/LC_MESSAGES/django.po b/membership/locale/de/LC_MESSAGES/django.po index 42846dab..8732b6c4 100644 --- a/membership/locale/de/LC_MESSAGES/django.po +++ b/membership/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-06-23 02:05+0530\n" +"POT-Creation-Date: 2017-09-23 01:50+0530\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,42 +18,35 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: forms.py:43 msgid "Name" msgstr "" -#: forms.py:43 msgid "Card number" msgstr "" -#: forms.py:43 msgid "Expiry date" msgstr "" -#: forms.py:44 msgid "CCV" msgstr "" -#: models.py:66 msgid "staff status" msgstr "" -#: models.py:68 msgid "Designates whether the user can log into this admin site." msgstr "" -#: models.py:90 -msgid "Activate your " -msgstr "Aktiviere deinen " +msgid "Account Activation" +msgstr "" -#: models.py:90 -msgid " account" -msgstr " Account" - -#: models.py:198 msgid "Use this pattern(MM/YYYY)." msgstr "" -#: models.py:199 msgid "Wrong CCV number." msgstr "" + +#~ msgid "Activate your " +#~ msgstr "Aktiviere deinen " + +#~ msgid " account" +#~ msgstr " Account" diff --git a/ungleich_page/locale/de/LC_MESSAGES/django.po b/ungleich_page/locale/de/LC_MESSAGES/django.po index dfba87c5..a4470c29 100644 --- a/ungleich_page/locale/de/LC_MESSAGES/django.po +++ b/ungleich_page/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-05-30 13:47+0000\n" +"POT-Creation-Date: 2017-09-23 01:50+0530\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,110 +18,81 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ungleich_page/templates/ungleich_page/includes/_about.html:8 msgid "ABOUT" msgstr "Über ungleich" -#: ungleich_page/templates/ungleich_page/includes/_about.html:9 msgid "The timeline of ungleich" msgstr "Die Chronik von ungleich" -#: ungleich_page/templates/ungleich_page/includes/_about.html:24 msgid "The first incarnation of ungleich" msgstr "Die erste Inkarnation von ungleich" -#: ungleich_page/templates/ungleich_page/includes/_about.html:25 msgid "in Germany" msgstr "in Deutschland" -#: ungleich_page/templates/ungleich_page/includes/_about.html:37 msgid "ungleich founded" msgstr "ungleich gegründet" -#: ungleich_page/templates/ungleich_page/includes/_about.html:38 msgid "in Switzerland" msgstr "in der Schweiz" -#: ungleich_page/templates/ungleich_page/includes/_about.html:51 msgid "ungleich present at various conferences" msgstr "ungleich präsent an mehreren Konferenzen" -#: ungleich_page/templates/ungleich_page/includes/_about.html:65 msgid "ungleich introduces HA-Hosting" msgstr "ungleich führt HA-Hosting ein" -#: ungleich_page/templates/ungleich_page/includes/_about.html:66 msgid "and introduces affordable 24X7 support." msgstr "und führt kostengünstigen 24X7 Support ein." -#: ungleich_page/templates/ungleich_page/includes/_about.html:67 msgid "ungleich launches" msgstr "ungleich lanciert" -#: ungleich_page/templates/ungleich_page/includes/_about.html:68 msgid "Digital Glarus project" msgstr "Digital Glarus Projekt" -#: ungleich_page/templates/ungleich_page/includes/_about.html:74 msgid "and" msgstr "und" -#: ungleich_page/templates/ungleich_page/includes/_about.html:74 msgid "the story continues!" msgstr "Die Geschichte geht weiter!" -#: ungleich_page/templates/ungleich_page/includes/_contact_us.html:15 -#: ungleich_page/templates/ungleich_page/includes/_contact_us.html:28 -#: ungleich_page/views.py:36 msgid "Contact Us" msgstr "Kontaktieren Sie uns" -#: ungleich_page/templates/ungleich_page/includes/_contact_us.html:18 msgid "Join us at" msgstr "Schliessen Sie sich uns an" -#: ungleich_page/templates/ungleich_page/includes/_contact_us.html:19 msgid "Digital Glarus" msgstr "Digital Glarus" -#: ungleich_page/templates/ungleich_page/includes/_contact_us.html:20 msgid "a great co-working space in the middle of Alps!" msgstr "ein wunderschöner Co-Working Space mitten in den Alpen" -#: ungleich_page/templates/ungleich_page/includes/_contact_us.html:21 msgid "You can contact us at" msgstr "Sie können uns kontaktieren unter" -#: ungleich_page/templates/ungleich_page/includes/_contact_us.html:26 msgid "or" msgstr "oder" -#: ungleich_page/templates/ungleich_page/includes/_contact_us.html:60 msgid "Submit" msgstr "Absenden" -#: ungleich_page/templates/ungleich_page/includes/_footer.html:8 msgid "Copyright © ungleich GmbH " msgstr "Copyright © ungleich GmbH" -#: ungleich_page/templates/ungleich_page/includes/_footer.html:22 msgid "ungleich Home" msgstr "ungleich Home" -#: ungleich_page/templates/ungleich_page/includes/_header.html:11 msgid "We Design, Configure & Maintain
Your Linux Infrastructure " msgstr "Wir designen, erstellen und warten Ihre Linux-Infrastruktur" -#: ungleich_page/templates/ungleich_page/includes/_portfolio.html:8 -#: ungleich_page/templates/ungleich_page/includes/_portfolio.html:9 msgid "Hosting Products " msgstr "Hosting Produkte" -#: ungleich_page/templates/ungleich_page/includes/_portfolio.html:16 msgid "HA Hosting" msgstr "HA Hosting" -#: ungleich_page/templates/ungleich_page/includes/_portfolio.html:18 msgid "" "We offer high availablity hosting (HA) in Germany and in Switzerland. Our " "infrastructure is powered by Free and Open Source Software like OpenNebula, " @@ -131,22 +102,18 @@ msgstr "" "Schweiz. Unsere Infrastruktur ist unterstützt durch Free and Open Source " "Software wie OpenNebula." -#: ungleich_page/templates/ungleich_page/includes/_portfolio.html:24 msgid "Rails Hosting" msgstr "Rails Hosting" -#: ungleich_page/templates/ungleich_page/includes/_portfolio.html:26 msgid "" "Ready to go live with your Ruby on Rails application? We offer you ready-to-" "deploy virtual machines or configure your existing infrastructure for Ruby " "on Rails." msgstr "Sind bereit mit ihrem Ruby on Rails Applikation live zu gehen?" -#: ungleich_page/templates/ungleich_page/includes/_portfolio.html:32 msgid " Configuration as a Service" msgstr "Konfiguration als Service" -#: ungleich_page/templates/ungleich_page/includes/_portfolio.html:34 msgid "" "You are in need for a configuration?
With ungleich you have found an " "experienced team that configure your systems to provide service like DNS, E-" @@ -156,27 +123,22 @@ msgstr "" "gefunden, dass ihnen die Konfiguration von DNS, E-Mail, Datenbanken oder " "Webservern für ihr System anbietet" -#: ungleich_page/templates/ungleich_page/includes/_services.html:8 msgid "our services" msgstr "Unsere Dienstleistungen" -#: ungleich_page/templates/ungleich_page/includes/_services.html:10 msgid "We support our clients in all areas of Unix infrastructure." msgstr "" "Wir unterstützen unsere Klienten in allen Bereichen der Unix Infrastruktur." -#: ungleich_page/templates/ungleich_page/includes/_services.html:11 msgid "" "Our top notch configuration management is refreshingly simple and reliable." msgstr "" "Unser erstklassiges Konfigurationsmanagement ist erfrischend einfach und " "zuverlässig." -#: ungleich_page/templates/ungleich_page/includes/_services.html:20 msgid "Hosting" msgstr "Hosting" -#: ungleich_page/templates/ungleich_page/includes/_services.html:22 msgid "" "Ruby on Rails. Java hosting, Django hosting, we make it everything run " "smooth and safe." @@ -184,11 +146,9 @@ msgstr "" "Ruby on Rails. Java hosting, Django hosting, wir garantieren einen " "reibungslosen Ablauf" -#: ungleich_page/templates/ungleich_page/includes/_services.html:30 msgid "Configuration as a Service" msgstr "Konfiguration als Service" -#: ungleich_page/templates/ungleich_page/includes/_services.html:32 msgid "" "Ruby on Rails, Django, Java, Webserver, Mailserver, any infrastructure that " "needs to configured, we provide comprehensive solutions. Amazon, rackspace " @@ -198,11 +158,9 @@ msgstr "" "welche eine Konfiguration braucht, wir offerieren umfassende Lösungen, " "Amazon, Rackspace oder Bare Metal Servers, wir konfigurieren alles." -#: ungleich_page/templates/ungleich_page/includes/_services.html:40 msgid "Linux System Engineering" msgstr "Linux System Engineering" -#: ungleich_page/templates/ungleich_page/includes/_services.html:43 msgid "" "Let your developers develop! We take care of your system administration. " "Gentoo, Archlinux, Debian, Ubuntu, and many more." @@ -210,15 +168,12 @@ msgstr "" "Lassen sie ihre Entwickler entwickeln! Wir kümmern uns um ihre " "Systemadministration. Gentoo, Archlinux, Debian, Ubuntu und viele mehr." -#: ungleich_page/templates/ungleich_page/includes/_team.html:8 msgid "Why ungleich?*" msgstr "Warum ungleich?" -#: ungleich_page/templates/ungleich_page/includes/_team.html:9 msgid "What our customers say" msgstr "Was unsere Kunden sagen" -#: ungleich_page/templates/ungleich_page/includes/_team.html:29 msgid "" "\n" "\t\t\t \"ungleich helped us getting started with our internal\n" @@ -247,7 +202,6 @@ msgstr "" "Infrastruktur-Einrichtung erhalten, welche es unseren Technikern ermöglicht " "effizienter und bequemer zu arbeiten als zuvor." -#: ungleich_page/templates/ungleich_page/includes/_team.html:51 msgid "" "\n" "\t\t\t \"Thanks to ungleich team, who has designed and\n" @@ -265,7 +219,6 @@ msgstr "" "nur in der Kosteneinsparung aber auch zur Zeiteinsparung, was für IT-Firmen " "sehr wichtig ist." -#: ungleich_page/templates/ungleich_page/includes/_team.html:67 msgid "" "\n" "\t\t\t \"ungleich provided an excellent service in designing\n" @@ -292,7 +245,6 @@ msgstr "" "allen Firmen empfehlen, bei denen eine solide Infrastruktur stark gefragt " "ist." -#: ungleich_page/templates/ungleich_page/includes/_team.html:82 msgid "" "\n" "\t\t\t - Sebastian Plattner,\n" @@ -300,47 +252,37 @@ msgid "" "\t\t\t " msgstr "" -#: ungleich_page/templates/ungleich_page/includes/_team.html:95 msgid "*ungleich means not equal to (≠) U+2260." msgstr "*ungleich bedeutet nicht gleich wie (≠) U+2260." -#: ungleich_page/templates/ungleich_page/landing.html:85 #, fuzzy #| msgid "our services" msgid "Services" msgstr "Unsere Dienstleistungen" -#: ungleich_page/templates/ungleich_page/landing.html:90 msgid "products" msgstr "PRODUKTE" -#: ungleich_page/templates/ungleich_page/landing.html:93 msgid "About" msgstr "Über" -#: ungleich_page/templates/ungleich_page/landing.html:96 msgid "WHY UNGLEICH?" msgstr "WARUM UNGLEICH?" -#: ungleich_page/templates/ungleich_page/landing.html:99 msgid "BLOG" msgstr "BLOG" -#: ungleich_page/templates/ungleich_page/landing.html:102 msgid "CONTACT" msgstr "KONTAKT" -#: ungleich_page/urls.py:8 #, fuzzy #| msgid "Contact Us" msgid "contact/$" msgstr "Kontaktieren Sie uns" -#: ungleich_page/views.py:26 msgid "Message Successfully Sent" msgstr "Nachricht erfolgreich versendet" -#: ungleich_page/views.py:37 msgid "If you have any question, just send us an email." msgstr "" "Wenn Sie irgendwelche Fragen haben, schicken Sie uns einfach eine E-Mail." diff --git a/utils/locale/de/LC_MESSAGES/django.po b/utils/locale/de/LC_MESSAGES/django.po index fdc21502..39d6fa19 100644 --- a/utils/locale/de/LC_MESSAGES/django.po +++ b/utils/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-09-02 11:50+0000\n" +"POT-Creation-Date: 2017-09-23 01:50+0530\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -769,7 +769,8 @@ msgid "Message" msgstr "Nachricht" msgid "The link to reset your email has been sent to your email" -msgstr "Der Link zum Zur?cksetzen deines Passwortes wurde an deine E-Mail gesendet" +msgstr "" +"Der Link zum Zur?cksetzen deines Passwortes wurde an deine E-Mail gesendet" msgid "Password Reset" msgstr "" From 6983b6f72e05d559ec530de58741523d572c564e Mon Sep 17 00:00:00 2001 From: Arvind Tiwari Date: Sat, 23 Sep 2017 02:27:19 +0530 Subject: [PATCH 004/111] all emails redesigned --- .../locale/de/LC_MESSAGES/django.po | 8 +- datacenterlight/urls.py | 4 - hosting/locale/de/LC_MESSAGES/django.po | 124 +++++++++--------- .../hosting/emails/new_booked_vm.html | 61 +++++++-- .../hosting/emails/new_booked_vm.txt | 20 +-- .../templates/hosting/emails/vm_canceled.html | 60 +++++++-- .../templates/hosting/emails/vm_canceled.txt | 21 ++- 7 files changed, 180 insertions(+), 118 deletions(-) diff --git a/datacenterlight/locale/de/LC_MESSAGES/django.po b/datacenterlight/locale/de/LC_MESSAGES/django.po index dd57b3a4..a9dfd3e2 100644 --- a/datacenterlight/locale/de/LC_MESSAGES/django.po +++ b/datacenterlight/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-09-23 01:50+0530\n" +"POT-Creation-Date: 2017-09-23 02:19+0530\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -148,14 +148,12 @@ msgstr "" msgid "" "You can also copy and paste the following link into the address bar of your " "browser to activate your Data Center Light account." -msgstr "" -"Kopiere den folgenden Link in die Adressleiste deines Browsers." +msgstr "Kopiere den folgenden Link in die Adressleiste deines Browsers." msgid "" "You can copy and paste the following link into the address bar of your " "browser to activate your Data Center Light account." -msgstr "" -"Kopiere den folgenden Link in die Adressleiste deines Browsers." +msgstr "Kopiere den folgenden Link in die Adressleiste deines Browsers." msgid "Welcome to Data Center Light!" msgstr "Willkommen zu Data Center Light!" diff --git a/datacenterlight/urls.py b/datacenterlight/urls.py index 095a0645..0ac2c306 100644 --- a/datacenterlight/urls.py +++ b/datacenterlight/urls.py @@ -6,12 +6,8 @@ from .views import ( WhyDataCenterLightView, ContactUsView ) -from django.views.generic import TemplateView - urlpatterns = [ - url(r'^test/$', TemplateView.as_view( - template_name='hosting/emails/password_reset_email.html')), url(r'^$', IndexView.as_view(), name='index'), url(r'^t/$', IndexView.as_view(), name='index_t'), url(r'^g/$', IndexView.as_view(), name='index_g'), diff --git a/hosting/locale/de/LC_MESSAGES/django.po b/hosting/locale/de/LC_MESSAGES/django.po index 79721e0a..cbed82b7 100644 --- a/hosting/locale/de/LC_MESSAGES/django.po +++ b/hosting/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-09-23 01:50+0530\n" +"POT-Creation-Date: 2017-09-23 02:19+0530\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -189,28 +189,27 @@ msgid "Support / Contact" msgstr "Support / Kontakt" #, python-format -msgid "" -"You have ordered a new virtual machine!\n" -"
\n" -"Your order of [%(vm_name)s] has been charged.

\n" -"You can view your invoice by clicking the button below.

\n" -msgstr "" -"Du hast eine neue virtuelle Maschine bestellt!
\n" -"Deine Bestellung von [%(vm_name)s] wurde erhoben.

\n" -"Um die Rechnung zu sehen, klicke auf den Button unten.

\n" +msgid "Your New VM %(vm_name)s" +msgstr "Deine Neue VM %(vm_name)s" -msgid "View Invoice" -msgstr "Zur Rechnung" +msgid "You have ordered a new virtual machine!" +msgstr "Du hast eine neue virtuelle Maschine bestellt!" #, python-format -msgid "" -"You have ordered a new virtual machine!\n" -"Your order of [%(vm_name)s] has been charged.\n" -"You can view your invoice here.\n" -msgstr "" -"Du hast eine neue virtuelle Maschine bestellt!\n" -"Deine Bestellung von [%(vm_name)s] wurde erhoben.\n" -"Um die Rechnung zu sehen, klicke hier.\n" +msgid "Your order of [%(vm_name)s] has been charged." +msgstr "Deine Bestellung von [%(vm_name)s] wurde erhoben." + +msgid "You can view your VM detail by clicking the button below." +msgstr "Um die Rechnung zu sehen, klicke auf den Button unten." + +msgid "View Detail" +msgstr "Details anzeigen" + +msgid "Your Data Center Light Team" +msgstr "Dein Data Center Light Team" + +msgid "You can view your VM detail by following the link below." +msgstr "Um die Rechnung zu sehen, klicke auf den Link unten." msgid "Password Reset" msgstr "Passwort zurücksetzen" @@ -227,44 +226,25 @@ msgstr "" msgid "Thank you!" msgstr "" -msgid "Your Data Center Light Team" -msgstr "Dein Data Center Light Team" +msgid "Virtual Machine Cancellation" +msgstr "VM Kündigung" #, python-format msgid "" -"You're receiving this mail because your virtual machine [%(vm_name)s] has " -"been cancelled.
\n" -"You can see your order status by clicking [my VM page] below.
\n" -"If you want to order a new virtual machine, you can do it by clicking this link.
\n" +"You are receiving this email because your virutal machine [%(vm_name)s] has " +"been cancelled." msgstr "" -"Du erhälst diese E-Mail, da deine virtuelle Maschine [%(vm_name)s] gekündigt " -"wurde.
\n" -"Um deinen Auftragsstatus zu sehen, klicke auf die [my VM page] unten.
\n" -"Falls du eine neue virtuelle Maschine bestellen möchtest, kannst du dies " -"tun, indem du diesen " -"Link klickst.
\n" +"Du erhälst diese E-Mail, da deine virtuelle Maschine [%(vm_name)s] " +"gekündigt wurde."" -msgid "My VM page" +msgid "You can always order a new VM by clicking the button below." msgstr "" -#, python-format -msgid "" -"You're receiving this mail because your virtual machine [%(vm_name)s] has " -"been cancelled.\n" -"You can see your order status by clicking here\n" -"%(base_url)s%(vm_order_url)s\n" -"If you want to order a new virtual machine, you can do it by clicking this " -"link.\n" -"%(base_url)s%(my_virtual_machines_url)s\n" +msgid "CREATE VM" +msgstr "NEUE VM" + +msgid "You can always order a new VM by following the link below." msgstr "" -"Du erhälst diese E-Mail, da deine virtuelle Maschine [%(vm_name)s] gekündigt " -"wurde.\n" -"Um deinen Auftragsstatus zu sehen, klicke hier.\n" -"%(base_url)s%(vm_order_url)s\n" -"Falls du eine neue virtuelle Maschine bestellen möchtest, kannst du dies " -"tun, indem du diesen Link klickst.\n" -"%(base_url)s%(my_virtual_machines_url)s\n" msgid "Toggle navigation" msgstr "Konfiguration" @@ -571,12 +551,6 @@ msgstr "Virtuelle Maschinen" msgid "To create a new virtual machine, click \"Create VM\"" msgstr "Um eine neue VM zu erzeugen, klicke \"Neue VM erzeugen\"" -msgid "CREATE VM" -msgstr "NEUE VM" - -msgid "View Detail" -msgstr "Details anzeigen" - msgid "login" msgstr "Einloggen" @@ -638,13 +612,45 @@ msgid "" "contact Data Center Light Support." msgstr "Kontaktiere den Data Center Light Support." -msgid "Virtual Machine Cancellation" -msgstr "VM Kündigung" - #, python-format msgid "VM %(VM_ID)s terminated successfully" msgstr "VM %(VM_ID)s erfolgreich beendet" +#~ msgid "View Invoice" +#~ msgstr "Zur Rechnung" + +#~ msgid "" +#~ "You're receiving this mail because your virtual machine [%(vm_name)s] has " +#~ "been cancelled.
\n" +#~ "You can see your order status by clicking [my VM page] below.
\n" +#~ "If you want to order a new virtual machine, you can do it by clicking this link.
\n" +#~ msgstr "" +#~ "Du erhälst diese E-Mail, da deine virtuelle Maschine [%(vm_name)s] " +#~ "gekündigt wurde.
\n" +#~ "Um deinen Auftragsstatus zu sehen, klicke auf die [my VM page] unten.
\n" +#~ "Falls du eine neue virtuelle Maschine bestellen möchtest, kannst du dies " +#~ "tun, indem du diesen " +#~ "Link klickst.
\n" + +#~ msgid "" +#~ "You're receiving this mail because your virtual machine [%(vm_name)s] has " +#~ "been cancelled.\n" +#~ "You can see your order status by clicking here\n" +#~ "%(base_url)s%(vm_order_url)s\n" +#~ "If you want to order a new virtual machine, you can do it by clicking " +#~ "this link.\n" +#~ "%(base_url)s%(my_virtual_machines_url)s\n" +#~ msgstr "" +#~ "Du erhälst diese E-Mail, da deine virtuelle Maschine [%(vm_name)s] " +#~ "gekündigt wurde.\n" +#~ "Um deinen Auftragsstatus zu sehen, klicke hier.\n" +#~ "%(base_url)s%(vm_order_url)s\n" +#~ "Falls du eine neue virtuelle Maschine bestellen möchtest, kannst du dies " +#~ "tun, indem du diesen Link klickst.\n" +#~ "%(base_url)s%(my_virtual_machines_url)s\n" + #~ msgid "" #~ "\n" #~ "You're receiving this email because you requested a password reset for " diff --git a/hosting/templates/hosting/emails/new_booked_vm.html b/hosting/templates/hosting/emails/new_booked_vm.html index 864cf813..78134307 100644 --- a/hosting/templates/hosting/emails/new_booked_vm.html +++ b/hosting/templates/hosting/emails/new_booked_vm.html @@ -1,14 +1,47 @@ -{% extends "datacenterlight/emails/base_email_datacenterlight.html" %} -{% load i18n %} -{% block email_head %}{{page_header}}{% endblock %} -{% block email_body %} -{% url 'hosting:orders' order.id as order_url %} -{% blocktrans with vm.name as vm_name %}You have ordered a new virtual machine! -
-Your order of [{{vm_name}}] has been charged.

-You can view your invoice by clicking the button below.

-{% endblocktrans %} - -{% endblock %} +{% load static i18n %} + + + + + + + {% blocktrans %}Your New VM {{vm_name}}{% endblocktrans %} + + + + + + + + + + + + + + + + + + + + + +
+ +
+

{% blocktrans %}Your New VM {{vm_name}}{% endblocktrans %}

+
+

+ {% blocktrans %}You have ordered a new virtual machine!{% endblocktrans %}
+ {% blocktrans %}Your order of [{{vm_name}}] has been charged.{% endblocktrans %}
+ {% blocktrans %}You can view your VM detail by clicking the button below.{% endblocktrans %} +

+
+ {% trans "View Detail" %} +
+

{% trans "Your Data Center Light Team" %}

+
+ + + \ No newline at end of file diff --git a/hosting/templates/hosting/emails/new_booked_vm.txt b/hosting/templates/hosting/emails/new_booked_vm.txt index b8e3eed1..1520ccab 100644 --- a/hosting/templates/hosting/emails/new_booked_vm.txt +++ b/hosting/templates/hosting/emails/new_booked_vm.txt @@ -1,11 +1,11 @@ -{% extends "datacenterlight/emails/base_email_datacenterlight.txt" %} {% load i18n %} -{% block email_head %}{{page_header}}{% endblock %} -{% block email_body %} -{% url 'hosting:orders' order.id as order_url %} -{% blocktrans with vm.name as vm_name %}You have ordered a new virtual machine! -Your order of [{{vm_name}}] has been charged. -You can view your invoice here. -{% endblocktrans %} -{{ base_url }}{{order_url}} -{% endblock %} + +{% blocktrans %}Your New VM {{vm_name}}{% endblocktrans %} + +{% blocktrans %}You have ordered a new virtual machine!{% endblocktrans %} +{% blocktrans %}Your order of [{{vm_name}}] has been charged.{% endblocktrans %} +{% blocktrans %}You can view your VM detail by following the link below.{% endblocktrans %} + +{{ base_url }}{{ order_url }} + +{% trans "Your Data Center Light Team" %} \ No newline at end of file diff --git a/hosting/templates/hosting/emails/vm_canceled.html b/hosting/templates/hosting/emails/vm_canceled.html index 68c7b9fd..1baa6954 100644 --- a/hosting/templates/hosting/emails/vm_canceled.html +++ b/hosting/templates/hosting/emails/vm_canceled.html @@ -1,15 +1,47 @@ -{% extends "datacenterlight/emails/base_email_datacenterlight.html" %} -{% load i18n %} -{% block email_head %}{{page_header}}{% endblock %} -{% block email_body %} -{% url 'hosting:virtual_machines' as my_virtual_machines_url %} -{% url 'hosting:orders' as vm_orders_url %} -{% blocktrans with vm.name as vm_name %}You're receiving this mail because your virtual machine [{{vm_name}}] has been cancelled.
-You can see your order status by clicking [my VM page] below.
-If you want to order a new virtual machine, you can do it by clicking this link.
-{% endblocktrans %} - -{% endblock %} +{% load static i18n %} + + + + + + + {% trans "Virtual Machine Cancellation" %} + + + + + + + + + + + + + + + + + + + + + +
+ +
+

{% trans "Virtual Machine Cancellation" %}

+
+

+ {% blocktrans %}You are receiving this email because your virutal machine [{{vm_name}}] has been cancelled.{% endblocktrans %}
+ {% blocktrans %}You can always order a new VM by clicking the button below.{% endblocktrans %} +

+
+ + {% trans "CREATE VM" %} +
+

{% trans "Your Data Center Light Team" %}

+
+ + + diff --git a/hosting/templates/hosting/emails/vm_canceled.txt b/hosting/templates/hosting/emails/vm_canceled.txt index e20e639c..873dd0ac 100644 --- a/hosting/templates/hosting/emails/vm_canceled.txt +++ b/hosting/templates/hosting/emails/vm_canceled.txt @@ -1,13 +1,10 @@ -{% extends "datacenterlight/emails/base_email_datacenterlight.txt" %} {% load i18n %} -{% block email_head %}{{page_header}}{% endblock %} -{% block email_body %} -{% url 'hosting:virtual_machines' as my_virtual_machines_url %} -{% url 'hosting:orders' order.id as vm_order_url %} -{% blocktrans with vm.name as vm_name %}You're receiving this mail because your virtual machine [{{vm_name}}] has been cancelled. -You can see your order status by clicking here -{{base_url}}{{vm_order_url}} -If you want to order a new virtual machine, you can do it by clicking this link. -{{base_url}}{{my_virtual_machines_url}} -{% endblocktrans %} -{% endblock %} \ No newline at end of file + +{% trans "Virtual Machine Cancellation" %} + +{% blocktrans %}You are receiving this email because your virutal machine [{{vm_name}}] has been cancelled.{% endblocktrans %} +{% blocktrans %}You can always order a new VM by following the link below.{% endblocktrans %} + +{{ base_url }}{% url 'hosting:create_virtual_machine' %} + +{% trans "Your Data Center Light Team" %} \ No newline at end of file From ad66b16fd31ce57e2f4e63990fe9ef22211824ab Mon Sep 17 00:00:00 2001 From: Arvind Tiwari Date: Sat, 23 Sep 2017 02:31:23 +0530 Subject: [PATCH 005/111] other app translation files change undo --- alplora/locale/de/LC_MESSAGES/django.po | 75 +- digitalglarus/locale/de/LC_MESSAGES/django.po | 1282 +++++++++++++++-- membership/locale/de/LC_MESSAGES/django.po | 25 +- ungleich_page/locale/de/LC_MESSAGES/django.po | 60 +- utils/locale/de/LC_MESSAGES/django.po | 5 +- 5 files changed, 1350 insertions(+), 97 deletions(-) diff --git a/alplora/locale/de/LC_MESSAGES/django.po b/alplora/locale/de/LC_MESSAGES/django.po index 2669c811..c39a4595 100644 --- a/alplora/locale/de/LC_MESSAGES/django.po +++ b/alplora/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-09-23 01:50+0530\n" +"POT-Creation-Date: 2017-05-30 13:47+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,99 +18,137 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: alplora/templates/alplora/contact.html:6 msgid "New message" msgstr "Neue Nachricht" +#: alplora/templates/alplora/contact.html:13 msgid "Name:" msgstr "Name:" +#: alplora/templates/alplora/contact.html:15 msgid "What is your name ?" msgstr "Was ist Dein Name?" +#: alplora/templates/alplora/contact.html:19 msgid "From:" msgstr "Von:" +#: alplora/templates/alplora/contact.html:21 msgid "You email" msgstr "Deine Email" +#: alplora/templates/alplora/contact.html:25 msgid "Message:" msgstr "Nachricht:" +#: alplora/templates/alplora/contact.html:27 msgid "Leave us your message" msgstr "Schreibe hier Deine Nachricht" +#: alplora/templates/alplora/contact.html:32 msgid "Close" msgstr "schliessen" +#: alplora/templates/alplora/contact.html:33 msgid "Send message" msgstr "Nachricht senden" +#: alplora/templates/alplora/contact_success.html:6 msgid "Message Sent" msgstr "Nachricht gesendet" +#: alplora/templates/alplora/contact_success.html:9 msgid "Thank you, we will contact you as soon as possible" msgstr "Dankeschön! Wir melden uns sobald wie möglich!" +#: alplora/templates/alplora/index.html:13 msgid "Find your animal anywhere, anytime" msgstr "Finde deine Tiere" +#: alplora/templates/alplora/index.html:99 +#: alplora/templates/alplora/index.html:463 msgid "About" msgstr "Über" +#: alplora/templates/alplora/index.html:102 +#: alplora/templates/alplora/index.html:248 +#: alplora/templates/alplora/index.html:469 msgid "Why Alplora?" msgstr "Warum Alplora?" +#: alplora/templates/alplora/index.html:105 +#: alplora/templates/alplora/index.html:466 msgid "Usecase" msgstr "" +#: alplora/templates/alplora/index.html:108 +#: alplora/templates/alplora/index.html:358 msgid "Testimonials" msgstr "Referenzen" +#: alplora/templates/alplora/index.html:111 +#: alplora/templates/alplora/index.html:423 +#: alplora/templates/alplora/index.html:477 msgid "Contact" msgstr "Kontakt" +#: alplora/templates/alplora/index.html:114 msgid "Login" msgstr "Login" +#: alplora/templates/alplora/index.html:137 msgid "Find your herd anytime, anywhere" msgstr "Finde deine Herde jederzeit und überall" +#: alplora/templates/alplora/index.html:138 msgid "Perfect fit for Swiss Alps" msgstr "Perfekt für die Schweizer Alpen" +#: alplora/templates/alplora/index.html:163 msgid "What is Alplora?" msgstr "Was ist Alplora?" +#: alplora/templates/alplora/index.html:164 msgid "" "Alplora is an animal tracker made for outdoor grazing animals in Swiss Alps." msgstr "" "Alplora ist ein Sender, der speziell für Weidetiere in den Schweizer Alpen " "entwickelt wurde." +#: alplora/templates/alplora/index.html:165 msgid "Alplora is just like a cattle bell, but much better." msgstr "Alplora ist wie eine Kuhglocke, nur viel besser." +#: alplora/templates/alplora/index.html:174 msgid "LOST" msgstr "VERLOREN" +#: alplora/templates/alplora/index.html:176 msgid "When an animal gets separated from the herd and is lost." msgstr "Wenn ein Tier sich von der Herde absondert und verloren geht." +#: alplora/templates/alplora/index.html:184 msgid "WOLF" msgstr "WOLF" +#: alplora/templates/alplora/index.html:186 msgid "When a wolf gets close to the herd." msgstr "Wenn ein Wolf sich der Herde nähert." +#: alplora/templates/alplora/index.html:193 msgid "INJURED" msgstr "VERLETZT" +#: alplora/templates/alplora/index.html:195 msgid "When one of the animals is hurt." msgstr "Wenn eins der Tiere verletzt ist." +#: alplora/templates/alplora/index.html:205 msgid "How does Alplora track my animals?" msgstr "Wie kann Alplora meine Tiere verfolgen und ausfindig machen ?" +#: alplora/templates/alplora/index.html:206 msgid "" "Each animal will be wearing a small tracker,

and the tracker will be " "sending a signal every 30 to 60 minutes." @@ -118,27 +156,33 @@ msgstr "" "Jedes Tier wird einen kleinen Sender tragen,

welcher alle 30 bis 60 " "Minuten ein Signal senden wird." +#: alplora/templates/alplora/index.html:215 msgid "Access app" msgstr "Zugang zur App" +#: alplora/templates/alplora/index.html:217 msgid "" "You can see the animal locations on a map by logging into our Alplora app." msgstr "" "Du kannst den Standort deiner Tiere jederzeit auf einer Karte verfolgen, " "indem du dich in unsere Alplora App einloggst." +#: alplora/templates/alplora/index.html:225 msgid "Get an alarm" msgstr "Erhalte ein Warnsignal" +#: alplora/templates/alplora/index.html:227 msgid "" "When certain signals for danger are detected, Alplora sends an alarm to you." msgstr "" "Wenn Anzeichen von Gefahr bestehen, sendet dir die Alplora App einen " "Warnsignal." +#: alplora/templates/alplora/index.html:235 msgid "Find your animal" msgstr "Finde deine Tiere" +#: alplora/templates/alplora/index.html:238 msgid "" "You can locate the animal in trouble on the realtime map and can take " "actions for keeping the animal safe." @@ -146,9 +190,11 @@ msgstr "" "Du kannst dein Tier in Notsituationen auf einer Echtzeit-Karte lokalisieren " "und hast die Möglichkeit es in Sicherheit zu bringen." +#: alplora/templates/alplora/index.html:255 msgid "Perfect fit for Swiss mountains" msgstr "Perfekt für die Schweizer Alpen" +#: alplora/templates/alplora/index.html:257 msgid "" "Alplora is made and tested for Swiss Alps. It is a perfect fit for Swiss " "environment." @@ -156,9 +202,11 @@ msgstr "" "Alplora wurde speziell für die Schweizer Alpen entwickelt und vor Ort " "getestet. Das Produkt passt perfekt in die Schweiz!" +#: alplora/templates/alplora/index.html:263 msgid "Energy efficient" msgstr "Energieeffizient" +#: alplora/templates/alplora/index.html:265 msgid "" "Alplora uses the latest wireless technology, our batteries last the whole " "alp season." @@ -166,9 +214,11 @@ msgstr "" "Alplora arbeitet mit den neuesten Technologien, so dass der Akku die gesamte " "Alpsaison überdauert." +#: alplora/templates/alplora/index.html:271 msgid "Made with love" msgstr "Mit Liebe gemacht" +#: alplora/templates/alplora/index.html:273 msgid "" "With a lot of love and respect for Swiss agriculture and nature, Alplora is " "made by a Swiss company." @@ -176,49 +226,61 @@ msgstr "" "Alplora wurde mit viel Liebe und Respekt für die Schweizer Natur und " "Landwirtschaft von einer Schweizer Firma entwickelt." +#: alplora/templates/alplora/index.html:285 msgid "Who needs Alplora?" msgstr "Wer benötigt Alplora?" +#: alplora/templates/alplora/index.html:301 msgid " Are your animals..." msgstr "Sind deine Tiere..." +#: alplora/templates/alplora/index.html:304 msgid "sheep, goats, cows or llamas living freely in the Alps?" msgstr "Schafe, Ziegen, Kühe oder Lamas, die frei in den Alpen leben?" +#: alplora/templates/alplora/index.html:306 msgid "wearing bells?" msgstr "solche, die Glocken tragen?" +#: alplora/templates/alplora/index.html:308 msgid "" "sometimes getting confused and going too far away from where they are " "supposed to be?" msgstr "" "manchmal verwirrt und entfernen sich zu weit von ihrem vorgesehenen Standort?" +#: alplora/templates/alplora/index.html:332 msgid "Do you..." msgstr "Möchtest du..." +#: alplora/templates/alplora/index.html:335 msgid "have animals which are staying outdoor during some time of the year?" msgstr "" "deine Tiere, die eine längere Zeit im Jahr unbeobachtet Draussen verbringen, " "schützen und überwachen können?" +#: alplora/templates/alplora/index.html:337 msgid "want to get an alarm when your animal is hurt, or in danger?" msgstr "" "alarmiert werden, wenn sich eines deiner Tiere verletzt oder in Gefahr " "befindet ?" +#: alplora/templates/alplora/index.html:339 msgid "want to see where your animals are on your cell phone map?" msgstr "" "mit deinem Smartphone auf einer Karte sehen können, wo sich deine Tiere " "befinden? " +#: alplora/templates/alplora/index.html:341 msgid "want to make sure 24/7 that your animals are safe?" msgstr "" "sicherstellen, dass sich deine Tiere rund um die Uhr in Sicherheit befinden?" +#: alplora/templates/alplora/index.html:359 msgid "What our customers say" msgstr "" +#: alplora/templates/alplora/index.html:379 msgid "" "“Alplora is an innovation in looking after my cows. I can check where my " "cows have been in the higher mountain all day while doing other works at the " @@ -230,9 +292,11 @@ msgstr "" "selben Zeit andereDinge auf dem Hof unten im Dorf erledigen. Dank Alplora " "kann ich meinen Kühenmehr Sicherheit gewährleisten." +#: alplora/templates/alplora/index.html:382 msgid "Farmer in canton Glarus" msgstr "Bauern im Kanton Glarus" +#: alplora/templates/alplora/index.html:388 msgid "" "\"Alplora is exactly what I was waiting for. I have lost my sheep almost " "every year. Finally I have a way when I want to locate them.\"" @@ -241,9 +305,11 @@ msgstr "" "Schafe fastjedes Jahr aus den Augen verloren. Nun habe ich endlich die " "Möglichkeit, sie zulokalisieren.\"" +#: alplora/templates/alplora/index.html:391 msgid "Owner of 50 sheep " msgstr "Besitzerin von 50 Schafen" +#: alplora/templates/alplora/index.html:397 msgid "" "\"I have a farm down all the way down in the village and y goats are always " "freely grazing in the Alps. There are times that I am worried about them but " @@ -257,23 +323,30 @@ msgstr "" "noch um meineanderen Tiere kümmern muss. Mit Alplora kann ich nun ohne " "Probleme beides tun.\"" +#: alplora/templates/alplora/index.html:401 msgid "Farmer at Berner Oberland" msgstr "Bauer aus dem Berner Oberland" +#: alplora/templates/alplora/index.html:418 msgid "How do I get Alplora?" msgstr "Wie kriege ich Zugriff zu Alplora?" +#: alplora/templates/alplora/index.html:419 msgid "Click the button below and leave us your contact." msgstr "Klicke unten auf Kontakt und hinterlasse uns deine Angaben." +#: alplora/templates/alplora/index.html:419 msgid "Team Alplora will contact you and visit you with a tracking device." msgstr "Das Alpora Team wird sich mit Dir schnellstens in Verbindung setzen." +#: alplora/templates/alplora/index.html:459 msgid "Home" msgstr "Startseite" +#: alplora/templates/alplora/index.html:472 msgid "Testimonials " msgstr "Referenzen" +#: alplora/views.py:24 msgid "Message Successfully Sent" msgstr "" diff --git a/digitalglarus/locale/de/LC_MESSAGES/django.po b/digitalglarus/locale/de/LC_MESSAGES/django.po index 9ce67a57..f4193749 100644 --- a/digitalglarus/locale/de/LC_MESSAGES/django.po +++ b/digitalglarus/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-09-23 01:50+0530\n" +"POT-Creation-Date: 2017-07-16 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,331 +18,1447 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: cms_templates/djangocms_blog/_header_post_detail.html:21 +#: digitalglarus/templates/digitalglarus/post_detail.html:19 +#: ungleich/templates/ungleich/djangocms_blog/includes/blog_item.html:19 msgid "Posted on" msgstr "Veröffentlicht am" +#: cms_templates/djangocms_blog/post_list.html:11 +#: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:11 msgid "Articles by" msgstr "Artikel vom" +#: cms_templates/djangocms_blog/post_list.html:12 +#: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:12 msgid "Archive" msgstr "Archiv" +#: cms_templates/djangocms_blog/post_list.html:13 +#: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:13 msgid "Tag" msgstr "" +#: cms_templates/djangocms_blog/post_list.html:14 +#: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:14 msgid "Category" msgstr "Kategorie" +#: cms_templates/djangocms_blog/post_list.html:21 +#: digitalglarus/templates/glarus_blog/post_list.html:15 +#: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:22 msgid "No article found." msgstr "Keine Artikel gefunden" +#: cms_templates/djangocms_blog/post_list.html:24 +#: digitalglarus/templates/glarus_blog/post_list.html:18 +#: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:25 msgid "Back" msgstr "Zurück" +#: cms_templates/djangocms_blog/post_list.html:32 +#: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:33 msgid "Newer Posts" msgstr "Neuere Einträge" +#: cms_templates/djangocms_blog/post_list.html:39 +#: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:40 msgid "Older Posts" msgstr "Ältere Einträge" +#: cms_templates/includes/blog_item.html:31 +#: digitalglarus/templates/glarus_blog/includes/blog_item.html:32 msgid "read more" msgstr "weiterlesen" +#: cms_templates/includes/blog_meta.html:6 +#: digitalglarus/templates/glarus_blog/includes/blog_meta.html:6 msgid "by" msgstr "von" +#: digitalglarus/cms_plugins.py:9 +msgid "Digital Glarus Gallery" +msgstr "" + +#: digitalglarus/cms_plugins.py:22 +msgid "Digital Glarus Supporters" +msgstr "" + +#: digitalglarus/forms.py:34 digitalglarus/forms.py:69 nosystemd/forms.py:47 +#: utils/forms.py:107 +msgid "Street Address" +msgstr "Adresse" + +#: digitalglarus/forms.py:35 digitalglarus/forms.py:70 nosystemd/forms.py:48 +#: utils/forms.py:108 utils/forms.py:123 +msgid "City" +msgstr "Stadt" + +#: digitalglarus/forms.py:36 digitalglarus/forms.py:71 nosystemd/forms.py:49 +#: utils/forms.py:109 utils/forms.py:124 +msgid "Postal Code" +msgstr "Postleitzahl" + +#: digitalglarus/forms.py:37 digitalglarus/forms.py:72 nosystemd/forms.py:50 +#: utils/forms.py:110 utils/forms.py:125 +msgid "Country" +msgstr "Land" + +#: digitalglarus/templates/digitalglarus/login.html:88 +#: digitalglarus/templates/digitalglarus/login_hello.html:32 +#: nosystemd/templates/nosystemd/login.html:23 +msgid "You haven been logged out" +msgstr "Sie wurden abgemeldet" + +#: digitalglarus/templates/glarus_blog/post_list.html:23 +#: nosystemd/templates/nosystemd/donations.html:74 +msgid "previous" +msgstr "vorherige" + +#: digitalglarus/templates/glarus_blog/post_list.html:26 +#: dynamicweb/settings/base.py:192 templates/cms/__init__.py:10 +#: templates/cms/ungleichch/__init__.py:5 +msgid "Page" +msgstr "Seite" + +#: digitalglarus/templates/glarus_blog/post_list.html:26 +msgid "of" +msgstr "vom" + +#: digitalglarus/templates/glarus_blog/post_list.html:29 +#: nosystemd/templates/nosystemd/donations.html:80 +msgid "next" +msgstr "nächste" + +#: digitalglarus/templates/language_chooser.html:8 +#: ungleich/templates/cms/ungleichch/_header_base.html:23 +msgid "Change to language:" +msgstr "Sprache wechseln zu: " + +#: digitalglarus/templates/new_base_glarus.html:161 +#: digitalglarus/templates/new_base_glarus.html:184 +#: digitalglarus/templates/new_base_glarus_c.html:176 +#: digitalglarus/templates/new_base_glarus_c.html:199 +msgid "Bookings" +msgstr "" + +#: digitalglarus/templates/new_base_glarus.html:165 +#: digitalglarus/templates/new_base_glarus.html:188 +#: digitalglarus/templates/new_base_glarus_c.html:180 +#: digitalglarus/templates/new_base_glarus_c.html:203 +msgid "Membership" +msgstr "" + +#: digitalglarus/templates/new_base_glarus.html:171 +#: digitalglarus/templates/new_base_glarus.html:194 +#: digitalglarus/templates/new_base_glarus_c.html:186 +#: digitalglarus/templates/new_base_glarus_c.html:209 +#: nosystemd/templates/nosystemd/base.html:76 +msgid "Logout" +msgstr "" + +#: digitalglarus/urls.py:16 +msgid "booking/payment/edit/?$" +msgstr "" + +#: digitalglarus/urls.py:17 +msgid "^$" +msgstr "" + +#: digitalglarus/urls.py:19 +msgid "support-us/?$" +msgstr "" + +#: digitalglarus/urls.py:20 +msgid "contact/?$" +msgstr "kontakt/?$" + +#: digitalglarus/urls.py:21 +msgid "login/?$" +msgstr "" + +#: digitalglarus/urls.py:22 +msgid "signup/?$" +msgstr "" + +#: digitalglarus/urls.py:28 +msgid "history/?$" +msgstr "" + +#: digitalglarus/urls.py:29 +msgid "users/billing_address/?$" +msgstr "" + +#: digitalglarus/urls.py:31 +msgid "booking/?$" +msgstr "" + +#: digitalglarus/urls.py:32 +msgid "booking/payment/?$" +msgstr "" + +#: digitalglarus/urls.py:33 +msgid "booking/orders/(?P\\d+)/?$" +msgstr "" + +#: digitalglarus/urls.py:37 +msgid "booking/orders/?$" +msgstr "" + +#: digitalglarus/urls.py:39 +msgid "membership/payment/?$" +msgstr "" + +#: digitalglarus/urls.py:40 +msgid "membership/activated/?$" +msgstr "" + +#: digitalglarus/urls.py:42 +msgid "membership/deactivate/?$" +msgstr "" + +#: digitalglarus/urls.py:44 +msgid "membership/reactivate/?$" +msgstr "" + +#: digitalglarus/urls.py:46 +msgid "membership/deactivate/success/?$" +msgstr "" + +#: digitalglarus/urls.py:48 +msgid "membership/pricing/?$" +msgstr "" + +#: digitalglarus/urls.py:50 +msgid "membership/orders/(?P\\d+)/?$" +msgstr "" + +#: digitalglarus/urls.py:52 +#, fuzzy +#| msgid "supporters/?$" +msgid "membership/orders/?$" +msgstr "befurworter/?$" + +#: digitalglarus/urls.py:54 +msgid "supporters/?$" +msgstr "befurworter/?$" + +#: digitalglarus/views.py:715 +msgid "Message Successfully Sent" +msgstr "" + +#: dynamicweb/settings-test/__init__.py:181 msgid "US English" msgstr "" +#: dynamicweb/settings-test/__init__.py:182 msgid "German" msgstr "" +#: dynamicweb/settings-test/__init__.py:235 +#: dynamicweb/settings-test/__init__.py:244 dynamicweb/settings/base.py:280 +#: dynamicweb/settings/base.py:289 msgid "Content" msgstr "" +#: dynamicweb/settings/base.py:181 msgid "default" msgstr "" +#: dynamicweb/settings/base.py:182 msgid "2 Column" msgstr "" +#: dynamicweb/settings/base.py:183 msgid "3 Column" msgstr "" +#: dynamicweb/settings/base.py:184 templates/cms/__init__.py:4 +#: templates/cms/digitalglarus/__init__.py:4 msgid "DG.About" msgstr "" +#: dynamicweb/settings/base.py:185 templates/cms/__init__.py:5 +#: templates/cms/digitalglarus/__init__.py:5 #, fuzzy #| msgid "contact/?$" msgid "DG.Contact" msgstr "kontakt/?$" +#: dynamicweb/settings/base.py:186 templates/cms/__init__.py:6 +#: templates/cms/digitalglarus/__init__.py:6 msgid "DG.Home" msgstr "" +#: dynamicweb/settings/base.py:187 templates/cms/__init__.py:7 +#: templates/cms/digitalglarus/__init__.py:7 msgid "DG.CoWork" msgstr "" +#: dynamicweb/settings/base.py:189 msgid "DG.OneColumn" msgstr "" +#: dynamicweb/settings/base.py:191 templates/cms/__init__.py:9 +#: templates/cms/ungleichch/__init__.py:4 msgid "Blog" msgstr "" -msgid "Page" -msgstr "Seite" - -msgid "Data Center Light" -msgstr "" - +#: dynamicweb/settings/base.py:221 msgid "English" msgstr "" +#: dynamicweb/settings/base.py:222 msgid "Deutsch" msgstr "" +#: nosystemd/forms.py:46 msgid "Amount" msgstr "Betrag" -msgid "Street Address" -msgstr "Adresse" - -msgid "City" -msgstr "Stadt" - -msgid "Postal Code" -msgstr "Postleitzahl" - -msgid "Country" -msgstr "Land" - +#: nosystemd/templates/nosystemd/base.html:70 msgid "My Donations" msgstr "" -msgid "Logout" -msgstr "" - +#: nosystemd/templates/nosystemd/confirm_reset_password.html:24 msgid "Set your new password" msgstr "" +#: nosystemd/templates/nosystemd/confirm_reset_password.html:33 +#: nosystemd/templates/nosystemd/reset_password.html:25 msgid "Reset" msgstr "" +#: nosystemd/templates/nosystemd/confirm_reset_password.html:37 +#: nosystemd/templates/nosystemd/reset_password.html:29 +#: nosystemd/templates/nosystemd/signup.html:33 msgid "Already have an account ?" msgstr "" +#: nosystemd/templates/nosystemd/confirm_reset_password.html:37 msgid "Log in" msgstr "" +#: nosystemd/templates/nosystemd/donation_detail.html:15 msgid "Invoice" msgstr "" +#: nosystemd/templates/nosystemd/donation_detail.html:15 msgid "Donation #" msgstr "" +#: nosystemd/templates/nosystemd/donation_detail.html:20 msgid "Billing Address:" msgstr "" +#: nosystemd/templates/nosystemd/donation_detail.html:28 msgid "Date:" msgstr "" +#: nosystemd/templates/nosystemd/donation_detail.html:38 msgid "Payment Method:" msgstr "" +#: nosystemd/templates/nosystemd/donation_detail.html:49 msgid "Donation summary" msgstr "" +#: nosystemd/templates/nosystemd/donation_detail.html:52 +#: nosystemd/templates/nosystemd/donations.html:49 msgid "Donation" msgstr "" +#: nosystemd/templates/nosystemd/donation_detail.html:54 msgid "Total" msgstr "" +#: nosystemd/templates/nosystemd/donation_detail.html:60 msgid "Finish Configuration" msgstr "" +#: nosystemd/templates/nosystemd/donation_detail.html:68 msgid "" "Thanks for you donation, you can cancel your monthly donation at any time " "going to profile > subscription " msgstr "" +#: nosystemd/templates/nosystemd/donation_detail.html:74 msgid "View Donations" msgstr "" +#: nosystemd/templates/nosystemd/donations.html:28 +#: nosystemd/templates/nosystemd/donator_status.html:26 msgid "Cancel Donation" msgstr "" +#: nosystemd/templates/nosystemd/donations.html:35 msgid "Donate" msgstr "" +#: nosystemd/templates/nosystemd/donations.html:44 msgid "Donations Made" msgstr "" +#: nosystemd/templates/nosystemd/donations.html:50 msgid "Date" msgstr "" +#: nosystemd/templates/nosystemd/donations.html:62 msgid "View Detail" msgstr "" -msgid "previous" -msgstr "vorherige" - -msgid "next" -msgstr "nächste" - +#: nosystemd/templates/nosystemd/donator_status.html:28 msgid "Reanude Donation" msgstr "" +#: nosystemd/templates/nosystemd/emails/password_reset_email.html:2 +#: nosystemd/templates/nosystemd/emails/password_reset_email.txt:2 #, python-format msgid "" "You're receiving this email because you requested a password reset for your " "user account at %(site_name)s." msgstr "" +#: nosystemd/templates/nosystemd/emails/password_reset_email.html:4 +#: nosystemd/templates/nosystemd/emails/password_reset_email.txt:4 msgid "Please go to the following page and choose a new password:" msgstr "" +#: nosystemd/templates/nosystemd/emails/password_reset_email.html:9 +#: nosystemd/templates/nosystemd/emails/password_reset_email.txt:9 msgid "Thanks for using our site!" msgstr "" +#: nosystemd/templates/nosystemd/emails/password_reset_email.html:11 +#: nosystemd/templates/nosystemd/emails/password_reset_email.txt:11 #, python-format msgid "The %(site_name)s team" msgstr "" -msgid "You haven been logged out" -msgstr "Sie wurden abgemeldet" - +#: nosystemd/templates/nosystemd/login.html:30 msgid "Log in " msgstr "" +#: nosystemd/templates/nosystemd/login.html:40 +#: nosystemd/templates/nosystemd/reset_password.html:29 +#: nosystemd/templates/nosystemd/signup.html:33 msgid "Login" msgstr "" +#: nosystemd/templates/nosystemd/login.html:44 msgid "Don't have an account yet ? " msgstr "" +#: nosystemd/templates/nosystemd/login.html:44 +#: nosystemd/templates/nosystemd/signup.html:17 +#: nosystemd/templates/nosystemd/signup.html:29 msgid "Sign up" msgstr "" +#: nosystemd/templates/nosystemd/login.html:46 msgid "Forgot your password ? " msgstr "" +#: nosystemd/templates/nosystemd/reset_password.html:16 msgid "Reset your password" msgstr "" +#: templates/cms/__init__.py:8 templates/cms/digitalglarus/__init__.py:8 msgid "DG.Detail" msgstr "" +#: ungleich/cms_toolbar.py:23 msgid "Page Header" msgstr "" -msgid "Change to language:" -msgstr "Sprache wechseln zu: " - +#: ungleich/views.py:79 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "" -msgid "Digital Glarus Gallery" +#: utils/fields.py:6 +msgid "Andorra" msgstr "" -msgid "Digital Glarus Supporters" +#: utils/fields.py:7 +msgid "United Arab Emirates" msgstr "" -msgid "of" -msgstr "vom" - -msgid "Bookings" +#: utils/fields.py:8 +msgid "Afghanistan" msgstr "" -msgid "Membership" +#: utils/fields.py:9 +msgid "Antigua & Barbuda" msgstr "" -msgid "booking/payment/edit/?$" +#: utils/fields.py:10 +msgid "Anguilla" msgstr "" -msgid "^$" +#: utils/fields.py:11 +msgid "Albania" msgstr "" -msgid "support-us/?$" +#: utils/fields.py:12 +msgid "Armenia" msgstr "" -msgid "contact/?$" -msgstr "kontakt/?$" - -msgid "login/?$" +#: utils/fields.py:13 +msgid "Netherlands Antilles" msgstr "" -msgid "signup/?$" +#: utils/fields.py:14 +msgid "Angola" msgstr "" -msgid "history/?$" +#: utils/fields.py:15 +msgid "Antarctica" msgstr "" -msgid "users/billing_address/?$" +#: utils/fields.py:16 +msgid "Argentina" msgstr "" -msgid "booking/?$" +#: utils/fields.py:17 +msgid "American Samoa" msgstr "" -msgid "booking/payment/?$" +#: utils/fields.py:18 +msgid "Austria" msgstr "" -msgid "booking/orders/(?P\\d+)/?$" +#: utils/fields.py:19 +msgid "Australia" msgstr "" -msgid "booking/orders/?$" +#: utils/fields.py:20 +msgid "Aruba" msgstr "" -msgid "membership/payment/?$" +#: utils/fields.py:21 +msgid "Azerbaijan" msgstr "" -msgid "membership/activated/?$" +#: utils/fields.py:22 +msgid "Bosnia and Herzegovina" msgstr "" -msgid "membership/deactivate/?$" +#: utils/fields.py:23 +msgid "Barbados" msgstr "" -msgid "membership/reactivate/?$" +#: utils/fields.py:24 +msgid "Bangladesh" msgstr "" -msgid "membership/deactivate/success/?$" +#: utils/fields.py:25 +msgid "Belgium" msgstr "" -msgid "membership/pricing/?$" +#: utils/fields.py:26 +msgid "Burkina Faso" msgstr "" -msgid "membership/orders/(?P\\d+)/?$" +#: utils/fields.py:27 +msgid "Bulgaria" msgstr "" -#, fuzzy -#| msgid "supporters/?$" -msgid "membership/orders/?$" -msgstr "befurworter/?$" - -msgid "supporters/?$" -msgstr "befurworter/?$" - -msgid "Message Successfully Sent" +#: utils/fields.py:28 +msgid "Bahrain" msgstr "" -#~ msgid "Enter your name or company name" -#~ msgstr "Geben Sie Ihren Namen oder der Ihrer Firma ein" +#: utils/fields.py:29 +msgid "Burundi" +msgstr "" -#~ msgid "Cardholder Name" -#~ msgstr "Name des Kartenbesitzer" +#: utils/fields.py:30 +msgid "Benin" +msgstr "" -#~ msgid "Name" -#~ msgstr "Name" +#: utils/fields.py:31 +msgid "Bermuda" +msgstr "" -#~ msgid "Email" -#~ msgstr "Email" +#: utils/fields.py:32 +msgid "Brunei Darussalam" +msgstr "" -#~ msgid "Phone number" -#~ msgstr "Telefon" +#: utils/fields.py:33 +msgid "Bolivia" +msgstr "" -#~ msgid "Message" -#~ msgstr "Nachricht" +#: utils/fields.py:34 +msgid "Brazil" +msgstr "" + +#: utils/fields.py:35 +msgid "Bahama" +msgstr "" + +#: utils/fields.py:36 +msgid "Bhutan" +msgstr "" + +#: utils/fields.py:37 +msgid "Bouvet Island" +msgstr "" + +#: utils/fields.py:38 +msgid "Botswana" +msgstr "" + +#: utils/fields.py:39 +msgid "Belarus" +msgstr "" + +#: utils/fields.py:40 +msgid "Belize" +msgstr "" + +#: utils/fields.py:41 +msgid "Canada" +msgstr "" + +#: utils/fields.py:42 +msgid "Cocos (Keeling) Islands" +msgstr "" + +#: utils/fields.py:43 +msgid "Central African Republic" +msgstr "" + +#: utils/fields.py:44 +msgid "Congo" +msgstr "" + +#: utils/fields.py:45 +msgid "Switzerland" +msgstr "" + +#: utils/fields.py:46 +msgid "Ivory Coast" +msgstr "" + +#: utils/fields.py:47 +msgid "Cook Iislands" +msgstr "" + +#: utils/fields.py:48 +msgid "Chile" +msgstr "" + +#: utils/fields.py:49 +msgid "Cameroon" +msgstr "" + +#: utils/fields.py:50 +msgid "China" +msgstr "" + +#: utils/fields.py:51 +msgid "Colombia" +msgstr "" + +#: utils/fields.py:52 +msgid "Costa Rica" +msgstr "" + +#: utils/fields.py:53 +msgid "Cuba" +msgstr "" + +#: utils/fields.py:54 +msgid "Cape Verde" +msgstr "" + +#: utils/fields.py:55 +msgid "Christmas Island" +msgstr "" + +#: utils/fields.py:56 +msgid "Cyprus" +msgstr "" + +#: utils/fields.py:57 +msgid "Czech Republic" +msgstr "" + +#: utils/fields.py:58 +msgid "Germany" +msgstr "" + +#: utils/fields.py:59 +msgid "Djibouti" +msgstr "" + +#: utils/fields.py:60 +msgid "Denmark" +msgstr "" + +#: utils/fields.py:61 +msgid "Dominica" +msgstr "" + +#: utils/fields.py:62 +msgid "Dominican Republic" +msgstr "" + +#: utils/fields.py:63 +msgid "Algeria" +msgstr "" + +#: utils/fields.py:64 +msgid "Ecuador" +msgstr "" + +#: utils/fields.py:65 +msgid "Estonia" +msgstr "" + +#: utils/fields.py:66 +msgid "Egypt" +msgstr "" + +#: utils/fields.py:67 +msgid "Western Sahara" +msgstr "" + +#: utils/fields.py:68 +msgid "Eritrea" +msgstr "" + +#: utils/fields.py:69 +msgid "Spain" +msgstr "" + +#: utils/fields.py:70 +msgid "Ethiopia" +msgstr "" + +#: utils/fields.py:71 +msgid "Finland" +msgstr "" + +#: utils/fields.py:72 +msgid "Fiji" +msgstr "" + +#: utils/fields.py:73 +msgid "Falkland Islands (Malvinas)" +msgstr "" + +#: utils/fields.py:74 +msgid "Micronesia" +msgstr "" + +#: utils/fields.py:75 +msgid "Faroe Islands" +msgstr "" + +#: utils/fields.py:76 +msgid "France" +msgstr "" + +#: utils/fields.py:77 +msgid "France, Metropolitan" +msgstr "" + +#: utils/fields.py:78 +msgid "Gabon" +msgstr "" + +#: utils/fields.py:79 +msgid "United Kingdom (Great Britain)" +msgstr "" + +#: utils/fields.py:80 +msgid "Grenada" +msgstr "" + +#: utils/fields.py:81 +msgid "Georgia" +msgstr "" + +#: utils/fields.py:82 +msgid "French Guiana" +msgstr "" + +#: utils/fields.py:83 +msgid "Ghana" +msgstr "" + +#: utils/fields.py:84 +msgid "Gibraltar" +msgstr "" + +#: utils/fields.py:85 +msgid "Greenland" +msgstr "" + +#: utils/fields.py:86 +msgid "Gambia" +msgstr "" + +#: utils/fields.py:87 +msgid "Guinea" +msgstr "" + +#: utils/fields.py:88 +msgid "Guadeloupe" +msgstr "" + +#: utils/fields.py:89 +msgid "Equatorial Guinea" +msgstr "" + +#: utils/fields.py:90 +msgid "Greece" +msgstr "" + +#: utils/fields.py:91 +msgid "South Georgia and the South Sandwich Islands" +msgstr "" + +#: utils/fields.py:92 +msgid "Guatemala" +msgstr "" + +#: utils/fields.py:93 +msgid "Guam" +msgstr "" + +#: utils/fields.py:94 +msgid "Guinea-Bissau" +msgstr "" + +#: utils/fields.py:95 +msgid "Guyana" +msgstr "" + +#: utils/fields.py:96 +msgid "Hong Kong" +msgstr "" + +#: utils/fields.py:97 +msgid "Heard & McDonald Islands" +msgstr "" + +#: utils/fields.py:98 +msgid "Honduras" +msgstr "" + +#: utils/fields.py:99 +msgid "Croatia" +msgstr "" + +#: utils/fields.py:100 +msgid "Haiti" +msgstr "" + +#: utils/fields.py:101 +msgid "Hungary" +msgstr "" + +#: utils/fields.py:102 +msgid "Indonesia" +msgstr "" + +#: utils/fields.py:103 +msgid "Ireland" +msgstr "" + +#: utils/fields.py:104 +msgid "Israel" +msgstr "" + +#: utils/fields.py:105 +msgid "India" +msgstr "" + +#: utils/fields.py:106 +msgid "British Indian Ocean Territory" +msgstr "" + +#: utils/fields.py:107 +msgid "Iraq" +msgstr "" + +#: utils/fields.py:108 +msgid "Islamic Republic of Iran" +msgstr "" + +#: utils/fields.py:109 +msgid "Iceland" +msgstr "" + +#: utils/fields.py:110 +msgid "Italy" +msgstr "" + +#: utils/fields.py:111 +msgid "Jamaica" +msgstr "" + +#: utils/fields.py:112 +msgid "Jordan" +msgstr "" + +#: utils/fields.py:113 +msgid "Japan" +msgstr "" + +#: utils/fields.py:114 +msgid "Kenya" +msgstr "" + +#: utils/fields.py:115 +msgid "Kyrgyzstan" +msgstr "" + +#: utils/fields.py:116 +msgid "Cambodia" +msgstr "" + +#: utils/fields.py:117 +msgid "Kiribati" +msgstr "" + +#: utils/fields.py:118 +msgid "Comoros" +msgstr "" + +#: utils/fields.py:119 +msgid "St. Kitts and Nevis" +msgstr "" + +#: utils/fields.py:120 +msgid "Korea, Democratic People's Republic of" +msgstr "" + +#: utils/fields.py:121 +msgid "Korea, Republic of" +msgstr "" + +#: utils/fields.py:122 +msgid "Kuwait" +msgstr "" + +#: utils/fields.py:123 +msgid "Cayman Islands" +msgstr "" + +#: utils/fields.py:124 +msgid "Kazakhstan" +msgstr "" + +#: utils/fields.py:125 +msgid "Lao People's Democratic Republic" +msgstr "" + +#: utils/fields.py:126 +msgid "Lebanon" +msgstr "" + +#: utils/fields.py:127 +msgid "Saint Lucia" +msgstr "" + +#: utils/fields.py:128 +msgid "Liechtenstein" +msgstr "" + +#: utils/fields.py:129 +msgid "Sri Lanka" +msgstr "" + +#: utils/fields.py:130 +msgid "Liberia" +msgstr "" + +#: utils/fields.py:131 +msgid "Lesotho" +msgstr "" + +#: utils/fields.py:132 +msgid "Lithuania" +msgstr "" + +#: utils/fields.py:133 +msgid "Luxembourg" +msgstr "" + +#: utils/fields.py:134 +msgid "Latvia" +msgstr "" + +#: utils/fields.py:135 +msgid "Libyan Arab Jamahiriya" +msgstr "" + +#: utils/fields.py:136 +msgid "Morocco" +msgstr "" + +#: utils/fields.py:137 +msgid "Monaco" +msgstr "" + +#: utils/fields.py:138 +msgid "Moldova, Republic of" +msgstr "" + +#: utils/fields.py:139 +msgid "Madagascar" +msgstr "" + +#: utils/fields.py:140 +msgid "Marshall Islands" +msgstr "" + +#: utils/fields.py:141 +msgid "Mali" +msgstr "" + +#: utils/fields.py:142 +msgid "Mongolia" +msgstr "" + +#: utils/fields.py:143 +msgid "Myanmar" +msgstr "" + +#: utils/fields.py:144 +msgid "Macau" +msgstr "" + +#: utils/fields.py:145 +msgid "Northern Mariana Islands" +msgstr "" + +#: utils/fields.py:146 +msgid "Martinique" +msgstr "" + +#: utils/fields.py:147 +msgid "Mauritania" +msgstr "" + +#: utils/fields.py:148 +msgid "Monserrat" +msgstr "" + +#: utils/fields.py:149 +msgid "Malta" +msgstr "" + +#: utils/fields.py:150 +msgid "Mauritius" +msgstr "" + +#: utils/fields.py:151 +msgid "Maldives" +msgstr "" + +#: utils/fields.py:152 +msgid "Malawi" +msgstr "" + +#: utils/fields.py:153 +msgid "Mexico" +msgstr "" + +#: utils/fields.py:154 +msgid "Malaysia" +msgstr "" + +#: utils/fields.py:155 +msgid "Mozambique" +msgstr "" + +#: utils/fields.py:156 +msgid "Namibia" +msgstr "" + +#: utils/fields.py:157 +msgid "New Caledonia" +msgstr "" + +#: utils/fields.py:158 +msgid "Niger" +msgstr "" + +#: utils/fields.py:159 +msgid "Norfolk Island" +msgstr "" + +#: utils/fields.py:160 +msgid "Nigeria" +msgstr "" + +#: utils/fields.py:161 +msgid "Nicaragua" +msgstr "" + +#: utils/fields.py:162 +msgid "Netherlands" +msgstr "" + +#: utils/fields.py:163 +msgid "Norway" +msgstr "" + +#: utils/fields.py:164 +msgid "Nepal" +msgstr "" + +#: utils/fields.py:165 +msgid "Nauru" +msgstr "" + +#: utils/fields.py:166 +msgid "Niue" +msgstr "" + +#: utils/fields.py:167 +msgid "New Zealand" +msgstr "" + +#: utils/fields.py:168 +msgid "Oman" +msgstr "" + +#: utils/fields.py:169 +msgid "Panama" +msgstr "" + +#: utils/fields.py:170 +msgid "Peru" +msgstr "" + +#: utils/fields.py:171 +msgid "French Polynesia" +msgstr "" + +#: utils/fields.py:172 +msgid "Papua New Guinea" +msgstr "" + +#: utils/fields.py:173 +msgid "Philippines" +msgstr "" + +#: utils/fields.py:174 +msgid "Pakistan" +msgstr "" + +#: utils/fields.py:175 +msgid "Poland" +msgstr "" + +#: utils/fields.py:176 +msgid "St. Pierre & Miquelon" +msgstr "" + +#: utils/fields.py:177 +msgid "Pitcairn" +msgstr "" + +#: utils/fields.py:178 +msgid "Puerto Rico" +msgstr "" + +#: utils/fields.py:179 +msgid "Portugal" +msgstr "" + +#: utils/fields.py:180 +msgid "Palau" +msgstr "" + +#: utils/fields.py:181 +msgid "Paraguay" +msgstr "" + +#: utils/fields.py:182 +msgid "Qatar" +msgstr "" + +#: utils/fields.py:183 +msgid "Reunion" +msgstr "" + +#: utils/fields.py:184 +msgid "Romania" +msgstr "" + +#: utils/fields.py:185 +msgid "Russian Federation" +msgstr "" + +#: utils/fields.py:186 +msgid "Rwanda" +msgstr "" + +#: utils/fields.py:187 +msgid "Saudi Arabia" +msgstr "" + +#: utils/fields.py:188 +msgid "Solomon Islands" +msgstr "" + +#: utils/fields.py:189 +msgid "Seychelles" +msgstr "" + +#: utils/fields.py:190 +msgid "Sudan" +msgstr "" + +#: utils/fields.py:191 +msgid "Sweden" +msgstr "" + +#: utils/fields.py:192 +msgid "Singapore" +msgstr "" + +#: utils/fields.py:193 +msgid "St. Helena" +msgstr "" + +#: utils/fields.py:194 +msgid "Slovenia" +msgstr "" + +#: utils/fields.py:195 +msgid "Svalbard & Jan Mayen Islands" +msgstr "" + +#: utils/fields.py:196 +msgid "Slovakia" +msgstr "" + +#: utils/fields.py:197 +msgid "Sierra Leone" +msgstr "" + +#: utils/fields.py:198 +msgid "San Marino" +msgstr "" + +#: utils/fields.py:199 +msgid "Senegal" +msgstr "" + +#: utils/fields.py:200 +msgid "Somalia" +msgstr "" + +#: utils/fields.py:201 +msgid "Suriname" +msgstr "" + +#: utils/fields.py:202 +msgid "Sao Tome & Principe" +msgstr "" + +#: utils/fields.py:203 +msgid "El Salvador" +msgstr "" + +#: utils/fields.py:204 +msgid "Syrian Arab Republic" +msgstr "" + +#: utils/fields.py:205 +msgid "Swaziland" +msgstr "" + +#: utils/fields.py:206 +msgid "Turks & Caicos Islands" +msgstr "" + +#: utils/fields.py:207 +msgid "Chad" +msgstr "" + +#: utils/fields.py:208 +msgid "French Southern Territories" +msgstr "" + +#: utils/fields.py:209 +msgid "Togo" +msgstr "" + +#: utils/fields.py:210 +msgid "Thailand" +msgstr "" + +#: utils/fields.py:211 +msgid "Tajikistan" +msgstr "" + +#: utils/fields.py:212 +msgid "Tokelau" +msgstr "" + +#: utils/fields.py:213 +msgid "Turkmenistan" +msgstr "" + +#: utils/fields.py:214 +msgid "Tunisia" +msgstr "" + +#: utils/fields.py:215 +msgid "Tonga" +msgstr "" + +#: utils/fields.py:216 +msgid "East Timor" +msgstr "" + +#: utils/fields.py:217 +msgid "Turkey" +msgstr "" + +#: utils/fields.py:218 +msgid "Trinidad & Tobago" +msgstr "" + +#: utils/fields.py:219 +msgid "Tuvalu" +msgstr "" + +#: utils/fields.py:220 +msgid "Taiwan, Province of China" +msgstr "" + +#: utils/fields.py:221 +msgid "Tanzania, United Republic of" +msgstr "" + +#: utils/fields.py:222 +msgid "Ukraine" +msgstr "" + +#: utils/fields.py:223 +msgid "Uganda" +msgstr "" + +#: utils/fields.py:224 +msgid "United States Minor Outlying Islands" +msgstr "" + +#: utils/fields.py:225 +msgid "United States of America" +msgstr "" + +#: utils/fields.py:226 +msgid "Uruguay" +msgstr "" + +#: utils/fields.py:227 +msgid "Uzbekistan" +msgstr "" + +#: utils/fields.py:228 +msgid "Vatican City State (Holy See)" +msgstr "" + +#: utils/fields.py:229 +msgid "St. Vincent & the Grenadines" +msgstr "" + +#: utils/fields.py:230 +msgid "Venezuela" +msgstr "" + +#: utils/fields.py:231 +msgid "British Virgin Islands" +msgstr "" + +#: utils/fields.py:232 +msgid "United States Virgin Islands" +msgstr "" + +#: utils/fields.py:233 +msgid "Viet Nam" +msgstr "" + +#: utils/fields.py:234 +msgid "Vanuatu" +msgstr "" + +#: utils/fields.py:235 +msgid "Wallis & Futuna Islands" +msgstr "" + +#: utils/fields.py:236 +msgid "Samoa" +msgstr "" + +#: utils/fields.py:237 +msgid "Yemen" +msgstr "" + +#: utils/fields.py:238 +msgid "Mayotte" +msgstr "" + +#: utils/fields.py:239 +msgid "Yugoslavia" +msgstr "" + +#: utils/fields.py:240 +msgid "South Africa" +msgstr "" + +#: utils/fields.py:241 +msgid "Zambia" +msgstr "" + +#: utils/fields.py:242 +msgid "Zaire" +msgstr "" + +#: utils/fields.py:243 +msgid "Zimbabwe" +msgstr "" + +#: utils/fields.py:244 +msgid "Unknown or unspecified country" +msgstr "" + +#: utils/forms.py:21 +msgid "Enter your name or company name" +msgstr "Geben Sie Ihren Namen oder der Ihrer Firma ein" + +#: utils/forms.py:106 +msgid "Cardholder Name" +msgstr "Name des Kartenbesitzer" + +#: utils/forms.py:122 +msgid "Street Building" +msgstr "" + +#: utils/forms.py:142 +msgid "Name" +msgstr "Name" + +#: utils/forms.py:143 +msgid "Email" +msgstr "Email" + +#: utils/forms.py:144 +msgid "Phone number" +msgstr "Telefon" + +#: utils/forms.py:145 +msgid "Message" +msgstr "Nachricht" #, fuzzy #~ msgid "Card number" diff --git a/membership/locale/de/LC_MESSAGES/django.po b/membership/locale/de/LC_MESSAGES/django.po index 8732b6c4..42846dab 100644 --- a/membership/locale/de/LC_MESSAGES/django.po +++ b/membership/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-09-23 01:50+0530\n" +"POT-Creation-Date: 2017-06-23 02:05+0530\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,35 +18,42 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: forms.py:43 msgid "Name" msgstr "" +#: forms.py:43 msgid "Card number" msgstr "" +#: forms.py:43 msgid "Expiry date" msgstr "" +#: forms.py:44 msgid "CCV" msgstr "" +#: models.py:66 msgid "staff status" msgstr "" +#: models.py:68 msgid "Designates whether the user can log into this admin site." msgstr "" -msgid "Account Activation" -msgstr "" +#: models.py:90 +msgid "Activate your " +msgstr "Aktiviere deinen " +#: models.py:90 +msgid " account" +msgstr " Account" + +#: models.py:198 msgid "Use this pattern(MM/YYYY)." msgstr "" +#: models.py:199 msgid "Wrong CCV number." msgstr "" - -#~ msgid "Activate your " -#~ msgstr "Aktiviere deinen " - -#~ msgid " account" -#~ msgstr " Account" diff --git a/ungleich_page/locale/de/LC_MESSAGES/django.po b/ungleich_page/locale/de/LC_MESSAGES/django.po index a4470c29..dfba87c5 100644 --- a/ungleich_page/locale/de/LC_MESSAGES/django.po +++ b/ungleich_page/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-09-23 01:50+0530\n" +"POT-Creation-Date: 2017-05-30 13:47+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,81 +18,110 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: ungleich_page/templates/ungleich_page/includes/_about.html:8 msgid "ABOUT" msgstr "Über ungleich" +#: ungleich_page/templates/ungleich_page/includes/_about.html:9 msgid "The timeline of ungleich" msgstr "Die Chronik von ungleich" +#: ungleich_page/templates/ungleich_page/includes/_about.html:24 msgid "The first incarnation of ungleich" msgstr "Die erste Inkarnation von ungleich" +#: ungleich_page/templates/ungleich_page/includes/_about.html:25 msgid "in Germany" msgstr "in Deutschland" +#: ungleich_page/templates/ungleich_page/includes/_about.html:37 msgid "ungleich founded" msgstr "ungleich gegründet" +#: ungleich_page/templates/ungleich_page/includes/_about.html:38 msgid "in Switzerland" msgstr "in der Schweiz" +#: ungleich_page/templates/ungleich_page/includes/_about.html:51 msgid "ungleich present at various conferences" msgstr "ungleich präsent an mehreren Konferenzen" +#: ungleich_page/templates/ungleich_page/includes/_about.html:65 msgid "ungleich introduces HA-Hosting" msgstr "ungleich führt HA-Hosting ein" +#: ungleich_page/templates/ungleich_page/includes/_about.html:66 msgid "and introduces affordable 24X7 support." msgstr "und führt kostengünstigen 24X7 Support ein." +#: ungleich_page/templates/ungleich_page/includes/_about.html:67 msgid "ungleich launches" msgstr "ungleich lanciert" +#: ungleich_page/templates/ungleich_page/includes/_about.html:68 msgid "Digital Glarus project" msgstr "Digital Glarus Projekt" +#: ungleich_page/templates/ungleich_page/includes/_about.html:74 msgid "and" msgstr "und" +#: ungleich_page/templates/ungleich_page/includes/_about.html:74 msgid "the story continues!" msgstr "Die Geschichte geht weiter!" +#: ungleich_page/templates/ungleich_page/includes/_contact_us.html:15 +#: ungleich_page/templates/ungleich_page/includes/_contact_us.html:28 +#: ungleich_page/views.py:36 msgid "Contact Us" msgstr "Kontaktieren Sie uns" +#: ungleich_page/templates/ungleich_page/includes/_contact_us.html:18 msgid "Join us at" msgstr "Schliessen Sie sich uns an" +#: ungleich_page/templates/ungleich_page/includes/_contact_us.html:19 msgid "Digital Glarus" msgstr "Digital Glarus" +#: ungleich_page/templates/ungleich_page/includes/_contact_us.html:20 msgid "a great co-working space in the middle of Alps!" msgstr "ein wunderschöner Co-Working Space mitten in den Alpen" +#: ungleich_page/templates/ungleich_page/includes/_contact_us.html:21 msgid "You can contact us at" msgstr "Sie können uns kontaktieren unter" +#: ungleich_page/templates/ungleich_page/includes/_contact_us.html:26 msgid "or" msgstr "oder" +#: ungleich_page/templates/ungleich_page/includes/_contact_us.html:60 msgid "Submit" msgstr "Absenden" +#: ungleich_page/templates/ungleich_page/includes/_footer.html:8 msgid "Copyright © ungleich GmbH " msgstr "Copyright © ungleich GmbH" +#: ungleich_page/templates/ungleich_page/includes/_footer.html:22 msgid "ungleich Home" msgstr "ungleich Home" +#: ungleich_page/templates/ungleich_page/includes/_header.html:11 msgid "We Design, Configure & Maintain
Your Linux Infrastructure " msgstr "Wir designen, erstellen und warten Ihre Linux-Infrastruktur" +#: ungleich_page/templates/ungleich_page/includes/_portfolio.html:8 +#: ungleich_page/templates/ungleich_page/includes/_portfolio.html:9 msgid "Hosting Products " msgstr "Hosting Produkte" +#: ungleich_page/templates/ungleich_page/includes/_portfolio.html:16 msgid "HA Hosting" msgstr "HA Hosting" +#: ungleich_page/templates/ungleich_page/includes/_portfolio.html:18 msgid "" "We offer high availablity hosting (HA) in Germany and in Switzerland. Our " "infrastructure is powered by Free and Open Source Software like OpenNebula, " @@ -102,18 +131,22 @@ msgstr "" "Schweiz. Unsere Infrastruktur ist unterstützt durch Free and Open Source " "Software wie OpenNebula." +#: ungleich_page/templates/ungleich_page/includes/_portfolio.html:24 msgid "Rails Hosting" msgstr "Rails Hosting" +#: ungleich_page/templates/ungleich_page/includes/_portfolio.html:26 msgid "" "Ready to go live with your Ruby on Rails application? We offer you ready-to-" "deploy virtual machines or configure your existing infrastructure for Ruby " "on Rails." msgstr "Sind bereit mit ihrem Ruby on Rails Applikation live zu gehen?" +#: ungleich_page/templates/ungleich_page/includes/_portfolio.html:32 msgid " Configuration as a Service" msgstr "Konfiguration als Service" +#: ungleich_page/templates/ungleich_page/includes/_portfolio.html:34 msgid "" "You are in need for a configuration?
With ungleich you have found an " "experienced team that configure your systems to provide service like DNS, E-" @@ -123,22 +156,27 @@ msgstr "" "gefunden, dass ihnen die Konfiguration von DNS, E-Mail, Datenbanken oder " "Webservern für ihr System anbietet" +#: ungleich_page/templates/ungleich_page/includes/_services.html:8 msgid "our services" msgstr "Unsere Dienstleistungen" +#: ungleich_page/templates/ungleich_page/includes/_services.html:10 msgid "We support our clients in all areas of Unix infrastructure." msgstr "" "Wir unterstützen unsere Klienten in allen Bereichen der Unix Infrastruktur." +#: ungleich_page/templates/ungleich_page/includes/_services.html:11 msgid "" "Our top notch configuration management is refreshingly simple and reliable." msgstr "" "Unser erstklassiges Konfigurationsmanagement ist erfrischend einfach und " "zuverlässig." +#: ungleich_page/templates/ungleich_page/includes/_services.html:20 msgid "Hosting" msgstr "Hosting" +#: ungleich_page/templates/ungleich_page/includes/_services.html:22 msgid "" "Ruby on Rails. Java hosting, Django hosting, we make it everything run " "smooth and safe." @@ -146,9 +184,11 @@ msgstr "" "Ruby on Rails. Java hosting, Django hosting, wir garantieren einen " "reibungslosen Ablauf" +#: ungleich_page/templates/ungleich_page/includes/_services.html:30 msgid "Configuration as a Service" msgstr "Konfiguration als Service" +#: ungleich_page/templates/ungleich_page/includes/_services.html:32 msgid "" "Ruby on Rails, Django, Java, Webserver, Mailserver, any infrastructure that " "needs to configured, we provide comprehensive solutions. Amazon, rackspace " @@ -158,9 +198,11 @@ msgstr "" "welche eine Konfiguration braucht, wir offerieren umfassende Lösungen, " "Amazon, Rackspace oder Bare Metal Servers, wir konfigurieren alles." +#: ungleich_page/templates/ungleich_page/includes/_services.html:40 msgid "Linux System Engineering" msgstr "Linux System Engineering" +#: ungleich_page/templates/ungleich_page/includes/_services.html:43 msgid "" "Let your developers develop! We take care of your system administration. " "Gentoo, Archlinux, Debian, Ubuntu, and many more." @@ -168,12 +210,15 @@ msgstr "" "Lassen sie ihre Entwickler entwickeln! Wir kümmern uns um ihre " "Systemadministration. Gentoo, Archlinux, Debian, Ubuntu und viele mehr." +#: ungleich_page/templates/ungleich_page/includes/_team.html:8 msgid "Why ungleich?*" msgstr "Warum ungleich?" +#: ungleich_page/templates/ungleich_page/includes/_team.html:9 msgid "What our customers say" msgstr "Was unsere Kunden sagen" +#: ungleich_page/templates/ungleich_page/includes/_team.html:29 msgid "" "\n" "\t\t\t \"ungleich helped us getting started with our internal\n" @@ -202,6 +247,7 @@ msgstr "" "Infrastruktur-Einrichtung erhalten, welche es unseren Technikern ermöglicht " "effizienter und bequemer zu arbeiten als zuvor." +#: ungleich_page/templates/ungleich_page/includes/_team.html:51 msgid "" "\n" "\t\t\t \"Thanks to ungleich team, who has designed and\n" @@ -219,6 +265,7 @@ msgstr "" "nur in der Kosteneinsparung aber auch zur Zeiteinsparung, was für IT-Firmen " "sehr wichtig ist." +#: ungleich_page/templates/ungleich_page/includes/_team.html:67 msgid "" "\n" "\t\t\t \"ungleich provided an excellent service in designing\n" @@ -245,6 +292,7 @@ msgstr "" "allen Firmen empfehlen, bei denen eine solide Infrastruktur stark gefragt " "ist." +#: ungleich_page/templates/ungleich_page/includes/_team.html:82 msgid "" "\n" "\t\t\t - Sebastian Plattner,\n" @@ -252,37 +300,47 @@ msgid "" "\t\t\t " msgstr "" +#: ungleich_page/templates/ungleich_page/includes/_team.html:95 msgid "*ungleich means not equal to (≠) U+2260." msgstr "*ungleich bedeutet nicht gleich wie (≠) U+2260." +#: ungleich_page/templates/ungleich_page/landing.html:85 #, fuzzy #| msgid "our services" msgid "Services" msgstr "Unsere Dienstleistungen" +#: ungleich_page/templates/ungleich_page/landing.html:90 msgid "products" msgstr "PRODUKTE" +#: ungleich_page/templates/ungleich_page/landing.html:93 msgid "About" msgstr "Über" +#: ungleich_page/templates/ungleich_page/landing.html:96 msgid "WHY UNGLEICH?" msgstr "WARUM UNGLEICH?" +#: ungleich_page/templates/ungleich_page/landing.html:99 msgid "BLOG" msgstr "BLOG" +#: ungleich_page/templates/ungleich_page/landing.html:102 msgid "CONTACT" msgstr "KONTAKT" +#: ungleich_page/urls.py:8 #, fuzzy #| msgid "Contact Us" msgid "contact/$" msgstr "Kontaktieren Sie uns" +#: ungleich_page/views.py:26 msgid "Message Successfully Sent" msgstr "Nachricht erfolgreich versendet" +#: ungleich_page/views.py:37 msgid "If you have any question, just send us an email." msgstr "" "Wenn Sie irgendwelche Fragen haben, schicken Sie uns einfach eine E-Mail." diff --git a/utils/locale/de/LC_MESSAGES/django.po b/utils/locale/de/LC_MESSAGES/django.po index 39d6fa19..fdc21502 100644 --- a/utils/locale/de/LC_MESSAGES/django.po +++ b/utils/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-09-23 01:50+0530\n" +"POT-Creation-Date: 2017-09-02 11:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -769,8 +769,7 @@ msgid "Message" msgstr "Nachricht" msgid "The link to reset your email has been sent to your email" -msgstr "" -"Der Link zum Zur?cksetzen deines Passwortes wurde an deine E-Mail gesendet" +msgstr "Der Link zum Zur?cksetzen deines Passwortes wurde an deine E-Mail gesendet" msgid "Password Reset" msgstr "" From ec2413d3dc1acc2bcd076a072ede7db60a7f7692 Mon Sep 17 00:00:00 2001 From: Arvind Tiwari Date: Sat, 23 Sep 2017 18:57:35 +0530 Subject: [PATCH 006/111] removed extra quote --- hosting/locale/de/LC_MESSAGES/django.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hosting/locale/de/LC_MESSAGES/django.po b/hosting/locale/de/LC_MESSAGES/django.po index cbed82b7..3832ccdb 100644 --- a/hosting/locale/de/LC_MESSAGES/django.po +++ b/hosting/locale/de/LC_MESSAGES/django.po @@ -235,7 +235,7 @@ msgid "" "been cancelled." msgstr "" "Du erhälst diese E-Mail, da deine virtuelle Maschine [%(vm_name)s] " -"gekündigt wurde."" +"gekündigt wurde." msgid "You can always order a new VM by clicking the button below." msgstr "" From a37c734c94cb979a54029e8e50919fe2ba541ba4 Mon Sep 17 00:00:00 2001 From: Arvind Tiwari Date: Tue, 26 Sep 2017 02:53:09 +0530 Subject: [PATCH 007/111] translation fix --- datacenterlight/locale/de/LC_MESSAGES/django.po | 6 +++--- hosting/locale/de/LC_MESSAGES/django.po | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/datacenterlight/locale/de/LC_MESSAGES/django.po b/datacenterlight/locale/de/LC_MESSAGES/django.po index a9dfd3e2..62580154 100644 --- a/datacenterlight/locale/de/LC_MESSAGES/django.po +++ b/datacenterlight/locale/de/LC_MESSAGES/django.po @@ -156,15 +156,15 @@ msgid "" msgstr "Kopiere den folgenden Link in die Adressleiste deines Browsers." msgid "Welcome to Data Center Light!" -msgstr "Willkommen zu Data Center Light!" +msgstr "Willkommen beim Data Center Light!" msgid "" "Thanks for joining us! We provide the most affordable virtual machines from " "the heart of Switzerland." -msgstr "" +msgstr "Bei uns findest Du die günstiges VMs aus der Schweiz." msgid "Try now, order a VM. VM price starts from only 15CHF per month." -msgstr "" +msgstr "Unser Angebot beginnt bei 15 CHF pro Monat. Probier's jetzt aus!" msgid "ORDER VM" msgstr "VM BESTELLEN" diff --git a/hosting/locale/de/LC_MESSAGES/django.po b/hosting/locale/de/LC_MESSAGES/django.po index 3832ccdb..83dbc3ac 100644 --- a/hosting/locale/de/LC_MESSAGES/django.po +++ b/hosting/locale/de/LC_MESSAGES/django.po @@ -215,16 +215,16 @@ msgid "Password Reset" msgstr "Passwort zurücksetzen" msgid "We received a request to reset your password." -msgstr "" +msgstr "Wir haben eine Anfrage erhalten, um Dein Passwort zurückzusetzen." msgid "If you didn't make this request you can safely ignore this email." -msgstr "" +msgstr "Falls Du kein neues Passwort angefragt hast, kannst Du diese E-mail ignorieren." msgid "Otherwise, click here to reset your password." -msgstr "" +msgstr "Andernfalls klicke hier, um Dein Passwort zurückzusetzen." msgid "Thank you!" -msgstr "" +msgstr "Dankeschön!" msgid "Virtual Machine Cancellation" msgstr "VM Kündigung" @@ -238,7 +238,7 @@ msgstr "" "gekündigt wurde." msgid "You can always order a new VM by clicking the button below." -msgstr "" +msgstr "Du kannst einfach eine neue VM bestellen, indem Du den Knopf weiter unten drückst." msgid "CREATE VM" msgstr "NEUE VM" From 21660f8d00322f22569a262281d91aa93a39b4cc Mon Sep 17 00:00:00 2001 From: Arvind Tiwari Date: Wed, 27 Sep 2017 02:07:52 +0530 Subject: [PATCH 008/111] font-size reduced, vm cancel and vm create email data fixed --- .../locale/de/LC_MESSAGES/django.po | 2 +- datacenterlight/tasks.py | 21 +- .../emails/user_activation.html | 6 +- .../datacenterlight/emails/welcome_user.html | 6 +- hosting/locale/de/LC_MESSAGES/django.po | 181 ++++++------------ .../hosting/emails/new_booked_vm.html | 8 +- .../hosting/emails/password_reset_email.html | 6 +- .../templates/hosting/emails/vm_canceled.html | 10 +- hosting/views.py | 2 +- 9 files changed, 95 insertions(+), 147 deletions(-) diff --git a/datacenterlight/locale/de/LC_MESSAGES/django.po b/datacenterlight/locale/de/LC_MESSAGES/django.po index 89e35e8c..96dd650c 100644 --- a/datacenterlight/locale/de/LC_MESSAGES/django.po +++ b/datacenterlight/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-09-23 02:19+0530\n" +"POT-Creation-Date: 2017-09-27 02:06+0530\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/datacenterlight/tasks.py b/datacenterlight/tasks.py index 1335869b..61c6fb4b 100644 --- a/datacenterlight/tasks.py +++ b/datacenterlight/tasks.py @@ -5,6 +5,7 @@ from celery.utils.log import get_task_logger from celery import current_task from django.conf import settings from django.core.mail import EmailMessage +from django.core.urlresolvers import reverse from django.utils import translation from django.utils.translation import ugettext_lazy as _ @@ -52,7 +53,8 @@ def create_vm_task(self, vm_template_id, user, specs, template, stripe_customer_id, billing_address_data, billing_address_id, charge, cc_details): - logger.debug("Running create_vm_task on {}".format(current_task.request.hostname)) + logger.debug("Running create_vm_task on {}".format( + current_task.request.hostname)) vm_id = None try: final_price = specs.get('price') @@ -126,9 +128,9 @@ def create_vm_task(self, vm_template_id, user, specs, template, 'storage': specs.get('disk_size'), 'price': specs.get('price'), 'template': template.get('name'), - 'vm.name': vm['name'], - 'vm.id': vm['vm_id'], - 'order.id': order.id + 'vm_name': vm['name'], + 'vm_id': vm['vm_id'], + 'order_id': order.id } email_data = { 'subject': settings.DCL_TEXT + " Order from %s" % context['email'], @@ -142,20 +144,21 @@ def create_vm_task(self, vm_template_id, user, specs, template, email.send() if 'pass' in user: - lang = 'en-us' + lang = 'en-us' if user.get('language') is not None: - logger.debug("Language is set to {}".format(user.get('language'))) + logger.debug("Language is set to {}".format( + user.get('language'))) lang = user.get('language') translation.activate(lang) # Send notification to the user as soon as VM has been booked context = { - 'vm': vm, - 'order': order, 'base_url': "{0}://{1}".format(user.get('request_scheme'), user.get('request_host')), + 'order_url': reverse('hosting:orders', + kwargs={'pk': order.id}), 'page_header': _( 'Your New VM %(vm_name)s at Data Center Light') % { - 'vm_name': vm.get('name')} + 'vm_name': vm.get('name')} } email_data = { 'subject': context.get('page_header'), diff --git a/datacenterlight/templates/datacenterlight/emails/user_activation.html b/datacenterlight/templates/datacenterlight/emails/user_activation.html index 9c8c0367..409ea153 100644 --- a/datacenterlight/templates/datacenterlight/emails/user_activation.html +++ b/datacenterlight/templates/datacenterlight/emails/user_activation.html @@ -6,7 +6,7 @@ {% trans "Data Center Light Account Activation" %} - + @@ -14,7 +14,7 @@ @@ -35,7 +35,7 @@
- +
-

{% trans "Your Data Center Light Team" %}

+

{% trans "Your Data Center Light Team" %}

diff --git a/datacenterlight/templates/datacenterlight/emails/welcome_user.html b/datacenterlight/templates/datacenterlight/emails/welcome_user.html index f426de20..ba0e5026 100644 --- a/datacenterlight/templates/datacenterlight/emails/welcome_user.html +++ b/datacenterlight/templates/datacenterlight/emails/welcome_user.html @@ -6,7 +6,7 @@ {% trans "Welcome to Data Center Light!" %} - + @@ -14,7 +14,7 @@ @@ -37,7 +37,7 @@
- +
-

{% trans "Your Data Center Light Team" %}

+

{% trans "Your Data Center Light Team" %}

diff --git a/hosting/locale/de/LC_MESSAGES/django.po b/hosting/locale/de/LC_MESSAGES/django.po index e1a3c694..27a87c53 100644 --- a/hosting/locale/de/LC_MESSAGES/django.po +++ b/hosting/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-09-24 12:34+0000\n" +"POT-Creation-Date: 2017-09-27 02:06+0530\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -221,7 +221,9 @@ msgid "We received a request to reset your password." msgstr "Wir haben eine Anfrage erhalten, um Dein Passwort zurückzusetzen." msgid "If you didn't make this request you can safely ignore this email." -msgstr "Falls Du kein neues Passwort angefragt hast, kannst Du diese E-mail ignorieren." +msgstr "" +"Falls Du kein neues Passwort angefragt hast, kannst Du diese E-mail " +"ignorieren." msgid "Otherwise, click here to reset your password." msgstr "Andernfalls klicke hier, um Dein Passwort zurückzusetzen." @@ -232,50 +234,18 @@ msgstr "Dankeschön!" msgid "Virtual Machine Cancellation" msgstr "VM Kündigung" -#, python-format -msgid "" -"\n" -"You're receiving this email because you requested a password reset for your " -"user account at %(site_name)s.
\n" -"Please go to the following page and choose a new password: %(base_url)s" -"%(password_reset_url)s
\n" -"If you didn't request a new password, ignore this e-mail.
\n" -"Thank you!\n" -msgstr "" -"\n" -"Du erhälst diese E-Mail da Du Dein Passwort für Deinen Account bei " -"%(site_name)s zurücksetzen möchtest.
\n" -"Bitte folge diesem Link und wähle ein neues Passwort: %(base_url)s" -"%(password_reset_url)s Solltest Du kein neues Passwort angefordert haben, " -"dann ignoriere diese E-Mail.
\n" -"Dankeschön!\n" - -#, python-format -msgid "" -"You're receiving this email because you requested a password reset for your " -"user account at %(site_name)s.\n" -"Please go to the following page and choose a new password: %(base_url)s" -"%(password_reset_url)s\n" -"If you didn't request a new password, ignore this e-mail.\n" -"Thank you!\n" -msgstr "" -"Du erhälst diese E-Mail da Du Dein Passwort für Deinen Account bei " -"%(site_name)s zurücksetzen möchtest.\n" -"Bitte folge diesem Link und wähle ein neues Passwort: %(base_url)s" -"%(password_reset_url)s Solltest Du kein neues Passwort angefordert haben, " -"dann ignoriere diese E-Mail.\n" -"Dankeschön!\n" - #, python-format msgid "" "You are receiving this email because your virutal machine [%(vm_name)s] has " "been cancelled." msgstr "" -"Du erhälst diese E-Mail, da deine virtuelle Maschine [%(vm_name)s] " -"gekündigt wurde." +"Du erhälst diese E-Mail, da deine virtuelle Maschine [%(vm_name)s] gekündigt " +"wurde." msgid "You can always order a new VM by clicking the button below." -msgstr "Du kannst einfach eine neue VM bestellen, indem Du den Knopf weiter unten drückst." +msgstr "" +"Du kannst einfach eine neue VM bestellen, indem Du den Knopf weiter unten " +"drückst." msgid "CREATE VM" msgstr "NEUE VM" @@ -283,24 +253,6 @@ msgstr "NEUE VM" msgid "You can always order a new VM by following the link below." msgstr "" -#, python-format -msgid "" -"You're receiving this mail because your virtual machine [%(vm_name)s] has " -"been cancelled.\n" -"You can see your order status by clicking here\n" -"%(base_url)s%(vm_order_url)s\n" -"If you want to order a new virtual machine, you can do it by clicking this " -"link.\n" -"%(base_url)s%(my_virtual_machines_url)s\n" -msgstr "" -"Du erhälst diese E-Mail, da Deine virtuelle Maschine [%(vm_name)s] gekündigt " -"wurde.\n" -"Um Deinen Auftragsstatus zu sehen, klicke hier.\n" -"%(base_url)s%(vm_order_url)s\n" -"Falls Du eine neue virtuelle Maschine bestellen möchtest, kannst Du dies " -"tun, indem Du diesen Link klickst.\n" -"%(base_url)s%(my_virtual_machines_url)s\n" - msgid "Toggle navigation" msgstr "Umschalten" @@ -620,8 +572,8 @@ msgid "" "Your Virtual Machine %(machine_name)s is successfully " "terminated!" msgstr "" -"Deine Virtuelle Machine (VM) %(machine_name)s wurde erfolgreich " -"beendet!" +"Deine Virtuelle Machine (VM) %(machine_name)s wurde " +"erfolgreich beendet!" msgid "Virtual Machines" msgstr "Virtuelle Maschinen" @@ -704,25 +656,67 @@ msgid "" "contact Data Center Light Support." msgstr "Kontaktiere den Data Center Light Support." -#, python-format -msgid "VM %(VM_ID)s terminated successfully" -msgstr "VM %(VM_ID)s erfolgreich beendet" - msgid "Terminated" msgstr "Beendet" msgid "Error terminating VM" msgstr "Fehler beenden VM" -msgid "Virtual Machine Cancellation" -msgstr "VM Kündigung" +#~ msgid "" +#~ "\n" +#~ "You're receiving this email because you requested a password reset for " +#~ "your user account at %(site_name)s.
\n" +#~ "Please go to the following page and choose a new password: %(base_url)s" +#~ "%(password_reset_url)s
\n" +#~ "If you didn't request a new password, ignore this e-mail.
\n" +#~ "Thank you!\n" +#~ msgstr "" +#~ "\n" +#~ "Du erhälst diese E-Mail da Du Dein Passwort für Deinen Account bei " +#~ "%(site_name)s zurücksetzen möchtest.
\n" +#~ "Bitte folge diesem Link und wähle ein neues Passwort: %(base_url)s" +#~ "%(password_reset_url)s Solltest Du kein neues Passwort angefordert haben, " +#~ "dann ignoriere diese E-Mail.
\n" +#~ "Dankeschön!\n" -#~ msgid "Close" -#~ msgstr "Schliessen" +#~ msgid "" +#~ "You're receiving this email because you requested a password reset for " +#~ "your user account at %(site_name)s.\n" +#~ "Please go to the following page and choose a new password: %(base_url)s" +#~ "%(password_reset_url)s\n" +#~ "If you didn't request a new password, ignore this e-mail.\n" +#~ "Thank you!\n" +#~ msgstr "" +#~ "Du erhälst diese E-Mail da Du Dein Passwort für Deinen Account bei " +#~ "%(site_name)s zurücksetzen möchtest.\n" +#~ "Bitte folge diesem Link und wähle ein neues Passwort: %(base_url)s" +#~ "%(password_reset_url)s Solltest Du kein neues Passwort angefordert haben, " +#~ "dann ignoriere diese E-Mail.\n" +#~ "Dankeschön!\n" + +#~ msgid "" +#~ "You're receiving this mail because your virtual machine [%(vm_name)s] has " +#~ "been cancelled.\n" +#~ "You can see your order status by clicking here\n" +#~ "%(base_url)s%(vm_order_url)s\n" +#~ "If you want to order a new virtual machine, you can do it by clicking " +#~ "this link.\n" +#~ "%(base_url)s%(my_virtual_machines_url)s\n" +#~ msgstr "" +#~ "Du erhälst diese E-Mail, da Deine virtuelle Maschine [%(vm_name)s] " +#~ "gekündigt wurde.\n" +#~ "Um Deinen Auftragsstatus zu sehen, klicke hier.\n" +#~ "%(base_url)s%(vm_order_url)s\n" +#~ "Falls Du eine neue virtuelle Maschine bestellen möchtest, kannst Du dies " +#~ "tun, indem Du diesen Link klickst.\n" +#~ "%(base_url)s%(my_virtual_machines_url)s\n" #~ msgid "VM %(VM_ID)s terminated successfully" #~ msgstr "VM %(VM_ID)s erfolgreich beendet" +#~ msgid "Close" +#~ msgstr "Schliessen" + #~ msgid "days" #~ msgstr "Tage" @@ -762,55 +756,6 @@ msgstr "VM Kündigung" #~ "tun, indem du diesen " #~ "Link klickst.
\n" -#~ msgid "" -#~ "You're receiving this mail because your virtual machine [%(vm_name)s] has " -#~ "been cancelled.\n" -#~ "You can see your order status by clicking here\n" -#~ "%(base_url)s%(vm_order_url)s\n" -#~ "If you want to order a new virtual machine, you can do it by clicking " -#~ "this link.\n" -#~ "%(base_url)s%(my_virtual_machines_url)s\n" -#~ msgstr "" -#~ "Du erhälst diese E-Mail, da deine virtuelle Maschine [%(vm_name)s] " -#~ "gekündigt wurde.\n" -#~ "Um deinen Auftragsstatus zu sehen, klicke hier.\n" -#~ "%(base_url)s%(vm_order_url)s\n" -#~ "Falls du eine neue virtuelle Maschine bestellen möchtest, kannst du dies " -#~ "tun, indem du diesen Link klickst.\n" -#~ "%(base_url)s%(my_virtual_machines_url)s\n" - -#~ msgid "" -#~ "\n" -#~ "You're receiving this email because you requested a password reset for " -#~ "your user account at %(site_name)s.
\n" -#~ "Please go to the following page and choose a new password: %(base_url)s" -#~ "%(password_reset_url)s
\n" -#~ "If you didn't request a new password, ignore this e-mail.
\n" -#~ "Thank you!\n" -#~ msgstr "" -#~ "\n" -#~ "Du erhälst diese E-Mail da du dein Passwort für deinen Account bei " -#~ "%(site_name)s zurücksetzen möchtest.
\n" -#~ "Bitte folge diesem Link und wähle ein neues Passwort: %(base_url)s" -#~ "%(password_reset_url)s Solltest du kein neues Passwort angefordert haben, " -#~ "dann ignoriere diese E-Mail.
\n" -#~ "Dankeschön!\n" - -#~ msgid "" -#~ "You're receiving this email because you requested a password reset for " -#~ "your user account at %(site_name)s.\n" -#~ "Please go to the following page and choose a new password: %(base_url)s" -#~ "%(password_reset_url)s\n" -#~ "If you didn't request a new password, ignore this e-mail.\n" -#~ "Thank you!\n" -#~ msgstr "" -#~ "Du erhälst diese E-Mail da du dein Passwort für deinen Account bei " -#~ "%(site_name)s zurücksetzen möchtest.\n" -#~ "Bitte folge diesem Link und wähle ein neues Passwort: %(base_url)s" -#~ "%(password_reset_url)s Solltest du kein neues Passwort angefordert haben, " -#~ "dann ignoriere diese E-Mail.\n" -#~ "Dankeschön!\n" - #~ msgid "Finish Configuration" #~ msgstr "Konfiguration beenden" @@ -917,5 +862,5 @@ msgstr "VM Kündigung" #~ "Your SSH private key was already generated and downloaded, if you lost " #~ "it, contact us. " #~ msgstr "" -#~ "Dein privater SSH Key wurde bereits generiert und heruntergeladen. " -#~ "Falls Du ihn verloren hast, kontaktiere uns." +#~ "Dein privater SSH Key wurde bereits generiert und heruntergeladen. Falls " +#~ "Du ihn verloren hast, kontaktiere uns." diff --git a/hosting/templates/hosting/emails/new_booked_vm.html b/hosting/templates/hosting/emails/new_booked_vm.html index 78134307..2aa5b4e8 100644 --- a/hosting/templates/hosting/emails/new_booked_vm.html +++ b/hosting/templates/hosting/emails/new_booked_vm.html @@ -6,7 +6,7 @@ {% blocktrans %}Your New VM {{vm_name}}{% endblocktrans %} - + @@ -14,7 +14,7 @@ @@ -26,7 +26,7 @@ @@ -38,7 +38,7 @@
- +

{% blocktrans %}You have ordered a new virtual machine!{% endblocktrans %}
- {% blocktrans %}Your order of [{{vm_name}}] has been charged.{% endblocktrans %}
+ {% blocktrans %}Your order of [{{ vm_name }}] has been charged.{% endblocktrans %}
{% blocktrans %}You can view your VM detail by clicking the button below.{% endblocktrans %}

-

{% trans "Your Data Center Light Team" %}

+

{% trans "Your Data Center Light Team" %}

diff --git a/hosting/templates/hosting/emails/password_reset_email.html b/hosting/templates/hosting/emails/password_reset_email.html index f5929f33..8bfddae7 100644 --- a/hosting/templates/hosting/emails/password_reset_email.html +++ b/hosting/templates/hosting/emails/password_reset_email.html @@ -6,7 +6,7 @@ {% trans "Password Reset" %} - + @@ -14,7 +14,7 @@ @@ -40,7 +40,7 @@
- +
-

{% trans "Your Data Center Light Team" %}

+

{% trans "Your Data Center Light Team" %}

diff --git a/hosting/templates/hosting/emails/vm_canceled.html b/hosting/templates/hosting/emails/vm_canceled.html index 1baa6954..535ea2ed 100644 --- a/hosting/templates/hosting/emails/vm_canceled.html +++ b/hosting/templates/hosting/emails/vm_canceled.html @@ -6,7 +6,7 @@ {% trans "Virtual Machine Cancellation" %} - + @@ -14,7 +14,7 @@ @@ -25,19 +25,19 @@
- +

- {% blocktrans %}You are receiving this email because your virutal machine [{{vm_name}}] has been cancelled.{% endblocktrans %}
+ {% blocktrans %}You are receiving this email because your virutal machine [{{ vm_name }}] has been cancelled.{% endblocktrans %}
{% blocktrans %}You can always order a new VM by clicking the button below.{% endblocktrans %}

- + {% trans "CREATE VM" %} + {% trans "CREATE VM" %}
-

{% trans "Your Data Center Light Team" %}

+

{% trans "Your Data Center Light Team" %}

diff --git a/hosting/views.py b/hosting/views.py index f5da9c26..1f4bc895 100644 --- a/hosting/views.py +++ b/hosting/views.py @@ -1079,7 +1079,7 @@ class VirtualMachineView(LoginRequiredMixin, View): else: sleep(2) context = { - 'vm': vm_data, + 'vm_name': vm_data.name, 'base_url': "{0}://{1}".format(self.request.scheme, self.request.get_host()), 'page_header': _('Virtual Machine Cancellation') From d3f2fd2aa047341de212a55a39eb4b58a7fe2107 Mon Sep 17 00:00:00 2001 From: Arvind Tiwari Date: Wed, 27 Sep 2017 02:14:20 +0530 Subject: [PATCH 009/111] dcl logo changed to png --- .../templates/datacenterlight/emails/user_activation.html | 2 +- .../templates/datacenterlight/emails/welcome_user.html | 2 +- hosting/templates/hosting/emails/new_booked_vm.html | 2 +- hosting/templates/hosting/emails/password_reset_email.html | 2 +- hosting/templates/hosting/emails/vm_canceled.html | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/datacenterlight/templates/datacenterlight/emails/user_activation.html b/datacenterlight/templates/datacenterlight/emails/user_activation.html index 409ea153..89d99722 100644 --- a/datacenterlight/templates/datacenterlight/emails/user_activation.html +++ b/datacenterlight/templates/datacenterlight/emails/user_activation.html @@ -14,7 +14,7 @@ diff --git a/datacenterlight/templates/datacenterlight/emails/welcome_user.html b/datacenterlight/templates/datacenterlight/emails/welcome_user.html index ba0e5026..99299d67 100644 --- a/datacenterlight/templates/datacenterlight/emails/welcome_user.html +++ b/datacenterlight/templates/datacenterlight/emails/welcome_user.html @@ -14,7 +14,7 @@
- +
diff --git a/hosting/templates/hosting/emails/new_booked_vm.html b/hosting/templates/hosting/emails/new_booked_vm.html index 2aa5b4e8..e5278fc5 100644 --- a/hosting/templates/hosting/emails/new_booked_vm.html +++ b/hosting/templates/hosting/emails/new_booked_vm.html @@ -14,7 +14,7 @@
- +
diff --git a/hosting/templates/hosting/emails/password_reset_email.html b/hosting/templates/hosting/emails/password_reset_email.html index 8bfddae7..aec8fb50 100644 --- a/hosting/templates/hosting/emails/password_reset_email.html +++ b/hosting/templates/hosting/emails/password_reset_email.html @@ -14,7 +14,7 @@
- +
diff --git a/hosting/templates/hosting/emails/vm_canceled.html b/hosting/templates/hosting/emails/vm_canceled.html index 535ea2ed..2439c40c 100644 --- a/hosting/templates/hosting/emails/vm_canceled.html +++ b/hosting/templates/hosting/emails/vm_canceled.html @@ -14,7 +14,7 @@
- +
From 03b4ff1b659efb71e493426affc52a8088008986 Mon Sep 17 00:00:00 2001 From: Arvind Tiwari Date: Wed, 27 Sep 2017 02:14:45 +0530 Subject: [PATCH 010/111] png logo --- .../static/datacenterlight/img/logo_black.png | Bin 0 -> 4012 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 datacenterlight/static/datacenterlight/img/logo_black.png diff --git a/datacenterlight/static/datacenterlight/img/logo_black.png b/datacenterlight/static/datacenterlight/img/logo_black.png new file mode 100644 index 0000000000000000000000000000000000000000..00d295ec160def7386528a2869731da77bc10b49 GIT binary patch literal 4012 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 literal 0 HcmV?d00001 From d888b260ee4008c99cd0edefce75414761a70da3 Mon Sep 17 00:00:00 2001 From: Arvind Tiwari Date: Wed, 27 Sep 2017 02:45:24 +0530 Subject: [PATCH 011/111] welcome user mail --- hosting/views.py | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/hosting/views.py b/hosting/views.py index 1f4bc895..51a90e1d 100644 --- a/hosting/views.py +++ b/hosting/views.py @@ -274,22 +274,21 @@ class SignupValidatedView(SignupValidateView): "Your account has been activated."), login_string=_("You can now"), lurl=login_url) - if not pre_valid: - email_data = { - 'subject': 'Welcome to Data Center Light!', - 'to': self.request.user.email, - 'context': { - 'base_url': "{0}://{1}".format( - self.request.scheme, - self.request.get_host() - ) - }, - 'template_name': 'welcome_user', - 'template_path': 'datacenterlight/emails/', - 'from_address': settings.DCL_SUPPORT_FROM_ADDRESS, - } - email = BaseEmail(**email_data) - email.send() + email_data = { + 'subject': _('Welcome to Data Center Light!'), + 'to': self.request.user.email, + 'context': { + 'base_url': "{0}://{1}".format( + self.request.scheme, + self.request.get_host() + ) + }, + 'template_name': 'welcome_user', + 'template_path': 'datacenterlight/emails/', + 'from_address': settings.DCL_SUPPORT_FROM_ADDRESS, + } + email = BaseEmail(**email_data) + email.send() else: home_url = '
- +
- diff --git a/datacenterlight/templates/datacenterlight/emails/welcome_user.html b/datacenterlight/templates/datacenterlight/emails/welcome_user.html index 99299d67..573fe2ef 100644 --- a/datacenterlight/templates/datacenterlight/emails/welcome_user.html +++ b/datacenterlight/templates/datacenterlight/emails/welcome_user.html @@ -13,7 +13,7 @@
+
- diff --git a/hosting/templates/hosting/emails/new_booked_vm.html b/hosting/templates/hosting/emails/new_booked_vm.html index e5278fc5..f3a0af01 100644 --- a/hosting/templates/hosting/emails/new_booked_vm.html +++ b/hosting/templates/hosting/emails/new_booked_vm.html @@ -13,7 +13,7 @@
+
- diff --git a/hosting/templates/hosting/emails/password_reset_email.html b/hosting/templates/hosting/emails/password_reset_email.html index aec8fb50..1ef685da 100644 --- a/hosting/templates/hosting/emails/password_reset_email.html +++ b/hosting/templates/hosting/emails/password_reset_email.html @@ -13,7 +13,7 @@
+
- diff --git a/hosting/templates/hosting/emails/vm_canceled.html b/hosting/templates/hosting/emails/vm_canceled.html index 2439c40c..fa090636 100644 --- a/hosting/templates/hosting/emails/vm_canceled.html +++ b/hosting/templates/hosting/emails/vm_canceled.html @@ -13,7 +13,7 @@
+
- From 5747468c214098d30777392318a29fde145d158f Mon Sep 17 00:00:00 2001 From: Arvind Tiwari Date: Wed, 27 Sep 2017 03:09:43 +0530 Subject: [PATCH 013/111] outline removed --- .../templates/datacenterlight/emails/user_activation.html | 4 ++-- .../templates/datacenterlight/emails/welcome_user.html | 2 +- hosting/templates/hosting/emails/new_booked_vm.html | 2 +- hosting/templates/hosting/emails/password_reset_email.html | 4 ++-- hosting/templates/hosting/emails/vm_canceled.html | 2 +- hosting/views.py | 4 ++-- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/datacenterlight/templates/datacenterlight/emails/user_activation.html b/datacenterlight/templates/datacenterlight/emails/user_activation.html index 0836d1cd..2cc75d80 100644 --- a/datacenterlight/templates/datacenterlight/emails/user_activation.html +++ b/datacenterlight/templates/datacenterlight/emails/user_activation.html @@ -11,7 +11,7 @@ -
+
+
diff --git a/datacenterlight/templates/datacenterlight/emails/welcome_user.html b/datacenterlight/templates/datacenterlight/emails/welcome_user.html index 573fe2ef..7e35ac59 100644 --- a/datacenterlight/templates/datacenterlight/emails/welcome_user.html +++ b/datacenterlight/templates/datacenterlight/emails/welcome_user.html @@ -11,7 +11,7 @@ -
@@ -28,7 +28,7 @@ {% blocktrans %}You can activate your Data Center Light account by clicking here.{% endblocktrans %}
{% blocktrans %}You can also copy and paste the following link into the address bar of your browser to activate your Data Center Light account.{% endblocktrans %}

-

+

{{base_url}}{{activation_link}}

+
diff --git a/hosting/templates/hosting/emails/new_booked_vm.html b/hosting/templates/hosting/emails/new_booked_vm.html index f3a0af01..7ed963c6 100644 --- a/hosting/templates/hosting/emails/new_booked_vm.html +++ b/hosting/templates/hosting/emails/new_booked_vm.html @@ -11,7 +11,7 @@ - +
diff --git a/hosting/templates/hosting/emails/password_reset_email.html b/hosting/templates/hosting/emails/password_reset_email.html index 1ef685da..03f4c065 100644 --- a/hosting/templates/hosting/emails/password_reset_email.html +++ b/hosting/templates/hosting/emails/password_reset_email.html @@ -11,7 +11,7 @@ - +
@@ -29,7 +29,7 @@ {% trans "If you didn't make this request you can safely ignore this email." %}
{% trans "Otherwise, click here to reset your password." %}

-

+

{% url 'hosting:reset_password_confirm' uidb64=uid token=token as password_reset_url %} {{base_url}}{{ password_reset_url }}

diff --git a/hosting/templates/hosting/emails/vm_canceled.html b/hosting/templates/hosting/emails/vm_canceled.html index fa090636..cc133156 100644 --- a/hosting/templates/hosting/emails/vm_canceled.html +++ b/hosting/templates/hosting/emails/vm_canceled.html @@ -11,7 +11,7 @@ - +
diff --git a/hosting/views.py b/hosting/views.py index f81e6c5a..3358ebaf 100644 --- a/hosting/views.py +++ b/hosting/views.py @@ -267,7 +267,6 @@ class SignupValidatedView(SignupValidateView): section_title = _('Account activation') user = CustomUser.objects.filter( validation_slug=self.kwargs['validate_slug']).first() - # pre_valid = user.validated if validated: message = '{account_activation_string}
{login_string} {lurl}.'.format( account_activation_string=_( From 96f24881febabb3741169ba5d8832bace4c7d713 Mon Sep 17 00:00:00 2001 From: Arvind Tiwari Date: Wed, 27 Sep 2017 03:36:02 +0530 Subject: [PATCH 015/111] vm name fix --- datacenterlight/tasks.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/datacenterlight/tasks.py b/datacenterlight/tasks.py index 3869a409..561bfd17 100644 --- a/datacenterlight/tasks.py +++ b/datacenterlight/tasks.py @@ -158,7 +158,8 @@ def create_vm_task(self, vm_template_id, user, specs, template, kwargs={'pk': order.id}), 'page_header': _( 'Your New VM %(vm_name)s at Data Center Light') % { - 'vm_name': vm.get('name')} + 'vm_name': vm.get('name')}, + 'vm_name': vm.get('name') } email_data = { 'subject': context.get('page_header'), From 45df525a37ad958a0e3bc320eb19d9b2e8b469ab Mon Sep 17 00:00:00 2001 From: Arvind Tiwari Date: Wed, 27 Sep 2017 03:38:39 +0530 Subject: [PATCH 016/111] vm cancel name fix --- hosting/views.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hosting/views.py b/hosting/views.py index 3358ebaf..f994181e 100644 --- a/hosting/views.py +++ b/hosting/views.py @@ -1056,6 +1056,7 @@ class VirtualMachineView(LoginRequiredMixin, View): try: vm_data = VirtualMachineSerializer(manager.get_vm(vm.id)).data + vm_name = vm_data.name except WrongIdError: return redirect(reverse('hosting:virtual_machines')) @@ -1077,7 +1078,7 @@ class VirtualMachineView(LoginRequiredMixin, View): else: sleep(2) context = { - 'vm_name': vm_data.name, + 'vm_name': vm_name, 'base_url': "{0}://{1}".format(self.request.scheme, self.request.get_host()), 'page_header': _('Virtual Machine Cancellation') From 937cd2cd829fb0c0e525fe05271381b39080d157 Mon Sep 17 00:00:00 2001 From: Arvind Tiwari Date: Wed, 27 Sep 2017 03:41:18 +0530 Subject: [PATCH 017/111] minor fix --- hosting/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hosting/views.py b/hosting/views.py index f994181e..0db4ad39 100644 --- a/hosting/views.py +++ b/hosting/views.py @@ -1056,7 +1056,7 @@ class VirtualMachineView(LoginRequiredMixin, View): try: vm_data = VirtualMachineSerializer(manager.get_vm(vm.id)).data - vm_name = vm_data.name + vm_name = vm_data.get('name') except WrongIdError: return redirect(reverse('hosting:virtual_machines')) From 06bc37a9775b54b4b97bfaea2e89cfa867607723 Mon Sep 17 00:00:00 2001 From: Arvind Tiwari Date: Wed, 27 Sep 2017 04:13:04 +0530 Subject: [PATCH 018/111] paddings changed --- .../static/datacenterlight/img/logo_black.png | Bin 4012 -> 601929 bytes .../emails/user_activation.html | 12 ++++++------ .../datacenterlight/emails/welcome_user.html | 14 +++++++------- .../hosting/emails/new_booked_vm.html | 14 +++++++------- .../hosting/emails/password_reset_email.html | 12 ++++++------ .../templates/hosting/emails/vm_canceled.html | 14 +++++++------- 6 files changed, 33 insertions(+), 33 deletions(-) diff --git a/datacenterlight/static/datacenterlight/img/logo_black.png b/datacenterlight/static/datacenterlight/img/logo_black.png index 00d295ec160def7386528a2869731da77bc10b49..d5377a76f4829cd70d6fdcbea9f1816ee8ae76aa 100644 GIT binary patch literal 601929 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 {% if request.user.is_authenticated %} -
-
- -
-
+
+
+ +
+
{% else %}
diff --git a/datacenterlight/templates/datacenterlight/emails/user_activation.txt b/datacenterlight/templates/datacenterlight/emails/user_activation.txt index 13b3e7bf..4f66e239 100644 --- a/datacenterlight/templates/datacenterlight/emails/user_activation.txt +++ b/datacenterlight/templates/datacenterlight/emails/user_activation.txt @@ -6,4 +6,15 @@ {{base_url}}{{activation_link}} +{% if account_details %} + {% url 'hosting:reset_password' as reset_password_url %} + {% trans "Your account details are as follows" %}: + + {% trans "Username" %} : {% trans "Your email address" %} + {% trans "Password" %} : {{account_details}} + + {% trans "You can reset your password here" %}: + {{base_url}}{{reset_password_url}} +{% endif %} + {% trans "Your Data Center Light Team" %} \ No newline at end of file diff --git a/hosting/locale/de/LC_MESSAGES/django.po b/hosting/locale/de/LC_MESSAGES/django.po index 60090cb6..d63ead32 100644 --- a/hosting/locale/de/LC_MESSAGES/django.po +++ b/hosting/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-10-10 21:35+0530\n" +"POT-Creation-Date: 2017-10-16 00:57+0530\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -198,9 +198,8 @@ msgstr "Deine Neue VM %(vm_name)s" msgid "You have ordered a new virtual machine!" msgstr "Du hast eine neue virtuelle Maschine bestellt!" -#, python-format -msgid "Your order of [ %(vm_name)s ] has been charged." -msgstr "Deine Bestellung von [ %(vm_name)s ] wurde erhoben." +msgid "Your order of %(vm_name)s has been charged." +msgstr "Deine Bestellung von %(vm_name)s wurde erhoben." msgid "You can view your VM detail by clicking the button below." msgstr "Um die Rechnung zu sehen, klicke auf den Button unten." @@ -211,9 +210,8 @@ msgstr "Details anzeigen" msgid "Your Data Center Light Team" msgstr "Dein Data Center Light Team" -#, python-format -msgid "Your order of [%(vm_name)s] has been charged." -msgstr "Deine Bestellung von [%(vm_name)s] wurde erhoben." +msgid "Your order of %(vm_name)s has been charged." +msgstr "Deine Bestellung von %(vm_name)s wurde erhoben." msgid "You can view your VM detail by following the link below." msgstr "Um die Rechnung zu sehen, klicke auf den Link unten." @@ -238,13 +236,12 @@ msgstr "Dankeschön!" msgid "Virtual Machine Cancellation" msgstr "VM Kündigung" -#, python-format msgid "" -"You are receiving this email because your virutal machine [ " -"%(vm_name)s ] has been cancelled." +"You are receiving this email because your virutal machine " +"%(vm_name)s has been cancelled." msgstr "" -"Du erhälst diese E-Mail, da deine virtuelle Maschine [ %(vm_name)s ] gekündigt wurde." +"Du erhälst diese E-Mail, da deine virtuelle Maschine %(vm_name)s gekündigt wurde." msgid "You can always order a new VM by clicking the button below." msgstr "" @@ -254,12 +251,11 @@ msgstr "" msgid "CREATE VM" msgstr "NEUE VM" -#, python-format msgid "" -"You are receiving this email because your virutal machine [%(vm_name)s] has " +"You are receiving this email because your virutal machine %(vm_name)s has " "been cancelled." msgstr "" -"Du erhälst diese E-Mail, da deine virtuelle Maschine [%(vm_name)s] gekündigt " +"Du erhälst diese E-Mail, da deine virtuelle Maschine %(vm_name)s gekündigt " "wurde." msgid "You can always order a new VM by following the link below." From 88be7be180fd996a869e8434c49ec8cb8b81be1a Mon Sep 17 00:00:00 2001 From: Arvind Tiwari Date: Mon, 16 Oct 2017 01:07:54 +0530 Subject: [PATCH 045/111] translation fix --- hosting/locale/de/LC_MESSAGES/django.po | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/hosting/locale/de/LC_MESSAGES/django.po b/hosting/locale/de/LC_MESSAGES/django.po index d63ead32..fa24637a 100644 --- a/hosting/locale/de/LC_MESSAGES/django.po +++ b/hosting/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-10-16 00:57+0530\n" +"POT-Creation-Date: 2017-10-16 01:06+0530\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -198,6 +198,7 @@ msgstr "Deine Neue VM %(vm_name)s" msgid "You have ordered a new virtual machine!" msgstr "Du hast eine neue virtuelle Maschine bestellt!" +#, python-format msgid "Your order of %(vm_name)s has been charged." msgstr "Deine Bestellung von %(vm_name)s wurde erhoben." @@ -210,6 +211,7 @@ msgstr "Details anzeigen" msgid "Your Data Center Light Team" msgstr "Dein Data Center Light Team" +#, python-format msgid "Your order of %(vm_name)s has been charged." msgstr "Deine Bestellung von %(vm_name)s wurde erhoben." @@ -236,6 +238,7 @@ msgstr "Dankeschön!" msgid "Virtual Machine Cancellation" msgstr "VM Kündigung" +#, python-format msgid "" "You are receiving this email because your virutal machine " "%(vm_name)s has been cancelled." @@ -251,6 +254,7 @@ msgstr "" msgid "CREATE VM" msgstr "NEUE VM" +#, python-format msgid "" "You are receiving this email because your virutal machine %(vm_name)s has " "been cancelled." From 387cad476f273837b6cafc9ee811b3069bc251ed Mon Sep 17 00:00:00 2001 From: Arvind Tiwari Date: Tue, 17 Oct 2017 00:19:03 +0530 Subject: [PATCH 046/111] Update translations for user activation email --- datacenterlight/locale/de/LC_MESSAGES/django.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/datacenterlight/locale/de/LC_MESSAGES/django.po b/datacenterlight/locale/de/LC_MESSAGES/django.po index 36f84f26..ac796b95 100644 --- a/datacenterlight/locale/de/LC_MESSAGES/django.po +++ b/datacenterlight/locale/de/LC_MESSAGES/django.po @@ -145,7 +145,7 @@ msgid "" msgstr "Kopiere den folgenden Link in die Adressleiste deines Browsers." msgid "Your account details are as follows" -msgstr "" +msgstr "Deine Account Details sind unten aufgelistet" msgid "Username" msgstr "Username" @@ -157,7 +157,7 @@ msgid "Password" msgstr "Passwort" msgid "You can reset your password here" -msgstr "Passwort zurücksetzen" +msgstr "Du kannst dein Passwort hier zurück setzen" msgid "" "You can copy and paste the following link into the address bar of your " From 24cce4eed7b0067e92284f0bb56a4c50d6ccbcc5 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Mon, 16 Oct 2017 20:53:51 +0200 Subject: [PATCH 047/111] - Remove registration link from DG registration email - Remove multiple declared settings --- dynamicweb/settings/base.py | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/dynamicweb/settings/base.py b/dynamicweb/settings/base.py index 5af1a6ca..170ae3a8 100644 --- a/dynamicweb/settings/base.py +++ b/dynamicweb/settings/base.py @@ -347,8 +347,6 @@ MEDIA_ROOT = os.path.join(PROJECT_DIR, 'media') MEDIA_URL = APP_ROOT_ENDPOINT + 'media/' FILE_UPLOAD_PERMISSIONS = 0o644 -META_SITE_PROTOCOL = 'http' -META_USE_SITES = True MIGRATION_MODULES = { 'cms': 'cms.migrations', # 'filer': 'filer.migrations_django', @@ -359,9 +357,6 @@ MIGRATION_MODULES = { 'djangocms_link': 'djangocms_link.migrations_django', 'djangocms_teaser': 'djangocms_teaser.migrations_django', 'djangocms_column': 'djangocms_column.migrations_django', - 'djangocms_flash': 'djangocms_flash.migrations_django', - 'djangocms_googlemap': 'djangocms_googlemap.migrations_django', - 'djangocms_inherit': 'djangocms_inherit.migrations_django', 'djangocms_style': 'djangocms_style.migrations_django', 'cmsplugin_filer_image': 'cmsplugin_filer_image.migrations_django', 'cmsplugin_filer_file': 'cmsplugin_filer_file.migrations_django', @@ -495,11 +490,10 @@ AUTH_USER_MODEL = 'membership.CustomUser' STRIPE_DESCRIPTION_ON_PAYMENT = "Payment for ungleich GmbH services" # EMAIL MESSAGES -REGISTRATION_MESSAGE = {'subject': "Validation mail", - 'message': 'Thank You for registering for account on Digital Glarus.\n' - 'Please verify Your account under following link ' - 'http://{host}/en-us/digitalglarus/login/validate/{slug}', - } +REGISTRATION_MESSAGE = { + 'subject': "Digital Glarus registration", + 'message': 'Thank You for registering for account on Digital Glarus.' +} STRIPE_API_PRIVATE_KEY = env('STRIPE_API_PRIVATE_KEY') STRIPE_API_PUBLIC_KEY = env('STRIPE_API_PUBLIC_KEY') STRIPE_API_PRIVATE_KEY_TEST = env('STRIPE_API_PRIVATE_KEY_TEST') From daaf55b343ae60dc4bbd9f3331cff541de4b5992 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Mon, 16 Oct 2017 21:18:03 +0200 Subject: [PATCH 048/111] Update Changelog --- Changelog | 1 + 1 file changed, 1 insertion(+) diff --git a/Changelog b/Changelog index cb3d23fa..0ed32a90 100644 --- a/Changelog +++ b/Changelog @@ -5,6 +5,7 @@ Next release: * #3794: [dcl, hosting] Update email styles * #3828: [dcl, hosting] invoice period set to show monthly subscription * #3838: [hosting] restyle signup/login/password reset/password pages + * Bugfix: [dg] Remove validate email link in the registration email 1.2.6: 2017-10-10 * Bugfix: [dcl] Refactor and optimize images, links in glasfaser page * Bugfix: [dcl] Fix email not being sent issue From b6f130973541f525492af8a5990e6a26e10d1f59 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Tue, 17 Oct 2017 09:06:45 +0200 Subject: [PATCH 049/111] Add glasfaser_cms_page.html --- dynamicweb/settings/base.py | 1 + .../ungleich_page/glasfaser_cms_page.html | 315 ++++++++++++++++++ 2 files changed, 316 insertions(+) create mode 100644 ungleich_page/templates/ungleich_page/glasfaser_cms_page.html diff --git a/dynamicweb/settings/base.py b/dynamicweb/settings/base.py index 5af1a6ca..58e9065a 100644 --- a/dynamicweb/settings/base.py +++ b/dynamicweb/settings/base.py @@ -218,6 +218,7 @@ CMS_TEMPLATES = ( ('page.html', gettext('Page')), # dcl ('datacenterlight/cms_page.html', gettext('Data Center Light')), + ('ungleich_page/glasfaser_cms_page.html', gettext('Glasfaser')), ) DATABASES = { diff --git a/ungleich_page/templates/ungleich_page/glasfaser_cms_page.html b/ungleich_page/templates/ungleich_page/glasfaser_cms_page.html new file mode 100644 index 00000000..a218090b --- /dev/null +++ b/ungleich_page/templates/ungleich_page/glasfaser_cms_page.html @@ -0,0 +1,315 @@ +{% load static bootstrap3 i18n cms_tags sekizai_tags %} +{% get_current_language as LANGUAGE_CODE %} + + + + + + + + + + + ungleich GmbH + + + + + + + + + + + + + + + + + {% render_block "css" postprocessor "compressor.contrib.sekizai.compress" %} + {% render_block "js" postprocessor "compressor.contrib.sekizai.compress" %} + + + {% include "google_analytics.html" %} + + + + + + +{% cms_toolbar %} + + + {% placeholder 'one' %} + +
+
+
+
+

{% placeholder 'glasfaser_cms_page_text' %}

+
+
+

Surfen Sie mit 100 Mbit/s im Internet!

+

Mit dem neuen Glasfaser-Angebot der ungleich macht das Arbeiten im Internet richtig Spass. Das beste daran: die Geschwindigkeit symmetrisch in beide Richtungen verfügbar. Damit kann ihr Firmennetzwerk auch Dienste bereitstellen.

+

Dieses Angebot ist im Moment ausschliesslich für Firmenkunden verfügbar. Die Aufschaltkosten der Glasfaserleitung sind von der Entfernung zum nächsten Anschlusspunkt abhängig. Fragen Sie noch heute nach einem individuellem Angebot.

+
+
+
+
+
+
+
+
+

Was ist es?

+

+
+
+

Bei diesem Angebot handelt es sich um einen Internetzugang für Firmenkunden.

+

Sie erhalten in Zusammenarbeit mit unseren Partnern einen Glasfaseranschluss und eine Internetverbindung.

+
+
+
+
+ +
+
+
+

Technische Details

+

Im Angebot enthalten sind

+
+
+
+
+ +
+

Business-Internet

+

Symmetrische Internetleitung 100 Mbit/s upload und 100 Mbit/s download

+

Glasfaser-Installation bis ins Haus (keine Hausverkabelung)

+
+
+
+
+
+ +
+

Erreichbarkeit im Internet

+

1 öffentliches IPv6-Netzwerk (/64)

+

1 öffentliche IPv4-Adresse

+
+
+
+
+
+ +
+

Einfach zu nutzen

+

2 vorkonfigurierte Endgeräte (benötigt zwei Steckdosen auf Ihrer Seite)

+

Einfach einstecken und los!

+
+
+
+
+
+
+ + +
+
+
+

Wie funktioniert es?

+

So kommen Sie in wenigen einfachen Schritten zu Ihrem High-Speed-Internet

+
+
+
+
    +
  • +
    + +
    +
    +
    +

    Senden Sie uns via E-Mail Ihren Firmennamen und Ihre Anschrift zu.

    +
    +
    +
  • +
  • +
    + +
    +
    +
    +

    Wir prüfen dann die Entfernung zum nächsten Anschlusspunkt und schicken Ihnen eine Offerte zu.

    +
    +
    +
  • +
  • +
    + +
    +
    +
    +

    Sollten Sie dem Angebot zustimmen, wird die Glasfaser zu Ihrem Standort verlegt und die Endgeräte installiert.

    +
    +
    +
  • +
  • +
    + +
    +
    +
    +

    Sie müssen dann nur noch Ihre Geräte anschliessen und schon surfen Sie bllitzschnell im Internet!

    +
    +
    +
  • +
+
+
+
+
+ + +
+
+
+
+
+
+

Kontakt

+
+
+
+

ungleich GmbH

+
+
+

glasfaser@ungleich.ch

+

In der Au 7, Schwanden 8762

+

Switzerland

+
+
+ +
+
+
+ {% if success %} +
+
+

{% trans "Thank you for contacting us." %}

+
+

+ {% trans "Your message was successfully sent to our team." %} +

+
+ {% else %} +
+
+
+

Senden Sie uns eine Nachricht.

+
+
+
+
+ {% csrf_token %} + +
+ +
+ + {{contact_form.name.errors}} +
+
+
+ +
+ + {{contact_form.email.errors}} +
+
+
+ +
+ + {{contact_form.message.errors}} +
+
+
+
+
{% trans "Sorry, there was an unexpected error. Kindly retry." %}
+ +
+
+ + {% endif %} +
+
+
+
+
+
+ + + + {% include "ungleich_page/includes/_footer.html" %} + + + + + + + + + + + + + + + + + + + + From a5dea2b399f111e5f755fbf744da81f349b0515c Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Tue, 17 Oct 2017 09:30:52 +0200 Subject: [PATCH 050/111] Add ungleich_page cms_plugins and section templates --- ungleich_page/cms_plugins.py | 17 ++++ .../glasfaser/section_contact.html | 83 +++++++++++++++++++ .../glasfaser/section_with_image.html | 10 +++ 3 files changed, 110 insertions(+) create mode 100644 ungleich_page/cms_plugins.py create mode 100644 ungleich_page/templates/ungleich_page/glasfaser/section_contact.html create mode 100644 ungleich_page/templates/ungleich_page/glasfaser/section_with_image.html diff --git a/ungleich_page/cms_plugins.py b/ungleich_page/cms_plugins.py new file mode 100644 index 00000000..21c6f8d9 --- /dev/null +++ b/ungleich_page/cms_plugins.py @@ -0,0 +1,17 @@ +from cms.plugin_base import CMSPluginBase +from cms.plugin_pool import plugin_pool +from cms.models.pluginmodel import CMSPlugin + + +@plugin_pool.register_plugin +class SectionWithImagePlugin(CMSPluginBase): + model = CMSPlugin + render_template = "ungleich_page/glasfaser/section_with_image.html" + cache = False + + +@plugin_pool.register_plugin +class SectionContact(CMSPluginBase): + model = CMSPlugin + render_template = "ungleich_page/glasfaser/section_contact.html" + cache = False diff --git a/ungleich_page/templates/ungleich_page/glasfaser/section_contact.html b/ungleich_page/templates/ungleich_page/glasfaser/section_contact.html new file mode 100644 index 00000000..4fb74d8f --- /dev/null +++ b/ungleich_page/templates/ungleich_page/glasfaser/section_contact.html @@ -0,0 +1,83 @@ +{% load i18n %} + +
+
+
+
+
+
+

Kontakt

+
+
+
+

ungleich GmbH

+
+
+

glasfaser@ungleich.ch

+

In der Au 7, Schwanden 8762

+

Switzerland

+
+
+ +
+
+
+ {% if success %} +
+
+

{% trans "Thank you for contacting us." %}

+
+

+ {% trans "Your message was successfully sent to our team." %} +

+
+ {% else %} +
+
+
+

Senden Sie uns eine Nachricht.

+
+
+
+
+ {% csrf_token %} + +
+ +
+ + {{contact_form.name.errors}} +
+
+
+ +
+ + {{contact_form.email.errors}} +
+
+
+ +
+ + {{contact_form.message.errors}} +
+
+
+
+
{% trans "Sorry, there was an unexpected error. Kindly retry." %}
+ +
+
+ + {% endif %} +
+
+
+
+
+
\ No newline at end of file diff --git a/ungleich_page/templates/ungleich_page/glasfaser/section_with_image.html b/ungleich_page/templates/ungleich_page/glasfaser/section_with_image.html new file mode 100644 index 00000000..0990a3f2 --- /dev/null +++ b/ungleich_page/templates/ungleich_page/glasfaser/section_with_image.html @@ -0,0 +1,10 @@ +
+
+
+
+
+
+

TEST TEST

+
+
+
\ No newline at end of file From 8e76a1c6713b649f69f0541b8b72328d1812f9f1 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Tue, 17 Oct 2017 15:52:30 +0200 Subject: [PATCH 051/111] Set image and title dynamically --- ungleich_page/cms_plugins.py | 14 ++++++++++++-- ungleich_page/models.py | 14 ++++++++++++-- .../glasfaser/section_with_image.html | 7 ++----- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/ungleich_page/cms_plugins.py b/ungleich_page/cms_plugins.py index 21c6f8d9..8f2b1883 100644 --- a/ungleich_page/cms_plugins.py +++ b/ungleich_page/cms_plugins.py @@ -1,14 +1,24 @@ +from cms.models.pluginmodel import CMSPlugin from cms.plugin_base import CMSPluginBase from cms.plugin_pool import plugin_pool -from cms.models.pluginmodel import CMSPlugin + +from .models import UngelichPicture @plugin_pool.register_plugin class SectionWithImagePlugin(CMSPluginBase): - model = CMSPlugin + model = UngelichPicture render_template = "ungleich_page/glasfaser/section_with_image.html" cache = False + def render(self, context, instance, placeholder): + context.update({ + 'image': instance.image, + 'object': instance, + 'placeholder': placeholder + }) + return context + @plugin_pool.register_plugin class SectionContact(CMSPluginBase): diff --git a/ungleich_page/models.py b/ungleich_page/models.py index 0b4331b3..4199e6f7 100644 --- a/ungleich_page/models.py +++ b/ungleich_page/models.py @@ -1,3 +1,13 @@ -# from django.db import models +from cms.models.pluginmodel import CMSPlugin +from django.db import models +from filer.fields.image import FilerImageField -# Create your models here. + +class UngelichPicture(CMSPlugin): + image = FilerImageField( + null=True, + blank=True, + related_name="image", + on_delete=models.SET_NULL + ) + title = models.CharField(max_length=200) diff --git a/ungleich_page/templates/ungleich_page/glasfaser/section_with_image.html b/ungleich_page/templates/ungleich_page/glasfaser/section_with_image.html index 0990a3f2..b3477ffe 100644 --- a/ungleich_page/templates/ungleich_page/glasfaser/section_with_image.html +++ b/ungleich_page/templates/ungleich_page/glasfaser/section_with_image.html @@ -1,10 +1,7 @@ -
-
-
-
+
-

TEST TEST

+

{{ object.title }}

\ No newline at end of file From 4d485ef178f8acacef3c4109c88ff413e679fa6a Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Tue, 17 Oct 2017 15:58:27 +0200 Subject: [PATCH 052/111] Add initial ungleich_page migration --- ungleich_page/migrations/0001_initial.py | 32 ++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 ungleich_page/migrations/0001_initial.py diff --git a/ungleich_page/migrations/0001_initial.py b/ungleich_page/migrations/0001_initial.py new file mode 100644 index 00000000..2f7f8b69 --- /dev/null +++ b/ungleich_page/migrations/0001_initial.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.4 on 2017-10-17 13:41 +from __future__ import unicode_literals + +import django.db.models.deletion +import filer.fields.image +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('cms', '0014_auto_20160404_1908'), + ('filer', '0005_auto_20171017_1252'), + ] + + operations = [ + migrations.CreateModel( + name='UngelichPicture', + fields=[ + ('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')), + ('title', models.CharField(max_length=200)), + ('image', filer.fields.image.FilerImageField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='image', to='filer.Image')), + ], + options={ + 'abstract': False, + }, + bases=('cms.cmsplugin',), + ), + ] From a709485e77afdebdc0110114771bf38563f82935 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Tue, 17 Oct 2017 16:02:04 +0200 Subject: [PATCH 053/111] Add missing ids --- .../templates/ungleich_page/glasfaser/section_contact.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ungleich_page/templates/ungleich_page/glasfaser/section_contact.html b/ungleich_page/templates/ungleich_page/glasfaser/section_contact.html index 4fb74d8f..bc629f2a 100644 --- a/ungleich_page/templates/ungleich_page/glasfaser/section_contact.html +++ b/ungleich_page/templates/ungleich_page/glasfaser/section_contact.html @@ -49,14 +49,14 @@
- + {{contact_form.name.errors}}
- + {{contact_form.email.errors}}
From 98a9a35b4fa66965eafb5403eeb83d784d728a00 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Tue, 17 Oct 2017 16:23:37 +0200 Subject: [PATCH 054/111] Add 0002_ungleichcontactussection.py migration file --- .../0002_ungelichcontactussection.py | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 ungleich_page/migrations/0002_ungelichcontactussection.py diff --git a/ungleich_page/migrations/0002_ungelichcontactussection.py b/ungleich_page/migrations/0002_ungelichcontactussection.py new file mode 100644 index 00000000..2a7d63ab --- /dev/null +++ b/ungleich_page/migrations/0002_ungelichcontactussection.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.4 on 2017-10-17 14:10 +from __future__ import unicode_literals + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('cms', '0014_auto_20160404_1908'), + ('ungleich_page', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='UngelichContactUsSection', + fields=[ + ('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')), + ('email', models.EmailField(max_length=200)), + ], + options={ + 'abstract': False, + }, + bases=('cms.cmsplugin',), + ), + ] From 92086ad2ea2a10872627e9dcf11fcb4ce0c0276d Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Tue, 17 Oct 2017 16:24:19 +0200 Subject: [PATCH 055/111] Obtain email dynamically --- .../templates/ungleich_page/glasfaser/section_contact.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ungleich_page/templates/ungleich_page/glasfaser/section_contact.html b/ungleich_page/templates/ungleich_page/glasfaser/section_contact.html index bc629f2a..afc089b1 100644 --- a/ungleich_page/templates/ungleich_page/glasfaser/section_contact.html +++ b/ungleich_page/templates/ungleich_page/glasfaser/section_contact.html @@ -13,7 +13,7 @@

ungleich GmbH

-

glasfaser@ungleich.ch

+

{{instance.email}}

In der Au 7, Schwanden 8762

Switzerland

From ef47e999f1c5da26046c2c882f320733590de23d Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Tue, 17 Oct 2017 16:25:01 +0200 Subject: [PATCH 056/111] Create SectionContact CMSPlugin --- ungleich_page/cms_plugins.py | 5 ++--- ungleich_page/models.py | 4 ++++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/ungleich_page/cms_plugins.py b/ungleich_page/cms_plugins.py index 8f2b1883..30444d9f 100644 --- a/ungleich_page/cms_plugins.py +++ b/ungleich_page/cms_plugins.py @@ -1,8 +1,7 @@ -from cms.models.pluginmodel import CMSPlugin from cms.plugin_base import CMSPluginBase from cms.plugin_pool import plugin_pool -from .models import UngelichPicture +from .models import UngelichPicture, UngelichContactUsSection @plugin_pool.register_plugin @@ -22,6 +21,6 @@ class SectionWithImagePlugin(CMSPluginBase): @plugin_pool.register_plugin class SectionContact(CMSPluginBase): - model = CMSPlugin + model = UngelichContactUsSection render_template = "ungleich_page/glasfaser/section_contact.html" cache = False diff --git a/ungleich_page/models.py b/ungleich_page/models.py index 4199e6f7..3762a1aa 100644 --- a/ungleich_page/models.py +++ b/ungleich_page/models.py @@ -11,3 +11,7 @@ class UngelichPicture(CMSPlugin): on_delete=models.SET_NULL ) title = models.CharField(max_length=200) + + +class UngelichContactUsSection(CMSPlugin): + email = models.EmailField(max_length=200) From 27766329c944e349de55af5a83dcc00133fe2293 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Tue, 17 Oct 2017 17:46:08 +0200 Subject: [PATCH 057/111] Add dcl glasfaser text section templates --- .../ungleich_page/glasfaser/section_text_dcl.html | 12 ++++++++++++ .../glasfaser/section_text_glasfaser.html | 13 +++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 ungleich_page/templates/ungleich_page/glasfaser/section_text_dcl.html create mode 100644 ungleich_page/templates/ungleich_page/glasfaser/section_text_glasfaser.html diff --git a/ungleich_page/templates/ungleich_page/glasfaser/section_text_dcl.html b/ungleich_page/templates/ungleich_page/glasfaser/section_text_dcl.html new file mode 100644 index 00000000..54836fbc --- /dev/null +++ b/ungleich_page/templates/ungleich_page/glasfaser/section_text_dcl.html @@ -0,0 +1,12 @@ +
+
+
+
+

{{instance.title}}

+
+
+

{{instance.description}}

+
+
+
+
\ No newline at end of file diff --git a/ungleich_page/templates/ungleich_page/glasfaser/section_text_glasfaser.html b/ungleich_page/templates/ungleich_page/glasfaser/section_text_glasfaser.html new file mode 100644 index 00000000..edb035ce --- /dev/null +++ b/ungleich_page/templates/ungleich_page/glasfaser/section_text_glasfaser.html @@ -0,0 +1,13 @@ +
+
+
+
+

{{instance.title}}

+

+
+
+

{{instance.description}}

+
+
+
+
\ No newline at end of file From 14bbfe901def33e1b822ea7400291dad95e807fc Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Tue, 17 Oct 2017 17:47:40 +0200 Subject: [PATCH 058/111] Add SectionTextParagraphDCL and SectionTextParagraphGlasfaser --- ungleich_page/cms_plugins.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/ungleich_page/cms_plugins.py b/ungleich_page/cms_plugins.py index 30444d9f..a6c8747f 100644 --- a/ungleich_page/cms_plugins.py +++ b/ungleich_page/cms_plugins.py @@ -1,7 +1,9 @@ from cms.plugin_base import CMSPluginBase from cms.plugin_pool import plugin_pool -from .models import UngelichPicture, UngelichContactUsSection +from .models import ( + UngelichPicture, UngelichContactUsSection, UngelichTextSection +) @plugin_pool.register_plugin @@ -24,3 +26,17 @@ class SectionContact(CMSPluginBase): model = UngelichContactUsSection render_template = "ungleich_page/glasfaser/section_contact.html" cache = False + + +@plugin_pool.register_plugin +class SectionTextParagraphDCL(CMSPluginBase): + model = UngelichTextSection + render_template = "ungleich_page/glasfaser/section_text_dcl.html" + cache = False + + +@plugin_pool.register_plugin +class SectionTextParagraphGlasfaser(CMSPluginBase): + model = UngelichTextSection + render_template = "ungleich_page/glasfaser/section_text_glasfaser.html" + cache = False From e9142b17ae31897361647a8be1ac583215e9b757 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Tue, 17 Oct 2017 17:51:01 +0200 Subject: [PATCH 059/111] Add UngleichTextSection --- ungleich_page/models.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ungleich_page/models.py b/ungleich_page/models.py index 3762a1aa..c371020d 100644 --- a/ungleich_page/models.py +++ b/ungleich_page/models.py @@ -1,5 +1,6 @@ from cms.models.pluginmodel import CMSPlugin from django.db import models +from djangocms_text_ckeditor.fields import HTMLField from filer.fields.image import FilerImageField @@ -15,3 +16,8 @@ class UngelichPicture(CMSPlugin): class UngelichContactUsSection(CMSPlugin): email = models.EmailField(max_length=200) + + +class UngelichTextSection(CMSPlugin): + title = models.CharField(max_length=200) + description = HTMLField() From 36a9c386cb3f62d22130b02cd9339bce6b1659e5 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Tue, 17 Oct 2017 17:52:01 +0200 Subject: [PATCH 060/111] Add migrations --- .../migrations/0003_ungelichtextsection.py | 29 +++++++++++++++++++ .../migrations/0004_auto_20171017_1519.py | 21 ++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 ungleich_page/migrations/0003_ungelichtextsection.py create mode 100644 ungleich_page/migrations/0004_auto_20171017_1519.py diff --git a/ungleich_page/migrations/0003_ungelichtextsection.py b/ungleich_page/migrations/0003_ungelichtextsection.py new file mode 100644 index 00000000..549f9be8 --- /dev/null +++ b/ungleich_page/migrations/0003_ungelichtextsection.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.4 on 2017-10-17 14:47 +from __future__ import unicode_literals + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('cms', '0014_auto_20160404_1908'), + ('ungleich_page', '0002_ungelichcontactussection'), + ] + + operations = [ + migrations.CreateModel( + name='UngelichTextSection', + fields=[ + ('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')), + ('title', models.CharField(max_length=200)), + ('description', models.TextField()), + ], + options={ + 'abstract': False, + }, + bases=('cms.cmsplugin',), + ), + ] diff --git a/ungleich_page/migrations/0004_auto_20171017_1519.py b/ungleich_page/migrations/0004_auto_20171017_1519.py new file mode 100644 index 00000000..d0a88b61 --- /dev/null +++ b/ungleich_page/migrations/0004_auto_20171017_1519.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.4 on 2017-10-17 15:19 +from __future__ import unicode_literals + +import djangocms_text_ckeditor.fields +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('ungleich_page', '0003_ungelichtextsection'), + ] + + operations = [ + migrations.AlterField( + model_name='ungelichtextsection', + name='description', + field=djangocms_text_ckeditor.fields.HTMLField(), + ), + ] From 4cba13a509fa2a6cfe0bf7a4f24300e0fb4cdcf4 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Tue, 17 Oct 2017 23:31:57 +0200 Subject: [PATCH 061/111] Add div space for price tag container --- .../templates/ungleich_page/glasfaser/section_with_image.html | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ungleich_page/templates/ungleich_page/glasfaser/section_with_image.html b/ungleich_page/templates/ungleich_page/glasfaser/section_with_image.html index b3477ffe..3673ced0 100644 --- a/ungleich_page/templates/ungleich_page/glasfaser/section_with_image.html +++ b/ungleich_page/templates/ungleich_page/glasfaser/section_with_image.html @@ -1,4 +1,7 @@
+
+
+

{{ object.title }}

From 77d92719d318556ba84dc484f076da714dd90b16 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Tue, 17 Oct 2017 23:39:41 +0200 Subject: [PATCH 062/111] Add glasfaser cms.css --- ungleich_page/static/ungleich_page/css/cms.css | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 ungleich_page/static/ungleich_page/css/cms.css diff --git a/ungleich_page/static/ungleich_page/css/cms.css b/ungleich_page/static/ungleich_page/css/cms.css new file mode 100644 index 00000000..d899cf6f --- /dev/null +++ b/ungleich_page/static/ungleich_page/css/cms.css @@ -0,0 +1,6 @@ +.lead, .split-description.wow.fadeInUp p{ + font-family: "Raleway" , "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 21px; + color: #3a3a3a; + font-weight: 300 !important; +} \ No newline at end of file From f610a1869197990c4ec84b14f5f8488211f277cf Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Tue, 17 Oct 2017 23:40:58 +0200 Subject: [PATCH 063/111] Add glasfaser cms.css --- ungleich_page/templates/ungleich_page/glasfaser_cms_page.html | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ungleich_page/templates/ungleich_page/glasfaser_cms_page.html b/ungleich_page/templates/ungleich_page/glasfaser_cms_page.html index a218090b..7d9a1b0a 100644 --- a/ungleich_page/templates/ungleich_page/glasfaser_cms_page.html +++ b/ungleich_page/templates/ungleich_page/glasfaser_cms_page.html @@ -30,6 +30,9 @@ + {% addtoblock "css" %} + + {% endaddtoblock %} {% render_block "css" postprocessor "compressor.contrib.sekizai.compress" %} {% render_block "js" postprocessor "compressor.contrib.sekizai.compress" %} From d42e2d6e39994928a2fa89df9120335ba44696bb Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Tue, 17 Oct 2017 23:56:28 +0200 Subject: [PATCH 064/111] Make all migrations into one file --- ungleich_page/migrations/0001_initial.py | 32 +++++++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/ungleich_page/migrations/0001_initial.py b/ungleich_page/migrations/0001_initial.py index 2f7f8b69..ae87b951 100644 --- a/ungleich_page/migrations/0001_initial.py +++ b/ungleich_page/migrations/0001_initial.py @@ -1,10 +1,11 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9.4 on 2017-10-17 13:41 +# Generated by Django 1.9.4 on 2017-10-17 21:49 from __future__ import unicode_literals -import django.db.models.deletion -import filer.fields.image from django.db import migrations, models +import django.db.models.deletion +import djangocms_text_ckeditor.fields +import filer.fields.image class Migration(migrations.Migration): @@ -13,10 +14,21 @@ class Migration(migrations.Migration): dependencies = [ ('cms', '0014_auto_20160404_1908'), - ('filer', '0005_auto_20171017_1252'), + ('filer', '0004_auto_20160328_1434'), ] operations = [ + migrations.CreateModel( + name='UngelichContactUsSection', + fields=[ + ('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')), + ('email', models.EmailField(max_length=200)), + ], + options={ + 'abstract': False, + }, + bases=('cms.cmsplugin',), + ), migrations.CreateModel( name='UngelichPicture', fields=[ @@ -29,4 +41,16 @@ class Migration(migrations.Migration): }, bases=('cms.cmsplugin',), ), + migrations.CreateModel( + name='UngelichTextSection', + fields=[ + ('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')), + ('title', models.CharField(max_length=200)), + ('description', djangocms_text_ckeditor.fields.HTMLField()), + ], + options={ + 'abstract': False, + }, + bases=('cms.cmsplugin',), + ), ] From 4fcc24d8b79fc195612b765f26cd302bfab93a60 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Tue, 17 Oct 2017 23:57:12 +0200 Subject: [PATCH 065/111] Delete unnecessary migration files --- .../0002_ungelichcontactussection.py | 28 ------------------ .../migrations/0003_ungelichtextsection.py | 29 ------------------- .../migrations/0004_auto_20171017_1519.py | 21 -------------- 3 files changed, 78 deletions(-) delete mode 100644 ungleich_page/migrations/0002_ungelichcontactussection.py delete mode 100644 ungleich_page/migrations/0003_ungelichtextsection.py delete mode 100644 ungleich_page/migrations/0004_auto_20171017_1519.py diff --git a/ungleich_page/migrations/0002_ungelichcontactussection.py b/ungleich_page/migrations/0002_ungelichcontactussection.py deleted file mode 100644 index 2a7d63ab..00000000 --- a/ungleich_page/migrations/0002_ungelichcontactussection.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.4 on 2017-10-17 14:10 -from __future__ import unicode_literals - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('cms', '0014_auto_20160404_1908'), - ('ungleich_page', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='UngelichContactUsSection', - fields=[ - ('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')), - ('email', models.EmailField(max_length=200)), - ], - options={ - 'abstract': False, - }, - bases=('cms.cmsplugin',), - ), - ] diff --git a/ungleich_page/migrations/0003_ungelichtextsection.py b/ungleich_page/migrations/0003_ungelichtextsection.py deleted file mode 100644 index 549f9be8..00000000 --- a/ungleich_page/migrations/0003_ungelichtextsection.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.4 on 2017-10-17 14:47 -from __future__ import unicode_literals - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('cms', '0014_auto_20160404_1908'), - ('ungleich_page', '0002_ungelichcontactussection'), - ] - - operations = [ - migrations.CreateModel( - name='UngelichTextSection', - fields=[ - ('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')), - ('title', models.CharField(max_length=200)), - ('description', models.TextField()), - ], - options={ - 'abstract': False, - }, - bases=('cms.cmsplugin',), - ), - ] diff --git a/ungleich_page/migrations/0004_auto_20171017_1519.py b/ungleich_page/migrations/0004_auto_20171017_1519.py deleted file mode 100644 index d0a88b61..00000000 --- a/ungleich_page/migrations/0004_auto_20171017_1519.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.4 on 2017-10-17 15:19 -from __future__ import unicode_literals - -import djangocms_text_ckeditor.fields -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('ungleich_page', '0003_ungelichtextsection'), - ] - - operations = [ - migrations.AlterField( - model_name='ungelichtextsection', - name='description', - field=djangocms_text_ckeditor.fields.HTMLField(), - ), - ] From 97ba0bafd351b6b3b65a46ac9e4e77034a034c3d Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Wed, 18 Oct 2017 00:12:48 +0200 Subject: [PATCH 066/111] Define various sections in glasfaser cms template --- .../ungleich_page/glasfaser_cms_page.html | 116 +----------------- 1 file changed, 5 insertions(+), 111 deletions(-) diff --git a/ungleich_page/templates/ungleich_page/glasfaser_cms_page.html b/ungleich_page/templates/ungleich_page/glasfaser_cms_page.html index 7d9a1b0a..2e167109 100644 --- a/ungleich_page/templates/ungleich_page/glasfaser_cms_page.html +++ b/ungleich_page/templates/ungleich_page/glasfaser_cms_page.html @@ -76,36 +76,11 @@
- {% placeholder 'one' %} + {% placeholder 'Top Section' %} + + {% placeholder 'Middle Section' %} + -
-
-
-
-

{% placeholder 'glasfaser_cms_page_text' %}

-
-
-

Surfen Sie mit 100 Mbit/s im Internet!

-

Mit dem neuen Glasfaser-Angebot der ungleich macht das Arbeiten im Internet richtig Spass. Das beste daran: die Geschwindigkeit symmetrisch in beide Richtungen verfügbar. Damit kann ihr Firmennetzwerk auch Dienste bereitstellen.

-

Dieses Angebot ist im Moment ausschliesslich für Firmenkunden verfügbar. Die Aufschaltkosten der Glasfaserleitung sind von der Entfernung zum nächsten Anschlusspunkt abhängig. Fragen Sie noch heute nach einem individuellem Angebot.

-
-
-
-
-
-
-
-
-

Was ist es?

-

-
-
-

Bei diesem Angebot handelt es sich um einen Internetzugang für Firmenkunden.

-

Sie erhalten in Zusammenarbeit mit unseren Partnern einen Glasfaseranschluss und eine Internetverbindung.

-
-
-
-
@@ -205,88 +180,7 @@
-
-
-
-
-
-
-

Kontakt

-
-
-
-

ungleich GmbH

-
-
-

glasfaser@ungleich.ch

-

In der Au 7, Schwanden 8762

-

Switzerland

-
-
- -
-
-
- {% if success %} -
-
-

{% trans "Thank you for contacting us." %}

-
-

- {% trans "Your message was successfully sent to our team." %} -

-
- {% else %} -
-
-
-

Senden Sie uns eine Nachricht.

-
-
-
-
- {% csrf_token %} - -
- -
- - {{contact_form.name.errors}} -
-
-
- -
- - {{contact_form.email.errors}} -
-
-
- -
- - {{contact_form.message.errors}} -
-
-
-
-
{% trans "Sorry, there was an unexpected error. Kindly retry." %}
- -
-
- - {% endif %} -
-
-
-
-
-
- + {% placeholder 'Contact Section' %} {% include "ungleich_page/includes/_footer.html" %} From f6468a7c8c6882d6a76c494308a3afcb8bfc76e4 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Wed, 18 Oct 2017 09:10:50 +0200 Subject: [PATCH 067/111] First attempt to services section - base.py: add settings to load GlasfaserServicesPlugin by default - glasfaser_cms_page.html: create a placeholder for services - cms_plugins.py: add the plugin code - models.py: add UngelichTextSectionWithImage model --- dynamicweb/settings/base.py | 9 ++++ ungleich_page/cms_plugins.py | 18 +++++++- ungleich_page/models.py | 9 ++++ .../ungleich_page/glasfaser_cms_page.html | 43 +------------------ 4 files changed, 36 insertions(+), 43 deletions(-) diff --git a/dynamicweb/settings/base.py b/dynamicweb/settings/base.py index 58e9065a..611439cd 100644 --- a/dynamicweb/settings/base.py +++ b/dynamicweb/settings/base.py @@ -321,6 +321,15 @@ CMS_PLACEHOLDER_CONF = { }, ] }, + 'glasfaser_services': { + 'name': "Services", + 'plugins': ['GlasfaserServicesPlugin'], + 'default_plugins': [ + { + 'plugin_type': 'GlasfaserServicesPlugin', + }, + ] + }, } CACHES = { diff --git a/ungleich_page/cms_plugins.py b/ungleich_page/cms_plugins.py index a6c8747f..1731a7f4 100644 --- a/ungleich_page/cms_plugins.py +++ b/ungleich_page/cms_plugins.py @@ -2,7 +2,8 @@ from cms.plugin_base import CMSPluginBase from cms.plugin_pool import plugin_pool from .models import ( - UngelichPicture, UngelichContactUsSection, UngelichTextSection + UngelichPicture, UngelichContactUsSection, UngelichTextSection, + UngelichTextSectionWithImage ) @@ -40,3 +41,18 @@ class SectionTextParagraphGlasfaser(CMSPluginBase): model = UngelichTextSection render_template = "ungleich_page/glasfaser/section_text_glasfaser.html" cache = False + + +@plugin_pool.register_plugin +class GlasfaserServicesPlugin(CMSPluginBase): + model = UngelichTextSectionWithImage + render_template = "ungleich_page/glasfaser/section_services.html" + cache = False + + def render(self, context, instance, placeholder): + context.update({ + 'image': instance.image, + 'object': instance, + 'placeholder': placeholder + }) + return context diff --git a/ungleich_page/models.py b/ungleich_page/models.py index c371020d..e5916f18 100644 --- a/ungleich_page/models.py +++ b/ungleich_page/models.py @@ -21,3 +21,12 @@ class UngelichContactUsSection(CMSPlugin): class UngelichTextSection(CMSPlugin): title = models.CharField(max_length=200) description = HTMLField() + + +class UngelichTextSectionWithImage(UngelichTextSection): + image = FilerImageField( + null=True, + blank=True, + related_name="utswi_image", + on_delete=models.SET_NULL + ) \ No newline at end of file diff --git a/ungleich_page/templates/ungleich_page/glasfaser_cms_page.html b/ungleich_page/templates/ungleich_page/glasfaser_cms_page.html index 2e167109..dc5811ea 100644 --- a/ungleich_page/templates/ungleich_page/glasfaser_cms_page.html +++ b/ungleich_page/templates/ungleich_page/glasfaser_cms_page.html @@ -80,48 +80,7 @@ {% placeholder 'Middle Section' %} - - -
-
-
-

Technische Details

-

Im Angebot enthalten sind

-
-
-
-
- -
-

Business-Internet

-

Symmetrische Internetleitung 100 Mbit/s upload und 100 Mbit/s download

-

Glasfaser-Installation bis ins Haus (keine Hausverkabelung)

-
-
-
-
-
- -
-

Erreichbarkeit im Internet

-

1 öffentliches IPv6-Netzwerk (/64)

-

1 öffentliche IPv4-Adresse

-
-
-
-
-
- -
-

Einfach zu nutzen

-

2 vorkonfigurierte Endgeräte (benötigt zwei Steckdosen auf Ihrer Seite)

-

Einfach einstecken und los!

-
-
-
-
-
-
+ {% placeholder 'Glasfaser Services' %}
From 977966f3ba7d58a2a9f1b06b1a3c2520ceb04e7c Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Wed, 18 Oct 2017 09:11:31 +0200 Subject: [PATCH 068/111] Add glasfaser_services.html --- .../glasfaser/section_services.html | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 ungleich_page/templates/ungleich_page/glasfaser/section_services.html diff --git a/ungleich_page/templates/ungleich_page/glasfaser/section_services.html b/ungleich_page/templates/ungleich_page/glasfaser/section_services.html new file mode 100644 index 00000000..03e48051 --- /dev/null +++ b/ungleich_page/templates/ungleich_page/glasfaser/section_services.html @@ -0,0 +1,49 @@ +{% load static i18n cms_tags %} +{% with total_plugins=instance.get_plugins_list|length %} +

There's {{ total_plugins }} here !!!

+{% endwith %} + +{% for plugins in placeholder "glasfaser_services" %} + +{% endfor %} + +
+
+
+

Technische Details

+

Im Angebot enthalten sind

+
+
+
+
+ +
+

Business-Internet

+

Symmetrische Internetleitung 100 Mbit/s upload und 100 Mbit/s download

+

Glasfaser-Installation bis ins Haus (keine Hausverkabelung)

+
+
+
+
+
+ +
+

Erreichbarkeit im Internet

+

1 öffentliches IPv6-Netzwerk (/64)

+

1 öffentliche IPv4-Adresse

+
+
+
+
+
+ +
+

Einfach zu nutzen

+

2 vorkonfigurierte Endgeräte (benötigt zwei Steckdosen auf Ihrer Seite)

+

Einfach einstecken und los!

+
+
+
+
+
+
\ No newline at end of file From a9e97a8bc6dcf1c4ea34cabb306cd7f4fdcccfa9 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Wed, 18 Oct 2017 09:14:05 +0200 Subject: [PATCH 069/111] Add UngelichTextSectionWithImage migration --- .../0002_ungelichtextsectionwithimage.py | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 ungleich_page/migrations/0002_ungelichtextsectionwithimage.py diff --git a/ungleich_page/migrations/0002_ungelichtextsectionwithimage.py b/ungleich_page/migrations/0002_ungelichtextsectionwithimage.py new file mode 100644 index 00000000..9695e82e --- /dev/null +++ b/ungleich_page/migrations/0002_ungelichtextsectionwithimage.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.4 on 2017-10-17 22:42 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion +import filer.fields.image + + +class Migration(migrations.Migration): + + dependencies = [ + ('filer', '0004_auto_20160328_1434'), + ('ungleich_page', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='UngelichTextSectionWithImage', + fields=[ + ('ungelichtextsection_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='ungleich_page.UngelichTextSection')), + ('image', filer.fields.image.FilerImageField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='utswi_image', to='filer.Image')), + ], + options={ + 'abstract': False, + }, + bases=('ungleich_page.ungelichtextsection',), + ), + ] From ef0ab2d24aa1a31e3b9c8a0e594e31fb2022a60a Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Wed, 18 Oct 2017 11:05:47 +0200 Subject: [PATCH 070/111] Add missing styles to intro section --- .../templates/ungleich_page/glasfaser/section_with_image.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ungleich_page/templates/ungleich_page/glasfaser/section_with_image.html b/ungleich_page/templates/ungleich_page/glasfaser/section_with_image.html index 3673ced0..207d7ec4 100644 --- a/ungleich_page/templates/ungleich_page/glasfaser/section_with_image.html +++ b/ungleich_page/templates/ungleich_page/glasfaser/section_with_image.html @@ -1,4 +1,4 @@ -
+
From d05ef79ecce686e6699cc7d6d07396de3049ef43 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Wed, 18 Oct 2017 15:43:12 +0200 Subject: [PATCH 071/111] Add Service and ServiceItem models and corresponding migration --- ungleich_page/migrations/0001_initial.py | 30 ++++++++++++++++++++++-- ungleich_page/models.py | 23 +++++++++++++++--- 2 files changed, 48 insertions(+), 5 deletions(-) diff --git a/ungleich_page/migrations/0001_initial.py b/ungleich_page/migrations/0001_initial.py index ae87b951..c40ccf40 100644 --- a/ungleich_page/migrations/0001_initial.py +++ b/ungleich_page/migrations/0001_initial.py @@ -1,11 +1,11 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9.4 on 2017-10-17 21:49 +# Generated by Django 1.9.4 on 2017-10-18 13:40 from __future__ import unicode_literals -from django.db import migrations, models import django.db.models.deletion import djangocms_text_ckeditor.fields import filer.fields.image +from django.db import migrations, models class Migration(migrations.Migration): @@ -18,6 +18,32 @@ class Migration(migrations.Migration): ] operations = [ + migrations.CreateModel( + name='Service', + fields=[ + ('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')), + ('title', models.CharField(max_length=200)), + ('sub_title', models.CharField(max_length=200)), + ], + options={ + 'abstract': False, + }, + bases=('cms.cmsplugin',), + ), + migrations.CreateModel( + name='ServiceItem', + fields=[ + ('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')), + ('title', models.CharField(max_length=200)), + ('description', djangocms_text_ckeditor.fields.HTMLField()), + ('glasfaser_service', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ungleich_page.Service')), + ('image', filer.fields.image.FilerImageField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='service_item_image', to='filer.Image')), + ], + options={ + 'abstract': False, + }, + bases=('cms.cmsplugin',), + ), migrations.CreateModel( name='UngelichContactUsSection', fields=[ diff --git a/ungleich_page/models.py b/ungleich_page/models.py index e5916f18..f961e373 100644 --- a/ungleich_page/models.py +++ b/ungleich_page/models.py @@ -23,10 +23,27 @@ class UngelichTextSection(CMSPlugin): description = HTMLField() -class UngelichTextSectionWithImage(UngelichTextSection): +class Service(CMSPlugin): + title = models.CharField(max_length=200) + sub_title = models.CharField(max_length=200) + + def __str__(self): + return self.title + + +class ServiceItem(CMSPlugin): image = FilerImageField( null=True, blank=True, - related_name="utswi_image", + related_name="service_item_image", on_delete=models.SET_NULL - ) \ No newline at end of file + ) + title = models.CharField(max_length=200) + description = HTMLField() + glasfaser_service = models.ForeignKey(Service) + + def __str__(self): + return self.title + + def copy_relations(self, oldinstance): + self.glasfaser_service = oldinstance.glasfaser_service From a8c49b7fde52df8c1d447ae1d5b86b6500585386 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Wed, 18 Oct 2017 15:44:18 +0200 Subject: [PATCH 072/111] Delete 0002_ungleichtextsectionwithimage.py --- .../0002_ungelichtextsectionwithimage.py | 29 ------------------- 1 file changed, 29 deletions(-) delete mode 100644 ungleich_page/migrations/0002_ungelichtextsectionwithimage.py diff --git a/ungleich_page/migrations/0002_ungelichtextsectionwithimage.py b/ungleich_page/migrations/0002_ungelichtextsectionwithimage.py deleted file mode 100644 index 9695e82e..00000000 --- a/ungleich_page/migrations/0002_ungelichtextsectionwithimage.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.4 on 2017-10-17 22:42 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion -import filer.fields.image - - -class Migration(migrations.Migration): - - dependencies = [ - ('filer', '0004_auto_20160328_1434'), - ('ungleich_page', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='UngelichTextSectionWithImage', - fields=[ - ('ungelichtextsection_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='ungleich_page.UngelichTextSection')), - ('image', filer.fields.image.FilerImageField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='utswi_image', to='filer.Image')), - ], - options={ - 'abstract': False, - }, - bases=('ungleich_page.ungelichtextsection',), - ), - ] From 9c07565b73852bd80b34056ebf96421955507ea5 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Wed, 18 Oct 2017 15:46:57 +0200 Subject: [PATCH 073/111] Add section_services.html and section_services_item.html --- .../glasfaser/section_services.html | 48 ++++--------------- 1 file changed, 8 insertions(+), 40 deletions(-) diff --git a/ungleich_page/templates/ungleich_page/glasfaser/section_services.html b/ungleich_page/templates/ungleich_page/glasfaser/section_services.html index 03e48051..ae7ef31c 100644 --- a/ungleich_page/templates/ungleich_page/glasfaser/section_services.html +++ b/ungleich_page/templates/ungleich_page/glasfaser/section_services.html @@ -1,49 +1,17 @@ {% load static i18n cms_tags %} -{% with total_plugins=instance.get_plugins_list|length %} -

There's {{ total_plugins }} here !!!

-{% endwith %} - -{% for plugins in placeholder "glasfaser_services" %} - -{% endfor %} -
-

Technische Details

-

Im Angebot enthalten sind

+

{{ service_instance.title }}

+

{{ service_instance.sub_title }}

-
-
- -
-

Business-Internet

-

Symmetrische Internetleitung 100 Mbit/s upload und 100 Mbit/s download

-

Glasfaser-Installation bis ins Haus (keine Hausverkabelung)

-
-
-
-
-
- -
-

Erreichbarkeit im Internet

-

1 öffentliches IPv6-Netzwerk (/64)

-

1 öffentliche IPv4-Adresse

-
-
-
-
-
- -
-

Einfach zu nutzen

-

2 vorkonfigurierte Endgeräte (benötigt zwei Steckdosen auf Ihrer Seite)

-

Einfach einstecken und los!

-
-
-
+ {% for plugin in service_instance.child_plugin_instances %} +
+ {% render_plugin plugin %} +
+ {% endfor %} +
\ No newline at end of file From f3e4ede52e22033be16cd24c5e23a5b3fa562160 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Wed, 18 Oct 2017 15:48:01 +0200 Subject: [PATCH 074/111] Add section_services_item.html --- .../ungleich_page/glasfaser/section_services_item.html | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 ungleich_page/templates/ungleich_page/glasfaser/section_services_item.html diff --git a/ungleich_page/templates/ungleich_page/glasfaser/section_services_item.html b/ungleich_page/templates/ungleich_page/glasfaser/section_services_item.html new file mode 100644 index 00000000..e2433953 --- /dev/null +++ b/ungleich_page/templates/ungleich_page/glasfaser/section_services_item.html @@ -0,0 +1,7 @@ +
+ +
+

{{ instance.title }}

+

{{ instance.description }}

+
+
\ No newline at end of file From cfcc3e0eb14cf916d7a20d38fff4087ae34707d5 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Wed, 18 Oct 2017 15:51:47 +0200 Subject: [PATCH 075/111] Add GlasfaserServicesPlugin and GlasfaserServicesItemPlugin --- ungleich_page/cms_plugins.py | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/ungleich_page/cms_plugins.py b/ungleich_page/cms_plugins.py index 1731a7f4..6314585d 100644 --- a/ungleich_page/cms_plugins.py +++ b/ungleich_page/cms_plugins.py @@ -2,8 +2,8 @@ from cms.plugin_base import CMSPluginBase from cms.plugin_pool import plugin_pool from .models import ( - UngelichPicture, UngelichContactUsSection, UngelichTextSection, - UngelichTextSectionWithImage + UngelichPicture, UngelichContactUsSection, UngelichTextSection, Service, + ServiceItem ) @@ -45,14 +45,27 @@ class SectionTextParagraphGlasfaser(CMSPluginBase): @plugin_pool.register_plugin class GlasfaserServicesPlugin(CMSPluginBase): - model = UngelichTextSectionWithImage + name = "Glasfaser Services Plugin" + model = Service render_template = "ungleich_page/glasfaser/section_services.html" cache = False + allow_children = True + child_classes = ['GlasfaserServicesItemPlugin'] def render(self, context, instance, placeholder): - context.update({ - 'image': instance.image, - 'object': instance, - 'placeholder': placeholder - }) + context['service_instance'] = instance + return context + + +@plugin_pool.register_plugin +class GlasfaserServicesItemPlugin(CMSPluginBase): + name = "Glasfaser Service Item Plugin" + model = ServiceItem + render_template = "ungleich_page/glasfaser/section_services_item.html" + cache = False + require_parent = True + parent_classes = ['GlasfaserServicesPlugin'] + + def render(self, context, instance, placeholder): + context['instance'] = instance return context From 9ff5b4015f18d204c8aa21258a5bbb0b0f38bd8c Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Wed, 18 Oct 2017 15:58:50 +0200 Subject: [PATCH 076/111] Rename section_services_item.html to _services_item.html --- ungleich_page/cms_plugins.py | 2 +- .../{section_services_item.html => _services_item.html} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename ungleich_page/templates/ungleich_page/glasfaser/{section_services_item.html => _services_item.html} (100%) diff --git a/ungleich_page/cms_plugins.py b/ungleich_page/cms_plugins.py index 6314585d..75e3b698 100644 --- a/ungleich_page/cms_plugins.py +++ b/ungleich_page/cms_plugins.py @@ -61,7 +61,7 @@ class GlasfaserServicesPlugin(CMSPluginBase): class GlasfaserServicesItemPlugin(CMSPluginBase): name = "Glasfaser Service Item Plugin" model = ServiceItem - render_template = "ungleich_page/glasfaser/section_services_item.html" + render_template = "ungleich_page/glasfaser/_services_item.html" cache = False require_parent = True parent_classes = ['GlasfaserServicesPlugin'] diff --git a/ungleich_page/templates/ungleich_page/glasfaser/section_services_item.html b/ungleich_page/templates/ungleich_page/glasfaser/_services_item.html similarity index 100% rename from ungleich_page/templates/ungleich_page/glasfaser/section_services_item.html rename to ungleich_page/templates/ungleich_page/glasfaser/_services_item.html From 5e2d1966f8f66cc1e25ea5e456c3e08c36100b2a Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Wed, 18 Oct 2017 16:53:05 +0200 Subject: [PATCH 077/111] Add section_about and _about_item templates --- .../ungleich_page/glasfaser/_about_item.html | 10 ++++++++++ .../ungleich_page/glasfaser/section_about.html | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 ungleich_page/templates/ungleich_page/glasfaser/_about_item.html create mode 100644 ungleich_page/templates/ungleich_page/glasfaser/section_about.html diff --git a/ungleich_page/templates/ungleich_page/glasfaser/_about_item.html b/ungleich_page/templates/ungleich_page/glasfaser/_about_item.html new file mode 100644 index 00000000..fee322d4 --- /dev/null +++ b/ungleich_page/templates/ungleich_page/glasfaser/_about_item.html @@ -0,0 +1,10 @@ +
  • +
    + +
    +
    +
    +

    {{ instance.title }}

    +
    +
    +
  • \ No newline at end of file diff --git a/ungleich_page/templates/ungleich_page/glasfaser/section_about.html b/ungleich_page/templates/ungleich_page/glasfaser/section_about.html new file mode 100644 index 00000000..e9c811ce --- /dev/null +++ b/ungleich_page/templates/ungleich_page/glasfaser/section_about.html @@ -0,0 +1,18 @@ +{% load cms_tags %} +
    +
    +
    +

    {{ about_instance.title }}

    +

    {{ about_instance.sub_title }}

    +
    +
    +
    +
      + {% for plugin in about_instance.child_plugin_instances %} + {% render_plugin plugin %} + {% endfor %} +
    +
    +
    +
    +
    \ No newline at end of file From 04e72696f1b6ad5434298f8429cbfe6587d3b84d Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Wed, 18 Oct 2017 16:53:32 +0200 Subject: [PATCH 078/111] Add About and AboutItem models --- ungleich_page/models.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/ungleich_page/models.py b/ungleich_page/models.py index f961e373..57201f9d 100644 --- a/ungleich_page/models.py +++ b/ungleich_page/models.py @@ -11,7 +11,7 @@ class UngelichPicture(CMSPlugin): related_name="image", on_delete=models.SET_NULL ) - title = models.CharField(max_length=200) + title = models.CharField(max_length=400) class UngelichContactUsSection(CMSPlugin): @@ -47,3 +47,21 @@ class ServiceItem(CMSPlugin): def copy_relations(self, oldinstance): self.glasfaser_service = oldinstance.glasfaser_service + + +class About(Service): + pass + + +class AboutItem(UngelichPicture): + inverted = models.BooleanField(default=False) + glasfaser_about = models.ForeignKey(About) + + def __str__(self): + alignment = "Right" if self.inverted else "Left" + return "{alignment} - {title}".format( + alignment=alignment, title=self.title + ) + + def copy_relations(self, oldinstance): + self.glasfaser_about = oldinstance.glasfaser_about From 621424f182f5d2651f44d1b497eea53ca79cc424 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Wed, 18 Oct 2017 16:56:00 +0200 Subject: [PATCH 079/111] Add updated migration file --- ungleich_page/migrations/0001_initial.py | 44 +++++++++++++++++++++--- 1 file changed, 39 insertions(+), 5 deletions(-) diff --git a/ungleich_page/migrations/0001_initial.py b/ungleich_page/migrations/0001_initial.py index c40ccf40..41919cba 100644 --- a/ungleich_page/migrations/0001_initial.py +++ b/ungleich_page/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9.4 on 2017-10-18 13:40 +# Generated by Django 1.9.4 on 2017-10-18 14:43 from __future__ import unicode_literals import django.db.models.deletion @@ -36,8 +36,6 @@ class Migration(migrations.Migration): ('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')), ('title', models.CharField(max_length=200)), ('description', djangocms_text_ckeditor.fields.HTMLField()), - ('glasfaser_service', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ungleich_page.Service')), - ('image', filer.fields.image.FilerImageField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='service_item_image', to='filer.Image')), ], options={ 'abstract': False, @@ -59,8 +57,7 @@ class Migration(migrations.Migration): name='UngelichPicture', fields=[ ('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')), - ('title', models.CharField(max_length=200)), - ('image', filer.fields.image.FilerImageField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='image', to='filer.Image')), + ('title', models.CharField(max_length=400)), ], options={ 'abstract': False, @@ -79,4 +76,41 @@ class Migration(migrations.Migration): }, bases=('cms.cmsplugin',), ), + migrations.CreateModel( + name='About', + fields=[ + ('service_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='ungleich_page.Service')), + ], + options={ + 'abstract': False, + }, + bases=('ungleich_page.service',), + ), + migrations.CreateModel( + name='AboutItem', + fields=[ + ('ungelichpicture_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='ungleich_page.UngelichPicture')), + ('inverted', models.BooleanField(default=False)), + ('glasfaser_about', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ungleich_page.About')), + ], + options={ + 'abstract': False, + }, + bases=('ungleich_page.ungelichpicture',), + ), + migrations.AddField( + model_name='ungelichpicture', + name='image', + field=filer.fields.image.FilerImageField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='image', to='filer.Image'), + ), + migrations.AddField( + model_name='serviceitem', + name='glasfaser_service', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ungleich_page.Service'), + ), + migrations.AddField( + model_name='serviceitem', + name='image', + field=filer.fields.image.FilerImageField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='service_item_image', to='filer.Image'), + ), ] From 609501f9876f1c1edb2128ab432eab0346002fe2 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Wed, 18 Oct 2017 16:56:41 +0200 Subject: [PATCH 080/111] Add GlasfaserAboutPlugin and GlasfaserAboutItemPlugin --- ungleich_page/cms_plugins.py | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/ungleich_page/cms_plugins.py b/ungleich_page/cms_plugins.py index 75e3b698..ba82801e 100644 --- a/ungleich_page/cms_plugins.py +++ b/ungleich_page/cms_plugins.py @@ -3,7 +3,7 @@ from cms.plugin_pool import plugin_pool from .models import ( UngelichPicture, UngelichContactUsSection, UngelichTextSection, Service, - ServiceItem + ServiceItem, About, AboutItem ) @@ -69,3 +69,31 @@ class GlasfaserServicesItemPlugin(CMSPluginBase): def render(self, context, instance, placeholder): context['instance'] = instance return context + + +@plugin_pool.register_plugin +class GlasfaserAboutPlugin(CMSPluginBase): + name = "Glasfaser About Plugin" + model = About + render_template = "ungleich_page/glasfaser/section_about.html" + cache = False + allow_children = True + child_classes = ['GlasfaserAboutItemPlugin'] + + def render(self, context, instance, placeholder): + context['about_instance'] = instance + return context + + +@plugin_pool.register_plugin +class GlasfaserAboutItemPlugin(CMSPluginBase): + name = "Glasfaser About Item Plugin" + model = AboutItem + render_template = "ungleich_page/glasfaser/_about_item.html" + cache = False + require_parent = True + parent_classes = ['GlasfaserAboutPlugin'] + + def render(self, context, instance, placeholder): + context['instance'] = instance + return context From c753d3061db13652805abeb906b086140f952180 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Wed, 18 Oct 2017 16:57:15 +0200 Subject: [PATCH 081/111] Refactor glasfaser_cms_page.html template --- .../ungleich_page/glasfaser_cms_page.html | 63 ++----------------- 1 file changed, 4 insertions(+), 59 deletions(-) diff --git a/ungleich_page/templates/ungleich_page/glasfaser_cms_page.html b/ungleich_page/templates/ungleich_page/glasfaser_cms_page.html index dc5811ea..a804ec73 100644 --- a/ungleich_page/templates/ungleich_page/glasfaser_cms_page.html +++ b/ungleich_page/templates/ungleich_page/glasfaser_cms_page.html @@ -76,69 +76,14 @@
    - {% placeholder 'Top Section' %} + {% placeholder 'Top Section' %} - {% placeholder 'Middle Section' %} + {% placeholder 'Middle Section' %} - {% placeholder 'Glasfaser Services' %} + {% placeholder 'Glasfaser Services' %} - -
    -
    -
    -

    Wie funktioniert es?

    -

    So kommen Sie in wenigen einfachen Schritten zu Ihrem High-Speed-Internet

    -
    -
    -
    -
      -
    • -
      - -
      -
      -
      -

      Senden Sie uns via E-Mail Ihren Firmennamen und Ihre Anschrift zu.

      -
      -
      -
    • -
    • -
      - -
      -
      -
      -

      Wir prüfen dann die Entfernung zum nächsten Anschlusspunkt und schicken Ihnen eine Offerte zu.

      -
      -
      -
    • -
    • -
      - -
      -
      -
      -

      Sollten Sie dem Angebot zustimmen, wird die Glasfaser zu Ihrem Standort verlegt und die Endgeräte installiert.

      -
      -
      -
    • -
    • -
      - -
      -
      -
      -

      Sie müssen dann nur noch Ihre Geräte anschliessen und schon surfen Sie bllitzschnell im Internet!

      -
      -
      -
    • -
    -
    -
    -
    -
    + {% placeholder 'Glasfaser About' %} - {% placeholder 'Contact Section' %} From db45597e4efb99c939f8930e29d8ee8e2964ca18 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Wed, 18 Oct 2017 20:24:50 +0200 Subject: [PATCH 082/111] Remove foreign keys between nested plugins --- ungleich_page/cms_plugins.py | 6 ++++++ ungleich_page/migrations/0001_initial.py | 18 ++++-------------- ungleich_page/models.py | 8 -------- 3 files changed, 10 insertions(+), 22 deletions(-) diff --git a/ungleich_page/cms_plugins.py b/ungleich_page/cms_plugins.py index ba82801e..4f377e68 100644 --- a/ungleich_page/cms_plugins.py +++ b/ungleich_page/cms_plugins.py @@ -67,6 +67,9 @@ class GlasfaserServicesItemPlugin(CMSPluginBase): parent_classes = ['GlasfaserServicesPlugin'] def render(self, context, instance, placeholder): + context = super(GlasfaserServicesItemPlugin, self).render( + context, instance, placeholder + ) context['instance'] = instance return context @@ -95,5 +98,8 @@ class GlasfaserAboutItemPlugin(CMSPluginBase): parent_classes = ['GlasfaserAboutPlugin'] def render(self, context, instance, placeholder): + context = super(GlasfaserAboutItemPlugin, self).render( + context, instance, placeholder + ) context['instance'] = instance return context diff --git a/ungleich_page/migrations/0001_initial.py b/ungleich_page/migrations/0001_initial.py index 41919cba..f9be10dc 100644 --- a/ungleich_page/migrations/0001_initial.py +++ b/ungleich_page/migrations/0001_initial.py @@ -1,11 +1,11 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9.4 on 2017-10-18 14:43 +# Generated by Django 1.9.4 on 2017-10-18 18:23 from __future__ import unicode_literals +from django.db import migrations, models import django.db.models.deletion import djangocms_text_ckeditor.fields import filer.fields.image -from django.db import migrations, models class Migration(migrations.Migration): @@ -13,8 +13,8 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('cms', '0014_auto_20160404_1908'), ('filer', '0004_auto_20160328_1434'), + ('cms', '0014_auto_20160404_1908'), ] operations = [ @@ -36,6 +36,7 @@ class Migration(migrations.Migration): ('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')), ('title', models.CharField(max_length=200)), ('description', djangocms_text_ckeditor.fields.HTMLField()), + ('image', filer.fields.image.FilerImageField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='service_item_image', to='filer.Image')), ], options={ 'abstract': False, @@ -91,7 +92,6 @@ class Migration(migrations.Migration): fields=[ ('ungelichpicture_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='ungleich_page.UngelichPicture')), ('inverted', models.BooleanField(default=False)), - ('glasfaser_about', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ungleich_page.About')), ], options={ 'abstract': False, @@ -103,14 +103,4 @@ class Migration(migrations.Migration): name='image', field=filer.fields.image.FilerImageField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='image', to='filer.Image'), ), - migrations.AddField( - model_name='serviceitem', - name='glasfaser_service', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ungleich_page.Service'), - ), - migrations.AddField( - model_name='serviceitem', - name='image', - field=filer.fields.image.FilerImageField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='service_item_image', to='filer.Image'), - ), ] diff --git a/ungleich_page/models.py b/ungleich_page/models.py index 57201f9d..9ed1ed64 100644 --- a/ungleich_page/models.py +++ b/ungleich_page/models.py @@ -40,14 +40,10 @@ class ServiceItem(CMSPlugin): ) title = models.CharField(max_length=200) description = HTMLField() - glasfaser_service = models.ForeignKey(Service) def __str__(self): return self.title - def copy_relations(self, oldinstance): - self.glasfaser_service = oldinstance.glasfaser_service - class About(Service): pass @@ -55,13 +51,9 @@ class About(Service): class AboutItem(UngelichPicture): inverted = models.BooleanField(default=False) - glasfaser_about = models.ForeignKey(About) def __str__(self): alignment = "Right" if self.inverted else "Left" return "{alignment} - {title}".format( alignment=alignment, title=self.title ) - - def copy_relations(self, oldinstance): - self.glasfaser_about = oldinstance.glasfaser_about From 38330d562cf20239041744ff2d977a2c86be9d99 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Wed, 18 Oct 2017 23:29:57 +0200 Subject: [PATCH 083/111] Remove unused cms config from base.py --- dynamicweb/settings/base.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/dynamicweb/settings/base.py b/dynamicweb/settings/base.py index e81d8080..48a2399f 100644 --- a/dynamicweb/settings/base.py +++ b/dynamicweb/settings/base.py @@ -321,15 +321,6 @@ CMS_PLACEHOLDER_CONF = { }, ] }, - 'glasfaser_services': { - 'name': "Services", - 'plugins': ['GlasfaserServicesPlugin'], - 'default_plugins': [ - { - 'plugin_type': 'GlasfaserServicesPlugin', - }, - ] - }, } CACHES = { From 8ce273ea1fbb4b7cb5bf742675b5b3d4bc0312ea Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Thu, 19 Oct 2017 00:28:34 +0200 Subject: [PATCH 084/111] Add SectionWithImage model and its migration --- .../migrations/0002_sectionwithimage.py | 30 +++++++++++++++++++ ungleich_page/models.py | 10 +++++++ 2 files changed, 40 insertions(+) create mode 100644 ungleich_page/migrations/0002_sectionwithimage.py diff --git a/ungleich_page/migrations/0002_sectionwithimage.py b/ungleich_page/migrations/0002_sectionwithimage.py new file mode 100644 index 00000000..87e742b3 --- /dev/null +++ b/ungleich_page/migrations/0002_sectionwithimage.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.4 on 2017-10-18 22:02 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion +import filer.fields.image + + +class Migration(migrations.Migration): + + dependencies = [ + ('filer', '0004_auto_20160328_1434'), + ('ungleich_page', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='SectionWithImage', + fields=[ + ('ungelichpicture_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='ungleich_page.UngelichPicture')), + ('price_tag_url', models.URLField(default='', max_length=300)), + ('price_tag_image', filer.fields.image.FilerImageField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='price_tag_image', to='filer.Image')), + ], + options={ + 'abstract': False, + }, + bases=('ungleich_page.ungelichpicture',), + ), + ] diff --git a/ungleich_page/models.py b/ungleich_page/models.py index 9ed1ed64..2869373e 100644 --- a/ungleich_page/models.py +++ b/ungleich_page/models.py @@ -14,6 +14,16 @@ class UngelichPicture(CMSPlugin): title = models.CharField(max_length=400) +class SectionWithImage(UngelichPicture): + price_tag_image = FilerImageField( + null=True, + blank=True, + related_name="price_tag_image", + on_delete=models.SET_NULL + ) + price_tag_url = models.URLField(max_length=300, default="") + + class UngelichContactUsSection(CMSPlugin): email = models.EmailField(max_length=200) From bf044a4bf3097a7e9c3f0518586da3cd33e41fcc Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Thu, 19 Oct 2017 00:29:34 +0200 Subject: [PATCH 085/111] Improve section_with_image.html to include price_tag image and url --- .../templates/ungleich_page/glasfaser/section_with_image.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ungleich_page/templates/ungleich_page/glasfaser/section_with_image.html b/ungleich_page/templates/ungleich_page/glasfaser/section_with_image.html index 207d7ec4..7d921016 100644 --- a/ungleich_page/templates/ungleich_page/glasfaser/section_with_image.html +++ b/ungleich_page/templates/ungleich_page/glasfaser/section_with_image.html @@ -1,6 +1,6 @@ -
    +
    -
    +
    From 878a823e207abf51fb3e7494796d5461d90b5353 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Thu, 19 Oct 2017 00:30:07 +0200 Subject: [PATCH 086/111] Use SectionWithImage --- ungleich_page/cms_plugins.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ungleich_page/cms_plugins.py b/ungleich_page/cms_plugins.py index 4f377e68..19afce96 100644 --- a/ungleich_page/cms_plugins.py +++ b/ungleich_page/cms_plugins.py @@ -2,14 +2,14 @@ from cms.plugin_base import CMSPluginBase from cms.plugin_pool import plugin_pool from .models import ( - UngelichPicture, UngelichContactUsSection, UngelichTextSection, Service, - ServiceItem, About, AboutItem + UngelichContactUsSection, UngelichTextSection, Service, ServiceItem, + About, AboutItem, SectionWithImage ) @plugin_pool.register_plugin class SectionWithImagePlugin(CMSPluginBase): - model = UngelichPicture + model = SectionWithImage render_template = "ungleich_page/glasfaser/section_with_image.html" cache = False From c147b48af7c00da45c132be1d43affd4c7877eec Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Thu, 19 Oct 2017 13:39:56 +0200 Subject: [PATCH 087/111] Add first version of cms_menus.py --- ungleich_page/cms_menus.py | 59 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 ungleich_page/cms_menus.py diff --git a/ungleich_page/cms_menus.py b/ungleich_page/cms_menus.py new file mode 100644 index 00000000..ebba3515 --- /dev/null +++ b/ungleich_page/cms_menus.py @@ -0,0 +1,59 @@ +from menus.base import NavigationNode +from menus.menu_pool import menu_pool +from django.utils.translation import ugettext_lazy as _ +from cms.menu_bases import CMSAttachMenu +from cms.templatetags.cms_tags import _get_placeholder +from cms.utils.plugins import get_plugins + + +class TestMenu(CMSAttachMenu): + + name = _("Glasfaser menu") + + def get_nodes(self, request): + nodes = [] + if request and request.current_page: + template_context = { + "request": request, + } + placeholder_name_list = [ + 'Top Section', 'Middle Section', 'Glasfaser Services', + 'Glasfaser About', 'Contact Section' + ] + plugins_list = [ + 'SectionWithImage', 'UngelichContactUsSection', + 'UngelichTextSection', 'Service', 'About' + ] + for placeholder_name in placeholder_name_list: + placeholder = _get_placeholder( + request.current_page, request.current_page, + template_context, placeholder_name + ) + plugins = get_plugins( + request, placeholder, request.current_page.get_template() + ) + for plugin in plugins: + if type(plugin).__name__ in plugins_list: + section_hash = request.build_absolute_uri() + if hasattr(plugin, 'menu_text'): + menu_text = plugin.menu_text + menu_words = menu_text.split() + if len(menu_words) > 0: + section_hash = '{}#{}'.format( + section_hash, + menu_words[0] + ) + else: + continue + newnode = NavigationNode( + menu_text, + url=section_hash, + id="{}-{}".format( + request.current_page.id, plugin.id + ) + ) + nodes.append(newnode) + return nodes + + +menu_pool.register_menu(TestMenu) \ No newline at end of file From 73818fd5b915fe56b92917363c34179d23904762 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Thu, 19 Oct 2017 13:40:48 +0200 Subject: [PATCH 088/111] Add menu_text fields for various plugins --- ungleich_page/models.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ungleich_page/models.py b/ungleich_page/models.py index 2869373e..bac70d2a 100644 --- a/ungleich_page/models.py +++ b/ungleich_page/models.py @@ -15,25 +15,29 @@ class UngelichPicture(CMSPlugin): class SectionWithImage(UngelichPicture): + menu_text = models.CharField(max_length=100, default="", blank=True) price_tag_image = FilerImageField( null=True, blank=True, related_name="price_tag_image", on_delete=models.SET_NULL ) - price_tag_url = models.URLField(max_length=300, default="") + price_tag_url = models.URLField(max_length=300, default="", blank=True) class UngelichContactUsSection(CMSPlugin): + menu_text = models.CharField(max_length=100, default="", blank=True) email = models.EmailField(max_length=200) class UngelichTextSection(CMSPlugin): + menu_text = models.CharField(max_length=100, default="", blank=True) title = models.CharField(max_length=200) description = HTMLField() class Service(CMSPlugin): + menu_text = models.CharField(max_length=100, default="", blank=True) title = models.CharField(max_length=200) sub_title = models.CharField(max_length=200) From b21a533aeb7164bdf4f8f73f4dbc5fa4478db313 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Thu, 19 Oct 2017 13:44:21 +0200 Subject: [PATCH 089/111] Show menu using cms --- .../templates/ungleich_page/glasfaser_cms_page.html | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/ungleich_page/templates/ungleich_page/glasfaser_cms_page.html b/ungleich_page/templates/ungleich_page/glasfaser_cms_page.html index a804ec73..f0b8c050 100644 --- a/ungleich_page/templates/ungleich_page/glasfaser_cms_page.html +++ b/ungleich_page/templates/ungleich_page/glasfaser_cms_page.html @@ -1,4 +1,4 @@ -{% load static bootstrap3 i18n cms_tags sekizai_tags %} +{% load static bootstrap3 i18n cms_tags sekizai_tags menu_tags %} {% get_current_language as LANGUAGE_CODE %} @@ -61,15 +61,7 @@ From 0935877a4fc65efaea058a1f6e4ff633a3a0a1a0 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Thu, 19 Oct 2017 13:45:28 +0200 Subject: [PATCH 090/111] Add get_section_id --- ungleich_page/cms_plugins.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/ungleich_page/cms_plugins.py b/ungleich_page/cms_plugins.py index 19afce96..388e6049 100644 --- a/ungleich_page/cms_plugins.py +++ b/ungleich_page/cms_plugins.py @@ -7,6 +7,22 @@ from .models import ( ) +def get_section_id(plugin_instance, default): + """ + A helper function to get the section id from a given menu text + :param plugin_instance: + :param default: The default section id to return in case a section id + is not found + :return: The section id for the plugin_instance + """ + section_id = default + if hasattr(plugin_instance, 'menu_text'): + menu_words = plugin_instance.menu_text.split() + if len(menu_words) > 0: + section_id = menu_words[0] + return section_id + + @plugin_pool.register_plugin class SectionWithImagePlugin(CMSPluginBase): model = SectionWithImage @@ -35,6 +51,14 @@ class SectionTextParagraphDCL(CMSPluginBase): render_template = "ungleich_page/glasfaser/section_text_dcl.html" cache = False + def render(self, context, instance, placeholder): + context = super(SectionTextParagraphDCL, self).render( + context, instance, placeholder + ) + context['instance'] = instance + context['section_id'] = get_section_id(instance, 'your') + return context + @plugin_pool.register_plugin class SectionTextParagraphGlasfaser(CMSPluginBase): @@ -42,6 +66,14 @@ class SectionTextParagraphGlasfaser(CMSPluginBase): render_template = "ungleich_page/glasfaser/section_text_glasfaser.html" cache = False + def render(self, context, instance, placeholder): + context = super(SectionTextParagraphGlasfaser, self).render( + context, instance, placeholder + ) + context['instance'] = instance + context['section_id'] = get_section_id(instance, 'our') + return context + @plugin_pool.register_plugin class GlasfaserServicesPlugin(CMSPluginBase): From 24fe8c4c6ecd01135e8c03a997d0c5d38f06d1c3 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Thu, 19 Oct 2017 13:46:20 +0200 Subject: [PATCH 091/111] Load section ids from cms --- .../templates/ungleich_page/glasfaser/section_text_dcl.html | 2 +- .../ungleich_page/glasfaser/section_text_glasfaser.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ungleich_page/templates/ungleich_page/glasfaser/section_text_dcl.html b/ungleich_page/templates/ungleich_page/glasfaser/section_text_dcl.html index 54836fbc..e45504f3 100644 --- a/ungleich_page/templates/ungleich_page/glasfaser/section_text_dcl.html +++ b/ungleich_page/templates/ungleich_page/glasfaser/section_text_dcl.html @@ -1,4 +1,4 @@ -
    +
    diff --git a/ungleich_page/templates/ungleich_page/glasfaser/section_text_glasfaser.html b/ungleich_page/templates/ungleich_page/glasfaser/section_text_glasfaser.html index edb035ce..d3d83dfc 100644 --- a/ungleich_page/templates/ungleich_page/glasfaser/section_text_glasfaser.html +++ b/ungleich_page/templates/ungleich_page/glasfaser/section_text_glasfaser.html @@ -1,4 +1,4 @@ -
    +
    From ac5c43822f6d6004392545ff99f1b2ccdbd729c5 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Thu, 19 Oct 2017 13:48:13 +0200 Subject: [PATCH 092/111] Add menus template for glasfaser template --- .../templates/ungleich_page/glasfaser/menus.html | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 ungleich_page/templates/ungleich_page/glasfaser/menus.html diff --git a/ungleich_page/templates/ungleich_page/glasfaser/menus.html b/ungleich_page/templates/ungleich_page/glasfaser/menus.html new file mode 100644 index 00000000..aa5d8abf --- /dev/null +++ b/ungleich_page/templates/ungleich_page/glasfaser/menus.html @@ -0,0 +1,12 @@ +{% load menu_tags %} + +{% for child in children %} +
  • + {{ child.get_menu_title }} + {% if child.children %} +
      + {% show_menu from_level to_level extra_inactive extra_active template "" "" child %} +
    + {% endif %} +
  • +{% endfor %} \ No newline at end of file From 428d329d9942d169dfc8ae40e27dfcc535e1e163 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Thu, 19 Oct 2017 13:49:30 +0200 Subject: [PATCH 093/111] Add migrations --- .../migrations/0003_auto_20171019_1007.py | 35 ++++++++++++++++ .../migrations/0004_auto_20171019_1113.py | 40 +++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 ungleich_page/migrations/0003_auto_20171019_1007.py create mode 100644 ungleich_page/migrations/0004_auto_20171019_1113.py diff --git a/ungleich_page/migrations/0003_auto_20171019_1007.py b/ungleich_page/migrations/0003_auto_20171019_1007.py new file mode 100644 index 00000000..33f19a29 --- /dev/null +++ b/ungleich_page/migrations/0003_auto_20171019_1007.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.4 on 2017-10-19 10:07 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('ungleich_page', '0002_sectionwithimage'), + ] + + operations = [ + migrations.AddField( + model_name='sectionwithimage', + name='menu_text', + field=models.CharField(default='', max_length=100), + ), + migrations.AddField( + model_name='service', + name='menu_text', + field=models.CharField(default='', max_length=100), + ), + migrations.AddField( + model_name='ungelichcontactussection', + name='menu_text', + field=models.CharField(default='', max_length=100), + ), + migrations.AddField( + model_name='ungelichtextsection', + name='menu_text', + field=models.CharField(default='', max_length=100), + ), + ] diff --git a/ungleich_page/migrations/0004_auto_20171019_1113.py b/ungleich_page/migrations/0004_auto_20171019_1113.py new file mode 100644 index 00000000..b1877091 --- /dev/null +++ b/ungleich_page/migrations/0004_auto_20171019_1113.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.4 on 2017-10-19 11:13 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('ungleich_page', '0003_auto_20171019_1007'), + ] + + operations = [ + migrations.AlterField( + model_name='sectionwithimage', + name='menu_text', + field=models.CharField(blank=True, default='', max_length=100), + ), + migrations.AlterField( + model_name='sectionwithimage', + name='price_tag_url', + field=models.URLField(blank=True, default='', max_length=300), + ), + migrations.AlterField( + model_name='service', + name='menu_text', + field=models.CharField(blank=True, default='', max_length=100), + ), + migrations.AlterField( + model_name='ungelichcontactussection', + name='menu_text', + field=models.CharField(blank=True, default='', max_length=100), + ), + migrations.AlterField( + model_name='ungelichtextsection', + name='menu_text', + field=models.CharField(blank=True, default='', max_length=100), + ), + ] From 502d822a02850b291bef1fe91c8e9f07f14f528a Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Thu, 19 Oct 2017 14:05:17 +0200 Subject: [PATCH 094/111] Add section id from cms in the contact us section --- ungleich_page/cms_plugins.py | 8 ++++++++ .../ungleich_page/glasfaser/section_contact.html | 4 ++-- .../templates/ungleich_page/glasfaser_cms_page.html | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/ungleich_page/cms_plugins.py b/ungleich_page/cms_plugins.py index 388e6049..d6035499 100644 --- a/ungleich_page/cms_plugins.py +++ b/ungleich_page/cms_plugins.py @@ -44,6 +44,14 @@ class SectionContact(CMSPluginBase): render_template = "ungleich_page/glasfaser/section_contact.html" cache = False + def render(self, context, instance, placeholder): + context = super(SectionContact, self).render( + context, instance, placeholder + ) + context['instance'] = instance + context['section_id'] = get_section_id(instance, 'contact') + return context + @plugin_pool.register_plugin class SectionTextParagraphDCL(CMSPluginBase): diff --git a/ungleich_page/templates/ungleich_page/glasfaser/section_contact.html b/ungleich_page/templates/ungleich_page/glasfaser/section_contact.html index afc089b1..cd1c856b 100644 --- a/ungleich_page/templates/ungleich_page/glasfaser/section_contact.html +++ b/ungleich_page/templates/ungleich_page/glasfaser/section_contact.html @@ -1,7 +1,7 @@ {% load i18n %} -
    -
    +
    +
    diff --git a/ungleich_page/templates/ungleich_page/glasfaser_cms_page.html b/ungleich_page/templates/ungleich_page/glasfaser_cms_page.html index f0b8c050..8f76b29f 100644 --- a/ungleich_page/templates/ungleich_page/glasfaser_cms_page.html +++ b/ungleich_page/templates/ungleich_page/glasfaser_cms_page.html @@ -86,7 +86,7 @@ From 46baaaf621107871fd1f3d831ff1db0b4f942872 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Thu, 19 Oct 2017 14:14:29 +0200 Subject: [PATCH 095/111] Add section id from cms for services --- ungleich_page/cms_plugins.py | 1 + .../templates/ungleich_page/glasfaser/section_services.html | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/ungleich_page/cms_plugins.py b/ungleich_page/cms_plugins.py index d6035499..a75e0605 100644 --- a/ungleich_page/cms_plugins.py +++ b/ungleich_page/cms_plugins.py @@ -94,6 +94,7 @@ class GlasfaserServicesPlugin(CMSPluginBase): def render(self, context, instance, placeholder): context['service_instance'] = instance + context['section_id'] = get_section_id(instance, 'services') return context diff --git a/ungleich_page/templates/ungleich_page/glasfaser/section_services.html b/ungleich_page/templates/ungleich_page/glasfaser/section_services.html index ae7ef31c..4f2331ef 100644 --- a/ungleich_page/templates/ungleich_page/glasfaser/section_services.html +++ b/ungleich_page/templates/ungleich_page/glasfaser/section_services.html @@ -1,5 +1,5 @@ {% load static i18n cms_tags %} -
    +

    {{ service_instance.title }}

    From 6322140813ad15cdd23da2df827e2fd12e9a025f Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Thu, 19 Oct 2017 14:22:02 +0200 Subject: [PATCH 096/111] Add section id from cms for about --- ungleich_page/cms_plugins.py | 1 + .../templates/ungleich_page/glasfaser/section_about.html | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/ungleich_page/cms_plugins.py b/ungleich_page/cms_plugins.py index a75e0605..a5b10d5f 100644 --- a/ungleich_page/cms_plugins.py +++ b/ungleich_page/cms_plugins.py @@ -126,6 +126,7 @@ class GlasfaserAboutPlugin(CMSPluginBase): def render(self, context, instance, placeholder): context['about_instance'] = instance + context['section_id'] = get_section_id(instance, 'about') return context diff --git a/ungleich_page/templates/ungleich_page/glasfaser/section_about.html b/ungleich_page/templates/ungleich_page/glasfaser/section_about.html index e9c811ce..5e3f0410 100644 --- a/ungleich_page/templates/ungleich_page/glasfaser/section_about.html +++ b/ungleich_page/templates/ungleich_page/glasfaser/section_about.html @@ -1,5 +1,5 @@ {% load cms_tags %} -
    +

    {{ about_instance.title }}

    From 55dd96570c283c7179028ad4c24f919e4aede84a Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Thu, 19 Oct 2017 15:24:00 +0200 Subject: [PATCH 097/111] Add custom padding bottom for services section --- ungleich_page/static/ungleich_page/css/cms.css | 8 +++++++- .../ungleich_page/glasfaser/section_services.html | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/ungleich_page/static/ungleich_page/css/cms.css b/ungleich_page/static/ungleich_page/css/cms.css index d899cf6f..ac2a7526 100644 --- a/ungleich_page/static/ungleich_page/css/cms.css +++ b/ungleich_page/static/ungleich_page/css/cms.css @@ -3,4 +3,10 @@ font-size: 21px; color: #3a3a3a; font-weight: 300 !important; -} \ No newline at end of file +} + +@media(min-width: 768px) { + .custom-padding-bottom{ + padding-bottom: 0; + } +} diff --git a/ungleich_page/templates/ungleich_page/glasfaser/section_services.html b/ungleich_page/templates/ungleich_page/glasfaser/section_services.html index 4f2331ef..a4b50e5c 100644 --- a/ungleich_page/templates/ungleich_page/glasfaser/section_services.html +++ b/ungleich_page/templates/ungleich_page/glasfaser/section_services.html @@ -1,5 +1,5 @@ {% load static i18n cms_tags %} -
    +

    {{ service_instance.title }}

    From c4485623841e0995b3a5cfdec29d4b661370a10e Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Thu, 19 Oct 2017 16:04:18 +0200 Subject: [PATCH 098/111] Remove empty items from menu --- ungleich_page/cms_menus.py | 4 +++- ungleich_page/templates/ungleich_page/glasfaser_cms_page.html | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/ungleich_page/cms_menus.py b/ungleich_page/cms_menus.py index ebba3515..f3a2a694 100644 --- a/ungleich_page/cms_menus.py +++ b/ungleich_page/cms_menus.py @@ -37,6 +37,8 @@ class TestMenu(CMSAttachMenu): section_hash = request.build_absolute_uri() if hasattr(plugin, 'menu_text'): menu_text = plugin.menu_text + if menu_text.strip() == '': + continue menu_words = menu_text.split() if len(menu_words) > 0: section_hash = '{}#{}'.format( @@ -56,4 +58,4 @@ class TestMenu(CMSAttachMenu): return nodes -menu_pool.register_menu(TestMenu) \ No newline at end of file +menu_pool.register_menu(TestMenu) diff --git a/ungleich_page/templates/ungleich_page/glasfaser_cms_page.html b/ungleich_page/templates/ungleich_page/glasfaser_cms_page.html index 8f76b29f..0aebb93c 100644 --- a/ungleich_page/templates/ungleich_page/glasfaser_cms_page.html +++ b/ungleich_page/templates/ungleich_page/glasfaser_cms_page.html @@ -61,7 +61,7 @@ From e7c7f6f73aa9e5f7889e4275955e13e0e4404a05 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Thu, 19 Oct 2017 16:23:28 +0200 Subject: [PATCH 099/111] Show background image and link only if specified --- .../templates/ungleich_page/glasfaser/section_with_image.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ungleich_page/templates/ungleich_page/glasfaser/section_with_image.html b/ungleich_page/templates/ungleich_page/glasfaser/section_with_image.html index 7d921016..6d9fe47b 100644 --- a/ungleich_page/templates/ungleich_page/glasfaser/section_with_image.html +++ b/ungleich_page/templates/ungleich_page/glasfaser/section_with_image.html @@ -1,6 +1,6 @@
    From 39ca45cfb92de8fa63b250afa3f13b1bd3efdcb1 Mon Sep 17 00:00:00 2001 From: "M.Ravi" Date: Thu, 19 Oct 2017 17:23:19 +0200 Subject: [PATCH 100/111] Make fields of contact section customizable --- .../migrations/0005_auto_20171019_1517.py | 45 +++++++++++++++++++ ungleich_page/models.py | 17 ++++++- .../glasfaser/section_contact.html | 10 ++--- 3 files changed, 66 insertions(+), 6 deletions(-) create mode 100644 ungleich_page/migrations/0005_auto_20171019_1517.py diff --git a/ungleich_page/migrations/0005_auto_20171019_1517.py b/ungleich_page/migrations/0005_auto_20171019_1517.py new file mode 100644 index 00000000..915f3582 --- /dev/null +++ b/ungleich_page/migrations/0005_auto_20171019_1517.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.4 on 2017-10-19 15:17 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('ungleich_page', '0004_auto_20171019_1113'), + ] + + operations = [ + migrations.AddField( + model_name='ungelichcontactussection', + name='address', + field=models.CharField(blank=True, default='In der Au 7, Schwanden 8762', max_length=100), + ), + migrations.AddField( + model_name='ungelichcontactussection', + name='contact_form_header_text', + field=models.CharField(blank=True, default='Send us a message.', max_length=100), + ), + migrations.AddField( + model_name='ungelichcontactussection', + name='contact_text', + field=models.CharField(blank=True, default='Contact', max_length=100), + ), + migrations.AddField( + model_name='ungelichcontactussection', + name='country', + field=models.CharField(blank=True, default='Switzerland', max_length=100), + ), + migrations.AddField( + model_name='ungelichcontactussection', + name='organization_name', + field=models.CharField(blank=True, default='ungleich GmbH', max_length=100), + ), + migrations.AlterField( + model_name='ungelichcontactussection', + name='email', + field=models.EmailField(default='info@ungleich.ch', max_length=200), + ), + ] diff --git a/ungleich_page/models.py b/ungleich_page/models.py index bac70d2a..f32c7414 100644 --- a/ungleich_page/models.py +++ b/ungleich_page/models.py @@ -27,7 +27,22 @@ class SectionWithImage(UngelichPicture): class UngelichContactUsSection(CMSPlugin): menu_text = models.CharField(max_length=100, default="", blank=True) - email = models.EmailField(max_length=200) + email = models.EmailField(max_length=200, default="info@ungleich.ch") + contact_text = models.CharField( + max_length=100, default="Contact", blank=True + ) + organization_name = models.CharField( + max_length=100, default="ungleich GmbH", blank=True + ) + address = models.CharField( + max_length=100, default="In der Au 7, Schwanden 8762", blank=True + ) + country = models.CharField( + max_length=100, default="Switzerland", blank=True + ) + contact_form_header_text = models.CharField( + max_length=100, default="Send us a message.", blank=True + ) class UngelichTextSection(CMSPlugin): diff --git a/ungleich_page/templates/ungleich_page/glasfaser/section_contact.html b/ungleich_page/templates/ungleich_page/glasfaser/section_contact.html index cd1c856b..26a3275c 100644 --- a/ungleich_page/templates/ungleich_page/glasfaser/section_contact.html +++ b/ungleich_page/templates/ungleich_page/glasfaser/section_contact.html @@ -6,16 +6,16 @@
    -

    Kontakt

    +

    {{instance.contact_text}}

    -

    ungleich GmbH

    +

    {{instance.organization_name}}

    {{instance.email}}

    -

    In der Au 7, Schwanden 8762

    -

    Switzerland

    +

    {{instance.address}}

    +

    {{instance.country}}

    diff --git a/hosting/views.py b/hosting/views.py index 51a90e1d..f81e6c5a 100644 --- a/hosting/views.py +++ b/hosting/views.py @@ -267,7 +267,7 @@ class SignupValidatedView(SignupValidateView): section_title = _('Account activation') user = CustomUser.objects.filter( validation_slug=self.kwargs['validate_slug']).first() - pre_valid = user.validated + # pre_valid = user.validated if validated: message = '{account_activation_string}
    {login_string} {lurl}.'.format( account_activation_string=_( @@ -276,7 +276,7 @@ class SignupValidatedView(SignupValidateView): lurl=login_url) email_data = { 'subject': _('Welcome to Data Center Light!'), - 'to': self.request.user.email, + 'to': user.email, 'context': { 'base_url': "{0}://{1}".format( self.request.scheme, From f4b6b38522168657a0a040fcf768335267a728fc Mon Sep 17 00:00:00 2001 From: Arvind Tiwari Date: Wed, 27 Sep 2017 03:28:06 +0530 Subject: [PATCH 014/111] minor fix --- datacenterlight/tasks.py | 2 +- hosting/templates/hosting/emails/new_booked_vm.html | 2 +- hosting/views.py | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/datacenterlight/tasks.py b/datacenterlight/tasks.py index 61c6fb4b..3869a409 100644 --- a/datacenterlight/tasks.py +++ b/datacenterlight/tasks.py @@ -128,7 +128,7 @@ def create_vm_task(self, vm_template_id, user, specs, template, 'storage': specs.get('disk_size'), 'price': specs.get('price'), 'template': template.get('name'), - 'vm_name': vm['name'], + 'vm_name': vm.get('name'), 'vm_id': vm['vm_id'], 'order_id': order.id } diff --git a/hosting/templates/hosting/emails/new_booked_vm.html b/hosting/templates/hosting/emails/new_booked_vm.html index 7ed963c6..bda0964e 100644 --- a/hosting/templates/hosting/emails/new_booked_vm.html +++ b/hosting/templates/hosting/emails/new_booked_vm.html @@ -19,7 +19,7 @@
    -

    {% blocktrans %}Your New VM {{vm_name}}{% endblocktrans %}

    +

    {% blocktrans %}Your New VM {{ vm_name }}{% endblocktrans %}

    - {% blocktrans %}You are receiving this email because your virutal machine [ {{ vm_name }} ] has been cancelled.{% endblocktrans %} + {% blocktrans %}You are receiving this email because your virutal machine {{ vm_name }} has been cancelled.{% endblocktrans %}

    {% blocktrans %}You can always order a new VM by clicking the button below.{% endblocktrans %} diff --git a/hosting/templates/hosting/emails/vm_canceled.txt b/hosting/templates/hosting/emails/vm_canceled.txt index 873dd0ac..9149a554 100644 --- a/hosting/templates/hosting/emails/vm_canceled.txt +++ b/hosting/templates/hosting/emails/vm_canceled.txt @@ -2,7 +2,7 @@ {% trans "Virtual Machine Cancellation" %} -{% blocktrans %}You are receiving this email because your virutal machine [{{vm_name}}] has been cancelled.{% endblocktrans %} +{% blocktrans %}You are receiving this email because your virutal machine {{vm_name}} has been cancelled.{% endblocktrans %} {% blocktrans %}You can always order a new VM by following the link below.{% endblocktrans %} {{ base_url }}{% url 'hosting:create_virtual_machine' %} From 3370f06bffd80aba6e7db290ccc292801482e2f1 Mon Sep 17 00:00:00 2001 From: Arvind Tiwari Date: Sun, 15 Oct 2017 02:30:42 +0530 Subject: [PATCH 042/111] msg fix --- hosting/static/hosting/css/landing-page.css | 2 +- hosting/templates/hosting/includes/_messages.html | 3 +-- utils/locale/de/LC_MESSAGES/django.po | 2 +- utils/views.py | 2 +- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/hosting/static/hosting/css/landing-page.css b/hosting/static/hosting/css/landing-page.css index 9a981d68..f989d479 100644 --- a/hosting/static/hosting/css/landing-page.css +++ b/hosting/static/hosting/css/landing-page.css @@ -450,7 +450,7 @@ h6 { } .auth-box .msg-list { - padding: 15px 25px 5px; + padding: 20px 25px 0; text-align: center; } diff --git a/hosting/templates/hosting/includes/_messages.html b/hosting/templates/hosting/includes/_messages.html index 13500fdb..12540558 100644 --- a/hosting/templates/hosting/includes/_messages.html +++ b/hosting/templates/hosting/includes/_messages.html @@ -1,8 +1,7 @@ {% if messages %}

      {% for message in messages %} -
      {{ message|safe }}
      +
      {{ message|safe }}
      {% endfor %}
    {% endif %} \ No newline at end of file diff --git a/utils/locale/de/LC_MESSAGES/django.po b/utils/locale/de/LC_MESSAGES/django.po index a8926cd0..8a961e7a 100644 --- a/utils/locale/de/LC_MESSAGES/django.po +++ b/utils/locale/de/LC_MESSAGES/django.po @@ -795,7 +795,7 @@ msgstr "Es wurde eine E-Mail mit dem Aktivierungslink an Dich gesendet." msgid "Account Activation" msgstr "Accountaktivierung" -msgid "The link to reset your email has been sent to your email" +msgid "The link to reset your password has been sent to your email" msgstr "" "Der Link zum Zurücksetzen deines Passwortes wurde an deine E-Mail gesendet" diff --git a/utils/views.py b/utils/views.py index a7d8c1c1..6e54cde6 100644 --- a/utils/views.py +++ b/utils/views.py @@ -104,7 +104,7 @@ class ResendActivationLinkViewMixin(FormView): class PasswordResetViewMixin(FormView): success_message = _( - "The link to reset your email has been sent to your email") + "The link to reset your password has been sent to your email") site = '' def test_generate_email_context(self, user): From 839b7acd7471f00176ffcdd95088ab1e18b44356 Mon Sep 17 00:00:00 2001 From: Arvind Tiwari Date: Sun, 15 Oct 2017 02:31:19 +0530 Subject: [PATCH 043/111] Update Changelog --- Changelog | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Changelog b/Changelog index 1eaa55e5..cb3d23fa 100644 --- a/Changelog +++ b/Changelog @@ -2,6 +2,9 @@ Next release: * Bugfix: [dcl, hosting] Fix Stripe js error in confirm payment page * #3847: [ungleich] change text 'hosting products' -> 'our products' * #3829: [dcl] Handle landing login fail in payment page itself + * #3794: [dcl, hosting] Update email styles + * #3828: [dcl, hosting] invoice period set to show monthly subscription + * #3838: [hosting] restyle signup/login/password reset/password pages 1.2.6: 2017-10-10 * Bugfix: [dcl] Refactor and optimize images, links in glasfaser page * Bugfix: [dcl] Fix email not being sent issue From 9bc86255c4a5870c8e75a9abec427ad171a3d766 Mon Sep 17 00:00:00 2001 From: Arvind Tiwari Date: Mon, 16 Oct 2017 01:04:49 +0530 Subject: [PATCH 044/111] user account details added and translation fix --- .../locale/de/LC_MESSAGES/django.po | 20 +++++++++++--- .../emails/user_activation.html | 12 +++++++++ .../emails/user_activation.txt | 11 ++++++++ hosting/locale/de/LC_MESSAGES/django.po | 26 ++++++++----------- 4 files changed, 50 insertions(+), 19 deletions(-) diff --git a/datacenterlight/locale/de/LC_MESSAGES/django.po b/datacenterlight/locale/de/LC_MESSAGES/django.po index 52d9623e..36f84f26 100644 --- a/datacenterlight/locale/de/LC_MESSAGES/django.po +++ b/datacenterlight/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-10-10 21:35+0530\n" +"POT-Creation-Date: 2017-10-16 00:57+0530\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -144,6 +144,21 @@ msgid "" "browser to activate your Data Center Light account." msgstr "Kopiere den folgenden Link in die Adressleiste deines Browsers." +msgid "Your account details are as follows" +msgstr "" + +msgid "Username" +msgstr "Username" + +msgid "Your email address" +msgstr "Deine E-Mail-Adresse" + +msgid "Password" +msgstr "Passwort" + +msgid "You can reset your password here" +msgstr "Passwort zurücksetzen" + msgid "" "You can copy and paste the following link into the address bar of your " "browser to activate your Data Center Light account." @@ -546,9 +561,6 @@ msgstr "" #~ "kontaktiere uns unter support@datacenterlight.ch. Unser Team wird sich " #~ "umgehend um dein Anliegen kümmern!" -#~ msgid "Email Address" -#~ msgstr "E-Mail-Adresse" - #~ msgid "is not a proper name" #~ msgstr "ist kein gültiger Name" diff --git a/datacenterlight/templates/datacenterlight/emails/user_activation.html b/datacenterlight/templates/datacenterlight/emails/user_activation.html index 7008c1a1..8f270a3f 100644 --- a/datacenterlight/templates/datacenterlight/emails/user_activation.html +++ b/datacenterlight/templates/datacenterlight/emails/user_activation.html @@ -33,6 +33,18 @@

    {{base_url}}{{activation_link}}

    +

    + {% if account_details %} + {% url 'hosting:reset_password' as reset_password_url %} + {% trans "Your account details are as follows" %}: + + {% trans "Username" %} : {% trans "Your email address" %} + {% trans "Password" %} : {{account_details}} + + {% trans "You can reset your password here" %}: + {{base_url}}{{reset_password_url}} + {% endif %} +