Fix conflicts

This commit is contained in:
Henry Bravo 2017-06-05 14:55:41 -05:00
commit c69694274f
26 changed files with 533 additions and 257 deletions

1
.gitignore vendored
View file

@ -34,3 +34,4 @@ secret-key
.idea/ .idea/
.env .env
*.mo

View file

@ -8,7 +8,13 @@
1.0.3: 2017-06-02 1.0.3: 2017-06-02
* [datacenterlight] Hotfix, remove footer on mobile devices * [datacenterlight] Hotfix, remove footer on mobile devices
next next:
* [datacenterlight] Add German translations
* [datacenterlight] Change beta access to subscriptions
* [hosting] Add German translations
* [blog] Add German translation for header
* [opennebula_api] Improve testing, add ssh key functions * [opennebula_api] Improve testing, add ssh key functions
* [opennebula_api] Remove template views * [opennebula_api] Remove template views
* [datacenterlight] Allow user to have multiple ssh keys * [datacenterlight] Allow user to have multiple ssh keys
* [datacenterlight] Changed stripe.js v2 to v3
* [datacenterlight] Added support for stripe payment errors on current user language

View file

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-05-26 13:35+0000\n" "POT-Creation-Date: 2017-05-30 13:47+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"

View file

@ -17,7 +17,7 @@
{% render_model post "abstract" "" "" 'truncatewords_html:10' %} {% render_model post "abstract" "" "" 'truncatewords_html:10' %}
</h2> </h2>
<span class="meta"> <span class="meta">
Posted on {{ post.date_published|date:"DATE_FORMAT" }} {% trans "Posted on"%} {{ post.date_published|date:"DATE_FORMAT" }}
</span> </span>
</div> </div>
</div> </div>

View file

@ -75,6 +75,7 @@ msgstr ""
msgid "Thank you!" msgid "Thank you!"
msgstr "Vielen Dank!" msgstr "Vielen Dank!"
<<<<<<< HEAD
#: templates/datacenterlight/index.html:62 #: templates/datacenterlight/index.html:62
#: templates/datacenterlight/index.html:160 #: templates/datacenterlight/index.html:160
#: templates/datacenterlight/index.html:368 #: templates/datacenterlight/index.html:368
@ -158,7 +159,6 @@ msgid ""
"tight factory walls." "tight factory walls."
msgstr "Verzichtet auf aktive Kühlung, indem es sich die Isolation unserer ehemaligen Fabrikhalle zu Nutze macht." msgstr "Verzichtet auf aktive Kühlung, indem es sich die Isolation unserer ehemaligen Fabrikhalle zu Nutze macht."
#: templates/datacenterlight/index.html:214
msgid "" msgid ""
"We don't use special hardware. We use commodity hardware: we buy computers " "We don't use special hardware. We use commodity hardware: we buy computers "
"that you buy. Just many more and put them in a cozy home for computers " "that you buy. Just many more and put them in a cozy home for computers "
@ -169,6 +169,7 @@ msgstr ""
"komponenten hinzugekauft und skalieren so das Datencenter." "komponenten hinzugekauft und skalieren so das Datencenter."
#: templates/datacenterlight/index.html:240 #: templates/datacenterlight/index.html:240
#: datacenterlight/templates/datacenterlight/index.html:218
msgid "" msgid ""
"Our VMs are located in Switzerland, with reliable power supply and fast " "Our VMs are located in Switzerland, with reliable power supply and fast "
"internet connection. Our VM costs less thanks to our featherlight " "internet connection. Our VM costs less thanks to our featherlight "
@ -178,84 +179,84 @@ msgstr ""
"Energieversorgung sowie schneller Internetverbindung ausgestattet. Unser " "Energieversorgung sowie schneller Internetverbindung ausgestattet. Unser "
"Angebot ist aufgrund unserer leichten Infrastruktur überaus kostengünstig." "Angebot ist aufgrund unserer leichten Infrastruktur überaus kostengünstig."
#: templates/datacenterlight/index.html:258
#: templates/datacenterlight/pricing.html:106 #: datacenterlight/templates/datacenterlight/index.html:236
#: datacenterlight/templates/datacenterlight/pricing.html:106
msgid "We are cutting down the costs significantly!" msgid "We are cutting down the costs significantly!"
msgstr "Wir sorgen dafür, dass die Kosten für Sie signifikant abnehmen" msgstr "Wir sorgen dafür, dass die Kosten für Sie signifikant abnehmen"
#: templates/datacenterlight/index.html:259 #: datacenterlight/templates/datacenterlight/index.html:237
msgid "Affordable VM hosting based in Switzerland" msgid "Affordable VM hosting based in Switzerland"
msgstr "Bezahlbares VM Hosting in der Schweiz" msgstr "Bezahlbares VM Hosting in der Schweiz"
#: templates/datacenterlight/index.html:260 #: datacenterlight/templates/datacenterlight/index.html:238
msgid "More Info" msgid "More Info"
msgstr "Weitere Informationen" msgstr "Weitere Informationen"
#: templates/datacenterlight/index.html:267 #: datacenterlight/templates/datacenterlight/index.html:245
#: templates/datacenterlight/pricing.html:119 #: datacenterlight/templates/datacenterlight/pricing.html:119
msgid "VM hosting" msgid "VM hosting"
msgstr "VM Hosting" msgstr "VM Hosting"
#: templates/datacenterlight/index.html:274 #: datacenterlight/templates/datacenterlight/index.html:252
msgid "Based in Switzerland" msgid "Based in Switzerland"
msgstr "Standort des Datacenters ist in der Schweiz" msgstr "Standort des Datacenters ist in der Schweiz"
#: templates/datacenterlight/index.html:283 #: datacenterlight/templates/datacenterlight/index.html:261
#, fuzzy
#| msgid "10 GB Storage (SSD)"
msgid "10 GB Storage (SSD)" msgid "10 GB Storage (SSD)"
msgstr "10 GB Storage (SSD)" msgstr "10 GB Storage (SSD)"
#: templates/datacenterlight/index.html:286 #: datacenterlight/templates/datacenterlight/index.html:264
#: templates/datacenterlight/pricing.html:161 #: datacenterlight/templates/datacenterlight/pricing.html:161
msgid "Order Now!" msgid "Order Now!"
msgstr "Bestelle jetzt!" msgstr "Bestelle jetzt!"
#: templates/datacenterlight/index.html:302 #: datacenterlight/templates/datacenterlight/index.html:280
msgid "Want to know more? Subscribe to our newsletter!" msgid "Want to know more? Subscribe to our newsletter!"
msgstr "Willst du mehr wissen? Abonniere unseren Newsletter!" msgstr "Willst du mehr wissen? Abonniere unseren Newsletter!"
#: templates/datacenterlight/index.html:329 #: datacenterlight/templates/datacenterlight/index.html:307
msgid "Switzerland " msgid "Switzerland "
msgstr "Schweiz" msgstr "Schweiz"
#: templates/datacenterlight/index.html:346 #: datacenterlight/templates/datacenterlight/index.html:324
msgid "Questions?" msgid "Questions?"
msgstr "Fragen?" msgstr "Fragen?"
#: templates/datacenterlight/index.html:346 #: datacenterlight/templates/datacenterlight/index.html:324
msgid "Contact us!" msgid "Contact us!"
msgstr "Kontaktiere uns!" msgstr "Kontaktiere uns!"
#: templates/datacenterlight/index.html:364 #: datacenterlight/templates/datacenterlight/index.html:342
#: templates/datacenterlight/pricing.html:186 #: datacenterlight/templates/datacenterlight/pricing.html:186
msgid "Home" msgid "Home"
msgstr "Home" msgstr "Home"
#: templates/datacenterlight/index.html:377 #: datacenterlight/templates/datacenterlight/index.html:355
#: templates/datacenterlight/pricing.html:199 #: datacenterlight/templates/datacenterlight/pricing.html:199
msgid "Pricing" msgid "Pricing"
msgstr "Preise" msgstr "Preise"
#: templates/datacenterlight/pricing.html:71 #: datacenterlight/templates/datacenterlight/pricing.html:71
msgid "Buy VM" msgid "Buy VM"
msgstr "VM Kaufen" msgstr "VM Kaufen"
#: templates/datacenterlight/pricing.html:127 #: datacenterlight/templates/datacenterlight/pricing.html:127
msgid "Hosted in Switzerland" msgid "Hosted in Switzerland"
msgstr "Standort des Datacenters ist in der Schweiz" msgstr "Standort des Datacenters ist in der Schweiz"
#: templates/datacenterlight/pricing.html:144 #: datacenterlight/templates/datacenterlight/pricing.html:144
msgid "GB Storage (SSD)" msgid "GB Storage (SSD)"
msgstr "GB Storage (SSD)" msgstr "GB Storage (SSD)"
#: templates/datacenterlight/pricing.html:168 #: datacenterlight/templates/datacenterlight/pricing.html:168
msgid "Simple and affordable: Try our virtual machine with featherlight price." msgid "Simple and affordable: Try our virtual machine with featherlight price."
msgstr "" msgstr ""
"Einfach und bezahlbar: Testen Sie unsere virtuelen Machinen mit " "Einfach und bezahlbar: Testen Sie unsere virtuelen Machinen mit "
"federleichten Preisen" "federleichten Preisen"
#: templates/datacenterlight/pricing.html:171 #: templates/datacenterlight/pricing.html:171
#: datacenterlight/templates/datacenterlight/pricing.html:171
msgid "" msgid ""
"Our VMs are hosted in Glarus, Switzerland, and our website is currently " "Our VMs are hosted in Glarus, Switzerland, and our website is currently "
"running in BETA mode. If you want more information that you did not find on " "running in BETA mode. If you want more information that you did not find on "

