Fixed broken extraction of contexts

This commit is contained in:
Eliot Berriot 2019-03-08 12:37:02 +01:00
parent 755f574b23
commit 72606388ff
No known key found for this signature in database
GPG key ID: DD6965E2476E5C27
93 changed files with 764 additions and 764 deletions

View file

@ -15,27 +15,27 @@
</h2>
<div class="ui hidden divider"></div>
<play-button class="orange" :tracks="album.tracks">
<translate :translate-context="'Content/*/Button.Label/Verb, Short'">Play all</translate>
<translate translate-context="Content/*/Button.Label/Verb, Short">Play all</translate>
</play-button>
<a :href="wikipediaUrl" target="_blank" class="ui icon labeled button">
<i class="wikipedia w icon"></i>
<translate :translate-context="'Content/*/Button.Label/Verb'">Search on Wikipedia</translate>
<translate translate-context="Content/*/Button.Label/Verb">Search on Wikipedia</translate>
</a>
<a v-if="musicbrainzUrl" :href="musicbrainzUrl" target="_blank" class="ui icon labeled button">
<i class="external icon"></i>
<translate :translate-context="'Content/*/Button.Label/Verb'">View on MusicBrainz</translate>
<translate translate-context="Content/*/Button.Label/Verb">View on MusicBrainz</translate>
</a>
<template v-if="publicLibraries.length > 0">
<button
@click="showEmbedModal = !showEmbedModal"
class="ui button icon labeled">
<i class="code icon"></i>
<translate :translate-context="'Content/*/Button.Label/Verb'">Embed</translate>
<translate translate-context="Content/*/Button.Label/Verb">Embed</translate>
</button>
<modal :show.sync="showEmbedModal">
<div class="header">
<translate :translate-context="'Popup/Album/Title/Verb'">Embed this album on your website</translate>
<translate translate-context="Popup/Album/Title/Verb">Embed this album on your website</translate>
</div>
<div class="content">
<div class="description">
@ -45,7 +45,7 @@
</div>
<div class="actions">
<div class="ui deny button">
<translate :translate-context="'Popup/*/Button.Label/Verb'">Cancel</translate>
<translate translate-context="Popup/*/Button.Label/Verb">Cancel</translate>
</div>
</div>
</modal>
@ -58,10 +58,10 @@
tag="h2"
class="left floated"
:translate-params="{number: disc_number + 1}"
:translate-context="'Content/Album/'"
translate-context="Content/Album/"
>Volume %{ number }</translate>
<play-button class="right floated orange" :tracks="tracks">
<translate :translate-context="'Content/*/Button.Label/Verb, Short'">Play all</translate>
<translate translate-context="Content/*/Button.Label/Verb, Short">Play all</translate>
</play-button>
<track-table :artist="album.artist" :display-position="true" :tracks="tracks"></track-table>
</section>
@ -69,17 +69,17 @@
<template v-else>
<section class="ui vertical stripe segment">
<h2>
<translate :translate-context="'Content/*/Title/Name'">Tracks</translate>
<translate translate-context="Content/*/Title/Name">Tracks</translate>
</h2>
<track-table v-if="album" :artist="album.artist" :display-position="true" :tracks="album.tracks"></track-table>
</section>
</template>
<section class="ui vertical stripe segment">
<h2>
<translate :translate-context="'Content/*/Title/Name'">User libraries</translate>
<translate translate-context="Content/*/Title/Name">User libraries</translate>
</h2>
<library-widget @loaded="libraries = $event" :url="'albums/' + id + '/libraries/'">
<translate slot="subtitle" :translate-context="'Content/Album/Paragraph'">This album is present in the following libraries:</translate>
<translate slot="subtitle" translate-context="Content/Album/Paragraph">This album is present in the following libraries:</translate>
</library-widget>
</section>
</template>

View file

@ -2,18 +2,18 @@
<main v-title="labels.title">
<section class="ui vertical stripe segment">
<h2 class="ui header">
<translate :translate-context="'Content/Album/Title'">Browsing albums</translate>
<translate translate-context="Content/Album/Title">Browsing albums</translate>
</h2>
<div :class="['ui', {'loading': isLoading}, 'form']">
<div class="fields">
<div class="field">
<label>
<translate :translate-context="'Content/Search/Input.Label/Verb'">Search</translate>
<translate translate-context="Content/Search/Input.Label/Verb">Search</translate>
</label>
<input type="text" name="search" v-model="query" :placeholder="labels.searchPlaceholder"/>
</div>
<div class="field">
<label><translate :translate-context="'Content/Search/Dropdown.Label/Noun'">Ordering</translate></label>
<label><translate translate-context="Content/Search/Dropdown.Label/Noun">Ordering</translate></label>
<select class="ui dropdown" v-model="ordering">
<option v-for="option in orderingOptions" :value="option[0]">
{{ sharedLabels.filters[option[1]] }}
@ -21,14 +21,14 @@
</select>
</div>
<div class="field">
<label><translate :translate-context="'Content/Search/Dropdown.Label/Noun'">Ordering direction</translate></label>
<label><translate translate-context="Content/Search/Dropdown.Label/Noun">Ordering direction</translate></label>
<select class="ui dropdown" v-model="orderingDirection">
<option value="+"><translate :translate-context="'Content/Search/Dropdown'">Ascending</translate></option>
<option value="-"><translate :translate-context="'Content/Search/Dropdown'">Descending</translate></option>
<option value="+"><translate translate-context="Content/Search/Dropdown">Ascending</translate></option>
<option value="-"><translate translate-context="Content/Search/Dropdown">Descending</translate></option>
</select>
</div>
<div class="field">
<label><translate :translate-context="'Content/Search/Dropdown.Label/Noun'">Results per page</translate></label>
<label><translate translate-context="Content/Search/Dropdown.Label/Noun">Results per page</translate></label>
<select class="ui dropdown" v-model="paginateBy">
<option :value="parseInt(12)">12</option>
<option :value="parseInt(25)">25</option>

View file

