Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
AURA
dashboard
Commits
c2ef9afc
Commit
c2ef9afc
authored
Dec 14, 2020
by
Richard Blechinger
Browse files
Translate entire app to German
parent
73e82e4f
Changes
34
Hide whitespace changes
Inline
Side-by-side
src/Pages/AddOrEditPlaylist.vue
View file @
c2ef9afc
...
...
@@ -5,7 +5,7 @@
v-if=
"!selectedShow"
class=
"tw-text-center tw-my-8"
>
Lädt...
{{
$t
(
'
loading
'
)
}}
</div>
<b-container
...
...
@@ -14,23 +14,24 @@
>
<h1>
<template
v-if=
"id"
>
Playliste
{{
playlistEditor
.
id
}}
für Sendung '
{{
selectedShow
.
name
}}
' bearbeiten
{{
$t
(
'
playlistEditor.titleExisting
'
,
{
id
:
playlistEditor
.
id
,
show
:
selectedShow
.
name
}
)
}}
<
/template
>
<
template
v
-
else
>
Neue Playliste für Sendung '
{{
selectedShow
.
name
}
}
' hinzufügen
{{
$t
(
'
playlistEditor.titleNew
'
,
{
show
:
selectedShow
.
name
}
)
}}
<
/template
>
<
/h1
>
<
b
-
row
class
=
"
tw-my-8 tw-items-center
"
>
<
b
-
col
cols
=
"
2
"
>
Beschreibung
:
{{
$t
(
'
showMeta.description
'
)
}}
:
<
/b-col
>
<
b
-
col
>
<
b
-
form
-
input
v
-
model
=
"
playlistEditor.description
"
type
=
"
text
"
placeholder=
"
Beschreibung eingeben...
"
:
placeholder
=
"
$t('showMeta.descriptionPlaceholder')
"
/>
<
/b-col
>
<
/b-row
>
...
...
@@ -41,7 +42,7 @@
v-if="playlistEditor.entries.length === 0"
align="center"
>
Noch keine Einträge vorhanden. Füge doch welche hinzu!
{{ $t(
'
playlistEditor
.
noEntriesAvailable
'
)
}}
</div>
<!-- As soon as we have at least one entry in our temporary playlist
we can display a table with all the info and action buttons -->
...
...
@@ -69,25 +70,25 @@
v-if="data.item.file"
variant="success"
>
Datei
{{ $t(
'
playlistEditor
.
types
.
file
'
)
}}
</b-badge>
<b-badge
v-else-if="data.item.uri.startsWith(
'
line
:
//')"
variant
=
"
info
"
>
Line-in
{{
$t
(
'
playlistEditor.types.lineIn
'
)
}}
<
/b-badge
>
<
b
-
badge
v
-
else
-
if
=
"
data.item.uri.startsWith('http://') || data.item.uri.startsWith('https://')
"
variant
=
"
light
"
>
Stream
{{
$t
(
'
playlistEditor.types.stream
'
)
}}
<
/b-badge
>
<
b
-
badge
v
-
else
variant
=
"
dark
"
>
Andere
{{
$t
(
'
playlistEditor.types.other
'
)
}}
<
/b-badge
>
<
/template
>
...
...
@@ -95,54 +96,54 @@
Here
we
display
where
this
playlist
entry
is
coming
from
-->
<
template
v
-
slot
:
cell
(
source
)
=
"
data
"
>
<span
v-if=
"data.item.file"
>
<span
class=
"tw-font-bold"
>
{{
getFileTitleForPlaylist
(
data
.
item
.
file
.
show
,
data
.
item
.
file
.
id
)
}}
</span><br>
<span
class=
"tw-text-gray-700"
>
(file://
{{
data
.
item
.
file
.
show
}}
/
{{
data
.
item
.
file
.
id
}}
)
</span>
</span>
<
span
v
-
if
=
"
data.item.file
"
>
<
span
class
=
"
tw-font-bold
"
>
{{
getFileTitleForPlaylist
(
data
.
item
.
file
.
show
,
data
.
item
.
file
.
id
)
}}
<
/span><br
>
<
span
class
=
"
tw-text-gray-700
"
>
(
file
:
//
{{
data
.
item
.
file
.
show
}}
/
{{
data
.
item
.
file
.
id
}}
)
<
/span
>
<
/span
>
<
span
v
-
else
>
{{
data
.
item
.
uri
}}
</span>
{{
data
.
item
.
uri
}}
<
/span
>
<
/template
>
<!--
Column
:
Duration
Here
we
give
the
user
the
ability
to
edit
the
duration
of
an
entry
.
-->
<
template
v
-
slot
:
cell
(
duration
)
=
"
data
"
>
<span
v-if=
"playlistEditor.durationField === data.index"
>
<input
ref=
"durationField"
v-model=
"playlistEditor.newDuration"
type=
"text"
class=
"tw-w-24"
placeholder=
"hh:mm:ss"
pattern=
"\d
{2}:\d{2}(:\d{2})?"
@blur="checkAndUpdateDuration"
>
</span>
<
span
v
-
if
=
"
playlistEditor.durationField === data.index
"
>
<
input
ref
=
"
durationField
"
v
-
model
=
"
playlistEditor.newDuration
"
type
=
"
text
"
class
=
"
tw-w-24
"
placeholder
=
"
hh:mm:ss
"
pattern
=
"
\
d{2
}
:
\
d{2
}
(:
\
d{2
}
)?
"
@
blur
=
"
checkAndUpdateDuration
"
>
<
/span
>
<
span
v
-
else
-
if
=
"
data.item.file
"
>
{{
prettyNanoseconds
(
getFileById
(
data
.
item
.
file
.
id
).
duration
)
}}
</span>
{{
prettyNanoseconds
(
getFileById
(
data
.
item
.
file
.
id
).
duration
)
}}
<
/span
>
<
span
v-else-if=
"data.item.duration"
v-b-tooltip=
"'Klicken um zu bearbeiten'"
class=
"tw-underline hover:tw-no-underline tw-cursor-pointer"
@
click=
"toggleDurationField(data.index)"
v
-
else
-
if
=
"
data.item.duration
"
v
-
b
-
tooltip
=
"
'Klicken um zu bearbeiten'
"
class
=
"
tw-underline hover:tw-no-underline tw-cursor-pointer
"
@
click
=
"
toggleDurationField(data.index)
"
>
{{
prettyNanoseconds
(
data
.
item
.
duration
)
}}
</span>
{{
prettyNanoseconds
(
data
.
item
.
duration
)
}}
<
/span
>
<
span
v
-
else
>
<span
v-b-tooltip=
"'Klicken um zu bearbeiten'"
class=
"tw-text-gray-700 tw-underline hover:tw-no-underline tw-cursor-pointer"
@
click=
"toggleDurationField(data.index)"
>
(Unbekannt)
</span>
</span>
<
span
v
-
b
-
tooltip
=
"
'Klicken um zu bearbeiten'
"
class
=
"
tw-text-gray-700 tw-underline hover:tw-no-underline tw-cursor-pointer
"
@
click
=
"
toggleDurationField(data.index)
"
>
{{
$t
(
'
playlistEditor.unknownDuration
'
)
}}
<
/span
>
<
/span
>
<
/template
>
...
...
@@ -168,7 +169,7 @@
variant
=
"
danger
"
@
click
=
"
deletePlaylistItem(data.index)
"
>
Delete
{{
$t
(
'
delete
'
)
}}
<
/b-button
>
<
/b-button-group
>
<
/template
>
...
...
@@ -177,8 +178,8 @@
<
hr
>
<
p
class
=
"
d-flex justify-content-between border-t
"
>
<span
class=
"font-weight-bold"
>
Playlisteinträge
</span>
<span>
Dauer
: {{ playlistDuration }}
</span>
<
span
class
=
"
font-weight-bold
"
>
{{
$t
(
'
playlistTable.entries
'
)
}}
<
/span
>
<
span
>
{{
$t
(
'
playlistTable.duration
'
)
}}
:
{{
playlistDuration
}}
<
/span
>
<
/p
>
<
hr
>
...
...
@@ -187,11 +188,7 @@
v
-
if
=
"
playlistExceedsAllowedUnknowns
"
class
=
"
tw-text-red-600 tw-my-4
"
>
Es gibt 2 oder mehr Einträge die eine unbekannte Dauer haben. Bitte korrigiere das, indem du auf die
Dauer
in der Tabelle klickst und manuell eine einträgst. Es darf maximal ein Eintrag mit unbekannter Dauer
vorhanden
sein.
{{
$t
(
'
playlistEditor.tooManyUnknowns
'
)
}}
<
/div
>
<
/div
>
...
...
@@ -204,20 +201,20 @@
-->
<
b
-
modal
id
=
"
modal-edit-playlist-add-stream
"
title=
"Add stream to the playlist"
:
title
=
"
$t('playlistEditor.addStream')
"
:
cancel
-
title
=
"
$t('cancel')
"
@
ok
=
"
addPlaylistItemStream('save')
"
>
<
b
-
input
v
-
model
=
"
playlistEditor.newStreamURL
"
type
=
"
url
"
>
...
<
/b-input
>
<
/b-modal
>
<
div
class
=
"
tw-flex tw-justify-between
"
>
<
b
-
button
-
group
>
<b-dropdown
text=
"
Datei
"
>
<
b
-
dropdown
:
text
=
"
$t('playlistEditor.types.file')
"
>
<
b
-
dropdown
-
item
v
-
for
=
"
(file, index) in files
"
:
key
=
"
index
"
...
...
@@ -227,23 +224,23 @@
prettyNanoseconds
(
file
.
duration
)
}}
,
{{
prettyFileSize
(
file
.
size
)
}}
,
{{
file
.
source
.
uri
}}
)
<
/b-dropdown-item
>
<
/b-dropdown
>
<b-dropdown
text=
"
Line-in
"
>
<
b
-
dropdown
:
text
=
"
$t('playlistEditor.types.lineIn')
"
>
<
b
-
dropdown
-
item
@
click
=
"
addPlaylistItemLine('0')
"
>
Studio 1
{{
$t
(
'
playlistEditor.lineIns.studio1
'
)
}}
<
/b-dropdown-item
>
<
b
-
dropdown
-
item
@
click
=
"
addPlaylistItemLine('1')
"
>
Preprod
{{
$t
(
'
playlistEditor.lineIns.preProd
'
)
}}
<
/b-dropdown-item
>
<
b
-
dropdown
-
item
@
click
=
"
addPlaylistItemLine('2')
"
>
Line 2
{{
$t
(
'
playlistEditor.lineIns.line2
'
)
}}
<
/b-dropdown-item
>
<
/b-dropdown
>
<
b
-
button
@
click
=
"
addPlaylistItemStream('openModal')
"
>
Stream
{{
$t
(
'
playlistEditor.types.stream
'
)
}}
<
/b-button
>
<
/b-button-group
>
...
...
@@ -252,7 +249,7 @@
:
disabled
=
"
playlistExceedsAllowedUnknowns
"
@
click
=
"
storePlaylist
"
>
Speichern
{{
$t
(
'
save
'
)
}}
<
/b-button
>
<
/div
>
<
/b-container
>
...
...
@@ -286,19 +283,21 @@
durationField
:
false
,
newDuration
:
""
}
,
// configuration of the playlists entries table
playlistEditTableFields
:
[
{
key
:
'
id
'
,
label
:
'
Index
'
,
class
:
'
align-middle
'
},
{
key
:
'
type
'
,
label
:
'
Typ
'
,
class
:
'
align-middle
'
},
{
key
:
'
source
'
,
label
:
'
Quelle
'
,
class
:
'
align-middle
'
},
{
key
:
'
duration
'
,
label
:
'
Dauer
'
,
class
:
'
align-middle
'
},
{
key
:
'
actions
'
,
label
:
'
Aktionen
'
,
class
:
'
text-right align-middle
'
},
]
}
}
,
computed
:
{
// configuration of the playlists entries table
playlistEditTableFields
()
{
return
[
{
key
:
'
id
'
,
label
:
this
.
$t
(
'
playlistTable.index
'
),
class
:
'
align-middle
'
}
,
{
key
:
'
type
'
,
label
:
this
.
$t
(
'
playlistTable.type
'
),
class
:
'
align-middle
'
}
,
{
key
:
'
source
'
,
label
:
this
.
$t
(
'
playlistTable.source
'
),
class
:
'
align-middle
'
}
,
{
key
:
'
duration
'
,
label
:
this
.
$t
(
'
playlistTable.duration
'
),
class
:
'
align-middle
'
}
,
{
key
:
'
actions
'
,
label
:
this
.
$t
(
'
playlistTable.actions
'
),
class
:
'
text-right align-middle
'
}
,
]
}
,
loaded
()
{
return
{
playlists
:
this
.
$store
.
state
.
playlists
.
loaded
.
playlists
,
...
...
@@ -378,7 +377,7 @@
}
if
(
!
this
.
$refs
.
durationField
.
checkValidity
())
{
this
.
$refs
.
durationField
.
setCustomValidity
(
'
Bitte gib eine Dauer im Format mm:ss oder hh:mm:ss an.
'
);
this
.
$refs
.
durationField
.
setCustomValidity
(
this
.
$t
(
'
playlistEditor.invalidDurationFormat
'
)
);
this
.
$refs
.
durationField
.
reportValidity
();
return
;
}
...
...
src/Pages/Credits.vue
View file @
c2ef9afc
<
template
>
<b-container>
<h1>
Credits
</h1>
<h1>
{{
$t
(
'
credits.title
'
)
}}
</h1>
<p>
AURA is developed under the GNU Affero General Public License v3. Current and former developers are:
<br>
{{
$t
(
'
credits.intro
'
)
}}
<br>
</p>
<ul>
<li>
...
...
@@ -63,24 +63,19 @@
</li>
</ul>
<p>
<b>
Graphics
&
Icons
</b><br>
<b>
{{
$t
(
'
credits.graphicsIcons
'
)
}}
</b><br>
</p>
<ul>
<li>
animated
loading
i
con:
<a
href=
"https://loading.io/spinner"
>
spinner by loading.io
</a>
(CC-BY License).
{{
$t
(
'
credits.
loading
I
con
'
)
}}
:
<a
href=
"https://loading.io/spinner"
>
spinner by loading.io
</a>
(CC-BY License).
</li>
<li>
all
other
Icons:
<a
href=
"http://tango.freedesktop.org/"
>
Tango Project
</a>
(Public Domain)
and
<a
href=
"https://bootstrap-vue.org/docs/icons"
>
BootstrapVue
</a>
(MIT).
{{
$t
(
'
credits.
otherIcons
'
)
}}
:
<a
href=
"http://tango.freedesktop.org/"
>
Tango Project
</a>
(Public Domain)
,
<a
href=
"https://bootstrap-vue.org/docs/icons"
>
BootstrapVue
</a>
(MIT).
</li>
</ul>
<p>
For more infos visit the
<a
href=
"https://gitlab.servus.at/aura/dashboard"
>
dashboard repository
</a>
.
To get the big picture of the whole AURA architecture, visit the
<a
href=
"https://gitlab.servus.at/aura/meta"
>
AURA meta repo
</a>
.
All AURA repos can be found at
<a
href=
"https://gitlab.servus.at/aura"
>
https://gitlab.servus.at/aura
</a>
.
</p>
<p
v-html=
"$t('credits.moreInfo')"
/>
</b-container>
</
template
>
...
...
@@ -98,6 +93,6 @@ animated loading icon: <a href="https://loading.io/spinner">spinner by loading.i
}
a
{
color
:
#c09
;
color
:
#c09
!important
;
}
</
style
>
src/Pages/EmissionManager.vue
View file @
c2ef9afc
...
...
@@ -10,64 +10,72 @@
<hr>
<b-alert
variant=
"
danger
"
:
variant=
"
conflictCount > 0 ? 'danger' : 'success'
"
:show=
"conflictMode"
>
<div
v-if=
"conflictMode"
align=
"center"
>
<h4>
Conflict Resolution
</h4>
<p>
for new schedule
from
<b>
{{
resolveData
.
schedule
.
dstart
}}
,
{{
resolveData
.
schedule
.
tstart
}}
</b>
to
<b>
{{
resolveData
.
schedule
.
tend
}}
</b>
.
</p>
<p
v-if=
"resolveData.schedule.rrule !== 1"
>
This is a recurring event:
<b>
{{
rruleRender
(
resolveData
.
schedule
.
rrule
)
}}
</b>
,
until:
<b>
{{
resolveData
.
schedule
.
until
}}
</b>
.
</p>
<h4>
{{
$t
(
'
conflictResolution.title
'
)
}}
</h4>
<p
:class=
"
{
'tw-mb-4': resolveData.schedule.rrule === 1,
'tw-mb-0': resolveData.schedule.rrule !== 1
}"
v-html="$t('conflictResolution.newSchedule', {
dstart: this.prettyDate(resolveData.schedule.dstart),
tstart: resolveData.schedule.tstart,
tend: resolveData.schedule.tend,
})"
/>
<p
v-if=
"resolveData.schedule.rrule !== 1"
v-html=
"$t('conflictResolution.recurringSchedule',
{
rrule: this.rruleRender(resolveData.schedule.rrule),
until: this.prettyDate(resolveData.schedule.until)
})"
/>
<div
v-if=
"submitting"
>
<b-row>
<b-col
align=
"center"
>
<img
src=
"/assets/radio.gif"
alt=
"
submitting resolve data
"
:
alt=
"
$t('loading')
"
>
</b-col>
</b-row>
</div>
<div
v-else
>
<p
v-if=
"conflictCount > 0"
>
Conflicts left to resolve:
<b-badge
variant=
"danger"
>
{{
conflictCount
}}
</b-badge>
<div
v-if=
"conflictCount > 0"
>
<p>
{{
$t
(
'
conflictResolution.leftToResolve
'
,
{
smart_count
:
conflictCount
}
)
}}
<
/p
>
<
b
-
button
variant
=
"
danger
"
size
=
"
sm
"
@
click
=
"
resolveCancel
"
>
Cancel
{{
$t
(
'
cancel
'
)
}}
<
/b-button
>
</p>
<p
v-else
>
<
/div
>
<
div
v
-
else
>
<
p
>
{{
$t
(
'
conflictResolution.noneLeftToResolve
'
)
}}
<
/p
>
<
b
-
button
variant
=
"
success
"
@
click
=
"
resolveSubmit
"
>
0
conflict
s left! Submit this s
olution
.
{{
$t
(
'
conflict
Resolution.applyS
olution
'
)
}}
<
/b-button
>
&
nbsp
;
<
b
-
button
variant
=
"
danger
"
@
click
=
"
resolveCancel
"
>
Cancel
{{
$t
(
'
cancel
'
)
}}
<
/b-button
>
</
p
>
<
/
div
>
<
/div
>
<
/div
>
<
/b-alert
>
...
...
@@ -115,6 +123,7 @@
import
modalEmissionManagerEdit
from
'
@/components/emissions/ModalEdit.vue
'
import
AuthWall
from
'
@/components/AuthWall.vue
'
import
rrules
from
'
@/mixins/rrules
'
import
prettyDate
from
"
../mixins/prettyDate
"
;
export
default
{
components
:
{
...
...
@@ -126,7 +135,7 @@
'
app-modalEmissionManagerEdit
'
:
modalEmissionManagerEdit
,
}
,
mixins
:
[
rrules
],
mixins
:
[
rrules
,
prettyDate
],
data
()
{
return
{
...
...
@@ -143,12 +152,29 @@
resolveData
:
null
,
conflictCount
:
0
,
conflictSolutions
:
[],
}
}
,
computed
:
{
loaded
()
{
return
{
shows
:
this
.
$store
.
state
.
shows
.
loaded
[
'
shows
'
],
timeslots
:
this
.
$store
.
state
.
shows
.
loaded
[
'
timeslots
'
],
}
}
,
// this is the whole configuration for our schedule calendar, including
// simple event handlers that do not need the whole components scope
calendarConfig
:
{
// this is the whole configuration for our schedule calendar, including
// simple event handlers that do not need the whole components scope
calendarConfig
()
{
return
{
locale
:
this
.
$activeLocale
(),
height
:
600
,
firstDay
:
1
,
buttonText
:
{
today
:
this
.
$t
(
'
calendar.today
'
)
}
,
header
:
{
left
:
'
title
'
,
center
:
''
,
...
...
@@ -168,15 +194,6 @@
eventRender
:
function
(
event
,
element
)
{
element
.
attr
(
'
title
'
,
event
.
title
);
}
,
},
}
},
computed
:
{
loaded
()
{
return
{
shows
:
this
.
$store
.
state
.
shows
.
loaded
[
'
shows
'
],
timeslots
:
this
.
$store
.
state
.
shows
.
loaded
[
'
timeslots
'
],
}
}
,
...
...
@@ -557,7 +574,7 @@
}
,
notYetImplemented
:
function
()
{
alert
(
'
By the mighty witchcraftry of the mother of time!
\n\n
This feature is not
implemented
yet.
'
)
alert
(
this
.
$t
(
'
un
implemented
'
)
)
}
,
}
,
}
...
...
src/Pages/FileManager.vue
View file @
c2ef9afc
...
...
@@ -3,7 +3,7 @@
<template
v-if=
"selectedShow"
>
<show-selector
ref=
"showSelector"
title=
"
Files & playlists
"
:
title=
"
$t('filePlaylistManager.title')
"
:callback=
"showHasSwitched"
/>
<hr>
...
...
src/Pages/Help.vue
View file @
c2ef9afc
...
...
@@ -4,8 +4,7 @@
<br><br>
<div
style=
"border: 5px dotted #5c3566;"
>
<br><br>
<p><b>
By the mighty witchcraftry of the mother of time!
</b></p>
<p>
This feature is not implemented yet.
</p>
{{
$t
(
'
unimplemented
'
)
}}
<p>
For the general AuRa documentation go to
<a
href=
"https://gitlab.servus.at/aura/meta"
>
https://gitlab.servus.at/aura/meta
</a>
...
...
src/Pages/Home.vue
View file @
c2ef9afc
...
...
@@ -3,7 +3,7 @@
<div
v-if=
"user.logged_in === true && user.steeringUser"
>
<div
align=
"center"
>
<h1>
{{
$t
(
'
home.welcome
'
)
}}
</h1>
<p>
Here are s
ome
in
fos for you on how to use this interface...
</p>
<p>
{{
$t
(
'
h
ome
.
in
troduction
'
)
}}
</p>
<br>
</div>
...
...
@@ -28,13 +28,13 @@
v-else
align=
"center"
>
<p>
You are
not
l
ogged
in yet.
</p>
<p>
{{
$t
(
'
home.
not
L
ogged
In
'
)
}}
</p>
<b-button
size=
"lg"
variant=
"outline-secondary"
@
click=
"$parent.signIn"
>
Log in
{{
$t
(
'
auth.signIn
'
)
}}
</b-button>
</div>
</b-container>
...
...
src/Pages/Settings.vue
View file @
c2ef9afc
...
...
@@ -5,8 +5,7 @@
<br><br>
<div
style=
"border: 5px dotted #5c3566;"
>
<br><br>
<p><b>
By the mighty witchcraftry of the mother of time!
</b></p>
<p>
This feature is not implemented yet.
</p>
{{
$t
(
'
unimplemented
'
)
}}
<br><br>
</div>
</b-container>
...
...
src/Pages/ShowManager.vue
View file @
c2ef9afc
...
...
@@ -4,7 +4,7 @@
<template
v-if=
"selectedShow"
>
<show-selector
ref=
"showSelector"
title=
"
Radio shows
"
:
title=
"
$t('showManager.title')
"
:callback=
"showHasSwitched"
/>
<hr>
...
...
@@ -19,7 +19,7 @@
<hr>
<h2>
G
eneral
s
ettings
for the radio show:
</h2>
<h2>
{{
$t
(
'
showManager.g
eneral
S
ettings
'
)
}}
</h2>
<show-metaSimpleTypes
/>
<show-metaArrays
/>
<show-metaOwners
/>
...
...
src/components/Footer.vue
View file @
c2ef9afc
...
...
@@ -3,7 +3,7 @@
<b-container>
<b-row>
<b-col>
aura/
<b>
dashboard v
{{
version
}}
</b>
aura/
<b>
dashboard
</b>
v
{{
version
}}
<span
v-for=
"mod in modules.footer"
:key=
"mod.slug"
...
...
src/components/Header.vue
View file @
c2ef9afc
...
...
@@ -7,8 +7,9 @@
type=
"dark"
class=
"tw-text-white tw-flex"
>
<span
class=
"d-none d-sm-inline d-lg-none menu-context-info"
>
For more options tap the menu button on the right:
</span>