View file

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-05-26 13:35+0000\n" "POT-Creation-Date: 2017-05-30 13:47+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,15 +18,21 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: cms_templates/djangocms_blog/_header_post_detail.html:20
#: 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 #: cms_templates/djangocms_blog/post_list.html:11
#: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:11 #: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:11
msgid "Articles by" msgid "Articles by"
msgstr "" msgstr "Artikel vom"
#: cms_templates/djangocms_blog/post_list.html:12 #: cms_templates/djangocms_blog/post_list.html:12
#: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:12 #: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:12
msgid "Archive" msgid "Archive"
msgstr "" msgstr "Archiv"
#: cms_templates/djangocms_blog/post_list.html:13 #: cms_templates/djangocms_blog/post_list.html:13
#: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:13 #: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:13
@ -36,39 +42,39 @@ msgstr ""
#: cms_templates/djangocms_blog/post_list.html:14 #: cms_templates/djangocms_blog/post_list.html:14
#: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:14 #: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:14
msgid "Category" msgid "Category"
msgstr "" msgstr "Kategorie"
#: cms_templates/djangocms_blog/post_list.html:21 #: cms_templates/djangocms_blog/post_list.html:21
#: digitalglarus/templates/glarus_blog/post_list.html:15 #: digitalglarus/templates/glarus_blog/post_list.html:15
#: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:22 #: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:22
msgid "No article found." msgid "No article found."
msgstr "" msgstr "Keine Artikel gefunden"
#: cms_templates/djangocms_blog/post_list.html:24 #: cms_templates/djangocms_blog/post_list.html:24
#: digitalglarus/templates/glarus_blog/post_list.html:18 #: digitalglarus/templates/glarus_blog/post_list.html:18
#: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:25 #: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:25
msgid "Back" msgid "Back"
msgstr "" msgstr "Zurück"
#: cms_templates/djangocms_blog/post_list.html:32 #: cms_templates/djangocms_blog/post_list.html:32
#: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:33 #: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:33
msgid "Newer Posts" msgid "Newer Posts"
msgstr "" msgstr "Neuere Einträge"
#: cms_templates/djangocms_blog/post_list.html:39 #: cms_templates/djangocms_blog/post_list.html:39
#: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:40 #: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:40
msgid "Older Posts" msgid "Older Posts"
msgstr "" msgstr "Ältere Einträge"
#: cms_templates/includes/blog_item.html:31 #: cms_templates/includes/blog_item.html:31
#: digitalglarus/templates/glarus_blog/includes/blog_item.html:32 #: digitalglarus/templates/glarus_blog/includes/blog_item.html:32
msgid "read more" msgid "read more"
msgstr "" msgstr "weiterlesen"
#: cms_templates/includes/blog_meta.html:6 #: cms_templates/includes/blog_meta.html:6
#: digitalglarus/templates/glarus_blog/includes/blog_meta.html:6 #: digitalglarus/templates/glarus_blog/includes/blog_meta.html:6
msgid "by" msgid "by"
msgstr "" msgstr "von"
#: digitalglarus/cms_plugins.py:9 #: digitalglarus/cms_plugins.py:9
msgid "Digital Glarus Gallery" msgid "Digital Glarus Gallery"
@ -81,53 +87,53 @@ msgstr ""
#: digitalglarus/forms.py:35 digitalglarus/forms.py:70 nosystemd/forms.py:47 #: digitalglarus/forms.py:35 digitalglarus/forms.py:70 nosystemd/forms.py:47
#: utils/forms.py:109 #: utils/forms.py:109
msgid "Street Address" msgid "Street Address"
msgstr "" msgstr "Adresse"
#: digitalglarus/forms.py:36 digitalglarus/forms.py:71 nosystemd/forms.py:48 #: digitalglarus/forms.py:36 digitalglarus/forms.py:71 nosystemd/forms.py:48
#: utils/forms.py:110 utils/forms.py:124 #: utils/forms.py:110 utils/forms.py:124
msgid "City" msgid "City"
msgstr "" msgstr "Stadt"
#: digitalglarus/forms.py:37 digitalglarus/forms.py:72 nosystemd/forms.py:49 #: digitalglarus/forms.py:37 digitalglarus/forms.py:72 nosystemd/forms.py:49
#: utils/forms.py:111 utils/forms.py:125 #: utils/forms.py:111 utils/forms.py:125
msgid "Postal Code" msgid "Postal Code"
msgstr "" msgstr "Postleitzahl"
#: digitalglarus/forms.py:38 digitalglarus/forms.py:73 nosystemd/forms.py:50 #: digitalglarus/forms.py:38 digitalglarus/forms.py:73 nosystemd/forms.py:50
#: utils/forms.py:112 utils/forms.py:126 #: utils/forms.py:112 utils/forms.py:126
msgid "Country" msgid "Country"
msgstr "" msgstr "Land"
#: digitalglarus/templates/digitalglarus/login.html:88 #: digitalglarus/templates/digitalglarus/login.html:88
#: digitalglarus/templates/digitalglarus/login_hello.html:32 #: digitalglarus/templates/digitalglarus/login_hello.html:32
#: nosystemd/templates/nosystemd/login.html:23 #: nosystemd/templates/nosystemd/login.html:23
msgid "You haven been logged out" msgid "You haven been logged out"
msgstr "" msgstr "Sie wurden abgemeldet"
#: digitalglarus/templates/glarus_blog/post_list.html:23 #: digitalglarus/templates/glarus_blog/post_list.html:23
#: nosystemd/templates/nosystemd/donations.html:74 #: nosystemd/templates/nosystemd/donations.html:74
msgid "previous" msgid "previous"
msgstr "" msgstr "vorherige"
#: digitalglarus/templates/glarus_blog/post_list.html:26 #: digitalglarus/templates/glarus_blog/post_list.html:26
#: dynamicweb/settings/base.py:182 templates/cms/__init__.py:10 #: dynamicweb/settings/base.py:182 templates/cms/__init__.py:10
#: templates/cms/ungleichch/__init__.py:5 #: templates/cms/ungleichch/__init__.py:5
msgid "Page" msgid "Page"
msgstr "" msgstr "Seite"
#: digitalglarus/templates/glarus_blog/post_list.html:26 #: digitalglarus/templates/glarus_blog/post_list.html:26
msgid "of" msgid "of"
msgstr "" msgstr "vom"
#: digitalglarus/templates/glarus_blog/post_list.html:29 #: digitalglarus/templates/glarus_blog/post_list.html:29
#: nosystemd/templates/nosystemd/donations.html:80 #: nosystemd/templates/nosystemd/donations.html:80
msgid "next" msgid "next"
msgstr "" msgstr "nächste"
#: digitalglarus/templates/language_chooser.html:8 #: digitalglarus/templates/language_chooser.html:8
#: ungleich/templates/cms/ungleichch/_header_base.html:23 #: ungleich/templates/cms/ungleichch/_header_base.html:23
msgid "Change to language:" msgid "Change to language:"
msgstr "" msgstr "Sprache wechseln zu: "
#: digitalglarus/templates/new_base_glarus.html:168 #: digitalglarus/templates/new_base_glarus.html:168
#: digitalglarus/templates/new_base_glarus.html:191 #: digitalglarus/templates/new_base_glarus.html:191
@ -314,13 +320,12 @@ msgstr "Name"
#: membership/forms.py:43 #: membership/forms.py:43
#, fuzzy #, fuzzy
#| msgid "Phone number"
msgid "Card number" msgid "Card number"
msgstr "Telefon" msgstr "Kartennummer"
#: membership/forms.py:43 #: membership/forms.py:43
msgid "Expiry date" msgid "Expiry date"
msgstr "" msgstr "Ablaufdatum"
#: membership/forms.py:44 #: membership/forms.py:44
msgid "CCV" msgid "CCV"
@ -339,14 +344,12 @@ msgid "Use this pattern(MM/YYYY)."
msgstr "" msgstr ""
#: membership/models.py:182 #: membership/models.py:182
#, fuzzy
#| msgid "Phone number"
msgid "Wrong CCV number." msgid "Wrong CCV number."
msgstr "Telefon" msgstr "Falsche CCV Nummer"
#: nosystemd/forms.py:46 #: nosystemd/forms.py:46
msgid "Amount" msgid "Amount"
msgstr "" msgstr "Betrag"
#: nosystemd/templates/nosystemd/base.html:70 #: nosystemd/templates/nosystemd/base.html:70
msgid "My Donations" msgid "My Donations"
@ -1464,6 +1467,10 @@ msgstr ""
msgid "Unknown or unspecified country" msgid "Unknown or unspecified country"
msgstr "" msgstr ""
#: utils/forms.py:20
msgid "Enter your name or company name"
msgstr "Geben Sie Ihren Namen oder der Ihrer Firma ein"
#: utils/forms.py:123 #: utils/forms.py:123
msgid "Street Building" msgid "Street Building"
msgstr "" msgstr ""