@ -11,7 +11,7 @@
<div class="content">
{{ artist.name }}
<div class="sub header" v-if="albums">
<translate :translate-context="'Content/Artist/Paragraph'"
<translate translate-context="Content/Artist/Paragraph"
tag="div"
translate-plural="%{ count } tracks in %{ albumsCount } albums"
:translate-n="totalTracks"
@ -24,27 +24,27 @@
<div class="ui hidden divider"></div>
<radio-button type="artist" :object-id="artist.id"></radio-button>
<play-button :is-playable="isPlayable" class="orange" :artist="artist">
<translate :translate-context="'Content/Artist/Button.Label/Verb'">Play all albums</translate>
<translate translate-context="Content/Artist/Button.Label/Verb">Play all albums</translate>
</play-button>
<a :href="wikipediaUrl" target="_blank" class="ui icon labeled button">
<i class="wikipedia w icon"></i>
<translate :translate-context="'Content/*/Button.Label/Verb'">Search on Wikipedia</translate>
<translate translate-context="Content/*/Button.Label/Verb">Search on Wikipedia</translate>
</a>
<a v-if="musicbrainzUrl" :href="musicbrainzUrl" target="_blank" class="ui button">
<i class="external icon"></i>
<translate :translate-context="'Content/*/Button.Label/Verb'">View on MusicBrainz</translate>
<translate translate-context="Content/*/Button.Label/Verb">View on MusicBrainz</translate>
</a>
<template v-if="publicLibraries.length > 0">
<button
@click="showEmbedModal = !showEmbedModal"
class="ui button icon labeled">
<i class="code icon"></i>
<translate :translate-context="'Content/*/Button.Label/Verb'">Embed</translate>
<translate translate-context="Content/*/Button.Label/Verb">Embed</translate>
</button>
<modal :show.sync="showEmbedModal">
<div class="header">
<translate :translate-context="'Popup/Artist/Title/Verb'">Embed this artist work on your website</translate>
<translate translate-context="Popup/Artist/Title/Verb">Embed this artist work on your website</translate>
</div>
<div class="content">
<div class="description">
@ -54,7 +54,7 @@
</div>
<div class="actions">
<div class="ui deny button">
<translate :translate-context="'Popup/*/Button.Label/Verb'">Cancel</translate>
<translate translate-context="Popup/*/Button.Label/Verb">Cancel</translate>
</div>
</div>
</modal>
@ -68,10 +68,10 @@
<translate>You are currently hiding content related to this artist.</translate>
</p>
<router-link class="right floated" :to="{name: 'settings'}">
<translate :translate-context="'Content/Moderation/Link'">Review my filters</translate>
<translate translate-context="Content/Moderation/Link">Review my filters</translate>
</router-link>
<button @click="$store.dispatch('moderation/deleteContentFilter', contentFilter.uuid)" class="ui basic tiny button">
<translate :translate-context="'Content/Moderation/Button.Label'">Remove filter</translate>
<translate translate-context="Content/Moderation/Button.Label">Remove filter</translate>
</button>
</div>
</div>
@ -80,7 +80,7 @@
</section>
<section v-else-if="albums && albums.length > 0" class="ui vertical stripe segment">
<h2>
<translate :translate-context="'Content/Artist/Title'">Albums by this artist</translate>
<translate translate-context="Content/Artist/Title">Albums by this artist</translate>
</h2>
<div class="ui cards" >
<album-card :mode="'rich'" :album="album" :key="album.id" v-for="album in albums"></album-card>
@ -88,16 +88,16 @@
</section>
<section v-if="tracks.length > 0" class="ui vertical stripe segment">
<h2>
<translate :translate-context="'Content/Artist/Title'">Tracks by this artist</translate>
<translate translate-context="Content/Artist/Title">Tracks by this artist</translate>
</h2>
<track-table :display-position="true" :tracks="tracks"></track-table>
</section>
<section class="ui vertical stripe segment">
<h2>
<translate :translate-context="'Content/Artist/Title'">User libraries</translate>
<translate translate-context="Content/Artist/Title">User libraries</translate>
</h2>
<library-widget @loaded="libraries = $event" :url="'artists/' + id + '/libraries/'">
<translate :translate-context="'Content/Artist/Paragraph'" slot="subtitle">This artist is present in the following libraries:</translate>
<translate translate-context="Content/Artist/Paragraph" slot="subtitle">This artist is present in the following libraries:</translate>
</library-widget>
</section>
</template>

View file

@ -2,18 +2,18 @@
<main v-title="labels.title">
<section class="ui vertical stripe segment">
<h2 class="ui header">
<translate :translate-context="'Content/Artist/Title'">Browsing artists</translate>
<translate translate-context="Content/Artist/Title">Browsing artists</translate>
</h2>
<div :class="['ui', {'loading': isLoading}, 'form']">
<div class="fields">
<div class="field">
<label>
<translate :translate-context="'Content/Search/Input.Label/Verb'">Search</translate>
<translate translate-context="Content/Search/Input.Label/Verb">Search</translate>
</label>
<input type="text" name="search" v-model="query" :placeholder="labels.searchPlaceholder"/>
</div>
<div class="field">
<label><translate :translate-context="'Content/Search/Dropdown.Label/Noun'">Ordering</translate></label>
<label><translate translate-context="Content/Search/Dropdown.Label/Noun">Ordering</translate></label>
<select class="ui dropdown" v-model="ordering">
<option v-for="option in orderingOptions" :value="option[0]">
{{ sharedLabels.filters[option[1]] }}
@ -21,14 +21,14 @@
</select>
</div>
<div class="field">
<label><translate :translate-context="'Content/Search/Dropdown.Label/Noun'">Ordering direction</translate></label>
<label><translate translate-context="Content/Search/Dropdown.Label/Noun">Ordering direction</translate></label>
<select class="ui dropdown" v-model="orderingDirection">
<option value="+"><translate :translate-context="'Content/Search/Dropdown'">Ascending</translate></option>
<option value="-"><translate :translate-context="'Content/Search/Dropdown'">Descending</translate></option>
<option value="+"><translate translate-context="Content/Search/Dropdown">Ascending</translate></option>
<option value="-"><translate translate-context="Content/Search/Dropdown">Descending</translate></option>
</select>
</div>
<div class="field">
<label><translate :translate-context="'Content/Search/Dropdown.Label'">Results per page</translate></label>
<label><translate translate-context="Content/Search/Dropdown.Label">Results per page</translate></label>
<select class="ui dropdown" v-model="paginateBy">
<option :value="parseInt(12)">12</option>
<option :value="parseInt(25)">25</option>

View file

@ -3,7 +3,7 @@
<div class="content">
<div class="header">
<router-link :to="detailUrl">
<translate :translate-context="'Content/Library/Card/Short'" :translate-params="{id: obj.uuid.substring(0, 8)}">Modification %{ id }</translate>
<translate translate-context="Content/Library/Card/Short" :translate-params="{id: obj.uuid.substring(0, 8)}">Modification %{ id }</translate>
</router-link>
</div>
<div class="meta">
@ -11,7 +11,7 @@
v-if="obj.target && obj.target.type === 'track'"
:to="{name: 'library.tracks.detail', params: {id: obj.target.id }}">
<i class="music icon"></i>
<translate :translate-context="'Content/Library/Card/Short'" :translate-params="{id: obj.target.id, name: obj.target.repr}">Track #%{ id } - %{ name }</translate>
<translate translate-context="Content/Library/Card/Short" :translate-params="{id: obj.target.id, name: obj.target.repr}">Track #%{ id } - %{ name }</translate>
</router-link>
<br>
<human-date :date="obj.creation_date" :icon="true"></human-date>
@ -19,19 +19,19 @@
<span class="right floated">
<span v-if="obj.is_approved && obj.is_applied">
<i class="green check icon"></i>
<translate :translate-context="'Content/Library/Card/Short'">Approved and applied</translate>
<translate translate-context="Content/Library/Card/Short">Approved and applied</translate>
</span>
<span v-else-if="obj.is_approved">
<i class="green check icon"></i>
<translate :translate-context="'Content/Library/Card/Short'">Approved</translate>
<translate translate-context="Content/Library/Card/Short">Approved</translate>
</span>
<span v-else-if="obj.is_approved === null">
<i class="yellow hourglass icon"></i>
<translate :translate-context="'Content/Library/Card/Short'">Pending review</translate>
<translate translate-context="Content/Library/Card/Short">Pending review</translate>
</span>
<span v-else-if="obj.is_approved === false">
<i class="red x icon"></i>
<translate :translate-context="'Content/Library/Card/Short'">Rejected</translate>
<translate translate-context="Content/Library/Card/Short">Rejected</translate>
</span>
</span>
</div>
@ -43,9 +43,9 @@
<table v-if="obj.type === 'update'" class="ui celled very basic fixed stacking table">
<thead>
<tr>
<th><translate :translate-context="'Content/Library/Card.Table.Header/Short'">Field</translate></th>
<th><translate :translate-context="'Content/Library/Card.Table.Header/Short'">Old value</translate></th>
<th><translate :translate-context="'Content/Library/Card.Table.Header/Short'">New value</translate></th>
<th><translate translate-context="Content/Library/Card.Table.Header/Short">Field</translate></th>
<th><translate translate-context="Content/Library/Card.Table.Header/Short">Old value</translate></th>
<th><translate translate-context="Content/Library/Card.Table.Header/Short">New value</translate></th>
</tr>
</thead>
<tbody>
@ -58,7 +58,7 @@
</span>
</td>
<td v-else>
<translate :translate-context="'*/*/*'">N/A</translate>
<translate translate-context="*/*/*">N/A</translate>
</td>
<td v-if="field.diff">
@ -79,24 +79,24 @@
v-if="canApprove && obj.is_approved !== true"
@click="approve(true)"
:class="['ui', {loading: isLoading}, 'green', 'basic', 'button']">
<translate :translate-context="'Content/Library/Button.Label'">Approve</translate>
<translate translate-context="Content/Library/Button.Label">Approve</translate>
</button>
<button
v-if="canApprove && obj.is_approved === null"
@click="approve(false)"
:class="['ui', {loading: isLoading}, 'yellow', 'basic', 'button']">
<translate :translate-context="'Content/Library/Button.Label'">Reject</translate>
<translate translate-context="Content/Library/Button.Label">Reject</translate>
</button>
<dangerous-button
v-if="canDelete"
:class="['ui', {loading: isLoading}, 'basic button']"
:action="remove">
<translate :translate-context="'*/*/*/Verb'">Delete</translate>
<p slot="modal-header"><translate :translate-context="'Popup/Library/Title'">Delete this suggestion?</translate></p>
<translate translate-context="*/*/*/Verb">Delete</translate>
<p slot="modal-header"><translate translate-context="Popup/Library/Title">Delete this suggestion?</translate></p>
<div slot="modal-content">
<p><translate :translate-context="'Popup/Library/Paragraph'">The suggestion will be completely removed, this action is irreversible.</translate></p>
<p><translate translate-context="Popup/Library/Paragraph">The suggestion will be completely removed, this action is irreversible.</translate></p>
</div>
<p slot="modal-confirm"><translate :translate-context="'Popup/Library/Button.Label'">Delete</translate></p>
<p slot="modal-confirm"><translate translate-context="Popup/Library/Button.Label">Delete</translate></p>
</dangerous-button>
</div>
</div>

View file

