Aligned branch internationalization with latest changes in master
authorLeonidas Poulopoulos <leopoul@noc.grnet.gr>
Thu, 3 May 2012 08:10:22 +0000 (11:10 +0300)
committerLeonidas Poulopoulos <leopoul@noc.grnet.gr>
Thu, 3 May 2012 08:10:22 +0000 (11:10 +0300)
19 files changed:
flowspec/forms.py
flowspec/models.py
flowspec/views.py
initial_data/fixtures_manual.xml [deleted file]
initial_data/readme.txt [deleted file]
locale/el/LC_MESSAGES/django.mo [new file with mode: 0644]
locale/el/LC_MESSAGES/django.po [new file with mode: 0644]
settings.py.dist
templates/add_port.html
templates/apply.html
templates/base.html
templates/error.html
templates/footer.html
templates/getinfo.html [new file with mode: 0644]
templates/gettos.html [new file with mode: 0644]
templates/profile.html
templates/user_routes.html
templates/welcome.html
urls.py.dist

index 22db78c..77b98df 100644 (file)
@@ -57,11 +57,11 @@ class RouteForm(forms.ModelForm):
                 else:
                     return self.cleaned_data["source"]
             except Exception:
-                error_text = 'Invalid network address format'
+                error_text = _('Invalid network address format')
                 if private_error:
-                    error_text = 'Private addresses not allowed'
+                    error_text = _('Private addresses not allowed')
                 if protected_error:
-                    error_text = 'You have no authority on this subnet'
+                    error_text = _('You have no authority on this subnet')
                 raise forms.ValidationError(error_text)
 
     def clean_destination(self):
@@ -82,15 +82,15 @@ class RouteForm(forms.ModelForm):
                               settings.NOTIFY_ADMIN_MAILS, fail_silently=True)
                         raise Exception
                 if address.prefixlen < settings.PREFIX_LENGTH:
-                    error = "Currently no prefix lengths < %s are allowed" %settings.PREFIX_LENGTH
+                    error = _("Currently no prefix lengths < %s are allowed") %settings.PREFIX_LENGTH
                     raise Exception
                 return self.cleaned_data["destination"]
             except Exception:
-                error_text = 'Invalid network address format'
+                error_text = _('Invalid network address format')
                 if error:
                     error_text = error
                 if protected_error:
-                    error_text = 'You have no authority on this subnet'
+                    error_text = _('You have no authority on this subnet')
                 raise forms.ValidationError(error_text)
     
     def clean_expires(self):
@@ -104,7 +104,7 @@ class RouteForm(forms.ModelForm):
 
     def clean(self):
         if self.errors:
-             raise forms.ValidationError('Errors in form. Please review and fix them')
+             raise forms.ValidationError(_('Errors in form. Please review and fix them'))
         name = self.cleaned_data.get('name', None)
         source = self.cleaned_data.get('source', None)
         sourceports = self.cleaned_data.get('sourceport', None)
@@ -131,19 +131,19 @@ class RouteForm(forms.ModelForm):
                 if IPNetwork(destination) in net:
                     mynetwork = True
             if not mynetwork:
-                raise forms.ValidationError('Destination address/network should belong to your administrative address space. Check My Profile to review your networks')
+                raise forms.ValidationError(_('Destination address/network should belong to your administrative address space. Check My Profile to review your networks'))
         if (sourceports and ports):
-            raise forms.ValidationError('Cannot create rule for source ports and ports at the same time. Select either ports or source ports')
+            raise forms.ValidationError(_('Cannot create rule for source ports and ports at the same time. Select either ports or source ports'))
         if (destinationports and ports):
-            raise forms.ValidationError('Cannot create rule for destination ports and ports at the same time. Select either ports or destination ports')
+            raise forms.ValidationError(_('Cannot create rule for destination ports and ports at the same time. Select either ports or destination ports'))
         if sourceports and not source:
-            raise forms.ValidationError('Once source port is matched, source has to be filled as well. Either deselect source port or fill source address')
+            raise forms.ValidationError(_('Once source port is matched, source has to be filled as well. Either deselect source port or fill source address'))
         if destinationports and not destination:
-            raise forms.ValidationError('Once destination port is matched, destination has to be filled as well. Either deselect destination port or fill destination address')
+            raise forms.ValidationError(_('Once destination port is matched, destination has to be filled as well. Either deselect destination port or fill destination address'))
         if not (source or sourceports or ports or destination or destinationports):
-            raise forms.ValidationError('Fill at least a Rule Match Condition')
+            raise forms.ValidationError(_('Fill at least a Rule Match Condition'))
         if not user.is_superuser and then[0].action not in settings.UI_USER_THEN_ACTIONS:
-            raise forms.ValidationError('This action "%s" is not permitted' %(then[0].action))
+            raise forms.ValidationError(_('This action "%s" is not permitted') %(then[0].action))
         existing_routes = Route.objects.all()
         existing_routes = existing_routes.filter(applier__userprofile__peer=peer)
         if source:
@@ -195,17 +195,17 @@ class ThenPlainForm(forms.ModelForm):
             try:
                 assert(int(action_value))
                 if int(action_value) < 50:
-                    raise forms.ValidationError('Rate-limiting cannot be < 50kbps')
+                    raise forms.ValidationError(_('Rate-limiting cannot be < 50kbps'))
                 return "%s" %self.cleaned_data["action_value"]
             except:
-                raise forms.ValidationError('Rate-limiting should be an integer < 50')
+                raise forms.ValidationError(_('Rate-limiting should be an integer < 50'))
         else:
-            raise forms.ValidationError('Cannot be empty')
+            raise forms.ValidationError(_('Cannot be empty'))
 
     def clean_action(self):
         action = self.cleaned_data['action']
         if action != 'rate-limit':
-            raise forms.ValidationError('Cannot select something other than rate-limit')
+            raise forms.ValidationError(_('Cannot select something other than rate-limit'))
         else:
             return self.cleaned_data["action"]
     
@@ -222,9 +222,9 @@ class PortPlainForm(forms.ModelForm):
                 assert(int(port))
                 return "%s" %self.cleaned_data["port"]
             except:
-                raise forms.ValidationError('Port should be an integer')
+                raise forms.ValidationError(_('Port should be an integer'))
         else:
-            raise forms.ValidationError('Cannot be empty')
+            raise forms.ValidationError(_('Cannot be empty'))
 
 def value_list_to_list(valuelist):
     vl = []
index 3f9e57f..165964b 100644 (file)
@@ -4,6 +4,7 @@
 from django.db import models
 from django.conf import settings
 from django.contrib.auth.models import User
+from django.utils.translation import ugettext_lazy as _
 from utils import proxy as PR
 from ipaddr import *
 import datetime
@@ -103,29 +104,29 @@ class ThenAction(models.Model):
         unique_together = ("action", "action_value")
 
 class Route(models.Model):
-    name = models.SlugField(max_length=128)
+    name = models.SlugField(max_length=128, verbose_name=_("Name"))
     applier = models.ForeignKey(User, blank=True, null=True)
-    source = models.CharField(max_length=32, help_text=u"Network address. Use address/CIDR notation", verbose_name="Source Address")
-    sourceport = models.ManyToManyField(MatchPort, blank=True, null=True, related_name="matchSourcePort", verbose_name="Source Port")
-    destination = models.CharField(max_length=32, help_text=u"Network address. Use address/CIDR notation", verbose_name="Destination Address")
-    destinationport = models.ManyToManyField(MatchPort, blank=True, null=True, related_name="matchDestinationPort", verbose_name="Destination Port")
-    port = models.ManyToManyField(MatchPort, blank=True, null=True, related_name="matchPort", verbose_name="Port" )
+    source = models.CharField(max_length=32, help_text=_("Network address. Use address/CIDR notation"), verbose_name=_("Source Address"))
+    sourceport = models.ManyToManyField(MatchPort, blank=True, null=True, related_name="matchSourcePort", verbose_name=_("Source Port"))
+    destination = models.CharField(max_length=32, help_text=_("Network address. Use address/CIDR notation"), verbose_name=_("Destination Address"))
+    destinationport = models.ManyToManyField(MatchPort, blank=True, null=True, related_name="matchDestinationPort", verbose_name=_("Destination Port"))
+    port = models.ManyToManyField(MatchPort, blank=True, null=True, related_name="matchPort", verbose_name=_("Port"))
     dscp = models.ManyToManyField(MatchDscp, blank=True, null=True, verbose_name="DSCP")
     fragmenttype = models.CharField(max_length=20, choices=FRAGMENT_CODES, blank=True, null=True, verbose_name="Fragment Type")
     icmpcode = models.CharField(max_length=32, blank=True, null=True, verbose_name="ICMP Code")
     icmptype = models.CharField(max_length=32, blank=True, null=True, verbose_name="ICMP Type")
     packetlength = models.IntegerField(blank=True, null=True, verbose_name="Packet Length")
-    protocol = models.ManyToManyField(MatchProtocol, blank=True, null=True, verbose_name="Protocol")
+    protocol = models.ManyToManyField(MatchProtocol, blank=True, null=True, verbose_name=_("Protocol"))
     tcpflag = models.CharField(max_length=128, blank=True, null=True, verbose_name="TCP flag")
-    then = models.ManyToManyField(ThenAction, verbose_name="Then")
+    then = models.ManyToManyField(ThenAction, verbose_name=_("Then"))
     filed = models.DateTimeField(auto_now_add=True)
     last_updated = models.DateTimeField(auto_now=True)
-    status = models.CharField(max_length=20, choices=ROUTE_STATES, blank=True, null=True, verbose_name="Status", default="PENDING")
+    status = models.CharField(max_length=20, choices=ROUTE_STATES, blank=True, null=True, verbose_name=_("Status"), default="PENDING")
 #    is_online = models.BooleanField(default=False)
 #    is_active = models.BooleanField(default=False)
-    expires = models.DateField(default=days_offset)
-    response = models.CharField(max_length=512, blank=True, null=True)
-    comments = models.TextField(null=True, blank=True, verbose_name="Comments")
+    expires = models.DateField(default=days_offset, verbose_name=_("Expires"))
+    response = models.CharField(max_length=512, blank=True, null=True, verbose_name=_("Response"))
+    comments = models.TextField(null=True, blank=True, verbose_name=_("Comments"))
 
     
     def __unicode__(self):
@@ -150,13 +151,13 @@ class Route(models.Model):
                 address = IPNetwork(self.destination)
                 self.destination = address.exploded
             except Exception:
-                raise ValidationError('Invalid network address format at Destination Field')
+                raise ValidationError(_('Invalid network address format at Destination Field'))
         if self.source:
             try:
                 address = IPNetwork(self.source)
                 self.source = address.exploded
             except Exception:
-                raise ValidationError('Invalid network address format at Source Field')
+                raise ValidationError(_('Invalid network address format at Source Field'))
    
     def commit_add(self, *args, **kwargs):
         peer = self.applier.get_profile().peer.domain_name
index fd6c0ae..7e7ffd5 100644 (file)
@@ -15,6 +15,7 @@ from django.shortcuts import get_object_or_404, render_to_response
 from django.core.context_processors import request
 from django.template.context import RequestContext
 from django.template.loader import get_template, render_to_string
+from django.utils.translation import ugettext as _
 from django.core.urlresolvers import reverse
 from django.contrib import messages
 from flowspy.accounts.models import *
@@ -85,7 +86,7 @@ def add_route(request):
     applier_peer_networks = request.user.get_profile().peer.networks.all()
     if not applier_peer_networks:
          messages.add_message(request, messages.WARNING,
-                             "Insufficient rights on administrative networks. Cannot add rule. Contact your administrator")
+                             _("Insufficient rights on administrative networks. Cannot add rule. Contact your administrator"))
          return HttpResponseRedirect(reverse("group-routes"))
     if request.method == "GET":
         form = RouteForm(initial={'applier': applier})
@@ -146,7 +147,7 @@ def edit_route(request, route_slug):
     route_edit_applier_peer = route_edit.applier.get_profile().peer
     if applier_peer != route_edit_applier_peer and (not request.user.is_superuser):
         messages.add_message(request, messages.WARNING,
-                             "Insufficient rights to edit rule %s" %(route_slug))
+                             _("Insufficient rights to edit rule %s") %(route_slug))
         return HttpResponseRedirect(reverse("group-routes"))
 #    if route_edit.status == "ADMININACTIVE" :
 #        messages.add_message(request, messages.WARNING,
@@ -158,7 +159,7 @@ def edit_route(request, route_slug):
 #        return HttpResponseRedirect(reverse("group-routes"))
     if route_edit.status == "PENDING" :
         messages.add_message(request, messages.WARNING,
-                             "Cannot edit a pending rule: %s." %(route_slug))
+                             _("Cannot edit a pending rule: %s.") %(route_slug))
         return HttpResponseRedirect(reverse("group-routes"))
     route_original = deepcopy(route_edit)
     if request.POST:
@@ -300,13 +301,13 @@ def user_login(request):
         if not mail:
             error_mail = True
         if error_username:
-            error = "Your idP should release the HTTP_EPPN attribute towards this service<br>"
+            error = _("Your idP should release the HTTP_EPPN attribute towards this service<br>")
         if error_orgname:
-            error = error + "Your idP should release the HTTP_SHIB_HOMEORGANIZATION attribute towards this service<br>"
+            error = error + _("Your idP should release the HTTP_SHIB_HOMEORGANIZATION attribute towards this service<br>")
         if error_entitlement:
-            error = error + "Your idP should release an appropriate HTTP_SHIB_EP_ENTITLEMENT attribute towards this service<br>"
+            error = error + _("Your idP should release an appropriate HTTP_SHIB_EP_ENTITLEMENT attribute towards this service<br>")
         if error_mail:
-            error = error + "Your idP should release the HTTP_SHIB_INETORGPERSON_MAIL attribute towards this service"
+            error = error + _("Your idP should release the HTTP_SHIB_INETORGPERSON_MAIL attribute towards this service")
         if error_username or error_orgname or error_entitlement or error_mail:
             return render_to_response('error.html', {'error': error, "missing_attributes": True},
                                   context_instance=RequestContext(request))
@@ -325,7 +326,7 @@ def user_login(request):
                 peer = Peer.objects.get(domain_name=organization)
                 up = UserProfile.objects.get_or_create(user=user,peer=peer)
             except:
-                error = "Your organization's domain name does not match our peers' domain names<br>Please contact Helpdesk to resolve this issue"
+                error = _("Your organization's domain name does not match our peers' domain names<br>Please contact Helpdesk to resolve this issue")
                 return render_to_response('error.html', {'error': error})
             if not user_exists:
                 user_activation_notify(user)
@@ -333,15 +334,15 @@ def user_login(request):
                login(request, user)
                return HttpResponseRedirect(reverse("group-routes"))
             else:
-                error = "User account <strong>%s</strong> is pending activation. Administrators have been notified and will activate this account within the next days. <br>If this account has remained inactive for a long time contact your technical coordinator or GRNET Helpdesk" %user.username
+                error = _("User account <strong>%s</strong> is pending activation. Administrators have been notified and will activate this account within the next days. <br>If this account has remained inactive for a long time contact your technical coordinator or GRNET Helpdesk") %user.username
                 return render_to_response('error.html', {'error': error, 'inactive': True},
                                   context_instance=RequestContext(request))
         else:
-            error = "Something went wrong during user authentication. Contact your administrator"
+            error = _("Something went wrong during user authentication. Contact your administrator")
             return render_to_response('error.html', {'error': error,},
                                   context_instance=RequestContext(request))
     except Exception:
-        error = "Invalid login procedure"
+        error = _("Invalid login procedure")
         return render_to_response('error.html', {'error': error,},
                                   context_instance=RequestContext(request))
         # Return an 'invalid login' error message.
@@ -434,6 +435,11 @@ def get_peer_techc_mails(user):
     mail.extend(techmails_list)
     return mail
 
+def gettos(request):
+    return render_to_response('gettos.html', context_instance=RequestContext(request))
+
+def getinfo(request):
+    return render_to_response('getinfo.html', context_instance=RequestContext(request))
 
 def send_new_mail(subject, message, from_email, recipient_list, bcc_list):
     return EmailMessage(subject, message, from_email, recipient_list, bcc_list).send()