View file

@ -16,7 +16,7 @@
</h2> </h2>
</a> </a>
<p class="post-meta" style="font-size:0.9em;"> <p class="post-meta" style="font-size:0.9em;">
Posted on {{ post.date_published|date:"DATE_FORMAT" }} {% trans "Posted on" %}{{ post.date_published|date:"DATE_FORMAT" }}
</p> </p>
<p class="post-subtitle"> <p class="post-subtitle">

View file

@ -25,47 +25,47 @@ msgstr "Fügen Sie Ihren public key ein"
#: hosting/templates/hosting/base_short.html:68 #: hosting/templates/hosting/base_short.html:68
#: hosting/templates/hosting/base_short.html:139 #: hosting/templates/hosting/base_short.html:139
msgid "My Virtual Machines" msgid "My Virtual Machines"
msgstr "" msgstr "Meine virtuellen Maschinen"
#: hosting/templates/hosting/base_short.html:73 #: hosting/templates/hosting/base_short.html:73
#: hosting/templates/hosting/base_short.html:145 #: hosting/templates/hosting/base_short.html:145
#: hosting/templates/hosting/orders.html:12 #: hosting/templates/hosting/orders.html:12
msgid "My Orders" msgid "My Orders"
msgstr "" msgstr "Meine Bestellungen"
#: hosting/templates/hosting/base_short.html:78 #: hosting/templates/hosting/base_short.html:78
#: hosting/templates/hosting/base_short.html:152 #: hosting/templates/hosting/base_short.html:152
msgid "Keys" msgid "Keys"
msgstr "" msgstr "Schlüssel"
#: hosting/templates/hosting/base_short.html:83 #: hosting/templates/hosting/base_short.html:83
#: hosting/templates/hosting/base_short.html:158 #: hosting/templates/hosting/base_short.html:158
msgid "Notifications " msgid "Notifications "
msgstr "" msgstr "Benachrichtigungen"
#: hosting/templates/hosting/base_short.html:90 #: hosting/templates/hosting/base_short.html:90
msgid "Logout" msgid "Logout"
msgstr "" msgstr "Abmeleden"
#: hosting/templates/hosting/base_short.html:95 #: hosting/templates/hosting/base_short.html:95
msgid "How it works" msgid "How it works"
msgstr "" msgstr "Wie es funktioniert"
#: hosting/templates/hosting/base_short.html:98 #: hosting/templates/hosting/base_short.html:98
msgid "Your infrastructure" msgid "Your infrastructure"
msgstr "" msgstr "Ihre Infrastruktur"
#: hosting/templates/hosting/base_short.html:101 #: hosting/templates/hosting/base_short.html:101
msgid "Our inftrastructure" msgid "Our inftrastructure"
msgstr "" msgstr "Unsere Infrastruktur"
#: hosting/templates/hosting/base_short.html:104 #: hosting/templates/hosting/base_short.html:104
msgid "Pricing" msgid "Pricing"
msgstr "" msgstr "Preise"
#: hosting/templates/hosting/base_short.html:107 #: hosting/templates/hosting/base_short.html:107
msgid "Contact" msgid "Contact"
msgstr "" msgstr "Kontakt"
#: hosting/templates/hosting/base_short.html:110 #: hosting/templates/hosting/base_short.html:110
#: hosting/templates/hosting/login.html:32 #: hosting/templates/hosting/login.html:32
@ -73,19 +73,19 @@ msgstr ""
#: hosting/templates/hosting/reset_password.html:31 #: hosting/templates/hosting/reset_password.html:31
#: hosting/templates/hosting/signup.html:30 #: hosting/templates/hosting/signup.html:30
msgid "Login" msgid "Login"
msgstr "" msgstr "Anmelden"
#: hosting/templates/hosting/base_short.html:134 #: hosting/templates/hosting/base_short.html:134
msgid "Home" msgid "Home"
msgstr "" msgstr "Home"
#: templates/hosting/bill_detail.html:11 templates/hosting/order_detail.html:10 #: templates/hosting/bill_detail.html:11 templates/hosting/order_detail.html:10
msgid "Invoice" msgid "Invoice"
msgstr "" msgstr "Rechnung"
#: templates/hosting/bill_detail.html:11 templates/hosting/order_detail.html:10 #: templates/hosting/bill_detail.html:11 templates/hosting/order_detail.html:10
msgid "Order #" msgid "Order #"
msgstr "" msgstr "Rechnung #"
#: templates/hosting/bill_detail.html:25 #: templates/hosting/bill_detail.html:25
msgid "ungleich GmbH" msgid "ungleich GmbH"
@ -114,7 +114,7 @@ msgstr ""
#: templates/hosting/bill_detail.html:68 #: templates/hosting/bill_detail.html:68
#, python-format #, python-format
msgid "Alles Preise in CHF mit 8%% Mehrwertsteuer." msgid "Alles Preise in CHF mit 8%% Mehrwertsteuer."
msgstr "" msgstr "All prices in CHF including 8%% VAT"
#: templates/hosting/bill_detail.html:69 #: templates/hosting/bill_detail.html:69
msgid "Betrag zahlbar innerhalb von 30 Tagen ab Rechnungseingang." msgid "Betrag zahlbar innerhalb von 30 Tagen ab Rechnungseingang."
@ -142,7 +142,7 @@ msgstr ""
#: templates/hosting/bills.html:12 #: templates/hosting/bills.html:12
msgid "Customers" msgid "Customers"
msgstr "" msgstr "Kunden"
#: hosting/templates/hosting/bills.html:16 #: hosting/templates/hosting/bills.html:16
#: hosting/templates/hosting/virtual_machine_key.html:42 #: hosting/templates/hosting/virtual_machine_key.html:42
@ -155,17 +155,17 @@ msgstr ""
#: templates/hosting/bills.html:28 #: templates/hosting/bills.html:28
msgid "View Bill" msgid "View Bill"
msgstr "" msgstr "Rechnung anzeigen"
#: templates/hosting/bills.html:41 templates/hosting/orders.html.py:83 #: templates/hosting/bills.html:41 templates/hosting/orders.html.py:83
#: templates/hosting/virtual_machines.html:70 #: templates/hosting/virtual_machines.html:70
msgid "previous" msgid "previous"
msgstr "" msgstr "vorherige"
#: templates/hosting/bills.html:47 templates/hosting/orders.html.py:89 #: templates/hosting/bills.html:47 templates/hosting/orders.html.py:89
#: templates/hosting/virtual_machines.html:76 #: templates/hosting/virtual_machines.html:76
msgid "next" msgid "next"
msgstr "" msgstr "nächste"
#: templates/hosting/confirm_reset_password.html:10 #: templates/hosting/confirm_reset_password.html:10
#: templates/hosting/login.html:9 templates/hosting/reset_password.html.py:9 #: templates/hosting/login.html:9 templates/hosting/reset_password.html.py:9
@ -175,26 +175,42 @@ msgstr "Ihre VM in der Schweiz"
#: templates/hosting/confirm_reset_password.html:14 #: templates/hosting/confirm_reset_password.html:14
msgid "Set your new password" msgid "Set your new password"
msgstr "" msgstr "Setzen Ihr neues Passwort"
#: hosting/templates/hosting/confirm_reset_password.html:28 #: hosting/templates/hosting/confirm_reset_password.html:28
#: hosting/templates/hosting/reset_password.html:22 #: hosting/templates/hosting/reset_password.html:22
msgid "Reset" msgid "Reset"
msgstr "" msgstr "Zurücksetzen"
#: hosting/templates/hosting/confirm_reset_password.html:32 #: hosting/templates/hosting/confirm_reset_password.html:32
#: hosting/templates/hosting/reset_password.html:28 #: hosting/templates/hosting/reset_password.html:28
#: hosting/templates/hosting/signup.html:27 #: hosting/templates/hosting/signup.html:27
msgid "Already have an account ?" msgid "Already have an account ?"
msgstr "" msgstr "Besitzen sie bereits ein Bentzerkonto"
#: templates/hosting/create_virtual_machine.html:19 #: hosting/templates/hosting/confirm_reset_password.html:32
msgid "Log in"
msgstr "Anmelden"
#: hosting/templates/hosting/create_virtual_machine.html:19
msgid "New Virtual Machine" msgid "New Virtual Machine"
msgstr "" msgstr "Neue virtuelle Maschine"
#: hosting/templates/hosting/create_virtual_machine.html:24
msgid "Select VM Template:"
msgstr "Wählen Sie eine Vorlage"
#: hosting/templates/hosting/create_virtual_machine.html:32
msgid "Select VM Configuration:"
msgstr "Wählen Sie eine Konfiguration"
#: hosting/templates/hosting/create_virtual_machine.html:39
msgid "CHF/Month"
msgstr "CHF/Monat"
#: templates/hosting/create_virtual_machine.html:45 #: templates/hosting/create_virtual_machine.html:45
msgid "Start VM" msgid "Start VM"
msgstr "" msgstr "Start VM"
#: templates/hosting/emails/password_reset_email.html:2 #: templates/hosting/emails/password_reset_email.html:2
#: templates/hosting/emails/password_reset_email.txt:2 #: templates/hosting/emails/password_reset_email.txt:2
@ -220,48 +236,53 @@ msgstr ""
msgid "The %(site_name)s team" msgid "The %(site_name)s team"
msgstr "" msgstr ""
#: hosting/templates/hosting/login.html:10
#: hosting/templates/hosting/reset_password.html:10
#: hosting/templates/hosting/signup.html:9
msgid "Your VM hosted in Switzerland"
msgstr "Ihre VM gehostet in der Schweiz"
#: hosting/templates/hosting/login.html:26 #: hosting/templates/hosting/login.html:26
msgid "You haven been logged out" msgid "You haven been logged out"
msgstr "" msgstr "Sie wurden abgmeldet"
#: hosting/templates/hosting/login.html:49 #: hosting/templates/hosting/login.html:49
msgid "Don't have an account yet ? " msgid "Don't have an account yet ? "
msgstr "" msgstr "Besitzen Sie kein Benutzerkonto?"
#: hosting/templates/hosting/login.html:52 #: hosting/templates/hosting/login.html:52
#: hosting/templates/hosting/signup.html:13 #: hosting/templates/hosting/signup.html:13
#: hosting/templates/hosting/signup.html:21 #: hosting/templates/hosting/signup.html:21
msgid "Sign up" msgid "Sign up"
msgstr "" msgstr "Registrieren"
#: hosting/templates/hosting/login.html:54 #: hosting/templates/hosting/login.html:54
msgid "Forgot your password ? " msgid "Forgot your password ? "
msgstr "" msgstr "Passwort vergessen?"
#: templates/hosting/notifications.html:9 #: templates/hosting/notifications.html:9
msgid "Notifications" msgid "Notifications"
msgstr "" msgstr "Benachrichtigungen"
#: templates/hosting/notifications.html:16 #: templates/hosting/notifications.html:16
msgid "Unread" msgid "Unread"
msgstr "" msgstr "Ungelesen"
#: templates/hosting/notifications.html:26 #: templates/hosting/notifications.html:26
msgid "All" msgid "All"
msgstr "" msgstr "Alle"
#: templates/hosting/notifications.html:38 #: templates/hosting/notifications.html:38
msgid "Unread notifications" msgid "Unread notifications"
msgstr "" msgstr "Ungelesene Benachrichtigungen"
#: templates/hosting/notifications.html:48 #: templates/hosting/notifications.html:48
msgid "Mark as read" msgid "Mark as read"
msgstr "" msgstr "Als gelesen markieren"
#: templates/hosting/notifications.html:59 #: templates/hosting/notifications.html:59
msgid "All notifications" msgid "All notifications"
msgstr "" msgstr "Alle Benachrichtigungen"
#: templates/hosting/order_detail.html:16 #: templates/hosting/order_detail.html:16
#: templates/hosting/order_detail.html:24 #: templates/hosting/order_detail.html:24
@ -274,25 +295,31 @@ msgstr ""
#: templates/hosting/order_detail.html:38 #: templates/hosting/order_detail.html:38
msgid "Payment Method:" msgid "Payment Method:"
msgstr "" msgstr "Bezahlmethode"
#: templates/hosting/order_detail.html:49 #: templates/hosting/order_detail.html:49
msgid "Order summary" msgid "Order summary"
msgstr "" msgstr "Bestellungsübersicht"
#: templates/hosting/order_detail.html:52 #: hosting/templates/hosting/order_detail.html:52
#: templates/hosting/virtual_machine_detail.html:76 #: hosting/templates/hosting/payment.html:17
#: hosting/templates/hosting/virtual_machine_detail.html:75
msgid "Cores" msgid "Cores"
msgstr "" msgstr "Prozessorkerne"
#: templates/hosting/order_detail.html:54 #: templates/hosting/order_detail.html:54
#: templates/hosting/virtual_machine_detail.html:82 #: templates/hosting/virtual_machine_detail.html:82
#: hosting/templates/hosting/order_detail.html:54
#: hosting/templates/hosting/payment.html:20
#: hosting/templates/hosting/virtual_machine_detail.html:81
msgid "Memory" msgid "Memory"
msgstr "" msgstr "Arbeitsspeicher"
#: templates/hosting/order_detail.html:56 #: templates/hosting/order_detail.html:56
#: hosting/templates/hosting/order_detail.html:56
#: hosting/templates/hosting/payment.html:23
msgid "Disk space" msgid "Disk space"
msgstr "" msgstr "Festplattenkapazität"
#: templates/hosting/order_detail.html:58 #: templates/hosting/order_detail.html:58
msgid "Total" msgid "Total"
@ -300,15 +327,15 @@ msgstr ""
#: templates/hosting/order_detail.html:64 #: templates/hosting/order_detail.html:64
msgid "Finish Configuration" msgid "Finish Configuration"
msgstr "" msgstr "Konfiguration beenden"
#: templates/hosting/orders.html:17 #: templates/hosting/orders.html:17
msgid "Date" msgid "Date"
msgstr "" msgstr "Datum"
#: templates/hosting/orders.html:18 #: templates/hosting/orders.html:18
msgid "Amount" msgid "Amount"
msgstr "" msgstr "Betrag"
#: hosting/templates/hosting/orders.html:19 #: hosting/templates/hosting/orders.html:19
#: hosting/templates/hosting/virtual_machine_detail.html:30 #: hosting/templates/hosting/virtual_machine_detail.html:30
@ -319,71 +346,104 @@ msgstr ""
#: templates/hosting/orders.html:30 #: templates/hosting/orders.html:30
msgid "Approved" msgid "Approved"
msgstr "" msgstr "Akzeptiert"
#: templates/hosting/orders.html:32 #: templates/hosting/orders.html:32
msgid "Declined" msgid "Declined"
msgstr "" msgstr "Abgelehnt"
#: templates/hosting/orders.html:37 templates/hosting/virtual_machines.html:58 #: templates/hosting/orders.html:37 templates/hosting/virtual_machines.html:58
msgid "View Detail" msgid "View Detail"
msgstr "" msgstr "Details anzeigen"
#: templates/hosting/orders.html:41 #: templates/hosting/orders.html:41
msgid "Cancel Order" msgid "Cancel Order"
msgstr "" msgstr "Bestellung stornieren"
#: templates/hosting/orders.html:56 #: templates/hosting/orders.html:56
msgid "Do You want do delete your order?" msgid "Do You want do delete your order?"
msgstr "" msgstr "Wollen Sie ihre Bestellung löschen?"
#: templates/hosting/orders.html:64 #: templates/hosting/orders.html:64
msgid "Close" msgid "Close"
msgstr "" msgstr "Schliessen"
#: templates/hosting/orders.html:66 #: templates/hosting/orders.html:66
msgid "Delete" msgid "Delete"
msgstr "" msgstr "Löschen"
#: hosting/templates/hosting/payment.html:12
msgid "Billing Amount"
msgstr "Rechnungsbetrag"
#: hosting/templates/hosting/payment.html:35
msgid "Billing Address"
msgstr "Rechnungsadresse"
#: hosting/templates/hosting/payment.html:49
msgid "Payment Details"
msgstr "Rechnungsdetails"
#: hosting/templates/hosting/payment.html:61
#: hosting/templates/hosting/payment.html:103
msgid "Submit Payment"
msgstr "Betrag überweisen"
#: hosting/templates/hosting/payment.html:70
msgid "CARD NUMBER"
msgstr "Kreditkartennummer"
#: hosting/templates/hosting/payment.html:75
msgid "Valid Card Number"
msgstr "Gültige Kreditkartennummer"
#: hosting/templates/hosting/payment.html:84
msgid "EXPIRATION DATE"
msgstr "Ablaufdatum"
#: hosting/templates/hosting/payment.html:95
msgid "CV CODE"
msgstr "CV Code"
#: hosting/templates/hosting/reset_password.html:14 #: hosting/templates/hosting/reset_password.html:14
msgid "Reset your password" msgid "Reset your password"
msgstr "" msgstr "Passwort zurücksetzen"
#: templates/hosting/virtual_machine_detail.html:19 #: templates/hosting/virtual_machine_detail.html:19
msgid "Settings" msgid "Settings"
msgstr "" msgstr "Einstellungen"
#: templates/hosting/virtual_machine_detail.html:25 #: templates/hosting/virtual_machine_detail.html:25
msgid "Billing" msgid "Billing"
msgstr "" msgstr "Abrechnungen"
#: templates/hosting/virtual_machine_detail.html:60 #: templates/hosting/virtual_machine_detail.html:60
msgid "Ip not assigned yet" msgid "Ip not assigned yet"
msgstr "" msgstr "Ip nicht zugewiesen"
#: templates/hosting/virtual_machine_detail.html:89 #: templates/hosting/virtual_machine_detail.html:89
msgid "Disk" msgid "Disk"
msgstr "" msgstr "Festplatte"
#: templates/hosting/virtual_machine_detail.html:98 #: templates/hosting/virtual_machine_detail.html:98
msgid "Configuration" msgid "Configuration"
msgstr "" msgstr "Konfiguration"
#: templates/hosting/virtual_machine_detail.html:108 #: templates/hosting/virtual_machine_detail.html:108
msgid "Current pricing" msgid "Current pricing"
msgstr "" msgstr "Aktueller Preis"
#: templates/hosting/virtual_machine_detail.html:117 #: templates/hosting/virtual_machine_detail.html:117
msgid "Current status" msgid "Current status"
msgstr "" msgstr "Aktueller Status"
#: templates/hosting/virtual_machine_detail.html:142 #: templates/hosting/virtual_machine_detail.html:142
msgid "Terminate Virtual Machine" msgid "Terminate Virtual Machine"
msgstr "" msgstr "Virtuelle Maschine beenden"
#: templates/hosting/virtual_machine_detail.html:163 #: templates/hosting/virtual_machine_detail.html:163
msgid "Terminate your Virtual Machine" msgid "Terminate your Virtual Machine"
msgstr "" msgstr "Ihre virtuelle Maschine beenden"
#: templates/hosting/virtual_machine_detail.html:166 #: templates/hosting/virtual_machine_detail.html:166
msgid "Are you sure do you want to cancel your Virtual Machine " msgid "Are you sure do you want to cancel your Virtual Machine "
@ -392,43 +452,57 @@ msgstr ""
#: templates/hosting/virtual_machine_detail.html:166 #: templates/hosting/virtual_machine_detail.html:166
msgid "plan?" msgid "plan?"
msgstr "" msgstr ""
msgstr "Sind Sie sicher, dass Sie ihre virtuelle Maschine beenden wollen "\
#: templates/hosting/virtual_machine_detail.html:169 #: templates/hosting/virtual_machine_detail.html:169
msgid "Cancel" msgid "Cancel"
msgstr "" msgstr "Beenden"
#: templates/hosting/virtual_machine_key.html:11 #: templates/hosting/virtual_machine_key.html:11
msgid "Access Key" msgid "Access Key"
msgstr "" msgstr "Zugriffsschlüssel"
#: hosting/templates/hosting/virtual_machine_key.html:25 #: hosting/templates/hosting/virtual_machine_key.html:25
msgid "Upload your own key. " msgid "Upload your own key. "
msgstr "" msgstr "Laden Sie ihren Schlüssel hoch"
#: hosting/templates/hosting/virtual_machine_key.html:29 #: hosting/templates/hosting/virtual_machine_key.html:29
msgid "Upload Key"
msgstr "Schlüssel hochladen"
#: hosting/templates/hosting/virtual_machine_key.html:33
msgid "Or generate a new key pair." msgid "Or generate a new key pair."
msgstr "" msgstr "Oder erstellen Sie ein neues Schlüsselpaar"
#: hosting/templates/hosting/virtual_machine_key.html:31 #: hosting/templates/hosting/virtual_machine_key.html:31
msgid "Generate Key Pair" msgid "Generate Key Pair"
msgstr "Schlüsselpaar generieren"
#: hosting/templates/hosting/virtual_machine_key.html:40
msgid ""
"Use your created key to access to the machine. If you lost it, contact us."
msgstr "" msgstr ""
"Verwenden Sie Ihren privaten SSH Schlüssel um sich mit Ihren Maschinen zu "
"verbinden. Falls Sie ihn verloren haben kontaktieren Sie uns."
#: hosting/templates/hosting/virtual_machine_key.html:43 #: hosting/templates/hosting/virtual_machine_key.html:43
msgid "Created at" msgid "Created at"
msgstr "" msgstr "Erstellt am"
#: hosting/templates/hosting/virtual_machine_key.html:66 #: hosting/templates/hosting/virtual_machine_key.html:66
#: hosting/templates/hosting/virtual_machine_key.html:79 #: hosting/templates/hosting/virtual_machine_key.html:79
msgid "Warning!" msgid "Warning!"
msgstr "" msgstr "Achtung!"
#: hosting/templates/hosting/virtual_machine_key.html:66 #: hosting/templates/hosting/virtual_machine_key.html:66
msgid "You can download your SSH private key once. Don't lost your key" msgid "You can download your SSH private key once. Don't lost your key"
msgstr "" msgstr ""
"Sie können ihren privaten SSH Schlüssel nur einmal herunterladen. Bewaren "
"Sie ihn sicher auf."
#: hosting/templates/hosting/virtual_machine_key.html:74 #: hosting/templates/hosting/virtual_machine_key.html:74
msgid "Copy to Clipboard" msgid "Copy to Clipboard"
msgstr "" msgstr "Kopieren"
#: hosting/templates/hosting/virtual_machine_key.html:75 #: hosting/templates/hosting/virtual_machine_key.html:75
msgid "Download" msgid "Download"
@ -439,18 +513,20 @@ msgid ""
"Your SSH private key was already generated and downloaded, if you lost it, " "Your SSH private key was already generated and downloaded, if you lost it, "
"contact us. " "contact us. "
msgstr "" msgstr ""
"Ihr privater SSH Schlüssel wurde bereits generiert und heruntergeladen, "
"falls Sie ihn verloren haben kontaktieren Sie uns."
#: hosting/templates/hosting/virtual_machine_key.html:82 #: hosting/templates/hosting/virtual_machine_key.html:82
msgid "Generate my key" msgid "Generate my key"
msgstr "" msgstr "Generiere meinen Schlüssel"
#: templates/hosting/virtual_machines.html:9 #: templates/hosting/virtual_machines.html:9
msgid "Virtual Machines" msgid "Virtual Machines"
msgstr "" msgstr "Virtuelle Maschinen"
#: templates/hosting/virtual_machines.html:22 #: templates/hosting/virtual_machines.html:22
msgid "Create VM" msgid "Create VM"
msgstr "" msgstr "Neue VM"
#: templates/hosting/virtual_machines.html:28 #: templates/hosting/virtual_machines.html:28
msgid "ID" msgid "ID"