@ -1,11 +1,11 @@
<template>
<div v-if="submittedMutation">
<div class="ui positive message">
<div class="header"><translate :translate-context="'Content/Library/Paragraph'">Your edit was successfully submitted.</translate></div>
<div class="header"><translate translate-context="Content/Library/Paragraph">Your edit was successfully submitted.</translate></div>
</div>
<edit-card :obj="submittedMutation" :current-state="currentState" />
<button class="ui button" @click.prevent="submittedMutation = null">
<translate :translate-context="'Content/Library/Button.Label'">
<translate translate-context="Content/Library/Button.Label">
Submit another edit
</translate>
</button>
@ -15,28 +15,28 @@
<edit-list :filters="editListFilters" :url="mutationsUrl" :obj="object" :currentState="currentState">
<div slot="title">
<template v-if="showPendingReview">
<translate :translate-context="'Content/Library/Paragraph'">
<translate translate-context="Content/Library/Paragraph">
Recent edits awaiting review
</translate>
<button class="ui tiny basic right floated button" @click.prevent="showPendingReview = false">
<translate :translate-context="'Content/Library/Button.Label'">
<translate translate-context="Content/Library/Button.Label">
Show all edits
</translate>
</button>
</template>
<template v-else>
<translate :translate-context="'Content/Library/Paragraph'">
<translate translate-context="Content/Library/Paragraph">
Recent edits
</translate>
<button class="ui tiny basic right floated button" @click.prevent="showPendingReview = true">
<translate :translate-context="'Content/Library/Button.Label'">
<translate translate-context="Content/Library/Button.Label">
Retrict to unreviewed edits
</translate>
</button>
</template>
</div>
<empty-state slot="empty-state">
<translate :translate-context="'Content/Library/Paragraph'">
<translate translate-context="Content/Library/Paragraph">
Suggest a change using the form below.
</translate>
</empty-state>
@ -44,13 +44,13 @@
<form class="ui form" @submit.prevent="submit()">
<div class="ui hidden divider"></div>
<div v-if="errors.length > 0" class="ui negative message">
<div class="header"><translate :translate-context="'Content/Library/Error message.Title'">Error while submitting edit</translate></div>
<div class="header"><translate translate-context="Content/Library/Error message.Title">Error while submitting edit</translate></div>
<ul class="list">
<li v-for="error in errors">{{ error }}</li>
</ul>
</div>
<div v-if="!canEdit" class="ui message">
<translate :translate-context="'Content/Library/Paragraph'">
<translate translate-context="Content/Library/Paragraph">
You don't have the permission to edit this object, but you can suggest changes. Once submitted, suggestions will be reviewed before approval.
</translate>
</div>
@ -62,12 +62,12 @@
<div v-if="values[fieldConfig.id] != initialValues[fieldConfig.id]">
<button class="ui tiny basic right floated reset button" form="noop" @click.prevent="values[fieldConfig.id] = initialValues[fieldConfig.id]">
<i class="undo icon"></i>
<translate :translate-context="'Content/Library/Button.Label'" :translate-params="{value: initialValues[fieldConfig.id]}">Reset to initial value: %{ value }</translate>
<translate translate-context="Content/Library/Button.Label" :translate-params="{value: initialValues[fieldConfig.id]}">Reset to initial value: %{ value }</translate>
</button>
</div>
</div>
<div class="field">
<label for="summary"><translate :translate-context="'*/*/*'">Summary (optional)</translate></label>
<label for="summary"><translate translate-context="*/*/*">Summary (optional)</translate></label>
<textarea name="change-summary" v-model="summary" id="change-summary" rows="3" :placeholder="labels.summaryPlaceholder"></textarea>
</div>
<router-link
@ -75,11 +75,11 @@
v-if="objectType === 'track'"
:to="{name: 'library.tracks.detail', params: {id: object.id }}"
>
<translate :translate-context="'Content/*/Button.Label'">Cancel</translate>
<translate translate-context="Content/*/Button.Label">Cancel</translate>
</router-link>
<button :class="['ui', {'loading': isLoading}, 'right', 'floated', 'green', 'button']" type="submit" :disabled="isLoading || !mutationPayload">
<translate v-if="canEdit" key="1" :translate-context="'Content/Library/Button.Label/Verb'">Submit and apply edit</translate>
<translate v-else key="2" :translate-context="'Content/Library/Button.Label/Verb'">Submit suggestion</translate>
<translate v-if="canEdit" key="1" translate-context="Content/Library/Button.Label/Verb">Submit and apply edit</translate>
<translate v-else key="2" translate-context="Content/Library/Button.Label/Verb">Submit suggestion</translate>
</button>
</form>
</div>

View file

@ -1,9 +1,9 @@
<template>
<div>
<div class="ui top attached tabular menu">
<a :class="['item', {active: currentTab === 'summary'}]" @click="currentTab = 'summary'"><translate :translate-context="'Content/Library/Tab.Title/Short'">Summary</translate></a>
<a :class="['item', {active: currentTab === 'summary'}]" @click="currentTab = 'summary'"><translate translate-context="Content/Library/Tab.Title/Short">Summary</translate></a>
<a :class="['item', {active: currentTab === 'uploads'}]" @click="currentTab = 'uploads'">
<translate :translate-context="'Content/Library/Tab.Title/Short'">Uploading</translate>
<translate translate-context="Content/Library/Tab.Title/Short">Uploading</translate>
<div v-if="files.length === 0" class="ui label">
0
</div>
@ -15,7 +15,7 @@
</div>
</a>
<a :class="['item', {active: currentTab === 'processing'}]" @click="currentTab = 'processing'">
<translate :translate-context="'Content/Library/Tab.Title/Short'">Processing</translate>
<translate translate-context="Content/Library/Tab.Title/Short">Processing</translate>
<div v-if="processableFiles === 0" class="ui label">
0
</div>
@ -29,19 +29,19 @@
</div>
<div :class="['ui', 'bottom', 'attached', 'segment', {hidden: currentTab != 'summary'}]">
<h2 class="ui header"><translate :translate-context="'Content/Library/Title/Verb'">Upload new tracks</translate></h2>
<h2 class="ui header"><translate translate-context="Content/Library/Title/Verb">Upload new tracks</translate></h2>
<div class="ui message">
<p><translate :translate-context="'Content/Library/Paragraph'">You are about to upload music to your library. Before proceeding, please ensure that:</translate></p>
<p><translate translate-context="Content/Library/Paragraph">You are about to upload music to your library. Before proceeding, please ensure that:</translate></p>
<ul>
<li v-if="library.privacy_level != 'me'">
<translate :translate-context="'Content/Library/List item'">You are not uploading copyrighted content in a public library, otherwise you may be infringing the law</translate>
<translate translate-context="Content/Library/List item">You are not uploading copyrighted content in a public library, otherwise you may be infringing the law</translate>
</li>
<li>
<translate :translate-context="'Content/Library/List item'">The music files you are uploading are tagged properly.</translate>&nbsp;
<a href="http://picard.musicbrainz.org/" target='_blank'><translate :translate-context="'Content/Library/Link'">We recommend using Picard for that purpose.</translate></a>
<translate translate-context="Content/Library/List item">The music files you are uploading are tagged properly.</translate>&nbsp;
<a href="http://picard.musicbrainz.org/" target='_blank'><translate translate-context="Content/Library/Link">We recommend using Picard for that purpose.</translate></a>
</li>
<li>
<translate :translate-context="'Content/Library/List item'">The uploaded music files are in OGG, Flac or MP3 format</translate>
<translate translate-context="Content/Library/List item">The uploaded music files are in OGG, Flac or MP3 format</translate>
</li>
</ul>
</div>
@ -49,14 +49,14 @@
<div class="ui form">
<div class="fields">
<div class="ui four wide field">
<label><translate :translate-context="'Content/Library/Input.Label/Noun'">Import reference</translate></label>
<p><translate :translate-context="'Content/Library/Paragraph'">This reference will be used to group imported files together.</translate></p>
<label><translate translate-context="Content/Library/Input.Label/Noun">Import reference</translate></label>
<p><translate translate-context="Content/Library/Paragraph">This reference will be used to group imported files together.</translate></p>
<input name="import-ref" type="text" v-model="importReference" />
</div>
</div>
</div>
<div class="ui green button" @click="currentTab = 'uploads'"><translate :translate-context="'Content/Library/Button.Label'">Proceed</translate></div>
<div class="ui green button" @click="currentTab = 'uploads'"><translate translate-context="Content/Library/Button.Label">Proceed</translate></div>
</div>
<div :class="['ui', 'bottom', 'attached', 'segment', {hidden: currentTab != 'uploads'}]">
<div class="ui container">
@ -73,10 +73,10 @@
@input-file="inputFile"
ref="upload">
<i class="upload icon"></i>&nbsp;
<translate :translate-context="'Content/Library/Paragraph/Call to action'">Click to select files to upload or drag and drop files or directories</translate>
<translate translate-context="Content/Library/Paragraph/Call to action">Click to select files to upload or drag and drop files or directories</translate>
<br />
<br />
<i><translate :translate-context="'Content/Library/Paragraph'" :translate-params="{extensions: supportedExtensions.join(', ')}">Supported extensions: %{ extensions }</translate></i>
<i><translate translate-context="Content/Library/Paragraph" :translate-params="{extensions: supportedExtensions.join(', ')}">Supported extensions: %{ extensions }</translate></i>
</file-upload-widget>
</div>
<div v-if="files.length > 0" class="table-wrapper">
@ -84,9 +84,9 @@
<table class="ui unstackable table">
<thead>
<tr>
<th><translate :translate-context="'Content/Library/Table.Label'">Filename</translate></th>
<th><translate :translate-context="'Content/Library/Table.Label'">Size</translate></th>
<th><translate :translate-context="'Content/Library/Table.Label'">Status</translate></th>
<th><translate translate-context="Content/Library/Table.Label">Filename</translate></th>
<th><translate translate-context="Content/Library/Table.Label">Size</translate></th>
<th><translate translate-context="Content/Library/Table.Label">Status</translate></th>
</tr>
</thead>
<tbody>
@ -100,14 +100,14 @@
</span>
</span>
<span v-else-if="file.success" class="ui green label">
<translate :translate-context="'Content/Library/Table'" key="1">Uploaded</translate>
<translate translate-context="Content/Library/Table" key="1">Uploaded</translate>
</span>
<span v-else-if="file.active" class="ui yellow label">
<translate :translate-context="'Content/Library/Table'" key="2">Uploading</translate>
<translate translate-context="Content/Library/Table" key="2">Uploading</translate>
({{ parseInt(file.progress) }}%)
</span>
<template v-else>
<span class="ui label"><translate :translate-context="'Content/Library/Table'" key="3">Pending</translate></span>
<span class="ui label"><translate translate-context="Content/Library/Table" key="3">Pending</translate></span>
<button class="ui tiny basic red icon button" @click.prevent="$refs.upload.remove(file)"><i class="delete icon"></i></button>
</template>
</td>

View file

@ -4,17 +4,17 @@
<div class="ui stackable three column grid">
<div class="column">
<track-widget :url="'history/listenings/'" :filters="{scope: 'user', ordering: '-creation_date'}">
<template slot="title"><translate :translate-context="'Content/Home/Title'">Recently listened</translate></template>
<template slot="title"><translate translate-context="Content/Home/Title">Recently listened</translate></template>
</track-widget>
</div>
<div class="column">
<track-widget :url="'favorites/tracks/'" :filters="{scope: 'user', ordering: '-creation_date'}">
<template slot="title"><translate :translate-context="'Content/Home/Title'">Recently favorited</translate></template>
<template slot="title"><translate translate-context="Content/Home/Title">Recently favorited</translate></template>
</track-widget>
</div>
<div class="column">
<playlist-widget :url="'playlists/'" :filters="{scope: 'user', playable: true, ordering: '-creation_date'}">
<template slot="title"><translate :translate-context="'Content/Home/Title'">Playlists</translate></template>
<template slot="title"><translate translate-context="Content/Home/Title">Playlists</translate></template>
</playlist-widget>
</div>
</div>
@ -22,7 +22,7 @@
<div class="ui stackable one column grid">
<div class="column">
<album-widget :filters="{playable: true, ordering: '-creation_date'}">
<template slot="title"><translate :translate-context="'Content/Home/Title'">Recently added</translate></template>
<template slot="title"><translate translate-context="Content/Home/Title">Recently added</translate></template>
</album-widget>
</div>
</div>

View file