diff --git a/initial_data/fixtures_manual.xml b/initial_data/fixtures_manual.xml
deleted file mode 100644 (file)
index f911a87..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
-    <object pk="1" model="sites.site">
-        <field type="CharField" name="domain">example.com</field>
-        <field type="CharField" name="name">example.com</field>
-    </object>
-    <object pk="2" model="flatpages.flatpage">
-        <field type="CharField" name="url">/fod/about/info/</field>
-        <field type="CharField" name="title">Περί της υπηρεσίας</field>
-        <field type="TextField" name="content">&lt;h5&gt;Εισαγωγή&lt;/h5&gt;\r
-Η υπηρεσία FoD (Firewall on Demand) παρέχει στην εκπαιδευτική και ακαδημαϊκή κοινότητα τη δυνατότητα για προστασία έναντι δικτυακών επιθέσεων που στοχέυουν στο δικτυακό εξοπλισμό που διαχειρίζονται.\r
-\r
-Ειδικότερα, η υπηρεσία απευθύνεται στα NOC των ιδρυμάτων‐φορέων του δικτύου ΕΔΕΤ που έχουν ανάγκες για βραχυπρόθεσμη προστασία έναντι δικτυακών επιθέσεων με προορισμό τον εξοπλισμό που διαχειρίζονται.\r
-\r
-Για τη διασφάλιση της ακεραιότητας της υπηρεσίας και προκειμένου αυτή να μην αποτελέσει πηγή επιθέσεων, το authentication των χρηστων πραγματοποιείται με τη χρήση Shibboleth. Το authorisation βασίζεται σε ένα συνδυασμό συγκεκριμένων attributes του Shibboleth με το address space που κάθε φορέας διαχειρίζεται.\r
-\r
-Το λογισμικό που επιλέχθηκε για την υλοποίηση της υπηρεσίας βασίζεται αποκλειστικά σε ανοιχτό κώδικα.\r
-\r
-Αιτήματα ή διευκρινίσεις που αφορούν στη λειτουργία της υπηρεσίας θα πρέπει να υποβάλλονται στο helpdesk του ΕΔΕΤ, τηλεφωνικά στο 800‐11‐47638 ή μέσω e‐mail στο helpdesk -στο- grnet.gr.\r
-&lt;h5&gt;Συμμετοχή&lt;/h5&gt;\r
-Η συμμετοχή στην υπηρεσία προϋποθέτη την ορθή διαμόρφωση συγκεκριμένων Shibboleth attributes:\r
-                               &lt;ul&gt;\r
-                               &lt;li&gt;HTTP_EPPN&lt;/li&gt;\r
-                               &lt;li&gt;HTTP_SHIB_HOMEORGANIZATION&lt;/li&gt;\r
-                               &lt;li&gt;HTTP_SHIB_INETORGPERSON_MAIL&lt;/li&gt;\r
-                               &lt;li&gt;Ένα κατάλληλο HTTP_SHIB_EP_ENTITLEMENT το οποίο παρέχεται από το Helpdesk&lt;/li&gt;\r
-                               &lt;/ul&gt;\r
-                               Προεραιτικά:\r
-                               &lt;ul&gt;\r
-                               &lt;li&gt;HTTP_SHIB_INETORGPERSON_GIVENNAME&lt;/li&gt;\r
-                               &lt;li&gt;HTTP_SHIB_PERSON_SURNAME&lt;/li&gt;\r
-                               &lt;/ul&gt;\r
-&lt;h5&gt;Χρήση&lt;/h5&gt;\r
-\r
-Η υπηρεσία δίνει τη δυνατότητα στους χρήστες να περιορίσουν ενεργές επιθέσεις που στοχεύουν στο δικτυακό τους εξοπλισμό. Βασίζεται στη δημιουργία δυναμικών φίλτρων firewall οι οποίοι εφαρμόζονται στο δίκτυο με τη χρήση του διαχειριστικού πρωτοκόλλου netconf και διαδίδονται στις συμβατές (Juniper) διτκυακές συσκευές του δικτύου κορμού της ΕΔΕΤ μέσω του BGP flowspec NLRI.\r
-\r
-Για την ορθή συμπλήρωση της αίτησης ενός νέου φίλτρου είναι απαραίτητο η διεύθυνση προορισμού να ανήκει στο δίκτυο διαχείρισης του φορέα από τον οποίο προέρχεται ο χρήστης. Στην παρούσα φάση περιορίζονται επιθέσεις ανά /29 υποδίκτυα.\r
-\r
-Τα αιτήματα για νέα φίλτρα εφαρμόζονται άμεσα στο δίκτυο και ως εκ τούτου θα πρέπει να δίνται ιδιαίτερη προσοχή κατά την αίτησή τους. Τα φίλτρα που έχουν εφαρμοσθεί στο δίκτυο αφαιρούνται μετά το πέρας της ημερομηνίας λήξης τους, ενώ οι χρήστες μπορούν να τα ενεργοποιήσουν ξανά μέσω της αντίστοιχης επιλογής. Παράλληλα, δίνεται η δυνατότητα για απενεργοποίηση αιτημάτων πριν τη λήξη τους κατά τη βούληση του χρήστη\r
-\r
-&lt;h5&gt;Ασφάλεια&lt;/h5&gt;\r
-Για λόγους ασφαλείας, η υποβολή αιτημάτων καταγράφεται ενημερώνοντας τους διαχειριστές της υπηρεσίας.\r
-\r
-Οι διαχιριστές της υπηρεσίας μπορούν ανά πάσα στιγμή να αφαιρέσουν ενεργά αιτήματα από το δίκτυο, εάν κάτι τέτοιο κριθεί αναγκαίο\r
-</field>
-        <field type="BooleanField" name="enable_comments">False</field>
-        <field type="CharField" name="template_name"></field>
-        <field type="BooleanField" name="registration_required">False</field>
-        <field to="sites.site" name="sites" rel="ManyToManyRel"><object pk="1"></object></field>
-    </object>
-    <object pk="1" model="flatpages.flatpage">
-        <field type="CharField" name="url">/fod/about/terms-of-service/</field>
-        <field type="CharField" name="title">Όροι χρήσης της υπηρεσίας Firewall on Demand</field>
-        <field type="TextField" name="content">    &lt;p&gt;\r
-        &lt;em&gt;Τελευταία Ενημέρωση: 9 Ιανουαρίου 2011. &lt;/em&gt;\r
-    &lt;/p&gt;\r
-\r
-Η υπηρεσία FoD παρέχεται από την ΕΔΕΤ Α.Ε. προς την ακαδημαϊκή και ερευνητική κοινότητα και η χρήση της υπηρεσίας οφείλει να γίνεται μόνο για την προώθηση ακαδημαϊκών, εκπαιδευτικών και ερευνητικών σκοπών.\r
-Οι παρακάτω όροι εφαρμόζονται από όλους τους χρήστες της υπηρεσίας. Οι παρόντες όροι χρήσης, όπως κάθε φορά ισχύουν και τροποποιούνται, αποτελούν τη σύμβαση μεταξύ των χρηστών της υπηρεσίας και της ΕΔΕΤ Α.Ε. Για τη χρήση της υπηρεσίας είναι απαραίτητη η αποδοχή των παρακάτω όρων.\r
-    &lt;h3&gt;Δυνητικοί Χρήστες&lt;/h3&gt;\r
-Η υπηρεσία απευθύνεται στα Κέντρα Δικτύων (ή σε αντίστοιχες δομές) των εγκεκριμένων από το ΔΣ &lt;a href="http://www.noc.grnet.gr/node/35" target="_blank"&gt;φορέων&lt;/a&gt; της ΕΔΕΤ Α.Ε που συμμετέχουν στην ομοσπονδιακή ταυτοποίηση με τη χρήση Shibboleth. Η υπηρεσία παρέχεται προκειμένου να περιοριστούν δικτυακές επιθέσεις που στοχεύουν στον εξοπλισμό των φορέων. Η είσοδος και χρήση της υπηρεσίας προϋποθέτη την ορθή διαμόρφωση συγκεκριμένων ιδιοτήτων του Shibboleth.</field>
-        <field type="BooleanField" name="enable_comments">False</field>
-        <field type="CharField" name="template_name"></field>
-        <field type="BooleanField" name="registration_required">False</field>
-        <field to="sites.site" name="sites" rel="ManyToManyRel"><object pk="1"></object></field>
-    </object>
-</django-objects>
\ No newline at end of file
diff --git a/initial_data/readme.txt b/initial_data/readme.txt
deleted file mode 100644 (file)
index e3b40f3..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-The 'fixtures_manual.xml' file fills the site table along with the flatpages
-Before running make sure you have set the default site name
-
-Run from root folder:
-
-./manage.py loaddata initial_data/fixtures_manual.xml
-
-
diff --git a/locale/el/LC_MESSAGES/django.mo b/locale/el/LC_MESSAGES/django.mo
new file mode 100644 (file)
index 0000000..d90918f
Binary files /dev/null and b/locale/el/LC_MESSAGES/django.mo differ
diff --git a/locale/el/LC_MESSAGES/django.po b/locale/el/LC_MESSAGES/django.po
new file mode 100644 (file)
index 0000000..a6be0eb
--- /dev/null
@@ -0,0 +1,804 @@
+# Translation file for FoD application.
+# Copyright (C) 2012
+# This file is distributed under the same license as the PACKAGE package.
+# Leonidas Poulopoulos <leopoul@grnet.gr>, 2012.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-05-03 11:07+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Leonidas Poulopoulos <leopoul@grnet.gr>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: settings.py:49
+msgid "Greek"
+msgstr "Ελληνικά"
+
+#: settings.py:50
+msgid "English"
+msgstr "Αγγλικά"
+
+#: accounts/views.py:22
+#, python-format
+msgid "%sUser account activated"
+msgstr "%s Ενεργοποιήθηκε ο λογαριασμός του χρήστη"
+
+#: flowspec/forms.py:60 flowspec/forms.py:89
+msgid "Invalid network address format"
+msgstr "Λανθασμένη μορφή διεύθυνσης δικυου στο πεδίο Πηγή"
+
+#: flowspec/forms.py:62
+msgid "Private addresses not allowed"
+msgstr "Δεν επιτρέπονται οι private διευθύνσεις"
+
+#: flowspec/forms.py:64 flowspec/forms.py:93
+msgid "You have no authority on this subnet"
+msgstr "Δεν έχετε δικαιώματα σε αυτό το υποδίκτυο"
+
+#: flowspec/forms.py:85
+#, python-format
+msgid "Currently no prefix lengths < %s are allowed"
+msgstr "Προς το παρόν δεν επιτρέπονται υποδίκτυα <%s"
+
+#: flowspec/forms.py:107
+msgid "Errors in form. Please review and fix them"
+msgstr "Σφάλματα στη φόρμα. Παρακαλώ διορθώστε τα"
+
+#: flowspec/forms.py:134
+msgid ""
+"Destination address/network should belong to your administrative address "
+"space. Check My Profile to review your networks"
+msgstr ""
+"Η διεύθυνση προορισμού πρέπει να ανήκει στα διαχειριστικά σας δίκτυα. "
+"Επισκεφθείτε 'Το Προφίλ μου' για την προβολή των διαχειριστικών σας δικτύων"
+
+#: flowspec/forms.py:136
+msgid ""
+"Cannot create rule for source ports and ports at the same time. Select "
+"either ports or source ports"
+msgstr ""
+"Δεν μπορεί να δημιουργηθεί φίλτρο για source ports και ports ταυτόχρονα. "
+"Επιλέξτε είτε ports είτε source ports"
+
+#: flowspec/forms.py:138
+msgid ""
+"Cannot create rule for destination ports and ports at the same time. Select "
+"either ports or destination ports"
+msgstr ""
+"Δεν μπορεί να δημιουργηθεί φίλτρο για destination ports και ports "
+"ταυτόχρονα. Επιλέξτε είτε ports είτε destination ports"
+
+#: flowspec/forms.py:140
+msgid ""
+"Once source port is matched, source has to be filled as well. Either "
+"deselect source port or fill source address"
+msgstr ""
+"Εφόσον έχετε επιλέξει source port, το πεδίο source πρέπει να συμπληρωθεί. "
+"Είτε απο-επιλέξτε το πεδίο source port είτε συμπληρώστε μια διεύθυνση στο "
+"source"
+
+#: flowspec/forms.py:142
+msgid ""
+"Once destination port is matched, destination has to be filled as well. "
+"Either deselect destination port or fill destination address"
+msgstr ""
+"Εφόσον έχετε επιλέξει destination port, το πεδίο destination πρέπει να "
+"συμπληρωθεί. Είτε απο-επιλέξτε το πεδίο destination port είτε συμπληρώστε "
+"μια διεύθυνση στο destination"
+
+#: flowspec/forms.py:144
+msgid "Fill at least a Rule Match Condition"
+msgstr "Συμπληρώστε τουλάχιστον έναν όρο ταύτισης"
+
+#: flowspec/forms.py:146
+#, python-format
+msgid "This action \"%s\" is not permitted"
+msgstr "Η ενέργεια %s δεν επιτρέπεται"
+
+#: flowspec/forms.py:198
+msgid "Rate-limiting cannot be < 50kbps"
+msgstr ""
+
+#: flowspec/forms.py:201
+msgid "Rate-limiting should be an integer < 50"
+msgstr ""
+
+#: flowspec/forms.py:203 flowspec/forms.py:227
+msgid "Cannot be empty"
+msgstr "Το πεδίο δεν μπορεί να είναι κενό"
+
+#: flowspec/forms.py:208
+msgid "Cannot select something other than rate-limit"
+msgstr ""
+
+#: flowspec/forms.py:225
+msgid "Port should be an integer"
+msgstr "Η port θα πρέπει να είναι ένας ακέραιος αριθμός"
+
+#: flowspec/models.py:107 templates/user_routes.html:265
+msgid "Name"
+msgstr "Όνομα"
+
+#: flowspec/models.py:109 flowspec/models.py:111
+msgid "Network address. Use address/CIDR notation"
+msgstr "Διεύθυνση δικτύου/υποδικτύου. Χρησιμοποιήστε σύνταξη διεύθυνσης/CIDR"
+
+#: flowspec/models.py:109
+msgid "Source Address"
+msgstr "Διεύθυνση Πηγής"
+
+#: flowspec/models.py:110
+msgid "Source Port"
+msgstr "Port Πηγής"
+
+#: flowspec/models.py:111
+msgid "Destination Address"
+msgstr "Διεύθυνση Προορισμού"
+
+#: flowspec/models.py:112
+msgid "Destination Port"
+msgstr "Port Προορισμού"
+
+#: flowspec/models.py:113 templates/add_port.html:14 templates/apply.html:326
+#: templates/apply.html.py:345 templates/apply.html:364
+msgid "Port"
+msgstr ""
+
+#: flowspec/models.py:119
+msgid "Protocol"
+msgstr "Πρωτόκολλο"
+
+#: flowspec/models.py:121 templates/user_routes.html:267
+msgid "Then"
+msgstr "Ενέργειες"
+
+#: flowspec/models.py:124 templates/user_routes.html:268
+msgid "Status"
+msgstr "Κατάσταση"
+
+#: flowspec/models.py:127 templates/user_routes.html:271
+msgid "Expires"
+msgstr "Λήγει"
+
+#: flowspec/models.py:128 templates/user_routes.html:272
+msgid "Response"
+msgstr "Απόκριση Δικτύου"
+
+#: flowspec/models.py:129
+msgid "Comments"
+msgstr "Σχόλια"
+
+#: flowspec/models.py:154
+msgid "Invalid network address format at Destination Field"
+msgstr "Λανθασμένη μορφή διεύθυνσης δικυου στο πεδίο Προορισμός"
+
+#: flowspec/models.py:160
+msgid "Invalid network address format at Source Field"
+msgstr "Λανθασμένη μορφή διεύθυνσης δικυου στο πεδίο Πηγή"
+
+#: flowspec/views.py:89
+msgid ""
+"Insufficient rights on administrative networks. Cannot add rule. Contact "
+"your administrator"
+msgstr ""
+"Μη επαρκή δικαιώματα στα διαχειριστικά δίκτυα. Η προσθήκη φίλτρων δεν είναι "
+"εφικτή. Επικοινωνήστε με το διαχειριστή σας"
+
+#: flowspec/views.py:150
+#, python-format
+msgid "Insufficient rights to edit rule %s"
+msgstr "Μη επαρκή δικαιώματα για την επεξεργασία του φίλτρου %s"
+
+#: flowspec/views.py:162
+#, python-format
+msgid "Cannot edit a pending rule: %s."
+msgstr "Δεν είναι δυνατή η επεξεργασία ενός φίλτρου (%s) σε κατάσταση pending "
+
+#: flowspec/views.py:304
+msgid ""
+"Your idP should release the HTTP_EPPN attribute towards this service<br>"
+msgstr ""
+"Ο idP σας θα πρέπει να παρέχει την HTTP_EPPN παράμετερο στην υπηρεσία<br>"
+
+#: flowspec/views.py:306
+msgid ""
+"Your idP should release the HTTP_SHIB_HOMEORGANIZATION attribute towards "
+"this service<br>"
+msgstr ""
+"Ο idP σας θα πρέπει να παρέχει την HTTP_SHIB_HOMEORGANIZATION παράμετερο "
+"στην υπηρεσία<br>"
+
+#: flowspec/views.py:308
+msgid ""
+"Your idP should release an appropriate HTTP_SHIB_EP_ENTITLEMENT attribute "
+"towards this service<br>"
+msgstr ""
+"Ο idP σας θα πρέπει να παρέχει την HTTP_SHIB_EP_ENTITLEMENT παράμετερο στην "
+"υπηρεσία<br>"
+
+#: flowspec/views.py:310
+msgid ""
+"Your idP should release the HTTP_SHIB_INETORGPERSON_MAIL attribute towards "
+"this service"
+msgstr ""
+"Ο idP σας θα πρέπει να παρέχει την HTTP_SHIB_INETORGPERSON_MAIL παράμετερο "
+"στην υπηρεσία<br>"
+
+#: flowspec/views.py:329
+msgid ""
+"Your organization's domain name does not match our peers' domain "
+"names<br>Please contact Helpdesk to resolve this issue"
+msgstr ""
+"Το domain name του οργανισμού σας δε βρέθηκε στ βάση φορέων μας.<br>Παρακαλώ "
+"επικοινωνήστε με το Helpdesk για τη διευθέτηση του προβλήματος"
+
+#: flowspec/views.py:337
+#, python-format
+msgid ""
+"User account <strong>%s</strong> is pending activation. Administrators have "
+"been notified and will activate this account within the next days. <br>If "
+"this account has remained inactive for a long time contact your technical "
+"coordinator or GRNET Helpdesk"
+msgstr ""
+"Ο λογαριασμός χρήστη <strong>%s</strong> απαιτεί ενεργοποίηση. Οι "
+"διαχειριστές της υπηρεσίας έχουν ενημερωθεί και θα ενεργοποιήσουν το "
+"λογαριασμό εντός των επόμενων ημερών. <br>Εάν ο λογαριασμός δεν έχει "
+"ενεργοποιηθεί για μεγάλο χρονικό διάστημα, επικοινωνήστε με τον τεχνικό σας "
+"υπέυθυνο ή το Helpdesk του ΕΔΕΤ."
+
+#: flowspec/views.py:341
+msgid ""
+"Something went wrong during user authentication. Contact your administrator"
+msgstr ""
+"Παρουσιάστηκε ένα σφάλμα κατά την είσοδο του χρήστη. Επικοινωνήστε με το "
+"διαχειριστή σας"
+
+#: flowspec/views.py:345
+msgid "Invalid login procedure"
+msgstr "Εσφαλμένη διαδικασία εισόδου"
+
+#: monkey_patch/forms.py:11
+#, python-format
+msgid ""
+"Required, %s characters or fewer. Only letters, numbers, and characters such "
+"as @.+_- are allowed."
+msgstr ""
+
+#: monkey_patch/models.py:11
+#, python-format
+msgid ""
+"Required, %s characters or fewer. Only letters, numbers, and @, ., +, -, or "
+"_ characters."
+msgstr ""
+
+#: templates/apply.html:6
+msgid "Edit Rule"
+msgstr "Επεξεργασία φίλτρου"
+
+#: templates/apply.html:8
+msgid "Create new Rule"
+msgstr "Δημιουργία νέου Φίλτρου"
+
+#: templates/apply.html:14 templates/apply.html.py:228
+msgid "Edit rule"
+msgstr "Επεξεργασία φίλτρου"
+
+#: templates/apply.html:16
+msgid "Create rule"
+msgstr "Δημιουργία φίλτρου"
+
+#: templates/apply.html:35 templates/apply.html.py:67
+msgid "Add"
+msgstr "Προσθήκη"
+
+#: templates/apply.html:55 templates/apply.html.py:88
+#: templates/user_routes.html:32
+msgid "Cancel"
+msgstr "Άκυρο"
+
+#: templates/apply.html:229
+msgid "Apply for a new rule"
+msgstr "Αίτηση δημιουργίας νέου φίλτρου"
+
+#: templates/apply.html:242
+msgid "Rule Basic Info"
+msgstr "Βασικές Πληροφορίες Φίλτρου"
+
+#: templates/apply.html:262
+msgid "Admin Options"
+msgstr "Επιλογές Διαχείρισης"
+
+#: templates/apply.html:280
+msgid "Rule Match Conditions"
+msgstr "Όροι ταύτισης φίλτρου"
+
+#: templates/apply.html:315
+msgid "Advanced Settings (Ports)"
+msgstr "Προηγμένες Ρυθμίσεις (Ports)"
+
+#: templates/apply.html:317
+msgid ""
+"Select source/destination port(s), or select common port(s) for both source/"
+"destination"
+msgstr ""
+
+#: templates/apply.html:382
+msgid "Rule Actions"
+msgstr "Ενέργειες Φίλτρου"
+
+#: templates/apply.html:398
+msgid "Expiration"
+msgstr "Λήξη"
+
+#: templates/apply.html:412
+msgid "Use/Comments"
+msgstr "Χρήση/Σχόλια"
+
+#: templates/apply.html:415
+msgid ""
+"Give a short description of the intended use of this rule, that justifies "
+"the parameter selection above. Feel free to include any additional comments."
+msgstr ""
+
+#: templates/apply.html:426
+msgid "Apply"
+msgstr "Εφαρμογή"
+
+#: templates/apply.html:433
+msgid "Add new port"
+msgstr "Νέα port"
+
+#: templates/base.html:41 templates/error.html:39 templates/welcome.html:7
+msgid "Welcome"
+msgstr "Καλωσήρθατε"
+
+#: templates/base.html:55 templates/error.html:42 templates/profile.html:4
+#: templates/profile.html.py:5 templates/profile.html:7
+msgid "My profile"
+msgstr "Το προφίλ μου"
+
+#: templates/base.html:57 templates/error.html:44
+msgid "Admin"
+msgstr "Διαχειριστής"
+
+#: templates/base.html:59 templates/error.html:46
+msgid "Logout"
+msgstr "Έξοδος"
+
+#: templates/base.html:61 templates/welcome.html:17
+msgid "Shibboleth Login"
+msgstr "Είσοδος με Shibboleth"
+
+#: templates/base.html:70 templates/user_routes.html:225
+#: templates/user_routes.html.py:229
+msgid "My rules"
+msgstr "Τα φίλτρα μου"
+
+#: templates/error.html:4 templates/error.html.py:53
+msgid "Activation Pending"
+msgstr "Απαιτείται Ενεργοποίηση"
+
+#: templates/error.html:4 templates/error.html.py:53
+msgid "Error"
+msgstr "Σφάλμα"
+
+#: templates/error.html:48
+msgid "Retry Login"
+msgstr "Επανάληψη Εισόδου"
+
+#: templates/error.html:56
+msgid ""
+"One or more required shibboleth attributes were not released towards this "
+"service"
+msgstr "Ένα ή περισσότερα Shibboleth attributes δεν προωθήθηκαν στην υπηρεσία"
+
+#: templates/error.html:61
+msgid "Required shibboleth attributes"
+msgstr "Απαιτούμενα Shibboleth attributes "
+
+#: templates/error.html:68
+msgid "Optional"
+msgstr "Προεραιτικά"
+
+#: templates/footer.html:4
+msgid ""
+"If you have any questions or need help, contact GRNET Helpdesk at <a "
+"href='mailto:helpdesk@grnet.gr'>helpdesk@grnet.gr</a> or 800-11-47638."
+msgstr ""
+"Eάν χρειάζεστε διευκρινήσεις ή βοήθεια, επικοινωνήστε με το Helpdesk του "
+"ΕΔΕΤ στο <a href='mailto:helpdesk@grnet.gr'>helpdesk@grnet.gr</a> ή "
+"τηλεφωνικά στο 800-11-47638."
+
+#: templates/footer.html:6
+msgid "GRNET"
+msgstr "ΕΔΕΤ"
+
+#: templates/footer.html:6 templates/getinfo.html:27
+#: templates/getinfo.html.py:28
+msgid "Info"
+msgstr "Πληροφορίες"
+
+#: templates/footer.html:6
+msgid "Service Terms"
+msgstr "Όροι Χρήσης"
+
+#: templates/getinfo.html:33
+msgid "Intro"
+msgstr "Εισαγωγή"
+
+#: templates/getinfo.html:34
+msgid ""
+"Firewall on Demand service provides potential users (educational and "
+"academic community) the option to protect their networking equipment against "
+"network attacks and threats.\n"
+"\n"
+"In particular, the service is targeted at network operators of GRNET's "
+"institutions who have needs for short-term protection against network "
+"attacks with destination, equipment they operate.\n"
+"To ensure the integrity of the service and in order to prevent the service "
+"being a source of attacks, the authentication of users is done via "
+"Shibboleth. The authorisation is based on a combination of Shibboleth "
+"attributes with the address space that each organization manages.\n"
+"The software chosen to implement the service is solely based on open "
+"source.\n"
+"Requests or clarifications concerning the operation of the service should be "
+"submitted to GRNET Helpdesk via phone at 800-11-47638 or via e-mail to "
+"helpdesk-at-grnet.gr.\n"
+"\n"
+"\n"
+msgstr ""
+"Η υπηρεσία FoD (Firewall on Demand) παρέχει στην εκπαιδευτική και ακαδημαϊκή "
+"κοινότητα τη δυνατότητα για προστασία έναντι δικτυακών επιθέσεων που "
+"στοχέυουν στο δικτυακό εξοπλισμό που διαχειρίζονται.\n"
+"Ειδικότερα, η υπηρεσία απευθύνεται στα NOC των ιδρυμάτων‐φορέων του δικτύου "
+"ΕΔΕΤ που έχουν ανάγκες για βραχυπρόθεσμη προστασία έναντι δικτυακών "
+"επιθέσεων με προορισμό τον εξοπλισμό που διαχειρίζονται.\n"
+"Για τη διασφάλιση της ακεραιότητας της υπηρεσίας και προκειμένου αυτή να μην "
+"αποτελέσει πηγή επιθέσεων, το authentication των χρηστων πραγματοποιείται με "
+"τη χρήση Shibboleth. Το authorisation βασίζεται σε ένα συνδυασμό "
+"συγκεκριμένων attributes του Shibboleth με το address space που κάθε φορέας "
+"διαχειρίζεται.\n"
+"Το λογισμικό που επιλέχθηκε για την υλοποίηση της υπηρεσίας βασίζεται "
+"αποκλειστικά σε ανοιχτό κώδικα.\n"
+"Αιτήματα ή διευκρινίσεις που αφορούν στη λειτουργία της υπηρεσίας θα πρέπει "
+"να υποβάλλονται στο helpdesk του ΕΔΕΤ, τηλεφωνικά στο 800‐11‐47638 ή μέσω e‐"
+"mail στο helpdesk -στο- grnet.gr.\n"
+
+#: templates/getinfo.html:43
+msgid "Joining the service"
+msgstr "Συμμετοχή"
+
+#: templates/getinfo.html:44
+msgid ""
+"Joining the service requires the appropriate configuration of certain "
+"Shibboleth attributes"
+msgstr ""
+"Η συμμετοχή στην υπηρεσία προϋποθέτη την ορθή διαμόρφωση συγκεκριμένων "
+"Shibboleth attributes"
+
+#: templates/getinfo.html:49
+msgid ""
+"An appropriate HTTP_SHIB_EP_ENTITLEMENT which is provided by GRNET Helpdesk"
+msgstr ""
+"Ένα κατάλληλο HTTP_SHIB_EP_ENTITLEMENT το οποίο παρέχεται από το Helpdesk"
+
+#: templates/getinfo.html:51
+msgid "Optionally"
+msgstr "Προεραιτικά"
+
+#: templates/getinfo.html:56
+msgid "Use"
+msgstr "Χρήση"
+
+#: templates/getinfo.html:58
+msgid ""
+"The service enables users to mitigate active attacks aimed at their network "
+"equipment. \n"
+"It is based on the creation of dynamic firewall filters that are applied to "
+"the network using the management protocol NETCONF and are propagated to "
+"compatible (Juniper) backbone network devices via BGP flowspec NLRI.\n"
+"In order to properly complete the application for a new filter is essential "
+"that the destination address belongs to the user's administrative network. "
+"Currently attacks are limited per /29 subnet.\n"
+"Requests for new filters are applied directly to the network and therefore "
+"users should pay extra attention in their request. Filters that have been "
+"applied to the network are removed after their expiry date, and users can "
+"activate then again by selecting the corresponding option. \n"
+"Moreover, users are given the option for early deactivation of their "
+"requests.\n"
+msgstr ""
+"Η υπηρεσία δίνει τη δυνατότητα στους χρήστες να περιορίσουν ενεργές "
+"επιθέσεις που στοχεύουν στο δικτυακό τους εξοπλισμό. Βασίζεται στη "
+"δημιουργία δυναμικών φίλτρων firewall οι οποίοι εφαρμόζονται στο δίκτυο με "
+"τη χρήση του διαχειριστικού πρωτοκόλλου netconf και διαδίδονται στις "
+"συμβατές (Juniper) διτκυακές συσκευές του δικτύου κορμού της ΕΔΕΤ μέσω του "
+"BGP flowspec NLRI.\n"
+"Για την ορθή συμπλήρωση της αίτησης ενός νέου φίλτρου είναι απαραίτητο η "
+"διεύθυνση προορισμού να ανήκει στο δίκτυο διαχείρισης του φορέα από τον "
+"οποίο προέρχεται ο χρήστης. Στην παρούσα φάση περιορίζονται επιθέσεις "
+"ανά /29 υποδίκτυα.\n"
+"Τα αιτήματα για νέα φίλτρα εφαρμόζονται άμεσα στο δίκτυο και ως εκ τούτου θα "
+"πρέπει να δίνται ιδιαίτερη προσοχή κατά την αίτησή τους. Τα φίλτρα που έχουν "
+"εφαρμοσθεί στο δίκτυο αφαιρούνται μετά το πέρας της ημερομηνίας λήξης τους, "
+"ενώ οι χρήστες μπορούν να τα ενεργοποιήσουν ξανά μέσω της αντίστοιχης "
+"επιλογής. Παράλληλα, δίνεται η δυνατότητα για απενεργοποίηση αιτημάτων πριν "
+"τη λήξη τους κατά τη βούληση του χρήστη\n"
+
+#: templates/getinfo.html:65
+msgid "Security"
+msgstr "Ασφάλεια"
+
+#: templates/getinfo.html:66
+msgid ""
+"For security reasons, the submission of requests is monitored by the "
+"administrators of the service.\n"
+"The service administrators may at any time remove active requests from the "
+"network, if this is deemed necessary"
+msgstr ""
+"Για λόγους ασφαλείας, η υποβολή αιτημάτων καταγράφεται ενημερώνοντας τους "
+"διαχειριστές της υπηρεσίας.\n"
+"Οι διαχιριστές της υπηρεσίας μπορούν ανά πάσα στιγμή να αφαιρέσουν ενεργά "
+"αιτήματα από το δίκτυο, εάν κάτι τέτοιο κριθεί αναγκαίο"
+
+#: templates/gettos.html:27 templates/gettos.html.py:28
+msgid "Terms of Service"
+msgstr "Όροι χρήσης της υπηρεσίας Firewall on Demand"
+
+#: templates/gettos.html:33
+msgid ""
+"The FoD service is provided by GRNET to the academic and research community "
+"and the use of the service should only be done to promote academic, "
+"educational and research purposes.\n"
+"The following terms apply to all users of the service. These terms of use, "
+"as applicable, and each time amended, constitute the contract between the "
+"service users and GRNET.\n"
+"To use the service, users are required to accept the following terms."
+msgstr ""
+"Η υπηρεσία FoD παρέχεται από την ΕΔΕΤ Α.Ε. προς την ακαδημαϊκή και "
+"ερευνητική κοινότητα και η χρήση της υπηρεσίας οφείλει να γίνεται μόνο για "
+"την προώθηση ακαδημαϊκών, εκπαιδευτικών και ερευνητικών σκοπών.\n"
+"Οι παρακάτω όροι εφαρμόζονται από όλους τους χρήστες της υπηρεσίας. Οι "
+"παρόντες όροι χρήσης, όπως κάθε φορά ισχύουν και τροποποιούνται, αποτελούν "
+"τη σύμβαση μεταξύ των χρηστών της υπηρεσίας και της ΕΔΕΤ Α.Ε. Για τη χρήση "
+"της υπηρεσίας είναι απαραίτητη η αποδοχή των παρακάτω όρων."
+
+#: templates/gettos.html:36
+msgid "Potential Users"
+msgstr "Δυνητικοί Χρήστες"
+
+#: templates/gettos.html:37
+msgid ""
+"The service is targeted at the Network Operation Centers (or similar "
+"structures) approved by the board of GRNET SA, participating in the federal "
+"identification using Shibboleth. The service is provided to mitigate network "
+"attacks aimed at network equipment. The entrance and use of the service "
+"requires proper configuration and release of specific Shibboleth attributes."
+msgstr ""
+"Η υπηρεσία απευθύνεται στα Κέντρα Δικτύων (ή σε αντίστοιχες δομές) των "
+"εγκεκριμένων από το ΔΣ <a href='http://www.noc.grnet.gr/node/35' "
+"target='_blank'>φορέων</a> της ΕΔΕΤ Α.Ε που συμμετέχουν στην ομοσπονδιακή "
+"ταυτοποίηση με τη χρήση Shibboleth. Η υπηρεσία παρέχεται προκειμένου να "
+"περιοριστούν δικτυακές επιθέσεις που στοχεύουν στον εξοπλισμό των φορέων. Η "
+"είσοδος και χρήση της υπηρεσίας προϋποθέτη την ορθή διαμόρφωση συγκεκριμένων "
+"ιδιοτήτων του Shibboleth."
+
+#: templates/profile.html:10
+msgid "My data"
+msgstr "Τα στοιχεία μου"
+
+#: templates/profile.html:11
+msgid "First name"
+msgstr "Όνομα"
+
+#: templates/profile.html:12
+msgid "Last name"
+msgstr "Επώνυμο"
+
+#: templates/profile.html:13
+msgid "Email"
+msgstr ""
+
+#: templates/profile.html:15
+msgid "My Networks"
+msgstr "Τα Δίκτυά μου"
+
+#: templates/profile.html:18
+msgid "Organization"
+msgstr "Φορέας"
+
+#: templates/profile.html:18
+msgid "Networks"
+msgstr "Δίκτυα"
+
+#: templates/profile.html:27
+msgid ""
+"Ooops! Seems you have no networks associated with your peer. Contact "
+"Helpdesk to resolve this issue."
+msgstr ""
+
+#: templates/user_routes.html:19 templates/user_routes.html.py:298
+msgid "Suspend"
+msgstr "Κατάργηση"
+
+#: templates/user_routes.html:126
+msgid "Display"
+msgstr "Προβολή"
+
+#: templates/user_routes.html:126
+msgid "All"
+msgstr "όλων των"
+
+#: templates/user_routes.html:126
+msgid "rules"
+msgstr "φίλτρων"
+
+#: templates/user_routes.html:128
+msgid "No records to display"
+msgstr "Δεν βρέθηκαν εγγραφές"
+
+#: templates/user_routes.html:130
+msgid "Showing 0 to 0 of 0 entries"
+msgstr "Δείχνοντας 0 εως 0 από 0 εγγραφές"
+
+#: templates/user_routes.html:133
+msgid "Search:"
+msgstr "Αναζήτηση:"
+
+#: templates/user_routes.html:136
+msgid "First"
+msgstr "Πρώτη"
+
+#: templates/user_routes.html:137
+msgid "Previous"
+msgstr "Προηγούμενη"
+
+#: templates/user_routes.html:138
+msgid "Next"
+msgstr "Επόμενη"
+
+#: templates/user_routes.html:139
+msgid "Last"
+msgstr "Τελευταία"
+
+#: templates/user_routes.html:232 templates/user_routes.html.py:327
+msgid "Console"
+msgstr "Κονσόλα"
+
+#: templates/user_routes.html:232
+msgid "Add Rule"
+msgstr "Δημιουργία φίλτρου"
+
+#: templates/user_routes.html:266
+msgid "Match"
+msgstr "Όροι"
+
+#: templates/user_routes.html:269
+msgid "Details"
+msgstr "Λεπτομέρειες"
+
+#: templates/user_routes.html:270
+msgid "Applier"
+msgstr "Χρήστης"
+
+#: templates/user_routes.html:273
+msgid "Actions"
+msgstr "Ενέργειες"
+
+#: templates/user_routes.html:294
+msgid "Rule expired"
+msgstr "Λήξη Φίλτρου"
+
+#: templates/user_routes.html:294
+msgid "Suspended by administrator"
+msgstr "Απενεργοποιήθηκε από το διαχειριστή"
+
+#: templates/user_routes.html:294
+msgid "Suspended by user"
+msgstr "Απενεργοποιήθηκε από το χρήστη"
+
+#: templates/user_routes.html:297
+msgid "Edit"
+msgstr "Επεξεργασία"
+
+#: templates/user_routes.html:302
+msgid "Reactivate"
+msgstr "Ενεργοποίηση"
+
+#: templates/user_routes.html:305
+msgid "ReSync"
+msgstr ""
+
+#: templates/user_routes.html:308
+msgid "Fix it!"
+msgstr "Επιδιόρθωση"
+
+#: templates/user_routes.html:323
+msgid "You are about to suspend rule"
+msgstr "Πρόκειται να απενεργοποιήσετε το φίλτρο"
+
+#: templates/user_routes.html:324
+msgid ""
+"Suspending the rule will automatically remove the configuration from the "
+"network and mark this rule as inactive."
+msgstr ""
+"Η απενεργοποίηση του φίλτρου θα προκαλέσει την αυτόματη αφαίρεση της "
+"συγκρότησης από το δίκτυο."
+
+#: templates/user_routes.html:325
+msgid "Are you sure you want to proceed?"
+msgstr "Είστε βέβαιοι ότι επιθυμείτε να συνεχίσετε;"
+
+#: templates/welcome.html:3
+msgid "Login"
+msgstr "Είσοδος"
+
+#: templates/welcome.html:8
+msgid "Welcome to GRNET's FoD service."
+msgstr "Καλωσήρθατε στην υπηρεσία FoD του ΕΔΕΤ."
+
+#: templates/welcome.html:9
+msgid ""
+"If you are new to the service, take some time to read the service description"
+msgstr ""
+"Εάν χρησιμοποιείτε την υπηρεσία για πρώτη φορά, αφιερώστε λίγο χρόνο στην "
+"ανάγνωση της περιγραφής της υπηρεσίας"
+
+#: templates/welcome.html:9
+msgid "here"
+msgstr "εδώ"
+
+#: templates/welcome.html:10
+msgid ""
+"If you have properly set your Shibboleth attributes, you can login using the "
+"link on the right"
+msgstr ""
+"Έαν έχετε ορίσει ορθά τις απαιτούμενες παραμέτρους του Shibboleth, μπορείτε "
+"να εισέλθετε επιλέγοντας το σύνδεσμο στα δεξιά"
+
+#: templates/welcome.html:11
+msgid ""
+"For troubleshooting info and remarks do not hesitate to contact GRNET's "
+"Helpdesk."
+msgstr ""
+"Για αντιμετώπιση σφαλμάτων και πληροφορίες, επικοινωνήστε με το Helpdesk του "
+"ΕΔΕΤ"
+
+#: templates/registration/activate.html:3
+#: templates/registration/activation_complete.html:3
+#: templates/registration/activation_complete.html:7
+msgid "Activation Complete"
+msgstr "Ολοκλήρωση ενεργοποίησης"
+
+#: templates/registration/activate.html:7
+msgid "Activation Status"
+msgstr "Κατάσταση Ενεργοποίησης"
+
+#: templates/registration/activate.html:9
+msgid "succesfully activated"
+msgstr "ενεργοποιήθηκε επιτυχώς"
+
+#: templates/registration/activate.html:11
+msgid "The user has probably been already activated."
+msgstr "Ο χρήστης έχει ήδη ενεργοποιηθεί"
+
+#: templates/registration/activation_complete.html:8
+msgid "The user will be notified about his/her account activation"
+msgstr "Ο χρήστης θα ενημερωθεί για την ενεργοποίηση του λογαριασμού"
+
+#~ msgid ""
+#~ "After clicking Retry Login, it is strongly suggested to close your "
+#~ "browser and visit the page again"
+#~ msgstr ""
+#~ "Αφού επιλέξετε Επανάληψη Εισόδου, προτείνουμε να κλείσετε την εφαρμογή "
+#~ "περιήγησης και να επισκεφθέιτε τη σελίδα ξανά"
+
+#~ msgid "My routes"
+#~ msgstr "Τα φίλτρα μου"
index 76f18d3..5f84c83 100644 (file)
@@ -103,7 +103,7 @@ MIDDLEWARE_CLASSES = (
     'django.contrib.auth.middleware.AuthenticationMiddleware',
     'django.contrib.messages.middleware.MessageMiddleware',
     'django.middleware.cache.FetchFromCacheMiddleware',
-    'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
+    #'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
 )
 
 AUTHENTICATION_BACKENDS = (
@@ -129,7 +129,7 @@ INSTALLED_APPS = (
     'django.contrib.sessions',
     'django.contrib.sites',
     'django.contrib.messages',
-    'django.contrib.flatpages',
+    #'django.contrib.flatpages',
     'flowspec',
     'poller',
     'south',
index ad8e928..af76bef 100644 (file)
@@ -1,3 +1,4 @@
+{% load i18n %}
 <script type="text/javascript">
     $(document).ready(function(){
         $("#add_port_form").unbind('submit');
@@ -10,7 +11,7 @@
 <form id="add_port_form" method="POST">
        {% csrf_token %}
 <table>
-<tr><th>Port</th><td>{{ form.port }}<span class="error" id='rl_error'>{{ form.port.errors|join:", " }}</span></td></tr>
+<tr><th>{% trans "Port" %}</th><td>{{ form.port }}<span class="error" id='rl_error'>{{ form.port.errors|join:", " }}</span></td></tr>
 </table>
 </form>
 
index 5f882ea..d889d04 100644 (file)
@@ -32,7 +32,7 @@
                        modal: true,
                        autoOpen: false,
                        buttons: {
-               'Add': function() {
+               '{% trans "Add" %}': function() {
                        console.log($("#add_rl_form").serialize());
                        $.ajax({
                        url:"{% url add-rate-limit %}", 
@@ -52,7 +52,7 @@
                                }
                                });
                },
-               Cancel: function() {
+               '{% trans "Cancel" %}': function() {
                        $('#then_diag').dialog('close');
                }
        }
@@ -64,7 +64,7 @@
                        modal: true,
                        autoOpen: false,
                        buttons: {
-               'Add': function() {
+               '{% trans "Add" %}': function() {
                        $.ajax({
                        url:"{% url add-port %}", 
                        data:$("#add_port_form").serialize(),
@@ -85,7 +85,7 @@
                                }
                                });
                },
-               Cancel: function() {
+               '{% trans "Cancel" %}': function() {
                        $('#port_diag').dialog('close');
                }
        }
@@ -312,9 +312,9 @@ div.roundbox, #portsacc, #id_comments{
                     {% endif %}
                 </div>
                 <div id='portsacc'>
-                <h3 style="padding: 0.5em 0.5em 0.5em 0.7em;">Advanced Settings (Ports)</h3>
+                <h3 style="padding: 0.5em 0.5em 0.5em 0.7em;">{% trans "Advanced Settings (Ports)" %}</h3>
                 <div class='accord_wrapper' style="height: 452px !important;">
-                    Select source/destination port(s), or select common port(s) for both source/destination
+                    {% trans "Select source/destination port(s), or select common port(s) for both source/destination" %}
                     <table>
                     <tr>
                         <th>
@@ -323,7 +323,7 @@ div.roundbox, #portsacc, #id_comments{
                         <td>
                             {{ form.sourceport }}&nbsp;&nbsp;
                             <button class="new_port">
-                                Port
+                                {% trans "Port" %}
                             </button>
                             <span class="error">{{ form.sourceport.errors|join:", " }}</span>
                         </td>
@@ -342,7 +342,7 @@ div.roundbox, #portsacc, #id_comments{
                         <td>
                             {{ form.destinationport }}&nbsp;&nbsp;
                             <button class="new_port">
-                                Port
+                                {% trans "Port" %}
                             </button>
                             <span class="error">{{ form.destinationport.errors|join:", " }}</span>
                         </td>
@@ -361,7 +361,7 @@ div.roundbox, #portsacc, #id_comments{
                         <td>
                             {{ form.port }}&nbsp;&nbsp;
                             <button class="new_port">
-                                Port
+                                {% trans "Port" %}
                             </button>
                             <span class="error">{{ form.port.errors|join:", " }}</span>
                         </td>
@@ -411,11 +411,10 @@ div.roundbox, #portsacc, #id_comments{
                 <legend>
                     {% trans "Use/Comments" %}
                 </legend>
-                {% blocktrans %}
                 <p class="roundbox">
-                    Give a short description of the intended use of this rule, that justifies the parameter selection above. Feel free to include any additional comments.
+                    {% blocktrans %}Give a short description of the intended use of this rule, that justifies the parameter selection above. Feel free to include any additional comments.{% endblocktrans %}
                 </p>
-                {% endblocktrans %}
+                
                 <p>
                     {{ form.comments }}
                     {% if form.errors %}
@@ -431,7 +430,7 @@ div.roundbox, #portsacc, #id_comments{
 </div>
 <div id="then_diag" title="Add new rate-limit value">
 </div>
-<div id="port_diag" title="Add new port">
+<div id="port_diag" title="{% trans "Add new port" %}">
 </div>
 
 {% endblock %}
index 58f4310..078ea50 100644 (file)
@@ -40,7 +40,7 @@
                                                {% if user.is_authenticated %}
                                                <span class="topmenuuser">{% trans "Welcome" %} <strong>{{user}}</strong></span>
                                                {% endif %}
-                                               {% comment %}
+
                                                <span {% if user.is_authenticated %}class="topmenuaction"{% else %}class="topmenuuser"{% endif %} >
                                                        <form action="{% url django.views.i18n.set_language %}" method="post" style="display:inline;" id="langform">
                                                                {% csrf_token %}
@@ -50,7 +50,7 @@
                                                                {% endfor %}
                                                        </form>
                                                </span>
-                                               {% endcomment %}
+
                                                {% if user.is_authenticated %}
                                                <span class="topmenuaction"><a href="{% url user-profile %}">{% trans "My profile" %}</a></span>
                                                {% if user.is_superuser %}
index 38c1d51..6617237 100644 (file)
@@ -1,6 +1,7 @@
 {% extends "base.html" %}
 {% load i18n %}
-{% block title %}{% if error %}{% if inactive %}Activation Pending{% else %}Error{% endif %}{% endif %}{% endblock %}
+
+{% block title %}{% if error %}{% if inactive %}{% trans "Activation Pending" %}{% else %}{% trans "Error" %}{% endif %}{% endif %}{% endblock %}
 
 {% block extrahead %}
        <script type="text/javascript">
                color: #fff;
            }
 
-       </style>
+</style>
+<script type="text/javascript">
+
+       function setlang(lang){
+               $("#langsel").val(lang);
+               $("#langform").submit();
+       }
+
+</script>
 {% endblock %}
 
+
 {% block menublock %}
        {% if user.is_authenticated %}
                <span class="topmenuuser">{% trans "Welcome" %} <strong>{{user}}</strong></span>
 {% endblock %}
 
 {% block content %}
-       {% if error %}{% if inactive %}<h2>Activation Pending</h2>{% else %}<h2>Error</h2>{% endif %}{% endif %}
+       {% if error %}{% if inactive %}<h2>{% trans "Activation Pending" %}</h2>{% else %}<h2>{% trans "Error" %}</h2>{% endif %}{% endif %}
        <div>
        {% if missing_attributes %}
-       <p>One or more required shibboleth attributes were not released towards this service</p>
+       <p>{% trans "One or more required shibboleth attributes were not released towards this service" %}</p>
        {% endif %}
        <p {% if not inactive %}style="color: red;"{% endif %}>{% autoescape off %}{{error}}{% endautoescape %}</p>
        {% if missing_attributes %}
        <p>
-       Required shibboleth attributes:<br>
+       {% trans "Required shibboleth attributes" %}:<br>
        <ul>
        <li>HTTP_EPPN</li>
        <li>HTTP_SHIB_HOMEORGANIZATION</li>
        <li>HTTP_SHIB_INETORGPERSON_MAIL</li>
        <li>An appropriate HTTP_SHIB_EP_ENTITLEMENT</li>
        </ul>
-       Optional Attributes:
+       {% trans "Optional" %}:
        <ul>
        <li>HTTP_SHIB_INETORGPERSON_GIVENNAME</li>
        <li>HTTP_SHIB_PERSON_SURNAME</li>
index d908364..a8fc3c9 100644 (file)
@@ -3,6 +3,6 @@
        {% if user.is_authenticated %}
        {% trans "If you have any questions or need help, contact GRNET Helpdesk at <a href='mailto:helpdesk@grnet.gr'>helpdesk@grnet.gr</a> or 800-11-47638." %}<br />
        {% endif %}
-       <a href="http://www.grnet.gr">{% trans "GRNET" %} NOC</a> | <a href="/fod/about/info/">{% trans "Info" %}</a> | <a href="/fod/about/terms-of-service/">{% trans "Service Terms" %}</a>
+       <a href="http://www.grnet.gr">{% trans "GRNET" %} NOC</a> | <a href="{% url getinfo %}">{% trans "Info" %}</a> | <a href="{% url gettos %}">{% trans "Service Terms" %}</a>
        <p style="text-align: center;"><img width="46" height="40" border="0" class="image image-img_assist_custom-46x40 " src="http://noc.grnet.gr/sites/default/files/images/image_PSSYGK.img_assist_custom-46x40.png" alt="Flag ΨΣ" title="Flag ΨΣ"> <img width="49" height="40" border="0" class="image image-img_assist_custom-49x40 " src="http://noc.grnet.gr/sites/default/files/images/image_EEflag.img_assist_custom-49x40.png" alt="EU flag" title="EU flag"> <img width="90" height="40" border="0" class="image image-img_assist_custom-90x40 " src="http://noc.grnet.gr/sites/default/files/images/image_YPDBMTH.img_assist_custom-90x40.png" alt="Flag ΥΠΔΒΜΘ" title="Flag ΥΠΔΒΜΘ"><img width="67" height="40" border="0" class="image image-img_assist_custom-67x40 " src="http://noc.grnet.gr/sites/default/files/images/image_ESPA.img_assist_custom-67x40.png" alt="ESPA" title="ESPA"></p>
 </div>
diff --git a/templates/getinfo.html b/templates/getinfo.html
new file mode 100644 (file)
index 0000000..fbd0ea3
--- /dev/null
@@ -0,0 +1,69 @@
+{% extends "base.html" %}
+{% load i18n %}
+{% block extrahead %}
+
+
+<style type="text/css">
+       #console {
+               background: none repeat scroll 0 0 #36102a !important;
+               color: #edeae8 !important;
+               font-family: monospace !important;
+       }
+       .message {
+               font-family: monospace !important;
+       }
+       .tooltip {
+       display:none;
+       background:transparent url(/static/black_arrow.png);
+       font-size:12px;
+       height:70px;
+       width:160px;
+       padding:25px;
+       color:#fff;     
+}
+       
+</style>
+{% endblock %}
+{% block title %}{% trans "Info" %}{% endblock %}
+{% block breadcrumbs %}:: {% trans "Info" %}{% endblock %}
+{% block content %}
+{% csrf_token %}
+<div>
+
+    <h5>{% trans "Intro" %}</h5>
+{% blocktrans %}Firewall on Demand service provides potential users (educational and academic community) the option to protect their networking equipment against network attacks and threats.
+
+In particular, the service is targeted at network operators of GRNET's institutions who have needs for short-term protection against network attacks with destination, equipment they operate.
+To ensure the integrity of the service and in order to prevent the service being a source of attacks, the authentication of users is done via Shibboleth. The authorisation is based on a combination of Shibboleth attributes with the address space that each organization manages.
+The software chosen to implement the service is solely based on open source.
+Requests or clarifications concerning the operation of the service should be submitted to GRNET Helpdesk via phone at 800-11-47638 or via e-mail to helpdesk-at-grnet.gr.
+
+
+{% endblocktrans %}
+<h5>{% trans "Joining the service" %}</h5>
+{% blocktrans %}Joining the service requires the appropriate configuration of certain Shibboleth attributes{% endblocktrans %}:
+                               <ul>
+                               <li>HTTP_EPPN</li>
+                               <li>HTTP_SHIB_HOMEORGANIZATION</li>
+                               <li>HTTP_SHIB_INETORGPERSON_MAIL</li>
+                               <li>{% blocktrans %}An appropriate HTTP_SHIB_EP_ENTITLEMENT which is provided by GRNET Helpdesk{% endblocktrans %}</li>
+                               </ul>
+                               {% trans "Optionally" %}:
+                               <ul>
+                               <li>HTTP_SHIB_INETORGPERSON_GIVENNAME</li>
+                               <li>HTTP_SHIB_PERSON_SURNAME</li>
+                               </ul>
+<h5>{% trans "Use" %}</h5>
+
+{% blocktrans %}The service enables users to mitigate active attacks aimed at their network equipment. 
+It is based on the creation of dynamic firewall filters that are applied to the network using the management protocol NETCONF and are propagated to compatible (Juniper) backbone network devices via BGP flowspec NLRI.
+In order to properly complete the application for a new filter is essential that the destination address belongs to the user's administrative network. Currently attacks are limited per /29 subnet.
+Requests for new filters are applied directly to the network and therefore users should pay extra attention in their request. Filters that have been applied to the network are removed after their expiry date, and users can activate then again by selecting the corresponding option. 
+Moreover, users are given the option for early deactivation of their requests.
+{% endblocktrans %}
+
+<h5>{% trans "Security" %}</h5>
+{% blocktrans %}For security reasons, the submission of requests is monitored by the administrators of the service.
+The service administrators may at any time remove active requests from the network, if this is deemed necessary{% endblocktrans %}
+</div>
+{% endblock %}
diff --git a/templates/gettos.html b/templates/gettos.html
new file mode 100644 (file)
index 0000000..b9030d9
--- /dev/null
@@ -0,0 +1,39 @@
+{% extends "base.html" %}
+{% load i18n %}
+{% block extrahead %}
+
+
+<style type="text/css">
+       #console {
+               background: none repeat scroll 0 0 #36102a !important;
+               color: #edeae8 !important;
+               font-family: monospace !important;
+       }
+       .message {
+               font-family: monospace !important;
+       }
+       .tooltip {
+       display:none;
+       background:transparent url(/static/black_arrow.png);
+       font-size:12px;
+       height:70px;
+       width:160px;
+       padding:25px;
+       color:#fff;     
+}
+       
+</style>
+{% endblock %}
+{% block title %}{% trans "Terms of Service" %}{% endblock %}
+{% block breadcrumbs %}:: {% trans "Terms of Service" %}{% endblock %}
+{% block content %}
+{% csrf_token %}
+<div>
+
+{% blocktrans %}The FoD service is provided by GRNET to the academic and research community and the use of the service should only be done to promote academic, educational and research purposes.
+The following terms apply to all users of the service. These terms of use, as applicable, and each time amended, constitute the contract between the service users and GRNET.
+To use the service, users are required to accept the following terms.{% endblocktrans %}
+    <h3>{% trans "Potential Users" %}</h3>
+{% blocktrans %}The service is targeted at the Network Operation Centers (or similar structures) approved by the board of GRNET SA, participating in the federal identification using Shibboleth. The service is provided to mitigate network attacks aimed at network equipment. The entrance and use of the service requires proper configuration and release of specific Shibboleth attributes.{% endblocktrans %}
+</div>
+{% endblock %}
index 940c992..f705ac9 100644 (file)
@@ -7,14 +7,15 @@
 <h3>{% trans "My profile" %}</h3>
 
 <div id="profile">
-       <strong>First name:</strong> {{user.first_name}} <br>
-       <strong>Last name:</strong> {{user.last_name}} <br>
-       <strong>Email:</strong> {{user.email}}<br>
+       {% trans "My data" %}:<br>
+       <strong>{% trans "First name" %}:</strong> {{user.first_name}} <br>
+       <strong>{% trans "Last name" %}:</strong> {{user.last_name}} <br>
+       <strong>{% trans "Email" %}:</strong> {{user.email}}<br>
        <br>
-       <strong>My Networks:</strong><br>
+       <strong>{% trans "My Networks" %}:</strong><br>
        <table class="display">
        <tr>
-       <th class="ui-state-default">Organization</th><th class="ui-state-default">Networks</th>
+       <th class="ui-state-default">{% trans "Organization" %}</th><th class="ui-state-default">{% trans "Networks" %}</th>
        </tr>
        {% for peer in peers %}
                <tr class="gradeC {% if forloop.counter|divisibleby:2 %}even{% else %}odd{% endif %}">
                {% for network in peer.networks.all %}
                {{network}}<br>
                {% empty %}
-           <span style="color:red">Ooops! Seems you have no networks associated with this peer. Contact Helpdesk to resolve this issue.</span>
+           <span style="color:red">{% blocktrans %}Ooops! Seems you have no networks associated with your peer. Contact Helpdesk to resolve this issue.{% endblocktrans %}</span>
                {% endfor %}
                </td></tr>
        {% endfor %}
        </table>
 </div>
 
-
-
 {% endblock %}
+
index 568a629..9fd6653 100644 (file)
@@ -16,7 +16,7 @@ $(document).ready(function(){
         modal: true,
         autoOpen: false,
         buttons: {
-            'Suspend': function(){
+            '{% trans "Suspend" %}': function(){
                 route = $('#route_to_delete').text();
                 route_url_id = '#del_route_' + route;
                 url = $(route_url_id).attr('href');
@@ -29,7 +29,7 @@ $(document).ready(function(){
                     }
                 });
             },
-            Cancel: function(){
+            '{% trans "Cancel" %}': function(){
                 $('#dialog').dialog('close');
             },
         },
@@ -121,10 +121,24 @@ $(document).ready(function(){
             "bSortable": false
         }],
         "aaSorting": [[0, 'desc']],
-        "oLanguage": {
-            "sLengthMenu": '{% trans "Display" %} <select><option value="25">25</option><option value="50">50</option><option value="-1">{% trans "All" %}</option></select> rules'
-        },
         "iDisplayLength": 25,
+        "oLanguage": {
+               "sLengthMenu": '{% trans "Display" %} <select><option value="25">25</option><option value="50">50</option><option value="-1">{% trans "All" %}</option></select> {% trans "rules" %}',
+            "sProcessing":   "Processing...",
+            "sZeroRecords": '{% trans "No records to display" %}',
+            "sInfo":         "Showing _START_ to _END_ of _TOTAL_ entries",
+            "sInfoEmpty":    "{% trans "Showing 0 to 0 of 0 entries" %}",
+            "sInfoFiltered": "(filtered from _MAX_ total entries)",
+            "sInfoPostFix":  "",
+            "sSearch":       '{% trans "Search:" %}',
+            "sUrl":          "",
+            "oPaginate": {
+                "sFirst":    '{% trans "First" %}',
+                "sPrevious": '{% trans "Previous" %}',
+                "sNext":     '{% trans "Next" %}',
+                "sLast":     '{% trans "Last" %}'
+            }
+        }
     });
     oTable.fnDraw();
     $('input[name="status_filter"]').click(function(){
@@ -215,7 +229,7 @@ function delete_route(route){
        <h3 style="margin-top: 0px;">{% trans "My rules" %}</h3>
 </div>
 <div class='button_place' style="float:right">
-       <button id="consolebutton">Console</button> <a href="{% url add-route %}" id="routebutton">Add Rule</a>
+       <button id="consolebutton">{% trans "Console" %}</button> <a href="{% url add-route %}" id="routebutton">{% trans "Add Rule" %}</a>
 </div>
 <br><br>
 
@@ -277,21 +291,21 @@ function delete_route(route){
                style="border-bottom:2px dashed red;" 
         title="Expires {% ifequal route.days_to_expire '0' %}today{% else%}in {{route.days_to_expire}} day{{ route.days_to_expire|pluralize }}{% endifequal %}"
                {% endif %}{% endif %}>{{ route.expires }}</span></td>
-       <td style="text-align: center;">{% if route.status == 'EXPIRED' %}Rule expired{% else %}{% if route.status == 'ADMININACTIVE' %}Suspended by administrator{% else %}{% if route.status == 'INACTIVE' %}Suspended by user{% else %}{{ route.response }}{% if route.status == 'PENDING' %}<img src="/static/dots.gif">{% endif %}{% endif %}{% endif %}{% endif %}</td>
+       <td style="text-align: center;">{% if route.status == 'EXPIRED' %}{% trans "Rule expired" %}{% else %}{% if route.status == 'ADMININACTIVE' %}{% trans "Suspended by administrator" %}{% else %}{% if route.status == 'INACTIVE' %}{% trans "Suspended by user" %}{% else %}{{ route.response }}{% if route.status == 'PENDING' %}<img src="/static/dots.gif">{% endif %}{% endif %}{% endif %}{% endif %}</td>
        <td style="text-align: center; width:180px;">
                {% ifequal route.status 'ACTIVE' %}
-               <a href="{% url edit-route route.name %}" class="edit_button" id="edit_button_{{route.pk}}">Edit</a> 
-               <button class="del_button" id="{{route.name}}" onclick="javascript:delete_route(this.id)">Suspend</button>
+               <a href="{% url edit-route route.name %}" class="edit_button" id="edit_button_{{route.pk}}">{% trans "Edit" %}</a> 
+               <button class="del_button" id="{{route.name}}" onclick="javascript:delete_route(this.id)">{% trans "Suspend" %}</button>
                <a href="{% url delete-route route.name %}" style="display:none" id="del_route_{{route.name}}"></a>
                {% else %}
                {% if route.status == 'EXPIRED' or route.status == 'ADMININACTIVE' or route.status == 'INACTIVE' %}
-               <a href="{% url edit-route route.name %}" class="edit_button" id="edit_button_{{route.pk}}">Reactivate</a>
+               <a href="{% url edit-route route.name %}" class="edit_button" id="edit_button_{{route.pk}}">{% trans "Reactivate" %}</a>
                {% else %}
                {% ifequal route.status 'OUTOFSYNC' %}
-               <a href="{% url edit-route route.name %}" class="edit_button" id="edit_button_{{route.pk}}">ReSync</a>
+               <a href="{% url edit-route route.name %}" class="edit_button" id="edit_button_{{route.pk}}">{% trans "ReSync" %}</a>
                {% else %}
                {% ifequal route.status 'ERROR' %}
-               <a href="{% url edit-route route.name %}" class="edit_button" id="edit_button_{{route.pk}}">Fix it!</a>
+               <a href="{% url edit-route route.name %}" class="edit_button" id="edit_button_{{route.pk}}">{% trans "Fix it!" %}</a>
                {% else %}
                -
                {% endifequal %}
@@ -306,11 +320,11 @@ function delete_route(route){
 </table>
 
 <div id="dialog" title="Suspend Rule">
-               <p>You are about to suspend rule <strong><span id="route_to_delete"></span></strong></p>
-               <p>Suspending the rule will automatically remove the configuration from the network and mark this rule as inactive.</p>
-               <p>Are you sure you want to proceed?</p>
+               <p>{% blocktrans %}You are about to suspend rule{% endblocktrans %} <strong><span id="route_to_delete"></span></strong></p>
+               <p>{% blocktrans %}Suspending the rule will automatically remove the configuration from the network and mark this rule as inactive.{% endblocktrans %}</p>
+               <p>{% blocktrans %}Are you sure you want to proceed?{% endblocktrans %}</p>
 </div>
-<div id="console" title="Console">
+<div id="console" title="{% trans "Console" %}">
                                        {% include "poll.html" %}
 </div>
 {% endblock %}
index 19b04ea..f5ea5ed 100644 (file)
@@ -5,17 +5,16 @@
 {% block content %}
 <div id="welcome">
 <h3>{% trans "Welcome" %}</h3>
-<p>Welcome to GRNET's FoD service.</p>
-<p>If you are new to the service, take some time to read the service description <a href="/fod/about/info/">here</a>.</p>
-<p>If you have properly set your Shibboleth attributes, you can login using the link on the right</p>
-<p>For troubleshooting info and remarks do not hesitate to contact GRNET's Helpdesk.</p>
-</p>
+<p>{% blocktrans %}Welcome to GRNET's FoD service.{% endblocktrans %}</p>
+<p>{% blocktrans %}If you are new to the service, take some time to read the service description{% endblocktrans %} <a href="{% url getinfo %}">{% trans "here" %}</a>.</p>
+<p>{% blocktrans %}If you have properly set your Shibboleth attributes, you can login using the link on the right{% endblocktrans %}</p>
+<p>{% blocktrans %}For troubleshooting info and remarks do not hesitate to contact GRNET's Helpdesk.{% endblocktrans %}</p>
 </div>
 
 <div id="loginform">
                                        <a href="{% url login %}">
                                        <img src="/static/shib_login.png" style="border:none;">
-                                       <p>Shibboleth Login</p>
+                                       <p>{% trans "Shibboleth Login" %}</p>
                                </a>
 </div>
 {% endblock %}
index 76c729b..e180cb9 100644 (file)
@@ -19,6 +19,8 @@ urlpatterns = patterns('',
     url(r'^fod/delete/(?P<route_slug>[\w\-]+)/$', 'flowspy.flowspec.views.delete_route', name="delete-route"),
     url(r'^fod/login/?', 'flowspy.flowspec.views.user_login', name="login"),
     url(r'^fod/welcome/?', 'flowspy.flowspec.views.welcome', name="welcome"),
+    url(r'^fod/info/?', 'flowspy.flowspec.views.getinfo', name="getinfo"),
+    url(r'^fod/tos/?', 'flowspy.flowspec.views.gettos', name="gettos"),
     url(r'^fod/logout/?', 'flowspy.flowspec.views.user_logout', name="logout"),
     (r'^fod/setlang/?$', 'django.views.i18n.set_language'),
     # Uncomment the admin/doc line below to enable admin documentation: