diff --git a/pyweb/mumble/admin.py b/pyweb/mumble/admin.py index 53d85fc..3974f30 100644 --- a/pyweb/mumble/admin.py +++ b/pyweb/mumble/admin.py @@ -14,14 +14,35 @@ * GNU General Public License for more details. """ -from models import * from django.contrib import admin +from django.utils.translation import ugettext_lazy as _ + +from models import * class MumbleAdmin(admin.ModelAdmin): - list_display = [ 'name', 'addr', 'port', 'booted' ]; - list_filter = [ 'booted' ]; + list_display = [ 'name', 'addr', 'port', 'booted', 'getIsPublic', 'getUsersRegged', 'getUsersOnline', 'getChannelCnt' ]; + list_filter = [ 'booted', 'addr' ]; search_fields = [ 'name', 'addr' ]; ordering = [ 'name' ]; + + def getUsersRegged( self, obj ): + return obj.users_regged; + getUsersRegged.short_description = _( 'Registered users' ); + + def getUsersOnline( self, obj ): + return obj.users_online; + getUsersOnline.short_description = _( 'Online users' ); + + def getChannelCnt( self, obj ): + return obj.channel_cnt; + getChannelCnt.short_description = _( 'Channel count' ); + + def getIsPublic( self, obj ): + if obj.is_public: + return _( 'Yes' ); + return _( 'No' ); + getIsPublic.short_description = _( 'Public' ); + class MumbleUserAdmin(admin.ModelAdmin): list_display = [ 'owner', 'server', 'name' ]; diff --git a/pyweb/mumble/forms.py b/pyweb/mumble/forms.py index 64f1a5a..c19122e 100644 --- a/pyweb/mumble/forms.py +++ b/pyweb/mumble/forms.py @@ -16,6 +16,8 @@ from django import forms from django.forms import Form, ModelForm +from django.utils.translation import ugettext_lazy as _ + from models import * diff --git a/pyweb/mumble/locale/de/LC_MESSAGES/django.mo b/pyweb/mumble/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 0000000..5d737ef Binary files /dev/null and b/pyweb/mumble/locale/de/LC_MESSAGES/django.mo differ diff --git a/pyweb/mumble/locale/de/LC_MESSAGES/django.po b/pyweb/mumble/locale/de/LC_MESSAGES/django.po new file mode 100644 index 0000000..cc3aa62 --- /dev/null +++ b/pyweb/mumble/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,350 @@ +# German translation file for Mumble-Django. +# +# Copyright (C) 2009, Michael "Svedrin" Ziegler +# +# Mumble-Django is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This package is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +msgid "" +msgstr "" +"Project-Id-Version: Mumble-Django v0.8\n" +"Report-Msgid-Bugs-To: Michael Ziegler\n" +"POT-Creation-Date: 2009-07-18 17:00+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Michael Ziegler \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: admin.py:30 +msgid "Registered users" +msgstr "Registrierte Benutzer" + +#: admin.py:34 +msgid "Online users" +msgstr "Benutzer online" + +#: admin.py:38 +msgid "Channel count" +msgstr "Channels" + +#: admin.py:42 +msgid "Yes" +msgstr "Ja" + +#: admin.py:43 +msgid "No" +msgstr "Nein" + +#: admin.py:44 +msgid "Public" +msgstr "Öffentlich" + +#: models.py:47 +msgid "Server Name" +msgstr "Servername" + +#: models.py:48 +msgid "DBus or ICE base" +msgstr "DBus- oder ICE-String" + +#: models.py:49 +msgid "Server ID" +msgstr "Server-ID" + +#: models.py:50 +msgid "Server Address" +msgstr "Serveradresse" + +#: models.py:51 +msgid "Server Port" +msgstr "Serverport" + +#: models.py:52 +msgid "Website URL" +msgstr "URL der Webseite" + +#: models.py:53 +msgid "Welcome Message" +msgstr "Willkommensnachricht" + +#: models.py:54 +msgid "Server Password" +msgstr "Serverpasswort" + +#: models.py:55 +msgid "Superuser Password" +msgstr "SuperUser-Passwort" + +#: models.py:56 +msgid "Max. Users" +msgstr "Max. Benutzer" + +#: models.py:57 +msgid "Bandwidth [Bps]" +msgstr "Bandbreite [Bps]" + +#: models.py:58 +msgid "SSL Certificate" +msgstr "SSL-Zertifikat" + +#: models.py:59 +msgid "SSL Key" +msgstr "SSL-Schlüssel" + +#: models.py:60 +msgid "IP Obfuscation" +msgstr "IP-Adressen anonymisieren" + +#: models.py:61 +msgid "Player name regex" +msgstr "Regex für Spielernamen" + +#: models.py:62 +msgid "Channel name regex" +msgstr "Regex für Channelnamen" + +#: models.py:63 +msgid "Default channel" +msgstr "Standardchannel" + +#: models.py:64 +msgid "Boot Server" +msgstr "Server starten" + +#: models.py:68 models.py:282 +msgid "Server instance" +msgstr "Serverinstanz" + +#: models.py:69 +msgid "Server instances" +msgstr "Serverinstanzen" + +#: models.py:279 +msgid "Mumble player_id" +msgstr "ID des Spielers in Murmur" + +#: models.py:280 +msgid "User name and Login" +msgstr "Benutzername und Login" + +#: models.py:281 +msgid "Login password" +msgstr "Passwort" + +#: models.py:283 +msgid "Account owner" +msgstr "Accountbesitzer" + +#: models.py:284 +msgid "Admin on root channel" +msgstr "Admin im Wurzelkanal" + +#: models.py:288 +msgid "User account" +msgstr "Benutzerkonto" + +#: models.py:289 +msgid "User accounts" +msgstr "Benutzerkonten" + +#: models.py:296 +#, python-format +msgid "Mumble user %(mu)s on %(srv)s owned by Django user %(du)s" +msgstr "Benutzeraccount %(mu)s auf %(srv)s mit Besitzer %(du)s" + +#: models.py:315 +msgid "Another player already registered that name." +msgstr "Ein anderer Spieler hat sich unter diesem Namen bereits registriert." + +#: models.py:317 +msgid "Cannot register player without a password!" +msgstr "Kann Account nicht ohne Passwort registrieren!" + +#: models.py:347 models.py:356 +msgid "The admin group was not found in the ACL's groups list!" +msgstr "Die Admin-Gruppe wurde in der Gruppenliste der ACL nicht gefunden." + +#: models.py:396 +msgid "This field must not be updated once the record has been saved." +msgstr "Dieses Feld darf nicht mehr verändert werden, nachdem der Eintrag zum ersten Mal gespeichert wurde." + +#: mumble.htm:13 +msgid "" +"\n" +" Hint:
\n" +" This area is used to display additional information for each channel " +"and player, but requires JavaScript to be\n" +" displayed correctly. You will not see the detail pages, but you can " +"use all links and forms\n" +" that are displayed.\n" +"\t " +msgstr "" +"\n" +" Hinweis:
\n" +" Dieser Bereich wird genutzt um zusätzliche Informationen über jeden Channel " +"und Spieler anzuzeigen, erfordert aber JavaScript um\n" +" richtig angezeigt zu werden. Du wirst zwar die Detailseiten nicht sehen, " +"kannst aber alle sichtbaren Formulare benutzen.\n" +"\t " + +#: mumble.htm:26 +msgid "Website" +msgstr "Webseite" + +#: mumble.htm:28 +msgid "Server version" +msgstr "Serverversion" + +#: mumble.htm:31 +msgid "Welcome message" +msgstr "Willkommensnachricht" + +#: mumble.htm:37 +msgid "Server registration" +msgstr "Benutzerregistrierung" + +#: mumble.htm:40 +msgid "You are registered on this server" +msgstr "Du bist auf diesem Server registriert" + +#: mumble.htm:42 +msgid "You do not have an account on this server" +msgstr "Du bist auf diesem Server nicht registriert" + +#: mumble.htm:51 +msgid "" +"\n" +"

You need to be logged in to be able to register an account on this Mumble " +"server.

\n" +"\t" +msgstr "" +"\n" +"

Du musst eingeloggt sein um auf diesem Mumble-Server einen Account " +"registrieren zu können.

\n" +"\t" + +#: mumble.htm:59 mumble.htm.py:161 +msgid "User Texture" +msgstr "Benutzertextur" + +#: mumble.htm:61 +#, python-format +msgid "" +"\n" +" You can upload an image that you would like to use as your user " +"texture here.
\n" +" Your current texture is:
\n" +" \"user
\n" +" Hint: The texture image needs to be 600x60 in size. If you " +"upload an image with\n" +" a different size, it will be resized accordingly.
\n" +"\t\t" +msgstr "" +"\n" +" Du kannst hier ein Bild hochladen, das als deine Benutzertextur " +"angezeigt werden soll.
\n" +" Deine momentane Textur ist diese:
\n" +" \"user
\n" +" Hinweis: Das Texturbild muss die Größe 600x60 haben. Wenn du " +"ein Bild mit einer anderen Größe hochlädst, wird es automatisch zurecht " +"geschnitten.
\n" +"\t\t" + +#: mumble.htm:81 +msgid "Server administration" +msgstr "Server-Administration" + +#: mumble.htm:95 +msgid "Player" +msgstr "Spieler" + +#: mumble.htm:97 +msgid "Online since" +msgstr "Online seit" + +#: mumble.htm:98 mumble.htm.py:99 mumble.htm.py:100 mumble.htm.py:101 +#: mumble.htm:102 mumble.htm.py:103 +msgid "yes,no" +msgstr "ja,nein" + +#: mumble.htm:98 +#, python-format +msgid "Authenticated: %(authed)s" +msgstr "Authentifiziert: %(authed)s" + +#: mumble.htm:99 +#, python-format +msgid "Admin: %(admin)s" +msgstr "Administrator: %(admin)s" + +#: mumble.htm:100 +#, python-format +msgid "Muted: %(muted)s" +msgstr "Stummgestellt: %(muted)s" + +#: mumble.htm:101 +#, python-format +msgid "Deafened: %(deafened)s" +msgstr "Taubgestellt: %(deafened)s" + +#: mumble.htm:102 +#, python-format +msgid "Muted by self: %(selfmuted)s" +msgstr "Selbst stummgestellt: %(selfmuted)s" + +#: mumble.htm:103 +#, python-format +msgid "Deafened by self: %(selfdeafened)s" +msgstr "Selbst taubgestellt: %(selfdeafened)s" + +#: mumble.htm:106 +msgid "User" +msgstr "Benutzer" + +#: mumble.htm:109 +msgid "Full Name" +msgstr "Vollständiger Name" + +#: mumble.htm:111 +msgid "Admin" +msgstr "Administrator" + +#: mumble.htm:112 +msgid "Sign-up date" +msgstr "Datum der Registrierung" + +#: mumble.htm:118 +msgid "Channel" +msgstr "Kanal" + +#: mumble.htm:119 +msgid "Connect" +msgstr "Verbinden" + +#: mumble.htm:122 +msgid "Channel description" +msgstr "Beschreibung des Kanals" + +#: mumble.htm:155 +msgid "Server Info" +msgstr "Server-Infos" + +#: mumble.htm:156 +msgid "Registration" +msgstr "Registrierung" + +#: mumble.htm:158 +msgid "Administration" +msgstr "Administration" diff --git a/pyweb/mumble/models.py b/pyweb/mumble/models.py index c0d35e7..da8b72d 100755 --- a/pyweb/mumble/models.py +++ b/pyweb/mumble/models.py @@ -19,6 +19,7 @@ from PIL import Image from struct import pack, unpack from zlib import compress, decompress +from django.utils.translation import ugettext_lazy as _ from django.contrib.auth.models import User from django.db import models @@ -43,27 +44,29 @@ class Mumble( models.Model ): deleted as well. """ - name = models.CharField( 'Server Name', max_length = 200 ); - dbus = models.CharField( 'DBus or ICE base', max_length = 200, default = settings.DEFAULT_CONN ); - srvid = models.IntegerField( 'Server ID', editable = False ); - addr = models.CharField( 'Server Address', max_length = 200 ); - port = models.IntegerField( 'Server Port', blank = True, null = True ); - url = models.CharField( 'Website URL', max_length = 200, blank = True ); - motd = models.TextField( 'Welcome Message', blank = True ); - passwd = models.CharField( 'Server Password', max_length = 200, blank = True ); - supw = models.CharField( 'Superuser Password', max_length = 200, blank = True ); - users = models.IntegerField( 'Max. Users', blank = True, null = True ); - bwidth = models.IntegerField( 'Bandwidth [Bps]', blank = True, null = True ); - sslcrt = models.TextField( 'SSL Certificate', blank = True ); - sslkey = models.TextField( 'SSL Key', blank = True ); - obfsc = models.BooleanField( 'IP Obfuscation', default = False ); - player = models.CharField( 'Player name regex', max_length=200, default=r'[-=\w\[\]\{\}\(\)\@\|\.]+' ); - channel= models.CharField( 'Channel name regex', max_length=200, default=r'[ \-=\w\#\[\]\{\}\(\)\@\|]+' ); - defchan= models.IntegerField( 'Default channel', default=0 ); - booted = models.BooleanField( 'Boot Server', default = True ); + name = models.CharField( _('Server Name'), max_length = 200 ); + dbus = models.CharField( _('DBus or ICE base'), max_length = 200, default = settings.DEFAULT_CONN ); + srvid = models.IntegerField( _('Server ID'), editable = False ); + addr = models.CharField( _('Server Address'), max_length = 200 ); + port = models.IntegerField( _('Server Port'), blank = True, null = True ); + url = models.CharField( _('Website URL'), max_length = 200, blank = True ); + motd = models.TextField( _('Welcome Message'), blank = True ); + passwd = models.CharField( _('Server Password'), max_length = 200, blank = True ); + supw = models.CharField( _('Superuser Password'), max_length = 200, blank = True ); + users = models.IntegerField( _('Max. Users'), blank = True, null = True ); + bwidth = models.IntegerField( _('Bandwidth [Bps]'), blank = True, null = True ); + sslcrt = models.TextField( _('SSL Certificate'), blank = True ); + sslkey = models.TextField( _('SSL Key'), blank = True ); + obfsc = models.BooleanField( _('IP Obfuscation'), default = False ); + player = models.CharField( _('Player name regex'), max_length=200, default=r'[-=\w\[\]\{\}\(\)\@\|\.]+' ); + channel = models.CharField( _('Channel name regex'), max_length=200, default=r'[ \-=\w\#\[\]\{\}\(\)\@\|]+' ); + defchan = models.IntegerField( _('Default channel'), default=0 ); + booted = models.BooleanField( _('Boot Server'), default = True ); class Meta: - unique_together = ( ( 'dbus', 'srvid' ), ( 'addr', 'port' ), ); + unique_together = ( ( 'dbus', 'srvid' ), ( 'addr', 'port' ), ); + verbose_name = _('Server instance'); + verbose_name_plural = _('Server instances'); def __init__( self, *args, **kwargs ): models.Model.__init__( self, *args, **kwargs ); @@ -77,6 +80,11 @@ class Mumble( models.Model ): return u'Murmur "%s" (%d)' % ( self.name, self.srvid ); + users_regged = property( lambda self: self.mumbleuser_set.count(), None ); + users_online = property( lambda self: len(self.ctl.getPlayers(self.srvid)), None ); + channel_cnt = property( lambda self: len(self.ctl.getChannels(self.srvid)), None ); + is_public = property( lambda self: self.passwd == '', None ); + is_server = True; is_channel = False; is_player = False; @@ -268,22 +276,24 @@ class MumbleUser( models.Model ): in Murmur as well, after revoking the user's admin privileges. """ - mumbleid = models.IntegerField( 'Mumble player_id', editable = False, default = -1 ); - name = models.CharField( 'User name and Login', max_length = 200 ); - password = models.CharField( 'Login password', max_length = 200, blank=True ); - server = models.ForeignKey( Mumble ); - owner = models.ForeignKey( User, null=True, blank=True ); - isAdmin = models.BooleanField( 'Admin on root channel', default = False ); + mumbleid = models.IntegerField( _('Mumble player_id'), editable = False, default = -1 ); + name = models.CharField( _('User name and Login'), max_length = 200 ); + password = models.CharField( _('Login password'), max_length = 200, blank=True ); + server = models.ForeignKey( Mumble, verbose_name=_('Server instance') ); + owner = models.ForeignKey( User, verbose_name=_('Account owner'), null=True, blank=True ); + isAdmin = models.BooleanField( _('Admin on root channel'), default = False ); class Meta: - unique_together = ( ( 'server', 'owner' ), ); + unique_together = ( ( 'server', 'owner' ), ); + verbose_name = _( 'User account' ); + verbose_name_plural = _( 'User accounts' ); is_server = False; is_channel = False; is_player = True; def __unicode__( self ): - return u"Mumble user %s on %s owned by Django user %s" % ( self.name, self.server, self.owner ); + return _("Mumble user %(mu)s on %(srv)s owned by Django user %(du)s") % { 'mu': self.name, 'srv': self.server, 'du': self.owner }; def save( self, dontConfigureMurmur=False ): """Save the settings in this model to Murmur.""" @@ -302,9 +312,9 @@ class MumbleUser( models.Model ): if self.id is None: # This is a new user record, so Murmur doesn't know about it yet if len( ctl.getRegisteredPlayers( self.server.srvid, self.name ) ) > 0: - raise ValueError( "Another player already registered that name." ); + raise ValueError( _( "Another player already registered that name." ) ); if not self.password: - raise ValueError( "Cannot register player without a password!" ); + raise ValueError( _( "Cannot register player without a password!" ) ); self.mumbleid = ctl.registerPlayer( self.server.srvid, self.name, email, self.password ); @@ -334,7 +344,7 @@ class MumbleUser( models.Model ): acl = mmACL( 0, self.server.ctl.getACL(self.server.srvid, 0) ); if not hasattr( acl, "admingroup" ): - raise ReferenceError( "The admin group was not found in the ACL's groups list!" ); + raise ReferenceError( _( "The admin group was not found in the ACL's groups list!" ) ); return self.mumbleid in acl.admingroup['add']; def setAdmin( self, value ): @@ -343,7 +353,7 @@ class MumbleUser( models.Model ): acl = mmACL( 0, ctl.getACL(self.server.srvid, 0) ); if not hasattr( acl, "admingroup" ): - raise ReferenceError( "The admin group was not found in the ACL's groups list!" ); + raise ReferenceError( _( "The admin group was not found in the ACL's groups list!" ) ); if value != ( self.mumbleid in acl.admingroup['add'] ): if value: @@ -383,7 +393,7 @@ class MumbleUser( models.Model ): def __setattr__( self, name, value ): if name == 'server': if self.id is not None and self.server != value: - raise AttributeError( "This field must not be updated once the Record has been saved." ); + raise AttributeError( _( "This field must not be updated once the record has been saved." ) ); models.Model.__setattr__( self, name, value ); diff --git a/pyweb/settings.py b/pyweb/settings.py index ad3fec6..7c4c190 100755 --- a/pyweb/settings.py +++ b/pyweb/settings.py @@ -135,6 +135,7 @@ TEMPLATE_LOADERS = ( MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.locale.LocaleMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', ) diff --git a/template/mumble/mumble.htm b/template/mumble/mumble.htm index d4ad12e..b5e3811 100644 --- a/template/mumble/mumble.htm +++ b/template/mumble/mumble.htm @@ -1,5 +1,6 @@ {% extends "index.htm" %} {% load mumble_extras %} +{% load i18n %} {% block Headline %} {{ DBaseObject.name }} {% endblock %} @@ -9,34 +10,36 @@ {% block Content %}
    -
  • Server address: {{ DBaseObject.connecturl }}
  • +
  • {% trans "Server Address" %}: {{ DBaseObject.connecturl }}
  • {% if DBaseObject.url %} -
  • Website: {{ DBaseObject.url|urlize }}
  • +
  • {% trans "Website" %}: {{ DBaseObject.url|urlize }}
  • {% endif %} -
  • Server version: {{ DBaseObject.version.0 }}.{{ DBaseObject.version.1 }}.{{ DBaseObject.version.2 }}
  • +
  • {% trans "Server version" %}: {{ DBaseObject.version.0 }}.{{ DBaseObject.version.1 }}.{{ DBaseObject.version.2 }}
- Welcome message + {% trans "Welcome message" %} {{ DBaseObject.motd|safe }}
{% if user.is_authenticated %} -

Server registration

+

{% trans "Server registration" %}

{% if Registered %} - You are registered on this server.
+ {% trans "You are registered on this server" %}.
{% else %} - You do not have an account on this server.
+ {% trans "You do not have an account on this server" %}.
{% endif %} {{ RegForm }} @@ -45,19 +48,23 @@ {% else %} -

You need to be logged in to be able to register an account on this Mumble server.

+ {% blocktrans with DBaseObject.id as serverid %} +

You need to be logged in to be able to register an account on this Mumble server.

+ {% endblocktrans %} {% endif %} {% if Registered %}
-

User Texture

+

{% trans "User Texture" %}

- You can upload an image that you would like to use as your user texture here.
- Your current texture is:
- user texture
- Hint: The texture image needs to be 600x60 in size. If you upload an image with - a different size, it will be resized accordingly.
+ {% blocktrans with DBaseObject.id as serverid %} + You can upload an image that you would like to use as your user texture here.
+ Your current texture is:
+ user texture
+ Hint: The texture image needs to be 600x60 in size. If you upload an image with + a different size, it will be resized accordingly.
+ {% endblocktrans %}

@@ -71,7 +78,7 @@ {% if CurrentUserIsAdmin %}
-

Server administration

+

{% trans "Server administration" %}

{{ AdminForm }} @@ -85,34 +92,34 @@ {% for item in ChannelTable %} {% if item.is_player %}
-

Player {{ item.name }}

+

{% trans "Player" %} {{ item.name }}

    -
  • Online since {{item.onlinesince|time:"H:i"}}
  • -
  • Authenticated: {% if item.isAuthed %}Yes{% else %}No{% endif %}
  • -
  • Admin: {% if item.isAdmin %}Yes{% else %}No{% endif %}
  • -
  • Muted: {% if item.muted %}Yes{% else %}No{% endif %}
  • -
  • Deafened: {% if item.deafened %}Yes{% else %}No{% endif %}
  • -
  • Self-Muted: {% if item.selfmuted %}Yes{% else %}No{% endif %}
  • -
  • Self-Deafened: {% if item.selfdeafened %}Yes{% else %}No{% endif %}
  • +
  • {% trans "Online since" %} {{item.onlinesince|time:"H:i"}}
  • +
  • {% blocktrans with item.isAuthed|yesno:_("yes,no") as authed %}Authenticated: {{ authed }}{% endblocktrans %}
  • +
  • {% blocktrans with item.isAdmin|yesno:_("yes,no") as admin %}Admin: {{ admin }}{% endblocktrans %}
  • +
  • {% blocktrans with item.muted|yesno:_("yes,no") as muted %}Muted: {{ muted }}{% endblocktrans %}
  • +
  • {% blocktrans with item.deafened|yesno:_("yes,no") as deafened %}Deafened: {{ deafened }}{% endblocktrans %}
  • +
  • {% blocktrans with item.selfmuted|yesno:_("yes,no") as selfmuted %}Muted by self: {{ selfmuted }}{% endblocktrans %}
  • +
  • {% blocktrans with item.selfdeafened|yesno:_("yes,no") as selfdeafened %}Deafened by self: {{ selfdeafened }}{% endblocktrans %}
{% if item.mumbleuser and item.mumbleuser.owner %} -

User {{ item.mumbleuser.owner.username|capfirst }}

+

{% trans "User" %} {{ item.mumbleuser.owner.username|capfirst }}

    {% if item.mumbleuser.owner.first_name and item.mumbleuser.owner.last_name %} -
  • Full Name: {{ item.mumbleuser.owner.first_name }} {{ item.mumbleuser.owner.last_name }}
  • +
  • {% trans "Full Name" %}: {{ item.mumbleuser.owner.first_name }} {{ item.mumbleuser.owner.last_name }}
  • {% endif %} -
  • Admin: {% if item.mumbleuser.owner.is_staff %}Yes{% else %}No{% endif %}
  • -
  • Sign-up date: {{ item.mumbleuser.owner.date_joined }}
  • +
  • {% trans "Admin" %}: {% if item.mumbleuser.owner.is_staff %}{% trans "Yes" %}{% else %}{% trans "No" %}{% endif %}
  • +
  • {% trans "Sign-up date" %}: {{ item.mumbleuser.owner.date_joined }}
{% endif %}
{% else %}
-

Channel {{ item.name }}

- Connect +

{% trans "Channel" %} {{ item.name }}

+ {% trans "Connect" %} {% if item.description %}
- Channel description + {% trans "Channel description" %} {{ item.description|safe }}
{% endif %} @@ -145,13 +152,13 @@ defaults: { autoheight: true }, activeTab: {{ DisplayTab }}, items: [ - { contentEl: 'mumble_motd', title: 'Server Info', autoScroll: true }, - { contentEl: 'mumble_registration', title: 'Registration', autoScroll: true }, + { contentEl: 'mumble_motd', title: '{% trans "Server Info" %}', autoScroll: true }, + { contentEl: 'mumble_registration', title: '{% trans "Registration" %}', autoScroll: true }, {% if CurrentUserIsAdmin %} - { contentEl: 'mumble_admin', title: 'Administration', autoScroll: true }, + { contentEl: 'mumble_admin', title: '{% trans "Administration" %}', autoScroll: true }, {% endif %} {% if Registered %} - { contentEl: 'mumble_texture', title: 'User Texture', autoScroll: true }, + { contentEl: 'mumble_texture', title: '{% trans "User Texture" %}', autoScroll: true }, {% endif %} ] },