View file

@ -1,5 +1,8 @@
$( document ).ready(function() { $( document ).ready(function() {
$.ajaxSetup({ $.ajaxSetup({
beforeSend: function(xhr, settings) { beforeSend: function(xhr, settings) {
function getCookie(name) { function getCookie(name) {
@ -26,6 +29,12 @@ $( document ).ready(function() {
var hasCreditcard = window.hasCreditcard || false; var hasCreditcard = window.hasCreditcard || false;
if (!hasCreditcard){
var stripe = Stripe(window.stripeKey);
var elements = stripe.elements({locale: window.current_lan});
var card = elements.create('card', options={hidePostalCode: true});
card.mount('#card-element');
}
console.log("has creditcard", hasCreditcard); console.log("has creditcard", hasCreditcard);
// hasCreditcard= true; // hasCreditcard= true;
@ -38,10 +47,8 @@ $( document ).ready(function() {
console.log("creditcard sdasd"); console.log("creditcard sdasd");
// if (hasCreditcard) { // if (hasCreditcard) {
$('#billing-form').submit(); $('#billing-form').submit();
console.log("has creditcard2");
// } // }
// $form.submit();
} }
@ -53,33 +60,55 @@ $( document ).ready(function() {
function payWithStripe(e) { function payWithStripe(e) {
e.preventDefault(); e.preventDefault();
/* Visual feedback */ function stripeTokenHandler(token) {
$form.find('[type=submit]').html('Validating <i class="fa fa-spinner fa-pulse"></i>'); // Insert the token ID into the form so it gets submitted to the server
var form = document.getElementById('payment-form');
var hiddenInput = document.createElement('input');
$('#id_token').val(token.id);
var PublishableKey = window.stripeKey;
Stripe.setPublishableKey(PublishableKey);
Stripe.card.createToken($form, function stripeResponseHandler(status, response) {
if (response.error) {
/* Visual feedback */
$form.find('[type=submit]').html('Try again');
/* Show Stripe errors on the form */
$form.find('.payment-errors').text(response.error.message);
$form.find('.payment-errors').closest('.row').show();
} else {
/* Visual feedback */
$form.find('[type=submit]').html('Processing <i class="fa fa-spinner fa-pulse"></i>');
/* Hide Stripe errors on the form */
$form.find('.payment-errors').closest('.row').hide();
$form.find('.payment-errors').text("");
// response contains id and card, which contains additional card details
var token = response.id;
// AJAX
//set token on a hidden input
$('#id_token').val(token);
$('#billing-form').submit(); $('#billing-form').submit();
} }
stripe.createToken(card).then(function(result) {
if (result.error) {
// Inform the user if there was an error
var errorElement = document.getElementById('card-errors');
errorElement.textContent = result.error.message;
} else {
$form.find('[type=submit]').html('Processing <i class="fa fa-spinner fa-pulse"></i>');
// Send the token to your server
stripeTokenHandler(result.token);
}
}); });
// /* Visual feedback */
// $form.find('[type=submit]').html('Validating <i class="fa fa-spinner fa-pulse"></i>');
// var PublishableKey = window.stripeKey;
// Stripe.setPublishableKey(PublishableKey);
// Stripe.card.createToken($form, function stripeResponseHandler(status, response) {
// if (response.error) {
// /* Visual feedback */
// $form.find('[type=submit]').html('Try again');
// /* Show Stripe errors on the form */
// $form.find('.payment-errors').text(response.error.message);
// $form.find('.payment-errors').closest('.row').show();
// } else {
// /* Visual feedback */
// $form.find('[type=submit]').html('Processing <i class="fa fa-spinner fa-pulse"></i>');
// /* Hide Stripe errors on the form */
// $form.find('.payment-errors').closest('.row').hide();
// $form.find('.payment-errors').text("");
// // response contains id and card, which contains additional card details
// var token = response.id;
// // AJAX
// //set token on a hidden input
// $('#id_token').val(token);
// $('#billing-form').submit();
// }
// });
} }
/* Form validation */ /* Form validation */
@ -131,7 +160,7 @@ $( document ).ready(function() {
} else { } else {
return false; return false;
} }
} };
// $form.find('[type=submit]').prop('disabled', true); // $form.find('[type=submit]').prop('disabled', true);
// var readyInterval = setInterval(function() { // var readyInterval = setInterval(function() {

View file

@ -85,7 +85,7 @@
<ul id="g-account-menu" class="dropdown-menu" role="menu"> <ul id="g-account-menu" class="dropdown-menu" role="menu">
<li><a href="{% url 'hosting:logout' %}"><i class="glyphicon glyphicon-lock"></i>{% trans "Logout"%} </a></li> <li><a href="{% url 'hosting:logout' %}"><i class="glyphicon glyphicon-lock"></i>{% trans "Logout"%} </a></li>
<li> <li>
<a href="{% url 'hosting:key_pair' %}"> <a href="{% url 'hosting:ssh_keys' %}">
<i class="fa fa-key"></i> {% trans "Keys"%} <i class="fa fa-key"></i> {% trans "Keys"%}
</a> </a>
</li> </li>
@ -128,7 +128,46 @@
{% if request.user.is_authenticated %} {% if request.user.is_authenticated %}
<footer class="navbar-fixed-bottom"> <footer class="navbar-fixed-bottom">
<div class="container"> <div class="container">
<<<<<<< HEAD
<p class="copyright text-muted small">Copyright &copy; ungleich GmbH {% now "Y" %}. All Rights Reserved</p> <p class="copyright text-muted small">Copyright &copy; ungleich GmbH {% now "Y" %}. All Rights Reserved</p>
=======
<div class="row">
<div class="col-lg-12 hidden-xs">
<ul class="list-inline">
<li>
<a href="#">{% trans "Home"%}</a>
</li>
<li class="footer-menu-divider">&sdot;</li>
<li>
<a href="{% url 'hosting:virtual_machines' %}">
{% trans "My Virtual Machines"%}
</a>
</li>
<li class="footer-menu-divider">&sdot;</li>
<li>
<a href="{% url 'hosting:orders' %}">
{% trans "My Orders"%}
</a>
</li>
<li>&sdot;</li>
<li>
<li>
<a href="{% url 'hosting:ssh_keys' %}">
{% trans "Keys"%}
</a>
</li>
<li class="footer-menu-divider">&sdot;</li>
<li>
<a href="{% url 'hosting:notifications' %}">
{% trans "Notifications "%}
</a>
</li>
</ul>
<p class="copyright text-muted small">Copyright &copy; ungleich GmbH {% now "Y" %}. All Rights Reserved</p>
</div>
</div>
>>>>>>> f4997f041ca9496bf9a63706726a20d0a31d1c28
</div> </div>
</footer> </footer>
{% endif %} {% endif %}
@ -149,8 +188,9 @@
<!-- Init JavaScript --> <!-- Init JavaScript -->
<script src="{% static 'hosting/js/initial.js' %}"></script> <script src="{% static 'hosting/js/initial.js' %}"></script>
<script src="https://js.stripe.com/v3/"></script>
<script src="https://js.stripe.com/v2/"></script>
<!-- Stripe Lib --> <!-- Stripe Lib -->
<script type="text/javascript" src="//js.stripe.com/v2/"></script>
<!-- Proccess payment lib --> <!-- Proccess payment lib -->
<script type="text/javascript" src="{% static 'hosting/js/payment.js' %}"></script> <script type="text/javascript" src="{% static 'hosting/js/payment.js' %}"></script>

View file

@ -21,7 +21,7 @@
<form method="POST" action=""> <form method="POST" action="">
{% csrf_token %} {% csrf_token %}
<div class="form-group"> <div class="form-group">
Select VM Template: {% trans "Select VM Template:" %}
<select name="vm_template_id"> <select name="vm_template_id">
{% for template in templates %} {% for template in templates %}
<option value="{{template.id}}">{{template.name}} </option> <option value="{{template.id}}">{{template.name}} </option>
@ -29,14 +29,14 @@
</select> </select>
</div> </div>
<div class="form-group"> <div class="form-group">
Select VM Configuration: {% trans "Select VM Configuration:" %}
<select name="configuration"> <select name="configuration">
{% for config in configuration_options %} {% for config in configuration_options %}
<option value="{{config.id}}"> <option value="{{config.id}}">
CORE: {{config.cpu|floatformat}}, CORE: {{config.cpu|floatformat}},
RAM: {{config.memory|floatformat}} GiB, RAM: {{config.memory|floatformat}} GB,
SSD: {{config.disk_size|floatformat}} GiB, SSD: {{config.disk_size|floatformat}} GB,
PRICE: {{config.price|floatformat}} CHF/Month PRICE: {{config.price|floatformat}} {% trans "CHF/Month" %}
</option> </option>
{% endfor %} {% endfor %}
</select> </select>

View file

@ -53,7 +53,7 @@
</button> </button>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<h4 class="modal-title" id="ModalLabel">{% trans "Do You want do delete your order?"%}</h4> <h4 class="modal-title" id="ModalLabel">{% trans "Do You want to delete your order?"%}</h4>
<form method="post" <form method="post"
action="{% url 'hosting:delete_order' order.id %}"> action="{% url 'hosting:delete_order' order.id %}">

View file

@ -9,18 +9,18 @@
<form role="form" novalidate> <form role="form" novalidate>
<div class="row"> <div class="row">
<div class="col-xs-12"> <div class="col-xs-12">
<h3><b>Billing Amount</b></h3> <h3><b>{%trans "Billing Amount" %}</b></h3>
<hr> <hr>
<div class="content"> <div class="content">
<!-- <p><b>Type</b> <span class="pull-right">{{request.session.vm_specs.location_code}}</span></p> --> <!-- <p><b>Type</b> <span class="pull-right">{{request.session.vm_specs.location_code}}</span></p> -->
<!-- <hr> --> <!-- <hr> -->
<p><b>Cores</b> <span <p><b>{%trans "Cores"%}</b> <span
class="pull-right">{{request.session.specs.cpu|floatformat}}</span></p> class="pull-right">{{request.session.specs.cpu|floatformat}}</span></p>
<hr> <hr>
<p><b>Memory</b> <span <p><b>{%trans "Memory"%}</b> <span
class="pull-right">{{request.session.specs.memory|floatformat}} GiB</span></p> class="pull-right">{{request.session.specs.memory|floatformat}} GiB</span></p>
<hr> <hr>
<p><b>Disk space</b> <span <p><b>{%trans "Disk space"%}</b> <span
class="pull-right">{{request.session.specs.disk_size|floatformat}} GiB</span></p> class="pull-right">{{request.session.specs.disk_size|floatformat}} GiB</span></p>
<hr> <hr>
<h4>Total<p <h4>Total<p
@ -32,7 +32,7 @@
</div> </div>
<div class="col-xs-12 col-md-4 billing"> <div class="col-xs-12 col-md-4 billing">
<h3><b>Billing Address</b></h3> <h3><b>{%trans "Billing Address"%}</b></h3>
<hr> <hr>
<form role="form" id="billing-form" method="post" action="" novalidate> <form role="form" id="billing-form" method="post" action="" novalidate>
{% for field in form %} {% for field in form %}
@ -46,7 +46,7 @@
<div class="row"> <div class="row">
<div class="col-xs-12 col-md-offset-2 col-md-4 "></div> <div class="col-xs-12 col-md-offset-2 col-md-4 "></div>
<div class="col-xs-12 col-md-4 creditcard-box"> <div class="col-xs-12 col-md-4 creditcard-box">
<h3><b>Payment Details</b></h3> <h3><b>{%trans "Payment Details"%}</b></h3>
<hr> <hr>
<div> <div>
<div> <div>
@ -57,17 +57,33 @@
<h5 class="membership-lead">Type: {{credit_card_data.cc_brand}}</h5> <h5 class="membership-lead">Type: {{credit_card_data.cc_brand}}</h5>
<input type="hidden" name="credit_card_needed" value="false"/> <input type="hidden" name="credit_card_needed" value="false"/>
</form> </form>
<button id="payment_button_with_creditcard" class="btn btn-success btn-lg btn-block" type="submit">Submit Payment</button> <div class="col-xs-6">
<button id="payment_button_with_creditcard" class="btn btn-success btn-sm btn-block" type="submit">
{% trans "Submit Payment" %}
</button>
</div>
{% else %} {% else %}
<form role="form" id="payment-form" novalidate> <form role="form" id="payment-form" novalidate>
<div class="row"> <div class="row">
<div class="form-group">
<div id="card-element">
<!-- a Stripe Element will be inserted here. -->
</div>
</div>
</div>
<div id="card-errors" role="alert"></div>
<!-- <div class="row">
<div class="col-xs-9 col-md-12"> <div class="col-xs-9 col-md-12">
<div class="form-group"> <div class="form-group">
<label class="control-label" for="cardNumber">CARD NUMBER</label> <label class="control-label" for="cardNumber">{%trans "CARD NUMBER"%}</label>
<div class="input-group"> <div class="input-group">
<input type="text" class="form-control" name="cardNumber" placeholder="Valid Card Number" required autofocus data-stripe="number" /> <input type="text"
class="form-control"
name="cardNumber"
placeholder="{%trans "Valid Card Number"%}" required autofocus data-stripe="number" />
<span class="input-group-addon"><i class="fa fa-credit-card"></i></span> <span class="input-group-addon"><i class="fa fa-credit-card"></i></span>
</div> </div>
</div> </div>
@ -76,7 +92,7 @@
<div class="row"> <div class="row">
<div class="col-xs-6 col-md-7"> <div class="col-xs-6 col-md-7">
<div class="form-group"> <div class="form-group">
<label for="expMonth">EXPIRATION DATE</label><br/> <label for="expMonth">{%trans "EXPIRATION DATE"%}</label><br/>
<div class="col-xs-6 col-lg-6 col-md-6 pl-ziro"> <div class="col-xs-6 col-lg-6 col-md-6 pl-ziro">
<input type="text" class="form-control" name="expMonth" placeholder="MM" required data-stripe="exp_month" /> <input type="text" class="form-control" name="expMonth" placeholder="MM" required data-stripe="exp_month" />
</div> </div>
@ -87,14 +103,14 @@
</div> </div>
<div class="col-xs-4 col-md-5 pull-right"> <div class="col-xs-4 col-md-5 pull-right">
<div class="form-group"> <div class="form-group">
<label for="cvCode">CV CODE</label> <label for="cvCode">{%trans "CV CODE"%}</label>
<input type="password" class="form-control" name="cvCode" placeholder="CV" required data-stripe="cvc" /> <input type="password" class="form-control" name="cvCode" placeholder="CV" required data-stripe="cvc" />
</div> </div>
</div> </div>
</div> </div> -->
<div class="row"> <div class="row">
<div class="col-xs-12"> <div class="col-xs-6 float-right">
<button class="btn btn-success btn-lg btn-block" type="submit">Submit Payment</button> <button class="btn btn-success btn-sm btn-block" type="submit">Submit Payment</button>
</div> </div>
</div> </div>
<div class="row" style="display:none;"> <div class="row" style="display:none;">
@ -115,6 +131,7 @@
</form> </form>
{% endif %} {% endif %}
</div> </div>
</div> </div>
</div> </div>
@ -125,8 +142,14 @@
<!-- stripe key data --> <!-- stripe key data -->
{% if stripe_key %} {% if stripe_key %}
{% get_current_language as LANGUAGE_CODE %}
<script type="text/javascript"> <script type="text/javascript">
(function () {window.stripeKey = "{{stripe_key}}";})();
(function () {
window.stripeKey = "{{stripe_key}}";
window.current_lan = "{{LANGUAGE_CODE}}";
})();
</script> </script>
{%endif%} {%endif%}

View file

@ -17,7 +17,6 @@
</div> </div>
{% endif %} {% endif %}
{% for field in form %} {% for field in form %}
{% bootstrap_field field %} {% bootstrap_field field %}
{% endfor %} {% endfor %}
{% buttons %} {% buttons %}
@ -32,33 +31,8 @@
</button> </button>
{% endbuttons %} {% endbuttons %}
<div class="form-group">
</div>
<h5> Use your created key to access to the machine. If you lost it, contact us. </h5>
<table class="table borderless table-hover">
<br/>
<thead>
<tr>
<th>{% trans "Name"%}</th>
<th>{% trans "Created at"%} </th>
<th>{% trans "Status"%} </th>
<th></th>
</tr>
</thead>
<tbody>
{% for user_key in keys %}
<tr>
<td scope="row">{{user_key.name}}</td>
<td>{{user_key.created_at}}</td>
<td>
<span class="h3 label label-success"><strong>Active</strong></span>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</form> </form>
<h5> Use your created key to access to the machine. If you lost it, contact us. </h5>
{% if private_key %} {% if private_key %}
<div class="alert alert-warning"> <div class="alert alert-warning">
@ -69,17 +43,7 @@
<textarea class="form-control" rows="6" id="ssh_key" type="hidden" style="display:none">{{private_key}}</textarea> <textarea class="form-control" rows="6" id="ssh_key" type="hidden" style="display:none">{{private_key}}</textarea>
</div> </div>
<!-- <div class="form-group pull-right"> {% endif %}
<button type="button" id="copy_to_clipboard" data-clipboard-target="#ssh_key" class="btn btn-warning"
data-toggle="tooltip" data-placement="bottom" title="Copied" data-trigger="click">{% trans "Copy to Clipboard"%}</button>
<button type="button" id="download_ssh_key" class="btn btn-warning">{% trans "Download"%}</button>
</div> -->
{% else %}
<!-- <div class="alert alert-warning">
<strong>{% trans "Warning!"%}</strong>{% trans "Your SSH private key was already generated and downloaded, if you lost it, contact us. "%}
</div>
--> {% endif %}
<!-- <a class="btn btn-success" href="{% url 'hosting:virtual_machines' %}">{% trans "Generate my key"%} </a> -->
<div class="clearfix"></div> <div class="clearfix"></div>
</div> </div>
</div> </div>

View file

@ -0,0 +1,96 @@
{% extends "hosting/base_short.html" %}
{% load staticfiles bootstrap3 i18n %}
{% block content %}
<div>
<div class="container virtual-machine-container dashboard-container ">
<div class="row">
<div class="col-md-9 col-md-offset-2">
<div class="col-sm-12">
<h3><i class="fa fa-key" aria-hidden="true"></i>{% trans "Access Key"%} </h3>
{% if messages %}
<div class="alert alert-warning">
{% for message in messages %}
<span>{{ message }}</span>
{% endfor %}
</div>
{% endif %}
<p class="pull-right">
<a class="btn btn-success" href="{% url 'hosting:create_ssh_key' %}" >{% trans "Add Key"%} </a>
</p>
<h5> Use your created key to access to the machine. If you lost it, contact us. </h5>
<table class="table borderless table-hover">
<br/>
<thead>
<tr>
<th>{% trans "Name"%}</th>
<th>{% trans "Created at"%} </th>
<th>{% trans "Status"%} </th>
<th></th>
</tr>
</thead>
<tbody>
{% for user_key in keys %}
<tr>
<td scope="row">{{user_key.name}}</td>
<td>{{user_key.created_at}}</td>
<td>
<span class="h3 label label-success"><strong>Active</strong></span>
</td>
<td>
<button type="button" class="btn btn-default" data-toggle="modal"
data-target="#Modal{{ user_key.id }}"><a
href="#">{% trans "Delete Key"%}</a>
</button>
<div class="modal fade" id="Modal{{user_key.id }}" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"
aria-label="Confirm"><span
aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<h4 class="modal-title" id="ModalLabel">{% trans "Do You want to delete this key?"%}</h4>
<form method="post" action="{% url 'hosting:delete_ssh_key' user_key.id %}">
{% csrf_token %}
<div class="modal-footer">
<button type="button" class="btn btn-default"
data-dismiss="modal">
{% trans "Close"%}
</button>
<button type="submit" class="btn btn-primary">{% trans "Delete"%}
</button>
</div>
</form>
</div>
</div>
</div>
</div>
</td>
</tr>
{% endfor %}
</tbody>
</table>
<div class="clearfix"></div>
</div>
</div>
</div>
</div>
</div>
{% if next_url %}
<script type="text/javascript">
window.location.href = '{{next_url}}';
</script>
{% endif %}
{%endblock%}

View file

@ -163,7 +163,7 @@
{% trans "Terminate your Virtual Machine"%} {% trans "Terminate your Virtual Machine"%}
</div> </div>
<div class="modal-body"> <div class="modal-body">
{% trans "Are you sure do you want to cancel your Virtual Machine "%} {{virtual_machine.name}} {% trans "plan?"%} {% trans "Are you sure do you want to cancel your Virtual Machine "%} {{virtual_machine.name}} ?
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">{% trans "Cancel"%}</button> <button type="button" class="btn btn-default" data-dismiss="modal">{% trans "Cancel"%}</button>

View file

@ -2,4 +2,6 @@ from django.test import TestCase
# Create your tests here. # Create your tests here.
test_user_can_add_key() test_user_can_add_ssh_key()
test_user_can_delete_ssh_ke()

View file

@ -3,9 +3,10 @@ from django.conf.urls import url
from .views import DjangoHostingView, RailsHostingView, PaymentVMView,\ from .views import DjangoHostingView, RailsHostingView, PaymentVMView,\
NodeJSHostingView, LoginView, SignupView, IndexView, \ NodeJSHostingView, LoginView, SignupView, IndexView, \
OrdersHostingListView, OrdersHostingDetailView, VirtualMachinesPlanListView,\ OrdersHostingListView, OrdersHostingDetailView, VirtualMachinesPlanListView,\
VirtualMachineView, GenerateVMSSHKeysView, OrdersHostingDeleteView, NotificationsView, \ VirtualMachineView, OrdersHostingDeleteView, NotificationsView, \
MarkAsReadNotificationView, PasswordResetView, PasswordResetConfirmView, HostingPricingView,\ MarkAsReadNotificationView, PasswordResetView, PasswordResetConfirmView, HostingPricingView,\
CreateVirtualMachinesView, HostingBillListView, HostingBillDetailView CreateVirtualMachinesView, HostingBillListView, HostingBillDetailView, \
SSHKeyDeleteView, SSHKeyCreateView, SSHKeyListView
urlpatterns = [ urlpatterns = [
url(r'index/?$', IndexView.as_view(), name='index'), url(r'index/?$', IndexView.as_view(), name='index'),
@ -23,10 +24,12 @@ urlpatterns = [
url(r'my-virtual-machines/?$', VirtualMachinesPlanListView.as_view(), name='virtual_machines'), url(r'my-virtual-machines/?$', VirtualMachinesPlanListView.as_view(), name='virtual_machines'),
url(r'my-virtual-machines/(?P<pk>\d+)/?$', VirtualMachineView.as_view(), url(r'my-virtual-machines/(?P<pk>\d+)/?$', VirtualMachineView.as_view(),
name='virtual_machines'), name='virtual_machines'),
# url(r'my-virtual-machines/(?P<pk>\d+)/delete/?$', VirtualMachineCancelView.as_view(), url(r'ssh_keys/?$', SSHKeyListView.as_view(),
# name='virtual_machines_cancel'), name='ssh_keys'),
url(r'vm-key-pair/?$', GenerateVMSSHKeysView.as_view(), url(r'delete_ssh_key/(?P<pk>\d+)/?$', SSHKeyDeleteView.as_view(),
name='key_pair'), name='delete_ssh_key'),
url(r'create_ssh_key/?$', SSHKeyCreateView.as_view(),
name='create_ssh_key'),
url(r'^notifications/$', NotificationsView.as_view(), name='notifications'), url(r'^notifications/$', NotificationsView.as_view(), name='notifications'),
url(r'^notifications/(?P<pk>\d+)/?$', MarkAsReadNotificationView.as_view(), url(r'^notifications/(?P<pk>\d+)/?$', MarkAsReadNotificationView.as_view(),
name='read_notification'), name='read_notification'),

View file

@ -188,7 +188,7 @@ class SignupView(CreateView):
template_name = 'hosting/signup.html' template_name = 'hosting/signup.html'
form_class = HostingUserSignupForm form_class = HostingUserSignupForm
model = CustomUser model = CustomUser
success_url = reverse_lazy('hosting:key_pair') success_url = reverse_lazy('hosting:ssh_keys')
def get_success_url(self): def get_success_url(self):
next_url = self.request.session.get( next_url = self.request.session.get(
@ -288,31 +288,58 @@ class MarkAsReadNotificationView(LoginRequiredMixin, UpdateView):
return HttpResponseRedirect(reverse('hosting:notifications')) return HttpResponseRedirect(reverse('hosting:notifications'))
class GenerateVMSSHKeysView(LoginRequiredMixin, FormView): class SSHKeyDeleteView(LoginRequiredMixin, DeleteView):
login_url = reverse_lazy('hosting:login')
success_url = reverse_lazy('hosting:ssh_keys')
model = UserHostingKey
def delete(self, request, *args, **kwargs):
owner = self.request.user
manager = OpenNebulaManager()
pk = self.kwargs.get('pk')
# Get user ssh key
public_key = UserHostingKey.objects.get(pk=pk)
# Add ssh key to user
try:
manager.remove_public_key(user=owner, public_key=public_key)
except ConnectionError:
pass
except WrongNameError:
pass
return super(SSHKeyDeleteView, self).delete(request, *args, **kwargs)
class SSHKeyListView(LoginRequiredMixin, ListView):
template_name = "hosting/user_keys.html"
login_url = reverse_lazy('hosting:login')
context_object_name = "keys"
model = UserHostingKey
paginate_by = 10
ordering = '-id'
def get_queryset(self):
user = self.request.user
self.queryset = UserHostingKey.objects.filter(user=user)
return super(SSHKeyListView, self).get_queryset()
def render_to_response(self, context, **response_kwargs):
if not self.queryset:
return HttpResponseRedirect(reverse('hosting:create_ssh_key'))
return super(SSHKeyListView, self).render_to_response(context, **response_kwargs)
class SSHKeyCreateView(LoginRequiredMixin, FormView):
form_class = UserHostingKeyForm form_class = UserHostingKeyForm
model = UserHostingKey model = UserHostingKey
template_name = 'hosting/virtual_machine_key.html' template_name = 'hosting/user_key.html'
login_url = reverse_lazy('hosting:login') login_url = reverse_lazy('hosting:login')
context_object_name = "virtual_machine" context_object_name = "virtual_machine"
success_url = reverse_lazy('hosting:ssh_keys')
def get_context_data(self, **kwargs):
context = super(
GenerateVMSSHKeysView,
self
).get_context_data(**kwargs)
user_keys = UserHostingKey.objects.filter(
user=self.request.user
)
context.update({
'keys': user_keys
})
return context
def get_form_kwargs(self): def get_form_kwargs(self):
kwargs = super(GenerateVMSSHKeysView, self).get_form_kwargs() kwargs = super(SSHKeyCreateView, self).get_form_kwargs()
kwargs.update({'request': self.request}) kwargs.update({'request': self.request})
return kwargs return kwargs
@ -339,22 +366,22 @@ class GenerateVMSSHKeysView(LoginRequiredMixin, FormView):
}) })
owner = self.request.user owner = self.request.user
# Create OpenNebulaManager manager = OpenNebulaManager()
manager = OpenNebulaManager(email=owner.email,
password=owner.password)
# Get OpenNebula user id
user_pool = manager._get_user_pool()
opennebula_user = user_pool.get_by_name(owner.email)
# Get user ssh key # Get user ssh key
public_key = form.cleaned_data.get('public_key') public_key = form.cleaned_data.get('public_key')
# Add ssh key to user # Add ssh key to user
manager.oneadmin_client.call('user.update', opennebula_user.id, try:
'<CONTEXT><SSH_PUBLIC_KEY>{key}</SSH_PUBLIC_KEY></CONTEXT>'.format(key=public_key)) manager.add_public_key(user=owner, public_key=public_key, merge=True)
except ConnectionError:
pass
except WrongNameError:
pass
return render(self.request, self.template_name, context) return HttpResponseRedirect(self.success_url)
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
print(self.request.POST.dict())
form = self.get_form() form = self.get_form()
if form.is_valid(): if form.is_valid():
return self.form_valid(form) return self.form_valid(form)
@ -412,7 +439,7 @@ class PaymentVMView(LoginRequiredMixin, FormView):
request, request,
'In order to create a VM, you create/upload your SSH KEY first.' 'In order to create a VM, you create/upload your SSH KEY first.'
) )
return HttpResponseRedirect(reverse('hosting:key_pair')) return HttpResponseRedirect(reverse('hosting:ssh_keys'))
if 'next' in request.session: if 'next' in request.session:
del request.session['next'] del request.session['next']
@ -628,7 +655,7 @@ class CreateVirtualMachinesView(LoginRequiredMixin, View):
request, request,
'In order to create a VM, you need to create/upload your SSH KEY first.' 'In order to create a VM, you need to create/upload your SSH KEY first.'
) )
return HttpResponseRedirect(reverse('hosting:key_pair')) return HttpResponseRedirect(reverse('hosting:ssh_keys'))
try: try:
manager = OpenNebulaManager() manager = OpenNebulaManager()

View file

@ -16,7 +16,7 @@
</h2> </h2>
</a> </a>
<p class="post-meta" style="font-size:0.9em;"> <p class="post-meta" style="font-size:0.9em;">
Posted on {{ post.date_published|date:"DATE_FORMAT" }} {% trans "Posted on" %}{{ post.date_published|date:"DATE_FORMAT" }}
</p> </p>
<p class="post-subtitle"> <p class="post-subtitle">

View file

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-05-26 13:35+0000\n" "POT-Creation-Date: 2017-05-30 13:47+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"

View file

@ -17,7 +17,7 @@ class SignupFormMixin(forms.ModelForm):
model = CustomUser model = CustomUser
fields = ['name', 'email', 'password'] fields = ['name', 'email', 'password']
widgets = { widgets = {
'name': forms.TextInput(attrs={'placeholder': 'Enter your name or company name'}), 'name': forms.TextInput(attrs={'placeholder': _('Enter your name or company name')}),
} }
def clean_confirm_password(self): def clean_confirm_password(self):

View file

@ -10,6 +10,7 @@ def handleStripeError(f):
'response_object': None, 'response_object': None,
'error': None 'error': None
} }
common_message = "Currently its not possible to make payments." common_message = "Currently its not possible to make payments."
try: try:
response_object = f(*args, **kwargs) response_object = f(*args, **kwargs)