@ -2,19 +2,19 @@
<div class="main library pusher">
<nav class="ui secondary pointing menu" role="navigation" :aria-label="labels.secondaryMenu">
<router-link class="ui item" to="/library" exact>
<translate :translate-context="'Menu/Home/Link/Verb'">Browse</translate>
<translate translate-context="Menu/Home/Link/Verb">Browse</translate>
</router-link>
<router-link class="ui item" to="/library/albums" exact>
<translate :translate-context="'Menu/Home/Link'">Albums</translate>
<translate translate-context="Menu/Home/Link">Albums</translate>
</router-link>
<router-link class="ui item" to="/library/artists" exact>
<translate :translate-context="'Menu/Home/Link'">Artists</translate>
<translate translate-context="Menu/Home/Link">Artists</translate>
</router-link>
<router-link class="ui item" to="/library/radios" exact>
<translate :translate-context="'Menu/Home/Link'">Radios</translate>
<translate translate-context="Menu/Home/Link">Radios</translate>
</router-link>
<router-link class="ui item" to="/library/playlists" exact>
<translate :translate-context="'Menu/Home/Link'">Playlists</translate>
<translate translate-context="Menu/Home/Link">Playlists</translate>
</router-link>
</nav>
<router-view :key="$route.fullPath"></router-view>

View file

@ -2,12 +2,12 @@
<main v-title="labels.title">
<section class="ui vertical stripe segment">
<h2 class="ui header">
<translate :translate-context="'Content/Radio/Title'">Browsing radios</translate>
<translate translate-context="Content/Radio/Title">Browsing radios</translate>
</h2>
<div class="ui hidden divider"></div>
<div class="ui row">
<h3 class="ui header">
<translate :translate-context="'Content/Radio/Title'">Instance radios</translate>
<translate translate-context="Content/Radio/Title">Instance radios</translate>
</h3>
<div class="ui cards">
<radio-card :type="'favorites'"></radio-card>
@ -18,20 +18,20 @@
<div class="ui hidden divider"></div>
<h3 class="ui header">
<translate :translate-context="'Content/Radio/Title'">User radios</translate>
<translate translate-context="Content/Radio/Title">User radios</translate>
</h3>
<router-link class="ui green basic button" to="/library/radios/build" exact>
<translate :translate-context="'Content/Radio/Button.Label/Verb'">Create your own radio</translate>
<translate translate-context="Content/Radio/Button.Label/Verb">Create your own radio</translate>
</router-link>
<div class="ui hidden divider"></div>
<div :class="['ui', {'loading': isLoading}, 'form']">
<div class="fields">
<div class="field">
<label><translate :translate-context="'Content/Search/Input.Label/Verb'">Search</translate></label>
<label><translate translate-context="Content/Search/Input.Label/Verb">Search</translate></label>
<input name="search" type="text" v-model="query" :placeholder="labels.searchPlaceholder"/>
</div>
<div class="field">
<label><translate :translate-context="'Content/Search/Dropdown.Label'">Ordering</translate></label>
<label><translate translate-context="Content/Search/Dropdown.Label">Ordering</translate></label>
<select class="ui dropdown" v-model="ordering">
<option v-for="option in orderingOptions" :value="option[0]">
{{ sharedLabels.filters[option[1]] }}
@ -39,18 +39,18 @@
</select>
</div>
<div class="field">
<label><translate :translate-context="'Content/Search/Dropdown.Label'">Order</translate></label>
<label><translate translate-context="Content/Search/Dropdown.Label">Order</translate></label>
<select class="ui dropdown" v-model="orderingDirection">
<option value="+">
<translate :translate-context="'Content/Search/Dropdown'">Ascending</translate>
<translate translate-context="Content/Search/Dropdown">Ascending</translate>
</option>
<option value="-">
<translate :translate-context="'Content/Search/Dropdown'">Descending</translate>
<translate translate-context="Content/Search/Dropdown">Descending</translate>
</option>
</select>
</div>
<div class="field">
<label><translate :translate-context="'Content/Search/Dropdown.Label'">Results per page</translate></label>
<label><translate translate-context="Content/Search/Dropdown.Label">Results per page</translate></label>
<select class="ui dropdown" v-model="paginateBy">
<option :value="parseInt(12)">12</option>
<option :value="parseInt(25)">25</option>

View file

@ -15,7 +15,7 @@
<div class="content">
{{ track.title }}
<div class="sub header">
<div :translate-context="'Content/Track/Paragraph'"
<div translate-context="Content/Track/Paragraph"
v-translate="{album: track.album.title, artist: track.artist.name, albumUrl: albumUrl, artistUrl: artistUrl}"
>From album <a class="internal" href="%{ albumUrl }">%{ album }</a> by <a class="internal" href="%{ artistUrl }">%{ artist }</a></div>
</div>
@ -23,33 +23,33 @@
</h2>
<play-button class="orange" :track="track">
<translate :translate-context="'*/Queue/Button.Label/Short, Verb'">Play</translate>
<translate translate-context="*/Queue/Button.Label/Short, Verb">Play</translate>
</play-button>
<track-favorite-icon :track="track" :button="true"></track-favorite-icon>
<track-playlist-icon :button="true" v-if="$store.state.auth.authenticated" :track="track"></track-playlist-icon>
<a :href="wikipediaUrl" target="_blank" class="ui icon labeled button">
<i class="wikipedia w icon"></i>
<translate :translate-context="'Content/*/Link/Verb'">Search on Wikipedia</translate>
<translate translate-context="Content/*/Link/Verb">Search on Wikipedia</translate>
</a>
<a v-if="musicbrainzUrl" :href="musicbrainzUrl" target="_blank" class="ui icon labeled button">
<i class="external icon"></i>
<translate :translate-context="'Content/*/Link/Verb'">View on MusicBrainz</translate>
<translate translate-context="Content/*/Link/Verb">View on MusicBrainz</translate>
</a>
<a v-if="upload" :href="downloadUrl" target="_blank" class="ui icon labeled button">
<i class="download icon"></i>
<translate :translate-context="'Content/Track/Link/Verb'">Download</translate>
<translate translate-context="Content/Track/Link/Verb">Download</translate>
</a>
<template v-if="publicLibraries.length > 0">
<button
@click="showEmbedModal = !showEmbedModal"
class="ui icon labeled button">
<i class="code icon"></i>
<translate :translate-context="'Content/Track/Button.Label/Verb'">Embed</translate>
<translate translate-context="Content/Track/Button.Label/Verb">Embed</translate>
</button>
<modal :show.sync="showEmbedModal">
<div class="header">
<translate :translate-context="'Popup/Track/Title'">Embed this track on your website</translate>
<translate translate-context="Popup/Track/Title">Embed this track on your website</translate>
</div>
<div class="content">
<div class="description">
@ -59,7 +59,7 @@
</div>
<div class="actions">
<div class="ui deny button">
<translate :translate-context="'Popup/Track/Button/Verb'">Cancel</translate>
<translate translate-context="Popup/Track/Button/Verb">Cancel</translate>
</div>
</div>
</modal>
@ -68,7 +68,7 @@
:to="{name: 'library.tracks.edit', params: {id: track.id }}"
class="ui icon labeled button">
<i class="edit icon"></i>
<translate :translate-context="'Content/Track/Button.Label/Verb'">Edit</translate>
<translate translate-context="Content/Track/Button.Label/Verb">Edit</translate>
</router-link>
</div>
</section>

View file

@ -3,64 +3,64 @@
<div v-if="track">
<section class="ui vertical stripe center aligned segment">
<h2 class="ui header">
<translate :translate-context="'Content/Track/Title/Noun'">Track information</translate>
<translate translate-context="Content/Track/Title/Noun">Track information</translate>
</h2>
<table class="ui very basic collapsing celled center aligned table">
<tbody>
<tr>
<td>
<translate :translate-context="'Content/Track/Table.Label/Noun'">Copyright</translate>
<translate translate-context="Content/Track/Table.Label/Noun">Copyright</translate>
</td>
<td v-if="track.copyright" :title="track.copyright">{{ track.copyright|truncate(50) }}</td>
<td v-else>
<translate :translate-context="'Content/Track/Table.Paragraph'">No copyright information available for this track</translate>
<translate translate-context="Content/Track/Table.Paragraph">No copyright information available for this track</translate>
</td>
</tr>
<tr>
<td>
<translate :translate-context="'Content/Track/Table.Label/Noun'">License</translate>
<translate translate-context="Content/Track/Table.Label/Noun">License</translate>
</td>
<td v-if="license">
<a :href="license.url" target="_blank" rel="noopener noreferrer">{{ license.name }}</a>
</td>
<td v-else>
<translate :translate-context="'Content/Track/Table.Paragraph'">No licensing information for this track</translate>
<translate translate-context="Content/Track/Table.Paragraph">No licensing information for this track</translate>
</td>
</tr>
<tr>
<td>
<translate :translate-context="'Content/Track/Table.Label'">Duration</translate>
<translate translate-context="Content/Track/Table.Label">Duration</translate>
</td>
<td v-if="upload && upload.duration">{{ time.parse(upload.duration) }}</td>
<td v-else>
<translate :translate-context="'*/*/*'">N/A</translate>
<translate translate-context="*/*/*">N/A</translate>
</td>
</tr>
<tr>
<td>
<translate :translate-context="'Content/Track/Table.Label'">Size</translate>
<translate translate-context="Content/Track/Table.Label">Size</translate>
</td>
<td v-if="upload && upload.size">{{ upload.size | humanSize }}</td>
<td v-else>
<translate :translate-context="'*/*/*'">N/A</translate>
<translate translate-context="*/*/*">N/A</translate>
</td>
</tr>
<tr>
<td>
<translate :translate-context="'Content/Track/Table.Label'">Bitrate</translate>
<translate translate-context="Content/Track/Table.Label">Bitrate</translate>
</td>
<td v-if="upload && upload.bitrate">{{ upload.bitrate | humanSize }}/s</td>
<td v-else>
<translate :translate-context="'*/*/*'">N/A</translate>
<translate translate-context="*/*/*">N/A</translate>
</td>
</tr>
<tr>
<td>
<translate :translate-context="'Content/Track/Table.Label/Noun'">Type</translate>
<translate translate-context="Content/Track/Table.Label/Noun">Type</translate>
</td>
<td v-if="upload && upload.extension">{{ upload.extension }}</td>
<td v-else>
<translate :translate-context="'*/*/*'">N/A</translate>
<translate translate-context="*/*/*">N/A</translate>
</td>
</tr>
</tbody>
@ -68,7 +68,7 @@
</section>
<section class="ui vertical stripe center aligned segment">
<h2>
<translate :translate-context="'Content/Track/Title'">Lyrics</translate>
<translate translate-context="Content/Track/Title">Lyrics</translate>
</h2>
<div v-if="isLoadingLyrics" class="ui vertical segment">
<div :class="['ui', 'centered', 'active', 'inline', 'loader']"></div>
@ -76,20 +76,20 @@
<div v-if="lyrics" v-html="lyrics.content_rendered"></div>
<template v-if="!isLoadingLyrics & !lyrics">
<p>
<translate :translate-context="'Content/Track/Paragraph'">No lyrics available for this track.</translate>
<translate translate-context="Content/Track/Paragraph">No lyrics available for this track.</translate>
</p>
<a class="ui button" target="_blank" :href="lyricsSearchUrl">
<i class="search icon"></i>
<translate :translate-context="'Content/Track/Link/Verb'">Search on lyrics.wikia.com</translate>
<translate translate-context="Content/Track/Link/Verb">Search on lyrics.wikia.com</translate>
</a>
</template>
</section>
<section class="ui vertical stripe segment">
<h2>
<translate :translate-context="'Content/Track/Title'">User libraries</translate>
<translate translate-context="Content/Track/Title">User libraries</translate>
</h2>
<library-widget @loaded="$emit('libraries-loaded', $event)" :url="'tracks/' + id + '/libraries/'">
<translate :translate-context="'Content/Track/Paragraph'" slot="subtitle">This track is present in the following libraries:</translate>
<translate translate-context="Content/Track/Paragraph" slot="subtitle">This track is present in the following libraries:</translate>
</library-widget>
</section>
</div>

View file

@ -3,8 +3,8 @@
<section class="ui vertical stripe segment">
<div class="ui text container">
<h2>
<translate v-if="canEdit" key="1" :translate-context="'Content/*/Title'">Edit this track</translate>
<translate v-else key="2" :translate-context="'Content/*/Title'">Suggest an edit on this track</translate>
<translate v-if="canEdit" key="1" translate-context="Content/*/Title">Edit this track</translate>
<translate v-else key="2" translate-context="Content/*/Title">Suggest an edit on this track</translate>
</h2>
<edit-form :object-type="objectType" :object="object" :can-edit="canEdit"></edit-form>
</div>

View file

@ -3,53 +3,53 @@
<div>
<section>
<h2 class="ui header">
<translate :translate-context="'Content/Radio/Title'">Builder</translate>
<translate translate-context="Content/Radio/Title">Builder</translate>
</h2>
<p><translate :translate-context="'Content/Radio/Paragraph'">You can use this interface to build your own custom radio, which will play tracks according to your criteria.</translate></p>
<p><translate translate-context="Content/Radio/Paragraph">You can use this interface to build your own custom radio, which will play tracks according to your criteria.</translate></p>
<div class="ui form">
<div v-if="success" class="ui positive message">
<div class="header">
<template v-if="radioName">
<translate :translate-context="'Content/Radio/Message'">Radio updated</translate>
<translate translate-context="Content/Radio/Message">Radio updated</translate>
</template>
<template v-else>
<translate :translate-context="'Content/Radio/Message'">Radio created</translate>
<translate translate-context="Content/Radio/Message">Radio created</translate>
</template>
</div>
</div>
<div class="">
<div class="field">
<label for="name"><translate :translate-context="'Content/Radio/Input.Label/Noun'">Radio name</translate></label>
<label for="name"><translate translate-context="Content/Radio/Input.Label/Noun">Radio name</translate></label>
<input id="name" name="name" type="text" v-model="radioName" :placeholder="labels.placeholder.name" />
</div>
<div class="field">
<label for="description"><translate :translate-context="'Content/Radio/Input.Label'">Description</translate></label>
<label for="description"><translate translate-context="Content/Radio/Input.Label">Description</translate></label>
<textarea rows="2" id="description" type="text" v-model="radioDesc" :placeholder="labels.placeholder.description" />
</div>
<div class="ui toggle checkbox">
<input id="public" type="checkbox" v-model="isPublic" />
<label for="public"><translate :translate-context="'Content/Radio/Checkbox.Label/Verb'">Display publicly</translate></label>
<label for="public"><translate translate-context="Content/Radio/Checkbox.Label/Verb">Display publicly</translate></label>
</div>
<div class="ui hidden divider"></div>
<button :disabled="!canSave" @click="save" :class="['ui', 'green', {loading: isLoading}, 'button']">
<translate :translate-context="'Content/Radio/Button.Label/Verb'">Save</translate>
<translate translate-context="Content/Radio/Button.Label/Verb">Save</translate>
</button>
<radio-button v-if="id" type="custom" :custom-radio-id="id"></radio-button>
</div>
</div>
<div class="ui form">
<p>
<translate :translate-context="'Content/Radio/Paragraph'">Add filters to customize your radio</translate>
<translate translate-context="Content/Radio/Paragraph">Add filters to customize your radio</translate>
</p>
<div class="inline field">
<select class="ui dropdown" v-model="currentFilterType">
<option value="">
<translate :translate-context="'Content/Radio/Dropdown.Placeholder/Verb'">Select a filter</translate>
<translate translate-context="Content/Radio/Dropdown.Placeholder/Verb">Select a filter</translate>
</option>
<option v-for="f in availableFilters" :value="f.type">{{ f.label }}</option>
</select>
<button :disabled="!currentFilterType" @click="add" class="ui button">
<translate :translate-context="'Content/Radio/Button.Label/Verb'">Add filter</translate>
<translate translate-context="Content/Radio/Button.Label/Verb">Add filter</translate>
</button>
</div>
<p v-if="currentFilter">
@ -59,11 +59,11 @@
<table class="ui table">
<thead>
<tr>
<th class="two wide"><translate :translate-context="'Content/Radio/Table.Label/Noun'">Filter name</translate></th>
<th class="one wide"><translate :translate-context="'Content/Radio/Table.Label/Verb'">Exclude</translate></th>
<th class="six wide"><translate :translate-context="'Content/Radio/Table.Label/Verb (Value is a List of Parameters)'">Config</translate></th>
<th class="five wide"><translate :translate-context="'Content/Radio/Table.Label/Noun (Value is a number of Tracks)'">Candidates</translate></th>
<th class="two wide"><translate :translate-context="'Content/Radio/Table.Label/Noun (Value is a Button)'">Actions</translate></th>
<th class="two wide"><translate translate-context="Content/Radio/Table.Label/Noun">Filter name</translate></th>
<th class="one wide"><translate translate-context="Content/Radio/Table.Label/Verb">Exclude</translate></th>
<th class="six wide"><translate translate-context="Content/Radio/Table.Label/Verb (Value is a List of Parameters)">Config</translate></th>
<th class="five wide"><translate translate-context="Content/Radio/Table.Label/Noun (Value is a number of Tracks)">Candidates</translate></th>
<th class="two wide"><translate translate-context="Content/Radio/Table.Label/Noun (Value is a Button)">Actions</translate></th>
</tr>
</thead>
<tbody>

View file

@ -42,7 +42,7 @@
</span>
<modal v-if="checkResult" :show.sync="showCandidadesModal">
<div class="header">
<translate :translate-context="'Popup/Radio/Title/Noun'">Tracks matching filter</translate>
<translate translate-context="Popup/Radio/Title/Noun">Tracks matching filter</translate>
</div>
<div class="content">
<div class="description">
@ -51,13 +51,13 @@
</div>
<div class="actions">
<div class="ui black deny button">
<translate :translate-context="'Popup/Radio/Button.Label/Verb'">Cancel</translate>
<translate translate-context="Popup/Radio/Button.Label/Verb">Cancel</translate>
</div>
</div>
</modal>
</td>
<td>
<button @click="$emit('delete', index)" class="ui basic red button"><translate :translate-context="'Content/Radio/Button.Label/Verb'">Remove</translate></button>
<button @click="$emit('delete', index)" class="ui basic red button"><translate translate-context="Content/Radio/Button.Label/Verb">Remove</translate></button>
</td>
</tr>
</template>