Switch all translation calls to use $gettext.

This commit is contained in:
Buster Neece 2022-12-16 17:10:16 -06:00
parent 16159489c8
commit 328a0433f3
No known key found for this signature in database
GPG Key ID: F1D2E64A0005E80E
133 changed files with 1315 additions and 1188 deletions

View File

@ -1,16 +1,14 @@
<template>
<div>
<h2 class="outside-card-header mb-1">
<translate key="hdr">My Account</translate>
{{ $gettext('My Account') }}
</h2>
<b-row>
<b-col sm="12" md="6" lg="5">
<section class="card mb-3" role="region">
<b-card-header header-bg-variant="primary-dark">
<h2 class="card-title">
<translate key="lang_hdr_profile">Profile</translate>
</h2>
<h2 class="card-title">{{ $gettext('Profile') }}</h2>
</b-card-header>
<b-overlay variant="card" :show="userLoading">
@ -23,7 +21,7 @@
<h2 v-if="user.name" class="card-title">{{ user.name }}</h2>
<h2 v-else class="card-title">
<translate key="lang_no_username">AzuraCast User</translate>
{{ $gettext('AzuraCast User') }}
</h2>
<h3 class="card-subtitle">{{ user.email }}</h3>
@ -38,32 +36,27 @@
<div class="card-actions">
<b-button variant="outline-primary" @click.prevent="doEditProfile">
<icon icon="edit"></icon>
<translate key="lang_btn_edit_profile">Edit Profile</translate>
{{ $gettext('Edit Profile') }}
</b-button>
</div>
</section>
<section class="card" role="region">
<b-card-header header-bg-variant="primary-dark">
<h2 class="card-title">
<translate key="lang_hdr_security">Security</translate>
</h2>
<h2 class="card-title">{{ $gettext('Security') }}</h2>
</b-card-header>
<b-overlay variant="card" :show="securityLoading">
<b-card-body>
<h5>
<translate key="lang_two_factor">Two-Factor Authentication</translate>
<span v-if="security.twoFactorEnabled" class="badge badge-success">
<translate key="lang_enabled">Enabled</translate>
</span>
<span v-else class="badge badge-danger">
<translate key="lang_disabled">Disabled</translate>
</span>
{{ $gettext('Two-Factor Authentication') }}
<enabled-badge :enabled="security.twoFactorEnabled"></enabled-badge>
</h5>
<p class="card-text mt-2">
<translate key="lang_two_factor_info">Two-factor authentication improves the security of your account by requiring a second one-time access code in addition to your password when you log in.</translate>
{{
$gettext('Two-factor authentication improves the security of your account by requiring a second one-time access code in addition to your password when you log in.')
}}
</p>
</b-card-body>
</b-overlay>
@ -71,16 +64,16 @@
<div class="card-actions">
<b-button variant="outline-primary" @click.prevent="doChangePassword">
<icon icon="vpn_key"></icon>
<translate key="lang_btn_change_password">Change Password</translate>
{{ $gettext('Change Password') }}
</b-button>
<b-button v-if="security.twoFactorEnabled" variant="outline-danger"
@click.prevent="disableTwoFactor">
<icon icon="lock_open"></icon>
<translate key="lang_btn_disable_two_factor">Disable Two-Factor</translate>
{{ $gettext('Disable Two-Factor') }}
</b-button>
<b-button v-else variant="outline-success" @click.prevent="enableTwoFactor">
<icon icon="lock"></icon>
<translate key="lang_btn_enable_two_factor">Enable Two-Factor</translate>
{{ $gettext('Enable Two-Factor') }}
</b-button>
</div>
</section>
@ -88,22 +81,22 @@
<b-col sm="12" md="6" lg="7">
<b-card no-body>
<b-card-header header-bg-variant="primary-dark">
<h2 class="card-title">
<translate key="lang_hdr_api_keys">API Keys</translate>
</h2>
<h2 class="card-title">{{ $gettext('API Keys') }}</h2>
</b-card-header>
<info-card>
<translate key="lang_api_keys_info">Use API keys to authenticate with the AzuraCast API using the same permissions as your user account.</translate>
{{
$gettext('Use API keys to authenticate with the AzuraCast API using the same permissions as your user account.')
}}
<a href="/api" target="_blank">
<translate key="lang_api_keys_docs_link">API Documentation</translate>
{{ $gettext('API Documentation') }}
</a>
</info-card>
<b-card-body body-class="card-padding-sm">
<b-button variant="outline-primary" @click.prevent="createApiKey">
<icon icon="add"></icon>
<translate key="lang_add_btn">Add API Key</translate>
{{ $gettext('Add API Key') }}
</b-button>
</b-card-body>
@ -112,7 +105,7 @@
<template #cell(actions)="row">
<b-button-group size="sm">
<b-button size="sm" variant="danger" @click.prevent="deleteApiKey(row.item.links.self)">
<translate key="lang_btn_delete">Delete</translate>
{{ $gettext('Delete') }}
</b-button>
</b-button-group>
</template>
@ -143,10 +136,12 @@ import AccountTwoFactorModal from "./Account/TwoFactorModal";
import AccountEditModal from "./Account/EditModal";
import Avatar from "~/components/Common/Avatar";
import InfoCard from "~/components/Common/InfoCard";
import EnabledBadge from "~/components/Stations/Profile/Common/EnabledBadge.vue";
export default {
name: 'Account',
components: {
EnabledBadge,
AccountEditModal,
AccountTwoFactorModal,
AccountApiKeyModal,

View File

@ -7,8 +7,8 @@
<b-form v-if="newKey === null" class="form vue-form" @submit.prevent="doSubmit">
<b-form-fieldset>
<b-wrapped-form-group id="form_comments" :field="v$.form.comment" autofocus>
<template #label="{lang}">
<translate :key="lang">API Key Description/Comments</translate>
<template #label>
{{ $gettext('API Key Description/Comments') }}
</template>
</b-wrapped-form-group>
</b-form-fieldset>
@ -24,11 +24,11 @@
<template #modal-footer="slotProps">
<slot name="modal-footer" v-bind="slotProps">
<b-button variant="default" type="button" @click="close">
<translate key="lang_btn_close">Close</translate>
{{ $gettext('Close') }}
</b-button>
<b-button v-if="newKey === null" :variant="(v$.$invalid) ? 'danger' : 'primary'" type="submit"
@click="doSubmit">
<translate key="lang_btn_create_key">Create New Key</translate>
{{ $gettext('Create New Key') }}
</b-button>
</slot>
</template>

View File

@ -1,18 +1,14 @@
<template>
<div>
<h3 class="card-subtitle">
<translate key="lang_hdr_new_key">New Key Generated</translate>
</h3>
<h3 class="card-subtitle">{{ $gettext('New Key Generated') }}</h3>
<p class="card-text">
<b>
<translate key="new_api_key_1">Important: copy the key below before continuing!</translate>
</b>
<translate key="new_api_key_2">You will not be able to retrieve it again.</translate>
<b>{{ $gettext('Important: copy the key below before continuing!') }}</b>
{{ $gettext('You will not be able to retrieve it again.') }}
</p>
<p class="card-text">
<translate key="new_api_key_3">Your full API key is below:</translate>
{{ $gettext('Your full API key is below:') }}
</p>
<div class="px-2">
@ -23,11 +19,12 @@
</div>
<p class="card-text pt-3">
<translate key="new_api_key_4">When making API calls, you can pass this value in the "X-API-Key" header to authenticate as yourself.</translate>
{{
$gettext('When making API calls, you can pass this value in the "X-API-Key" header to authenticate as yourself.')
}}
</p>
<p class="card-text">
<translate
key="new_api_key_5">You can only perform the actions your user account is allowed to perform.</translate>
{{ $gettext('You can only perform the actions your user account is allowed to perform.') }}
</p>
</div>
</template>

View File

@ -4,20 +4,20 @@
<b-form-fieldset>
<b-wrapped-form-group id="form_current_password" :field="v$.form.current_password"
input-type="password" autofocus>
<template #label="{lang}">
<translate :key="lang">Current Password</translate>
<template #label>
{{ $gettext('Current Password') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group id="form_new_password" :field="v$.form.new_password" input-type="password">
<template #label="{lang}">
<translate :key="lang">New Password</translate>
<template #label>
{{ $gettext('New Password') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group id="form_current_password" :field="v$.form.new_password2" input-type="password">
<template #label="{lang}">
<translate :key="lang">Confirm New Password</translate>
<template #label>
{{ $gettext('Confirm New Password') }}
</template>
</b-wrapped-form-group>
</b-form-fieldset>

View File

@ -3,14 +3,14 @@
<b-form-fieldset>
<b-form-row>
<b-wrapped-form-group class="col-md-6" id="form_name" :field="form.name">
<template #label="{lang}">
<translate :key="lang">Name</translate>
<template #label>
{{ $gettext('Name') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="form_email" :field="form.email">
<template #label="{lang}">
<translate :key="lang">E-mail Address</translate>
<template #label>
{{ $gettext('E-mail Address') }}
</template>
</b-wrapped-form-group>
</b-form-row>
@ -18,15 +18,15 @@
<b-form-fieldset>
<template #label>
<translate key="lang_hdr_customize">Customization</translate>
{{ $gettext('Customization') }}
</template>
<b-form-row>
<b-col md="6">
<b-wrapped-form-group id="edit_form_locale"
:field="form.locale">
<template #label="{lang}">
<translate :key="lang">Language</translate>
<template #label>
{{ $gettext('Language') }}
</template>
<template #default="props">
<b-form-radio-group stacked :id="props.id" :options="localeOptions"
@ -38,8 +38,8 @@
<b-col md="6">
<b-wrapped-form-group id="edit_form_theme"
:field="form.theme">
<template #label="{lang}">
<translate :key="lang">Site Theme</translate>
<template #label>
{{ $gettext('Site Theme') }}
</template>
<template #default="props">
<b-form-radio-group stacked :id="props.id" :options="themeOptions"
@ -50,8 +50,8 @@
<b-wrapped-form-group id="edit_form_show_24_hour_time"
:field="form.show_24_hour_time">
<template #label="{lang}">
<translate :key="lang">Time Display</translate>
<template #label>
{{ $gettext('Time Display') }}
</template>
<template #default="props">
<b-form-radio-group stacked :id="props.id" :options="show24hourOptions"

View File

@ -4,29 +4,33 @@
<b-row>
<b-col md="7">
<h5 class="mt-2">
<translate key="lang_2fa_hdr_1">Step 1: Scan QR Code</translate>
</h5>
<h5 class="mt-2">{{ $gettext('Step 1: Scan QR Code') }}</h5>
<p class="card-text">
<translate key="lang_2fa_1">From your smartphone, scan the code to the right using an authentication app of your choice (FreeOTP, Authy, etc).</translate>
{{
$gettext('From your smartphone, scan the code to the right using an authentication app of your choice (FreeOTP, Authy, etc).')
}}
</p>
<h5 class="mt-0">
<translate key="lang_2fa_hdr_2">Step 2: Verify Generated Code</translate>
{{ $gettext('Step 2: Verify Generated Code') }}
</h5>
<p class="card-text">
<translate key="lang_2fa_2">To verify that the code was set up correctly, enter the 6-digit code the app shows you.</translate>
{{
$gettext('To verify that the code was set up correctly, enter the 6-digit code the app shows you.')
}}
</p>
<b-form-fieldset>
<b-wrapped-form-group id="form_otp" :field="v$.form.otp" autofocus>
<template #label="{lang}">
<translate :key="lang">Code from Authenticator App</translate>
<template #label>
{{ $gettext('Code from Authenticator App') }}
</template>
<template #description="{lang}">
<translate :key="lang">Enter the current code provided by your authenticator app to verify that it's working correctly.</translate>
<template #description>
{{
$gettext('Enter the current code provided by your authenticator app to verify that it\'s working correctly.')
}}
</template>
</b-wrapped-form-group>
</b-form-fieldset>
@ -43,9 +47,7 @@
</b-col>
</b-row>
<template #save-button-name>
<translate key="lang_btn_submit">Submit Code</translate>
</template>
<template #save-button-name>{{ $gettext('Submit Code') }}</template>
</modal-form>
</template>

View File

@ -1,9 +1,7 @@
<template>
<section class="card" role="region">
<b-card-header header-bg-variant="primary-dark">
<h2 class="card-title">
<translate key="lang_hdr">API Keys</translate>
</h2>
<h2 class="card-title">{{ $gettext('API Keys') }}</h2>
</b-card-header>
<data-table ref="datatable" id="api_keys" :fields="fields" :api-url="apiUrl">
@ -13,7 +11,7 @@
<template #cell(actions)="row">
<b-button-group size="sm">
<b-button size="sm" variant="danger" @click.prevent="doDelete(row.item.links.self)">
<translate key="lang_btn_delete">Delete</translate>
{{ $gettext('Delete') }}
</b-button>
</b-button-group>
</template>

View File

@ -3,7 +3,7 @@
<div class="card-header bg-primary-dark">
<div class="d-flex align-items-center">
<h2 class="card-title flex-fill my-0">
<translate key="lang_title">Audit Log</translate>
{{ $gettext('Audit Log') }}
</h2>
<div class="flex-shrink">
<date-range-dropdown v-model="dateRange" @update="relist"></date-range-dropdown>
@ -35,14 +35,12 @@
<small>{{ row.item.target_class }}</small><br>
{{ row.item.target }}
</template>
<template v-else>
<translate key="lang_target_not_available">N/A</translate>
</template>
<template v-else>{{ $gettext('N/A') }}</template>
</template>
<template #cell(actions)="row">
<template v-if="row.item.changes.length > 0">
<b-button size="sm" variant="primary" @click="row.toggleDetails">
<translate key="lang_changes_btn">Changes</translate>
{{ $gettext('Changes') }}
</b-button>
</template>
</template>
@ -55,15 +53,9 @@
</colgroup>
<thead>
<tr>
<th>
<translate key="lang_col_field">Field Name</translate>
</th>
<th>
<translate key="lang_col_previous">Previous</translate>
</th>
<th>
<translate key="lang_col_updated">Updated</translate>
</th>
<th>{{ $gettext('Field Name') }}</th>
<th>{{ $gettext('Previous') }}</th>
<th>{{ $gettext('Updated') }}</th>
</tr>
</thead>
<tbody>

View File

@ -1,31 +1,24 @@
<template>
<div>
<h2 class="outside-card-header mb-1">
<translate key="hdr">Backups</translate>
</h2>
<h2 class="outside-card-header mb-1">{{ $gettext('Backups') }}</h2>
<div class="card-deck">
<section class="card mb-3" role="region">
<b-card-header header-bg-variant="primary-dark">
<h2 class="card-title">
<translate key="lang_hdr_auto_backups">Automatic Backups</translate>
<small v-if="settings.backupEnabled" class="badge badge-success">
<translate key="lang_hdr_backups_enabled">Enabled</translate>
</small>
<small v-else class="badge badge-danger">
<translate key="lang_hdr_backups_disabled">Disabled</translate>
</small>
{{ $gettext('Automatic Backups') }}
<enabled-badge :enabled="settings.backupEnabled"></enabled-badge>
</h2>
</b-card-header>
<b-overlay variant="card" :show="settingsLoading">
<div v-if="settings.backupEnabled" class="card-body">
<p v-if="settings.backupLastRun > 0" class="card-text">
<translate key="lang_backup_last_run">Last run:</translate>
{{ $gettext('Last run:') }}
{{ toRelativeTime(settings.backupLastRun) }}
</p>
<p v-else class="card-text">
<translate key="lang_backup_never_run">Never run</translate>
{{ $gettext('Never run') }}
</p>
</div>
</b-overlay>
@ -33,12 +26,12 @@
<div class="card-actions">
<b-button variant="outline-primary" @click.prevent="doConfigure">
<icon icon="settings"></icon>
<translate key="lang_btn_configure">Configure</translate>
{{ $gettext('Configure') }}
</b-button>
<b-button v-if="settings.backupEnabled && settings.backupLastOutput !== ''"
variant="outline-secondary" @click.prevent="showLastOutput">
<icon icon="assignment"></icon>
<translate key="lang_btn_last_backup">Most Recent Backup Log</translate>
{{ $gettext('Most Recent Backup Log') }}
</b-button>
</div>
</section>
@ -46,20 +39,22 @@
<section class="card mb-3" role="region">
<b-card-header header-bg-variant="primary-dark">
<h2 class="card-title">
<translate key="lang_hdr_restoring_backups">Restoring Backups</translate>
{{ $gettext('Restoring Backups') }}
</h2>
</b-card-header>
<div class="card-body">
<p class="card-text">
<translate key="lang_restore_1">To restore a backup from your host computer, run:</translate>
{{ $gettext('To restore a backup from your host computer, run:') }}
</p>
<pre v-if="isDocker"><code>./docker.sh restore path_to_backup.zip</code></pre>
<pre v-else><code>/var/azuracast/www/bin/console azuracast:restore path_to_backup.zip</code></pre>
<p class="card-text text-warning">
<translate key="lang_restore_2">Note that restoring a backup will clear your existing database. Never restore backup files from untrusted users.</translate>
{{
$gettext('Note that restoring a backup will clear your existing database. Never restore backup files from untrusted users.')
}}
</p>
</div>
</section>
@ -68,14 +63,14 @@
<section class="card mb-3" role="region">
<b-card-header header-bg-variant="primary-dark">
<h2 class="card-title">
<translate key="lang_hdr_existing_backups">Backups</translate>
{{ $gettext('Backups') }}
</h2>
</b-card-header>
<b-card-body body-class="card-padding-sm">
<b-button variant="outline-primary" @click.prevent="doRunBackup">
<icon icon="send"></icon>
<translate key="lang_btn_run_backup">Run Manual Backup</translate>
{{ $gettext('Run Manual Backup') }}
</b-button>
</b-card-body>
@ -89,10 +84,10 @@
<template #cell(actions)="row">
<b-button-group size="sm">
<b-button size="sm" variant="primary" :href="row.item.links.download" target="_blank">
<translate key="lang_btn_download">Download</translate>
{{ $gettext('Download') }}
</b-button>
<b-button size="sm" variant="danger" @click.prevent="doDelete(row.item.links.delete)">
<translate key="lang_btn_delete">Delete</translate>
{{ $gettext('Delete') }}
</b-button>
</b-button-group>
</template>
@ -120,10 +115,14 @@ import {DateTime} from 'luxon';
import formatFileSize from "~/functions/formatFileSize";
import AdminBackupsConfigureModal from "~/components/Admin/Backups/ConfigureModal";
import AdminBackupsRunBackupModal from "~/components/Admin/Backups/RunBackupModal";
import EnabledBadge from "~/components/Stations/Profile/Common/EnabledBadge.vue";
export default {
name: 'AdminBackups',
components: {AdminBackupsRunBackupModal, AdminBackupsConfigureModal, AdminBackupsLastOutputModal, DataTable, Icon},
components: {
EnabledBadge,
AdminBackupsRunBackupModal, AdminBackupsConfigureModal, AdminBackupsLastOutputModal, DataTable, Icon
},
props: {
listUrl: String,
settingsUrl: String,

View File

@ -6,10 +6,10 @@
<b-wrapped-form-checkbox class="col-md-12" id="form_edit_backup_enabled"
:field="v$.form.backup_enabled">
<template #label="{lang}">
<translate :key="lang">Run Automatic Nightly Backups</translate>
{{ $gettext('Run Automatic Nightly Backups') }}
</template>
<template #description="{lang}">
<translate :key="lang">Enable to have AzuraCast automatically run nightly backups at the time specified.</translate>
{{ $gettext('Enable to have AzuraCast automatically run nightly backups at the time specified.') }}
</template>
</b-wrapped-form-checkbox>
</b-form-row>
@ -17,10 +17,10 @@
<b-form-row v-if="v$.form.backup_enabled.$model">
<b-wrapped-form-group class="col-md-6" id="form_backup_time_code" :field="v$.form.backup_time_code">
<template #label="{lang}">
<translate :key="lang">Scheduled Backup Time</translate>
{{ $gettext('Scheduled Backup Time') }}
</template>
<template #description="{lang}">
<translate :key="lang">If the end time is before the start time, the playlist will play overnight.</translate>
{{ $gettext('If the end time is before the start time, the playlist will play overnight.') }}
</template>
<template #default="props">
<time-code :id="props.id" v-model="props.field.$model" :state="props.state"></time-code>
@ -30,27 +30,27 @@
<b-wrapped-form-checkbox class="col-md-6" id="form_edit_exclude_media"
:field="v$.form.backup_exclude_media">
<template #label="{lang}">
<translate :key="lang">Exclude Media from Backup</translate>
{{ $gettext('Exclude Media from Backup') }}
</template>
<template #description="{lang}">
<translate :key="lang">Excluding media from automated backups will save space, but you should make sure to back up your media elsewhere. Note that only locally stored media will be backed up.</translate>
{{ $gettext('Excluding media from automated backups will save space, but you should make sure to back up your media elsewhere. Note that only locally stored media will be backed up.') }}
</template>
</b-wrapped-form-checkbox>
<b-wrapped-form-group class="col-md-6" id="form_backup_keep_copies" :field="v$.form.backup_keep_copies"
input-type="number" :input-attrs="{min: '0', max: '365'}">
<template #label="{lang}">
<translate :key="lang">Number of Backup Copies to Keep</translate>
{{ $gettext('Number of Backup Copies to Keep') }}
</template>
<template #description="{lang}">
<translate :key="lang">Copies older than the specified number of days will automatically be deleted. Set to zero to disable automatic deletion.</translate>
{{ $gettext('Copies older than the specified number of days will automatically be deleted. Set to zero to disable automatic deletion.') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_backup_storage_location"
:field="v$.form.backup_storage_location">
<template #label="{lang}">
<translate :key="lang">Storage Location</translate>
{{ $gettext('Storage Location') }}
</template>
<template #default="props">
<b-form-select :id="props.id" v-model="props.field.$model"
@ -60,7 +60,7 @@
<b-wrapped-form-group class="col-md-6" id="edit_form_backup_format" :field="v$.form.backup_format">
<template #label="{lang}">
<translate :key="lang">Backup Format</translate>
{{ $gettext('Backup Format') }}
</template>
<template #default="props">
<b-form-radio-group stacked :id="props.id" v-model="props.field.$model"

View File

@ -10,7 +10,7 @@
<b-wrapped-form-group class="col-md-12" id="edit_form_storage_location"
:field="v$.form.storage_location">
<template #label="{lang}">
<translate :key="lang">Storage Location</translate>
{{ $gettext('Storage Location') }}
</template>
<template #default="props">
<b-form-select :id="props.id" v-model="props.field.$model"
@ -21,20 +21,20 @@
<b-wrapped-form-group class="col-md-12" id="edit_form_path"
:field="v$.form.path">
<template #label="{lang}">
<translate :key="lang">File Name</translate>
{{ $gettext('File Name') }}
</template>
<template #description="{lang}">
<translate :key="lang">This will be the file name for your backup, include the extension for file type you wish to use.</translate>
{{ $gettext('This will be the file name for your backup, include the extension for file type you wish to use.') }}
<br>
<strong>
<translate :key="lang+'2'">Supported file formats:</translate>
{{ $gettext('Supported file formats:') }}
</strong>
<br>
<ul class="m-0">
<li>.zip</li>
<li>.tar.gz</li>
<li>.tzst (
<translate :key="lang+'zstd'">ZStandard compression</translate>
{{ $gettext('ZStandard compression') }}
)
</li>
</ul>
@ -44,10 +44,10 @@
<b-wrapped-form-checkbox class="col-md-12" id="edit_form_exclude_media"
:field="v$.form.exclude_media">
<template #label="{lang}">
<translate :key="lang">Exclude Media from Backup</translate>
{{ $gettext('Exclude Media from Backup') }}
</template>
<template #description="{lang}">
<translate :key="lang">This will produce a significantly smaller backup, but you should make sure to back up your media elsewhere. Note that only locally stored media will be backed up.</translate>
{{ $gettext('This will produce a significantly smaller backup, but you should make sure to back up your media elsewhere. Note that only locally stored media will be backed up.') }}
</template>
</b-wrapped-form-checkbox>
</b-form-row>
@ -64,11 +64,11 @@
<template #modal-footer="slotProps">
<slot name="modal-footer" v-bind="slotProps">
<b-button variant="default" type="button" @click="close">
<translate key="lang_btn_close">Close</translate>
{{ $gettext('Close') }}
</b-button>
<b-button v-if="logUrl === null" :variant="(v$.form.$invalid) ? 'danger' : 'primary'" type="submit"
@click="submit">
<translate key="lang_btn_run_backup">Run Manual Backup</translate>
{{ $gettext('Run Manual Backup') }}
</b-button>
</slot>
</template>

View File

@ -1,13 +1,13 @@
<template>
<div>
<h2 class="outside-card-header mb-1">
<translate key="lang_header">Custom Branding</translate>
{{ $gettext('Custom Branding') }}
</h2>
<section class="card mb-3" role="region">
<div class="card-header bg-primary-dark">
<h2 class="card-title">
<translate key="lang_custom_assets">Upload Custom Assets</translate>
{{ $gettext('Upload Custom Assets') }}
</h2>
</div>
<div class="card-body">

View File

@ -3,7 +3,7 @@
<section class="card mb-3" role="region">
<div class="card-header bg-primary-dark">
<h2 class="card-title">
<translate key="lang_header_branding_settings">Branding Settings</translate>
{{ $gettext('Branding Settings') }}
</h2>
</div>
@ -16,10 +16,12 @@
<b-wrapped-form-group class="col-md-6" id="edit_form_public_theme"
:field="v$.form.public_theme">
<template #label="{lang}">
<translate :key="lang">Base Theme for Public Pages</translate>
{{ $gettext('Base Theme for Public Pages') }}
</template>
<template #description="{lang}">
<translate :key="lang">Select a theme to use as a base for station public pages and the login page.</translate>
{{
$gettext('Select a theme to use as a base for station public pages and the login page.')
}}
</template>
<template #default="props">
<b-form-radio-group stacked :id="props.id" :options="publicThemeOptions"
@ -32,20 +34,24 @@
<b-wrapped-form-checkbox class="mb-2" id="form_edit_hide_album_art"
:field="v$.form.hide_album_art">
<template #label="{lang}">
<translate :key="lang">Hide Album Art on Public Pages</translate>
{{ $gettext('Hide Album Art on Public Pages') }}
</template>
<template #description="{lang}">
<translate :key="lang">If selected, album art will not display on public-facing radio pages.</translate>
{{
$gettext('If selected, album art will not display on public-facing radio pages.')
}}
</template>
</b-wrapped-form-checkbox>
<b-wrapped-form-checkbox id="form_edit_hide_product_name"
:field="v$.form.hide_product_name">
<template #label="{lang}">
<translate :key="lang">Hide AzuraCast Branding on Public Pages</translate>
{{ $gettext('Hide AzuraCast Branding on Public Pages') }}
</template>
<template #description="{lang}">
<translate :key="lang">If selected, this will remove the AzuraCast branding from public-facing pages.</translate>
{{
$gettext('If selected, this will remove the AzuraCast branding from public-facing pages.')
}}
</template>
</b-wrapped-form-checkbox>
</b-col>
@ -53,30 +59,36 @@
<b-wrapped-form-group class="col-md-6" id="form_edit_homepage_redirect_url"
:field="v$.form.homepage_redirect_url">
<template #label="{lang}">
<translate :key="lang">Homepage Redirect URL</translate>
{{ $gettext('Homepage Redirect URL') }}
</template>
<template #description="{lang}">
<translate :key="lang">If a visitor is not signed in and visits the AzuraCast homepage, you can automatically redirect them to the URL specified here. Leave blank to redirect them to the login screen by default.</translate>
{{
$gettext('If a visitor is not signed in and visits the AzuraCast homepage, you can automatically redirect them to the URL specified here. Leave blank to redirect them to the login screen by default.')
}}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="form_edit_default_album_art_url"
:field="v$.form.default_album_art_url">
<template #label="{lang}">
<translate :key="lang">Default Album Art URL</translate>
{{ $gettext('Default Album Art URL') }}
</template>
<template #description="{lang}">
<translate :key="lang">If a song has no album art, this URL will be listed instead. Leave blank to use the standard placeholder art.</translate>
{{
$gettext('If a song has no album art, this URL will be listed instead. Leave blank to use the standard placeholder art.')
}}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-12" id="edit_form_public_custom_css"
:field="v$.form.public_custom_css">
<template #label="{lang}">
<translate :key="lang">Custom CSS for Public Pages</translate>
{{ $gettext('Custom CSS for Public Pages') }}
</template>
<template #description="{lang}">
<translate :key="lang">This CSS will be applied to the station public pages and login page.</translate>
{{
$gettext('This CSS will be applied to the station public pages and login page.')
}}
</template>
<template #default="props">
<codemirror-textarea :id="props.id" mode="css"
@ -87,10 +99,12 @@
<b-wrapped-form-group class="col-md-12" id="edit_form_public_custom_js"
:field="v$.form.public_custom_js">
<template #label="{lang}">
<translate :key="lang">Custom JS for Public Pages</translate>
{{ $gettext('Custom JS for Public Pages') }}
</template>
<template #description="{lang}">
<translate :key="lang">This javascript code will be applied to the station public pages and login page.</translate>
{{
$gettext('This javascript code will be applied to the station public pages and login page.')
}}
</template>
<template #default="props">
<codemirror-textarea :id="props.id" mode="javascript"
@ -101,10 +115,12 @@
<b-wrapped-form-group class="col-md-12" id="edit_form_internal_custom_css"
:field="v$.form.internal_custom_css">
<template #label="{lang}">
<translate :key="lang">Custom CSS for Internal Pages</translate>
{{ $gettext('Custom CSS for Internal Pages') }}
</template>
<template #description="{lang}">
<translate :key="lang">This CSS will be applied to the main management pages, like this one.</translate>
{{
$gettext('This CSS will be applied to the main management pages, like this one.')
}}
</template>
<template #default="props">
<codemirror-textarea :id="props.id" mode="css"
@ -114,7 +130,7 @@
</b-form-row>
<b-button size="lg" type="submit" class="mt-3" variant="primary">
<translate key="lang_btn_save_changes">Save Changes</translate>
{{ $gettext('Save Changes') }}
</b-button>
</b-form-group>
</div>

View File

@ -11,7 +11,7 @@
<b-form-file :id="id" v-model="file" accept="image/*"></b-form-file>
</b-form-group>
<b-button v-if="isUploaded" variant="outline-danger" @click.prevent="clear()">
<translate key="lang_btn_reset">Clear Image</translate>
{{ $gettext('Clear Image') }}
</b-button>
</b-overlay>
</b-media>

View File

@ -3,28 +3,34 @@
<b-form-row>
<b-wrapped-form-group class="col-md-6" id="edit_form_name" :field="form.name">
<template #label="{lang}">
<translate :key="lang">Field Name</translate>
{{ $gettext('Field Name') }}
</template>
<template #description="{lang}">
<translate :key="lang">This will be used as the label when editing individual songs, and will show in API results.</translate>
{{
$gettext('This will be used as the label when editing individual songs, and will show in API results.')
}}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_short_name" :field="form.short_name">
<template #label="{lang}">
<translate :key="lang">Programmatic Name</translate>
{{ $gettext('Programmatic Name') }}
</template>
<template #description="{lang}">
<translate :key="lang">Optionally specify an API-friendly name, such as "field_name". Leave this field blank to automatically create one based on the name.</translate>
{{
$gettext('Optionally specify an API-friendly name, such as "field_name". Leave this field blank to automatically create one based on the name.')
}}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_auto_assign" :field="form.auto_assign">
<template #label="{lang}">
<translate :key="lang">Automatically Set from ID3v2 Value</translate>
{{ $gettext('Automatically Set from ID3v2 Value') }}
</template>
<template #description="{lang}">
<translate :key="lang">Optionally select an ID3v2 metadata field that, if present, will be used to set this field's value.</translate>
{{
$gettext('Optionally select an ID3v2 metadata field that, if present, will be used to set this field\'s value.')
}}
</template>
<template #default="props">
<b-form-select :id="props.id" v-model="props.field.$model"

View File

@ -2,12 +2,14 @@
<div class="card">
<div class="card-header bg-primary-dark">
<h2 class="card-title">
<translate key="lang_title">Install GeoLite IP Database</translate>
{{ $gettext('Install GeoLite IP Database') }}
</h2>
</div>
<info-card>
<translate key="lang_info_card">IP Geolocation is used to guess the approximate location of your listeners based on the IP address they connect with. Use the free built-in IP Geolocation library or enter a license key on this page to use MaxMind GeoLite.</translate>
{{
$gettext('IP Geolocation is used to guess the approximate location of your listeners based on the IP address they connect with. Use the free built-in IP Geolocation library or enter a license key on this page to use MaxMind GeoLite.')
}}
</info-card>
<div class="card-body">
@ -15,33 +17,32 @@
<b-form-row>
<div class="col-md-7">
<fieldset>
<legend>
<translate key="lang_instructions">Instructions</translate>
</legend>
<legend>{{ $gettext('Instructions') }}</legend>
<p class="card-text">
<translate key="lang_instructions_1a">AzuraCast ships with a built-in free IP geolocation database. You may prefer to use the MaxMind GeoLite service instead to achieve more accurate results. Using MaxMind GeoLite requires a license key, but once the key is provided, we will automatically keep the database updated.</translate>
{{
$gettext('AzuraCast ships with a built-in free IP geolocation database. You may prefer to use the MaxMind GeoLite service instead to achieve more accurate results. Using MaxMind GeoLite requires a license key, but once the key is provided, we will automatically keep the database updated.')
}}
</p>
<p class="card-text">
<translate key="lang_instructions_1b">To download the GeoLite database:</translate>
{{ $gettext('To download the GeoLite database:') }}
</p>
<ul>
<li>
<translate
key="lang_instructions_2">Create an account on the MaxMind developer site.</translate>
{{ $gettext('Create an account on the MaxMind developer site.') }}
<br>
<a href="https://www.maxmind.com/en/geolite2/signup" target="_blank">
<translate key="lang_instructions_2_link">MaxMind Developer Site</translate>
{{ $gettext('MaxMind Developer Site') }}
</a>
</li>
<li>
<translate key="lang_instructions_3">Visit the "My License Key" page under the "Services" section.</translate>
{{ $gettext('Visit the "My License Key" page under the "Services" section.') }}
</li>
<li>
<translate key="lang_instructions_4">Click "Generate new license key".</translate>
{{ $gettext('Click "Generate new license key".') }}
</li>
<li>
<translate key="lang_instructions_5">Paste the generated license key into the field on this page.</translate>
{{ $gettext('Paste the generated license key into the field on this page.') }}
</li>
</ul>
</fieldset>
@ -49,15 +50,14 @@
<div class="col-md-5">
<fieldset class="mb-3">
<legend>
<translate key="lang_current_version">Current Installed Version</translate>
{{ $gettext('Current Installed Version') }}
</legend>
<p v-if="version" class="text-success card-text">
{{ langInstalledVersion }}
</p>
<p v-else class="text-danger card-text">
<translate
key="lang_not_installed">GeoLite is not currently installed on this installation.</translate>
{{ $gettext('GeoLite is not currently installed on this installation.') }}
</p>
</fieldset>
@ -65,17 +65,17 @@
<fieldset>
<b-wrapped-form-group id="edit_form_key" :field="v$.key">
<template #label>
<translate key="lang_edit_form_key">MaxMind License Key</translate>
{{ $gettext('MaxMind License Key') }}
</template>
</b-wrapped-form-group>
</fieldset>
<div class="buttons">
<b-button variant="primary" type="submit">
<translate key="btn_save_changes">Save Changes</translate>
{{ $gettext('Save Changes') }}
</b-button>
<b-button variant="danger" type="button" @click.prevent="doDelete">
<translate key="btn_remove_key">Remove Key</translate>
{{ $gettext('Remove Key') }}
</b-button>
</div>
</form>

View File

@ -1,7 +1,7 @@
<template>
<div>
<h2 class="outside-card-header mb-1">
<translate key="lang_hdr_admin">Administration</translate>
{{ $gettext('Administration') }}
</h2>
<b-row>
@ -27,7 +27,7 @@
</b-row>
<h2 class="outside-card-header mb-1">
<translate key="lang_hdr_server_status">Server Status</translate>
{{ $gettext('Server Status') }}
</h2>
<b-row>
@ -36,7 +36,7 @@
<b-card-header header-bg-variant="primary-dark" class="d-flex align-items-center">
<div class="flex-fill">
<h2 class="card-title">
<translate key="lang_hdr_memory">Memory</translate>
{{ $gettext('Memory') }}
</h2>
</div>
@ -50,7 +50,7 @@
<b-card-body>
<h6 class="mb-1 text-center">
<translate key="lang_disk_header">Total RAM</translate>
{{ $gettext('Total RAM') }}
:
{{ stats.memory.readable.total }}
</h6>
@ -65,12 +65,12 @@
<b-row>
<b-col>
<b-badge pill variant="primary">&nbsp;&nbsp;</b-badge>&nbsp;
<translate key="lang_memory_used">Used</translate>
{{ $gettext('Used') }}
: {{ stats.memory.readable.used }}
</b-col>
<b-col>
<b-badge pill variant="warning">&nbsp;&nbsp;</b-badge>&nbsp;
<translate key="lang_memory_cached">Cached</translate>
{{ $gettext('Cached') }}
: {{ stats.memory.readable.cached }}
</b-col>
</b-row>
@ -82,13 +82,13 @@
<b-card no-body>
<b-card-header header-bg-variant="primary-dark">
<h2 class="card-title">
<translate key="lang_hdr_disk_space">Disk Space</translate>
{{ $gettext('Disk Space') }}
</h2>
</b-card-header>
<b-card-body>
<h6 class="mb-1 text-center">
<translate key="lang_total_disk_space">Total Disk Space</translate>
{{ $gettext('Total Disk Space') }}
:
{{ stats.disk.readable.total }}
</h6>
@ -101,7 +101,7 @@
<b-row>
<b-col>
<b-badge pill variant="primary">&nbsp;&nbsp;</b-badge>&nbsp;
<translate key="lang_used_disk_space">Used</translate>
{{ $gettext('Used') }}
:
{{ stats.disk.readable.used }}
</b-col>
@ -117,7 +117,7 @@
<b-card-header header-bg-variant="primary-dark" class="d-flex align-items-center">
<div class="flex-fill">
<h2 class="card-title">
<translate key="lang_hdr_cpu_load">CPU Load</translate>
{{ $gettext('CPU Load') }}
</h2>
</div>
@ -142,17 +142,17 @@
<b-row>
<b-col>
<b-badge pill variant="danger">&nbsp;&nbsp;</b-badge>&nbsp;
<translate key="lang_cpu_steal">Steal</translate>
{{ $gettext('Steal') }}
: {{ stats.cpu.total.steal }}%
</b-col>
<b-col>
<b-badge pill variant="warning">&nbsp;&nbsp;</b-badge>&nbsp;
<translate key="lang_cpu_wait">Wait</translate>
{{ $gettext('Wait') }}
: {{ stats.cpu.total.io_wait }}%
</b-col>
<b-col>
<b-badge pill variant="primary">&nbsp;&nbsp;</b-badge>&nbsp;
<translate key="lang_cpu_use">Use</translate>
{{ $gettext('Use') }}
: {{ stats.cpu.total.usage }}%
</b-col>
</b-row>
@ -186,7 +186,7 @@
<b-card-footer>
<h6 class="mb-1 text-center">
<translate key="lang_cpu_average">Load Average</translate>
{{ $gettext('Load Average') }}
</h6>
<b-row class="text-center" no-gutters>
<b-col>
@ -211,7 +211,7 @@
<b-card-header header-bg-variant="primary-dark" class="d-flex align-items-center">
<div class="flex-fill">
<h2 class="card-title">
<translate key="lang_hdr_services">Services</translate>
{{ $gettext('Services') }}
</h2>
</div>
</b-card-header>
@ -248,7 +248,7 @@
<b-button-group size="sm" v-if="service.links.restart">
<b-button size="sm" :variant="service.running ? 'bg' : 'danger'"
@click.prevent="doRestart(service.links.restart)">
<translate key="lang_btn_restart">Restart</translate>
{{ $gettext('Restart') }}
</b-button>
</b-button-group>
</td>
@ -264,7 +264,7 @@
<b-card no-body>
<b-card-header header-bg-variant="primary-dark">
<h2 class="card-title">
<translate key="lang_hdr_network_interfaces">Network Interfaces</translate>
{{ $gettext('Network Interfaces') }}
</h2>
</b-card-header>
@ -274,7 +274,7 @@
<b-row class="mb-3">
<b-col class="mb-3">
<h5 class="mb-1 text-center">
<translate key="lang_net_received">Received</translate>
{{ $gettext('Received') }}
</h5>
<b-table striped responsive
:items="getNetworkInterfaceTableItems(netInterface.received)"
@ -283,7 +283,7 @@
</b-col>
<b-col>
<h5 class="mb-1 text-center">
<translate key="lang_net_transmitted">Transmitted</translate>
{{ $gettext('Transmitted') }}
</h5>
<b-table striped responsive
:items="getNetworkInterfaceTableItems(netInterface.transmitted)"

View File

@ -3,7 +3,7 @@
<div class="card mb-3">
<div class="card-header bg-primary-dark">
<h2 class="card-title">
<translate key="hdr_system_logs">System Logs</translate>
{{ $gettext('System Logs') }}
</h2>
</div>
@ -13,7 +13,7 @@
<div class="card" v-if="stationLogs.length > 0">
<div class="card-header bg-primary-dark">
<h2 class="card-title">
<translate key="hdr_logs_by_station">Logs by Station</translate>
{{ $gettext('Logs by Station') }}
</h2>
</div>

View File

@ -4,17 +4,17 @@
<b-form-row>
<b-wrapped-form-group class="col-md-12" id="edit_form_name" :field="form.name">
<template #label="{lang}">
<translate :key="lang">Role Name</translate>
{{ $gettext('Role Name') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-12" id="edit_form_global_permissions"
:field="form.permissions.global">
<template #label="{lang}">
<translate :key="lang">Global Permissions</translate>
{{ $gettext('Global Permissions') }}
</template>
<template #description="{lang}">
<translate :key="lang">Users with this role will have these permissions across the entire installation.</translate>
{{ $gettext('Users with this role will have these permissions across the entire installation.') }}
</template>
<template #default="props">
<b-form-checkbox-group :id="props.id" :options="globalPermissionOptions"

View File

@ -9,7 +9,7 @@
<b-button-group v-if="hasRemainingStations">
<b-dropdown size="sm" variant="outline-primary">
<template #button-content>
<translate key="lang_btn_add_station">Add Station</translate>
{{ $gettext('Add Station') }}
</template>
<div style="max-height: 300px; overflow-y: auto;">
<b-dropdown-item-button v-for="(stationName, stationId) in remainingStations" :key="stationId"

View File

@ -9,7 +9,7 @@
<div class="flex-shrink-0">
<b-button size="sm" variant="outline-light" class="py-2 pr-0" @click.prevent="$emit('remove')">
<icon icon="remove"></icon>
<translate key="lang_btn_remove">Remove</translate>
{{ $gettext('Remove') }}
</b-button>
</div>
</div>
@ -20,10 +20,10 @@
:id="'edit_form_station_permissions_'+row.station_id"
:field="v$.row.permissions">
<template #label="{lang}">
<translate :key="lang">Station Permissions</translate>
{{ $gettext('Station Permissions') }}
</template>
<template #description="{lang}">
<translate :key="lang">Users with this role will have these permissions for this single station.</translate>
{{ $gettext('Users with this role will have these permissions for this single station.') }}
</template>
<template #default="props">
<b-form-checkbox-group :id="props.id" :options="stationPermissionOptions"

View File

@ -6,7 +6,7 @@
<div class="card-header bg-primary-dark">
<h2 class="card-title">
<slot name="cardTitle">
<translate key="lang_settings">System Settings</translate>
{{ $gettext('System Settings') }}
</slot>
</h2>
</div>
@ -19,7 +19,7 @@
<b-tabs pills card lazy>
<b-tab :title-link-class="getTabClass(v$.$validationGroups.generalTab)">
<template #title>
<translate key="tab_general">Settings</translate>
{{ $gettext('Settings') }}
</template>
<settings-general-tab :form="v$.form"></settings-general-tab>
@ -27,7 +27,7 @@
<b-tab :title-link-class="getTabClass(v$.$validationGroups.securityPrivacyTab)">
<template #title>
<translate key="tab_security_privacy">Security & Privacy</translate>
{{ $gettext('Security & Privacy') }}
</template>
<settings-security-privacy-tab :form="v$.form"></settings-security-privacy-tab>
@ -35,7 +35,7 @@
<b-tab :title-link-class="getTabClass(v$.$validationGroups.servicesTab)">
<template #title>
<translate key="tab_services">Services</translate>
{{ $gettext('Services') }}
</template>
<settings-services-tab :form="v$.form"
@ -49,7 +49,7 @@
<b-card-body body-class="card-padding-sm">
<b-button size="lg" type="submit" :variant="(v$.form.$invalid) ? 'danger' : 'primary'">
<slot name="submitButtonName">
<translate key="lang_btn_save_changes">Save Changes</translate>
{{ $gettext('Save Changes') }}
</slot>
</b-button>
</b-card-body>

View File

@ -4,48 +4,58 @@
<b-wrapped-form-group class="col-md-6" id="edit_form_base_url" :field="form.base_url" input-type="url">
<template #label="{lang}">
<translate :key="lang">Site Base URL</translate>
{{ $gettext('Site Base URL') }}
</template>
<template #description="{lang}">
<translate :key="lang">The base URL where this service is located. Use either the external IP address or fully-qualified domain name (if one exists) pointing to this server.</translate>
{{
$gettext('The base URL where this service is located. Use either the external IP address or fully-qualified domain name (if one exists) pointing to this server.')
}}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_instance_name" :field="form.instance_name">
<template #label="{lang}">
<translate :key="lang">AzuraCast Instance Name</translate>
{{ $gettext('AzuraCast Instance Name') }}
</template>
<template #description="{lang}">
<translate :key="lang">This name will appear as a sub-header next to the AzuraCast logo, to help identify this server.</translate>
{{
$gettext('This name will appear as a sub-header next to the AzuraCast logo, to help identify this server.')
}}
</template>
</b-wrapped-form-group>
<b-wrapped-form-checkbox class="col-md-6" id="edit_form_prefer_browser_url"
:field="form.prefer_browser_url">
<template #label="{lang}">
<translate :key="lang">Prefer Browser URL (If Available)</translate>
{{ $gettext('Prefer Browser URL (If Available)') }}
</template>
<template #description="{lang}">
<translate :key="lang">If this setting is set to "Yes", the browser URL will be used instead of the base URL when it's available. Set to "No" to always use the base URL.</translate>
{{
$gettext('If this setting is set to "Yes", the browser URL will be used instead of the base URL when it\'s available. Set to "No" to always use the base URL.')
}}
</template>
</b-wrapped-form-checkbox>
<b-wrapped-form-checkbox class="col-md-6" id="edit_form_use_radio_proxy"
:field="form.use_radio_proxy">
<template #label="{lang}">
<translate :key="lang">Use Web Proxy for Radio</translate>
{{ $gettext('Use Web Proxy for Radio') }}
</template>
<template #description="{lang}">
<translate :key="lang">By default, radio stations broadcast on their own ports (i.e. 8000). If you're using a service like CloudFlare or accessing your radio station by SSL, you should enable this feature, which routes all radio through the web ports (80 and 443).</translate>
{{
$gettext('By default, radio stations broadcast on their own ports (i.e. 8000). If you\'re using a service like CloudFlare or accessing your radio station by SSL, you should enable this feature, which routes all radio through the web ports (80 and 443).')
}}
</template>
</b-wrapped-form-checkbox>
<b-wrapped-form-group class="col-md-6" id="edit_form_history_keep_days" :field="form.history_keep_days">
<template #label="{lang}">
<translate :key="lang">Days of Playback History to Keep</translate>
{{ $gettext('Days of Playback History to Keep') }}
</template>
<template #description="{lang}">
<translate :key="lang">Set longer to preserve more playback history and listener metadata for stations. Set shorter to save disk space.</translate>
{{
$gettext('Set longer to preserve more playback history and listener metadata for stations. Set shorter to save disk space.')
}}
</template>
<template #default="props">
<b-form-radio-group stacked :id="props.id" v-model="props.field.$model"
@ -56,20 +66,24 @@
<b-wrapped-form-checkbox class="col-md-6" id="edit_form_enable_static_nowplaying"
:field="form.enable_static_nowplaying">
<template #label="{lang}">
<translate :key="lang">Use High-Performance Now Playing Updates</translate>
{{ $gettext('Use High-Performance Now Playing Updates') }}
</template>
<template #description="{lang}">
<translate :key="lang">Uses either Websockets, Server-Sent Events (SSE) or static JSON files to serve Now Playing data on public pages. This improves performance, especially with large listener volume. Disable this if you are encountering problems with the service or use multiple URLs to serve your public pages.</translate>
{{
$gettext('Uses either Websockets, Server-Sent Events (SSE) or static JSON files to serve Now Playing data on public pages. This improves performance, especially with large listener volume. Disable this if you are encountering problems with the service or use multiple URLs to serve your public pages.')
}}
</template>
</b-wrapped-form-checkbox>
<b-wrapped-form-checkbox class="col-md-6" id="edit_form_enable_advanced_features"
:field="form.enable_advanced_features">
<template #label="{lang}">
<translate :key="lang">Enable Advanced Features</translate>
{{ $gettext('Enable Advanced Features') }}
</template>
<template #description="{lang}">
<translate :key="lang">Enable certain advanced features in the web interface, including advanced playlist configuration, station port assignment, changing base media directories and other functionality that should only be used by users who are comfortable with advanced functionality.</translate>
{{
$gettext('Enable certain advanced features in the web interface, including advanced playlist configuration, station port assignment, changing base media directories and other functionality that should only be used by users who are comfortable with advanced functionality.')
}}
</template>
</b-wrapped-form-checkbox>

View File

@ -2,38 +2,38 @@
<div>
<b-form-fieldset>
<template #label>
<translate key="lang_privacy_hdr">Privacy</translate>
{{ $gettext('Privacy') }}
</template>
<b-form-row>
<b-wrapped-form-group class="col-md-12" id="edit_form_analytics" :field="form.analytics">
<template #label="{lang}">
<translate :key="lang">Listener Analytics Collection</translate>
{{ $gettext('Listener Analytics Collection') }}
</template>
<template #description="{lang}">
<translate :key="lang">Aggregate listener statistics are used to show station reports across the system. IP-based listener statistics are used to view live listener tracking and may be required for royalty reports.</translate>
{{
$gettext('Aggregate listener statistics are used to show station reports across the system. IP-based listener statistics are used to view live listener tracking and may be required for royalty reports.')
}}
</template>
<template #default="props">
<b-form-radio-group stacked :id="props.id" v-model="props.field.$model">
<b-form-radio value="all">
<b>
<translate key="analytics_opt_full_title">Full:</translate>
{{ $gettext('Full:') }}
</b>
<translate key="analytics_opt_full_desc">Collect aggregate listener statistics and IP-based listener statistics</translate>
{{ $gettext('Collect aggregate listener statistics and IP-based listener statistics') }}
</b-form-radio>
<b-form-radio value="no_ip">
<b>
<translate key="analytics_opt_no_ip_title">Limited:</translate>
{{ $gettext('Limited:') }}
</b>
<translate
key="analytics_opt_no_ip_desc">Only collect aggregate listener statistics</translate>
{{ $gettext('Only collect aggregate listener statistics') }}
</b-form-radio>
<b-form-radio value="none">
<b>
<translate key="analytics_opt_none_title">None:</translate>
{{ $gettext('None:') }}
</b>
<translate
key="analytics_opt_none_desc">Do not collect any listener analytics</translate>
{{ $gettext('Do not collect any listener analytics') }}
</b-form-radio>
</b-form-radio-group>
</template>
@ -43,31 +43,35 @@
<b-form-fieldset>
<template #label>
<translate key="lang_security_hdr">Security</translate>
{{ $gettext('Security') }}
</template>
<b-form-row>
<b-wrapped-form-checkbox class="col-md-12" id="edit_form_always_use_ssl"
:field="form.always_use_ssl">
<template #label="{lang}">
<translate :key="lang">Always Use HTTPS</translate>
{{ $gettext('Always Use HTTPS') }}
</template>
<template #description="{lang}">
<translate :key="lang">Set to "Yes" to always use "https://" secure URLs, and to automatically redirect to the secure URL when an insecure URL is visited.</translate>
{{
$gettext('Set to "Yes" to always use "https://" secure URLs, and to automatically redirect to the secure URL when an insecure URL is visited.')
}}
</template>
</b-wrapped-form-checkbox>
<b-wrapped-form-group class="col-md-12" id="edit_form_api_access_control"
:field="form.api_access_control">
<template #label="{lang}">
<translate :key="lang">API "Access-Control-Allow-Origin" Header</translate>
{{ $gettext('API "Access-Control-Allow-Origin" Header') }}
</template>
<template #description="{lang}">
<translate :key="lang">Set to * to allow all sources, or specify a list of origins separated by a comma (,).</translate>
{{
$gettext('Set to * to allow all sources, or specify a list of origins separated by a comma (,).')
}}
<br>
<a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin"
target="_blank">
<translate :key="lang+'2'">Learn more about this header.</translate>
{{ $gettext('Learn more about this header.') }}
</a>
</template>
</b-wrapped-form-group>

View File

@ -2,18 +2,18 @@
<div>
<b-form-fieldset>
<template #label>
<translate key="lang_section_update_checks">AzuraCast Update Checks</translate>
{{ $gettext('AzuraCast Update Checks') }}
</template>
<b-form-row>
<b-form-markup class="col-md-6" id="form_release_channel">
<template #label="{lang}">
<translate :key="lang">Release Channel</translate>
{{ $gettext('Release Channel') }}
</template>
<template #description="{lang}">
<a href="https://docs.azuracast.com/en/getting-started/updates/release-channels"
target="_blank">
<translate :key="lang">Learn more about release channels in the AzuraCast docs.</translate>
{{ $gettext('Learn more about release channels in the AzuraCast docs.') }}
</a>
</template>
@ -25,11 +25,10 @@
<b-wrapped-form-checkbox class="col-md-6" id="edit_form_check_for_updates"
:field="form.check_for_updates">
<template #label="{lang}">
<translate :key="lang">Show Update Announcements</translate>
{{ $gettext('Show Update Announcements') }}
</template>
<template #description="{lang}">
<translate
:key="lang">Show new releases within your update channel on the AzuraCast homepage.</translate>
{{ $gettext('Show new releases within your update channel on the AzuraCast homepage.') }}
</template>
</b-wrapped-form-checkbox>
</b-form-row>
@ -37,123 +36,43 @@
<b-form-fieldset>
<template #label>
<translate key="lang_section_letsencrypt">LetsEncrypt</translate>
{{ $gettext('LetsEncrypt') }}
</template>
<template #description>
<translate key="lang_section_letsencrypt_desc">LetsEncrypt provides simple, free SSL certificates allowing you to secure traffic through your control panel and radio streams.</translate>
{{
$gettext('LetsEncrypt provides simple, free SSL certificates allowing you to secure traffic through your control panel and radio streams.')
}}
</template>
<b-form-row>
<b-wrapped-form-group class="col-md-6" id="edit_form_acme_domains"
:field="form.acme_domains">
<template #label="{lang}">
<translate :key="lang">Domain Name(s)</translate>
{{ $gettext('Domain Name(s)') }}
</template>
<template #description="{lang}">
<translate
:key="lang">All listed domain names should point to this AzuraCast installation. Separate multiple domain names with commas.</translate>
{{
$gettext('All listed domain names should point to this AzuraCast installation. Separate multiple domain names with commas.')
}}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_acme_email"
:field="form.acme_email" input-type="email">
<template #label="{lang}">
<translate :key="lang">E-mail Address (Optional)</translate>
{{ $gettext('E-mail Address (Optional)') }}
</template>
<template #description="{lang}">
<translate
:key="lang">Enter your e-mail address to receive updates about your certificate.</translate>
{{ $gettext('Enter your e-mail address to receive updates about your certificate.') }}
</template>
</b-wrapped-form-group>
<div class="form-group col">
<b-button size="sm" variant="primary" :disabled="form.$anyDirty" @click="generateAcmeCert">
<icon icon="badge"></icon>
<translate key="lang_btn_acme_cert">Generate/Renew Certificate</translate>
{{ $gettext('Generate/Renew Certificate') }}
<span v-if="form.$anyDirty">
(<translate key="lang_btn_acme_cert_save_changes">Save Changes first</translate>)
</span>
</b-button>
</div>
</b-form-row>
</b-form-fieldset>
<b-form-fieldset>
<template #label>
<translate key="lang_section_email_delivery">E-mail Delivery Service</translate>
</template>
<template #description>
<translate key="lang_section_email_delivery_desc">Used for "Forgot Password" functionality, web hooks and other functions.</translate>
</template>
<b-form-row>
<b-wrapped-form-checkbox class="col-md-12" id="edit_form_mail_enabled"
:field="form.mail_enabled">
<template #label="{lang}">
<translate :key="lang">Enable Mail Delivery</translate>
</template>
</b-wrapped-form-checkbox>
</b-form-row>
<b-form-row v-if="form.mail_enabled.$model" class="mt-2">
<b-wrapped-form-group class="col-md-6" id="edit_form_mail_sender_name"
:field="form.mail_sender_name">
<template #label="{lang}">
<translate :key="lang">Sender Name</translate>
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_mail_sender_email"
:field="form.mail_sender_email" input-type="email">
<template #label="{lang}">
<translate :key="lang">Sender E-mail Address</translate>
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-4" id="edit_form_mail_smtp_host"
:field="form.mail_smtp_host">
<template #label="{lang}">
<translate :key="lang">SMTP Host</translate>
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-3" id="edit_form_mail_smtp_port"
:field="form.mail_smtp_port" input-type="number">
<template #label="{lang}">
<translate :key="lang">SMTP Port</translate>
</template>
</b-wrapped-form-group>
<b-wrapped-form-checkbox class="col-md-5" id="edit_form_mail_smtp_secure"
:field="form.mail_smtp_secure">
<template #label="{lang}">
<translate :key="lang">Use Secure (TLS) SMTP Connection</translate>
</template>
<template #description="{lang}">
<translate :key="lang">Usually enabled for port 465, disabled for ports 587 or 25.</translate>
</template>
</b-wrapped-form-checkbox>
<b-wrapped-form-group class="col-md-6" id="edit_form_mail_smtp_username"
:field="form.mail_smtp_username">
<template #label="{lang}">
<translate :key="lang">SMTP Username</translate>
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_mail_smtp_password"
:field="form.mail_smtp_password" input-type="password">
<template #label="{lang}">
<translate :key="lang">SMTP Password</translate>
</template>
</b-wrapped-form-group>
<div class="form-group col">
<b-button size="sm" variant="primary" :disabled="form.$anyDirty" v-b-modal.send_test_message>
<icon icon="send"></icon>
<translate key="lang_btn_test_message">Send Test Message</translate>
<span v-if="form.$anyDirty">
(<translate key="lang_btn_test_message_save_changes">Save Changes first</translate>)
({{ $gettext('Save Changes first') }})
</span>
</b-button>
</div>
@ -162,13 +81,95 @@
<b-form-fieldset>
<template #label>
<translate key="lang_section_avatar_services">Avatar Service</translate>
{{ $gettext('E-mail Delivery Service') }}
</template>
<template #description>
{{ $gettext('Used for "Forgot Password" functionality, web hooks and other functions.') }}
</template>
<b-form-row>
<b-wrapped-form-checkbox class="col-md-12" id="edit_form_mail_enabled"
:field="form.mail_enabled">
<template #label="{lang}">
{{ $gettext('Enable Mail Delivery') }}
</template>
</b-wrapped-form-checkbox>
</b-form-row>
<b-form-row v-if="form.mail_enabled.$model" class="mt-2">
<b-wrapped-form-group class="col-md-6" id="edit_form_mail_sender_name"
:field="form.mail_sender_name">
<template #label="{lang}">
{{ $gettext('Sender Name') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_mail_sender_email"
:field="form.mail_sender_email" input-type="email">
<template #label="{lang}">
{{ $gettext('Sender E-mail Address') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-4" id="edit_form_mail_smtp_host"
:field="form.mail_smtp_host">
<template #label="{lang}">
{{ $gettext('SMTP Host') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-3" id="edit_form_mail_smtp_port"
:field="form.mail_smtp_port" input-type="number">
<template #label="{lang}">
{{ $gettext('SMTP Port') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-checkbox class="col-md-5" id="edit_form_mail_smtp_secure"
:field="form.mail_smtp_secure">
<template #label="{lang}">
{{ $gettext('Use Secure (TLS) SMTP Connection') }}
</template>
<template #description="{lang}">
{{ $gettext('Usually enabled for port 465, disabled for ports 587 or 25.') }}
</template>
</b-wrapped-form-checkbox>
<b-wrapped-form-group class="col-md-6" id="edit_form_mail_smtp_username"
:field="form.mail_smtp_username">
<template #label="{lang}">
{{ $gettext('SMTP Username') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_mail_smtp_password"
:field="form.mail_smtp_password" input-type="password">
<template #label="{lang}">
{{ $gettext('SMTP Password') }}
</template>
</b-wrapped-form-group>
<div class="form-group col">
<b-button size="sm" variant="primary" :disabled="form.$anyDirty" v-b-modal.send_test_message>
<icon icon="send"></icon>
{{ $gettext('Send Test Message') }}
<span v-if="form.$anyDirty">
({{ $gettext('Save Changes first') }})
</span>
</b-button>
</div>
</b-form-row>
</b-form-fieldset>
<b-form-fieldset>
<template #label>
{{ $gettext('Avatar Service') }}
</template>
<b-form-row>
<b-wrapped-form-group class="col-md-6" id="edit_form_avatar_service" :field="form.avatar_service">
<template #label="{lang}">
<translate :key="lang">Avatar Service</translate>
{{ $gettext('Avatar Service') }}
</template>
<template #default="props">
<b-form-radio-group stacked :id="props.id" v-model="props.field.$model"
@ -179,7 +180,7 @@
<b-wrapped-form-group class="col-md-6" id="edit_form_avatar_default_url"
:field="form.avatar_default_url">
<template #label="{lang}">
<translate :key="lang">Default Avatar URL</translate>
{{ $gettext('Default Avatar URL') }}
</template>
</b-wrapped-form-group>
</b-form-row>
@ -187,33 +188,33 @@
<b-form-fieldset>
<template #label>
<translate key="lang_section_album_art_services">Album Art</translate>
{{ $gettext('Album Art') }}
</template>
<b-form-row>
<b-wrapped-form-checkbox class="col-md-6" id="use_external_album_art_in_apis"
:field="form.use_external_album_art_in_apis">
<template #label="{lang}">
<translate :key="lang">Check Web Services for Album Art for "Now Playing" Tracks</translate>
{{ $gettext('Check Web Services for Album Art for "Now Playing" Tracks') }}
</template>
</b-wrapped-form-checkbox>
<b-wrapped-form-checkbox class="col-md-6" id="use_external_album_art_when_processing_media"
:field="form.use_external_album_art_when_processing_media">
<template #label="{lang}">
<translate :key="lang">Check Web Services for Album Art When Uploading Media</translate>
{{ $gettext('Check Web Services for Album Art When Uploading Media') }}
</template>
</b-wrapped-form-checkbox>
<b-wrapped-form-group class="col-md-12" id="edit_form_last_fm_api_key" :field="form.last_fm_api_key">
<template #label="{lang}">
<translate :key="lang">Last.fm API Key</translate>
{{ $gettext('Last.fm API Key') }}
</template>
<template #description="{lang}">
<translate :key="lang">This service can provide album art for tracks where none is available locally.</translate>
{{ $gettext('This service can provide album art for tracks where none is available locally.') }}
<br>
<a href="https://www.last.fm/api/account/create" target="_blank">
<translate :key="lang+'2'">Apply for an API key at Last.fm</translate>
{{ $gettext('Apply for an API key at Last.fm') }}
</a>
</template>
</b-wrapped-form-group>

View File

@ -3,16 +3,16 @@
<b-form @submit.prevent="doSendTest">
<b-wrapped-form-group id="email_address" :field="v$.emailAddress" autofocus>
<template #label="{lang}">
<translate :key="lang">E-mail Address</translate>
{{ $gettext('E-mail Address') }}
</template>
</b-wrapped-form-group>
</b-form>
<template #modal-footer>
<b-button variant="default" @click="close">
<translate key="lang_btn_close">Close</translate>
{{ $gettext('Close') }}
</b-button>
<b-button :variant="(v$.$invalid) ? 'danger' : 'primary'" @click="doSendTest">
<translate key="lang_btn_send">Send Test Message</translate>
{{ $gettext('Send Test Message') }}
</b-button>
</template>
</b-modal>

View File

@ -2,7 +2,7 @@
<div class="card">
<div class="card-header bg-primary-dark">
<h2 class="card-title">
<translate key="lang_title">Install Shoutcast 2 DNAS</translate>
{{ $gettext('Install Shoutcast 2 DNAS') }}
</h2>
</div>
@ -12,33 +12,37 @@
<div class="col-md-7">
<fieldset>
<legend>
<translate key="lang_instructions">Instructions</translate>
{{ $gettext('Instructions') }}
</legend>
<p class="card-text">
<translate key="lang_instructions_1a">Shoutcast 2 DNAS is not free software, and its restrictive license does not allow AzuraCast to distribute the Shoutcast binary.</translate>
{{
$gettext('Shoutcast 2 DNAS is not free software, and its restrictive license does not allow AzuraCast to distribute the Shoutcast binary.')
}}
</p>
<p class="card-text">
<translate key="lang_instructions_1b">In order to install Shoutcast:</translate>
{{ $gettext('In order to install Shoutcast:') }}
</p>
<ul>
<li>
<translate key="lang_instructions_2">Download the Linux x64 binary from the Shoutcast Radio Manager:</translate>
{{ $gettext('Download the Linux x64 binary from the Shoutcast Radio Manager:') }}
<br>
<a href="https://radiomanager.shoutcast.com/register/serverSoftwareFreemium"
target="_blank">
<translate key="lang_instructions_2_url">Shoutcast Radio Manager</translate>
{{ $gettext('Shoutcast Radio Manager') }}
</a>
</li>
<li>
<translate key="lang_instructions_3">The file name should look like:</translate>
{{ $gettext('The file name should look like:') }}
<br>
<code>sc_serv2_linux_x64-latest.tar.gz</code>
</li>
<li>
<translate key="lang_instructions_4">Upload the file on this page to automatically extract it into the proper directory.</translate>
{{
$gettext('Upload the file on this page to automatically extract it into the proper directory.')
}}
</li>
</ul>
</fieldset>
@ -46,15 +50,14 @@
<div class="col-md-5">
<fieldset class="mb-3">
<legend>
<translate key="lang_current_version">Current Installed Version</translate>
{{ $gettext('Current Installed Version') }}
</legend>
<p v-if="version" class="text-success card-text">
{{ langInstalledVersion }}
</p>
<p v-else class="text-danger card-text">
<translate
key="lang_not_installed">Shoutcast 2 DNAS is not currently installed on this installation.</translate>
{{ $gettext('Shoutcast 2 DNAS is not currently installed on this installation.') }}
</p>
</fieldset>

View File

@ -2,20 +2,20 @@
<b-form-row>
<b-wrapped-form-group class="col-md-12" id="edit_form_name" :field="form.name">
<template #label="{lang}">
<translate :key="lang">New Station Name</translate>
{{ $gettext('New Station Name') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-12" id="edit_form_description" :field="form.description"
input-type="textarea">
<template #label="{lang}">
<translate :key="lang">New Station Description</translate>
{{ $gettext('New Station Description') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-12" id="edit_form_clone" :field="form.clone">
<template #label="{lang}">
<translate :key="lang">Copy to New Station</translate>
{{ $gettext('Copy to New Station') }}
</template>
<template #default="props">
<b-form-checkbox-group

View File

@ -11,10 +11,10 @@
<template #modal-footer>
<b-button variant="default" type="button" @click="close">
<translate key="lang_btn_close">Close</translate>
{{ $gettext('Close') }}
</b-button>
<b-button :variant="(disableSaveButton) ? 'danger' : 'primary'" type="submit" @click="doSubmit">
<translate key="lang_btn_save_changes">Save Changes</translate>
{{ $gettext('Save Changes') }}
</b-button>
</template>
</b-modal>

View File

@ -5,21 +5,22 @@
<b-form-row>
<b-wrapped-form-checkbox class="col-md-6" id="edit_form_is_enabled" :field="form.is_enabled">
<template #label="{lang}">
<translate :key="lang">Enable Broadcasting</translate>
{{ $gettext('Enable Broadcasting') }}
</template>
<template #description="{lang}">
<translate
:key="lang">If disabled, the station will not broadcast or shuffle its AutoDJ.</translate>
{{ $gettext('If disabled, the station will not broadcast or shuffle its AutoDJ.') }}
</template>
</b-wrapped-form-checkbox>
<b-wrapped-form-group v-if="showAdvanced" class="col-md-6" id="edit_form_radio_base_dir"
:field="form.radio_base_dir" advanced>
<template #label="{lang}">
<translate :key="lang">Base Station Directory</translate>
{{ $gettext('Base Station Directory') }}
</template>
<template #description="{lang}">
<translate :key="lang">The parent directory where station playlist and configuration files are stored. Leave blank to use default directory.</translate>
{{
$gettext('The parent directory where station playlist and configuration files are stored. Leave blank to use default directory.')
}}
</template>
</b-wrapped-form-group>
</b-form-row>
@ -31,7 +32,7 @@
<b-wrapped-form-group class="col-md-12" id="edit_form_media_storage_location"
:field="form.media_storage_location">
<template #label="{lang}">
<translate :key="lang">Media Storage Location</translate>
{{ $gettext('Media Storage Location') }}
</template>
<template #default="props">
<b-form-select :id="props.id" v-model="props.field.$model"
@ -42,7 +43,7 @@
<b-wrapped-form-group class="col-md-12" id="edit_form_recordings_storage_location"
:field="form.recordings_storage_location">
<template #label="{lang}">
<translate :key="lang">Live Recordings Storage Location</translate>
{{ $gettext('Live Recordings Storage Location') }}
</template>
<template #default="props">
<b-form-select :id="props.id" v-model="props.field.$model"
@ -53,7 +54,7 @@
<b-wrapped-form-group class="col-md-12" id="edit_form_podcasts_storage_location"
:field="form.podcasts_storage_location">
<template #label="{lang}">
<translate :key="lang">Podcasts Storage Location</translate>
{{ $gettext('Podcasts Storage Location') }}
</template>
<template #default="props">
<b-form-select :id="props.id" v-model="props.field.$model"

View File

@ -5,12 +5,12 @@
<b-wrapped-form-group class="col-md-12" id="edit_form_backend_type"
:field="form.backend_type">
<template #label="{lang}">
<translate :key="lang">AutoDJ Service</translate>
{{ $gettext('AutoDJ Service') }}
</template>
<template #description="{lang}">
<translate :key="lang">This software shuffles from playlists of music constantly and plays when
no other radio source is available.
</translate>
{{
$gettext('This software shuffles from playlists of music constantly and plays when no other radio source is available.')
}}
</template>
<template #default="props">
<b-form-radio-group stacked :id="props.id" :options="backendTypeOptions"
@ -27,13 +27,12 @@
<b-wrapped-form-group class="col-md-7" id="edit_form_backend_crossfade_type"
:field="form.backend_config.crossfade_type">
<template #label="{lang}">
<translate :key="lang">Crossfade Method</translate>
{{ $gettext('Crossfade Method') }}
</template>
<template #description="{lang}">
<translate :key="lang">Choose a method to use when transitioning from one song to another.
Smart Mode considers the volume of the two tracks when fading for a smoother effect, but
requires more CPU resources.
</translate>
{{
$gettext('Choose a method to use when transitioning from one song to another. Smart Mode considers the volume of the two tracks when fading for a smoother effect, but requires more CPU resources.')
}}
</template>
<template #default="props">
<b-form-radio-group stacked :id="props.id" :options="crossfadeOptions"
@ -46,10 +45,10 @@
:field="form.backend_config.crossfade" input-type="number"
:input-attrs="{ min: '0.0', max: '30.0', step: '0.1' }">
<template #label="{lang}">
<translate :key="lang">Crossfade Duration (Seconds)</translate>
{{ $gettext('Crossfade Duration (Seconds)') }}
</template>
<template #description="{lang}">
<translate :key="lang">Number of seconds to overlap songs.</translate>
{{ $gettext('Number of seconds to overlap songs.') }}
</template>
</b-wrapped-form-group>
</b-form-row>
@ -57,12 +56,12 @@
<b-wrapped-form-group class="col-md-12" id="edit_form_backend_config_audio_processing_method"
:field="form.backend_config.audio_processing_method">
<template #label="{lang}">
<translate :key="lang">Audio Processing Method</translate>
{{ $gettext('Audio Processing Method') }}
</template>
<template #description="{lang}">
<translate :key="lang">Choose a method to use for processing audio which produces a more
uniform and "full" sound for your station.
</translate>
{{
$gettext('Choose a method to use for processing audio which produces a more uniform and "full" sound for your station.')
}}
</template>
<template #default="props">
<b-form-radio-group stacked :id="props.id" :options="audioProcessingOptions"
@ -75,12 +74,14 @@
<b-form-fieldset v-if="isStereoToolEnabled && isStereoToolInstalled">
<template #label>
<translate key="lang_hdr_stereo_tool">Stereo Tool</translate>
{{ $gettext('Stereo Tool') }}
</template>
<template #description>
<translate key="lang_stereo_tool_desc">Stereo Tool is an industry standard for software audio processing. For more information on how to configure it, please refer to the</translate>
{{
$gettext('Stereo Tool is an industry standard for software audio processing. For more information on how to configure it, please refer to the')
}}
<a href="https://www.thimeo.com/stereo-tool/" target="_blank">
<translate key="lang_stereo_tool_documentation_desc">Stereo Tool documentation.</translate>
{{ $gettext('Stereo Tool documentation.') }}
</a>
</template>
@ -89,20 +90,24 @@
<b-wrapped-form-group class="col-md-7" id="edit_form_backend_stereo_tool_license_key"
:field="form.backend_config.stereo_tool_license_key" input-type="text">
<template #label="{lang}">
<translate :key="lang">Stereo Tool License Key</translate>
{{ $gettext('Stereo Tool License Key') }}
</template>
<template #description="{lang}">
<translate :key="lang">Provide a valid license key from Thimeo. Functionality is limited without a license key.</translate>
{{
$gettext('Provide a valid license key from Thimeo. Functionality is limited without a license key.')
}}
</template>
</b-wrapped-form-group>
<b-form-markup class="col-md-5" id="edit_form_backend_stereo_tool_config">
<template #label="{lang}">
<translate :key="lang">Upload Stereo Tool Configuration</translate>
{{ $gettext('Upload Stereo Tool Configuration') }}
</template>
<p class="card-text">
<translate key="lang_stereotool_config">Upload a Stereo Tool configuration file from the "Broadcasting" submenu in the station profile.</translate>
{{
$gettext('Upload a Stereo Tool configuration file from the "Broadcasting" submenu in the station profile.')
}}
</p>
</b-form-markup>
</b-form-row>
@ -111,7 +116,7 @@
<b-form-fieldset v-if="showAdvanced">
<template #label>
<translate key="lang_hdr_advanced">Advanced Configuration</translate>
{{ $gettext('Advanced Configuration') }}
</template>
<b-form-row>
@ -119,13 +124,12 @@
id="edit_form_backend_use_manual_autodj"
:field="form.backend_config.use_manual_autodj" advanced>
<template #label="{lang}">
<translate :key="lang">Manual AutoDJ Mode</translate>
{{ $gettext('Manual AutoDJ Mode') }}
</template>
<template #description="{lang}">
<translate :key="lang">This mode disables AzuraCast's AutoDJ management, using Liquidsoap
itself to manage song playback. "Next Song" and some other features will not be
available.
</translate>
{{
$gettext('This mode disables AzuraCast\'s AutoDJ management, using Liquidsoap itself to manage song playback. "Next Song" and some other features will not be available.')
}}
</template>
</b-wrapped-form-checkbox>
@ -133,12 +137,12 @@
id="edit_form_backend_enable_replaygain_metadata"
:field="form.backend_config.enable_replaygain_metadata" advanced>
<template #label="{lang}">
<translate :key="lang">Use Replaygain Metadata</translate>
{{ $gettext('Use Replaygain Metadata') }}
</template>
<template #description="{lang}">
<translate :key="lang">Instruct Liquidsoap to use any replaygain metadata associated with a
song to control its volume level. This may increase CPU consumption.
</translate>
{{
$gettext('Instruct Liquidsoap to use any replaygain metadata associated with a song to control its volume level. This may increase CPU consumption.')
}}
</template>
</b-wrapped-form-checkbox>
@ -146,12 +150,12 @@
:field="form.backend_config.telnet_port" input-type="number"
:input-attrs="{ min: '0' }" advanced>
<template #label="{lang}">
<translate :key="lang">Customize Internal Request Processing Port</translate>
{{ $gettext('Customize Internal Request Processing Port') }}
</template>
<template #description="{lang}">
<translate :key="lang">This port is not used by any external process. Only modify this port
if the assigned port is in use. Leave blank to automatically assign a port.
</translate>
{{
$gettext('This port is not used by any external process. Only modify this port if the assigned port is in use. Leave blank to automatically assign a port.')
}}
</template>
</b-wrapped-form-group>
@ -159,25 +163,24 @@
:field="form.backend_config.autodj_queue_length" input-type="number"
:input-attrs="{ min: '2', max: '25' }" advanced>
<template #label="{lang}">
<translate :key="lang">AutoDJ Queue Length</translate>
{{ $gettext('AutoDJ Queue Length') }}
</template>
<template #description="{lang}">
<translate :key="lang">This determines how many songs in advance the AutoDJ will
automatically fill the queue.
</translate>
{{
$gettext('This determines how many songs in advance the AutoDJ will automatically fill the queue.')
}}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_backend_charset"
:field="form.backend_config.charset" advanced>
<template #label="{lang}">
<translate :key="lang">Character Set Encoding</translate>
{{ $gettext('Character Set Encoding') }}
</template>
<template #description="{lang}">
<translate :key="lang">For most cases, use the default UTF-8 encoding. The older ISO-8859-1
encoding can be used if accepting connections from Shoutcast 1 DJs or using other legacy
software.
</translate>
{{
$gettext('For most cases, use the default UTF-8 encoding. The older ISO-8859-1 encoding can be used if accepting connections from Shoutcast 1 DJs or using other legacy software.')
}}
</template>
<template #default="props">
<b-form-radio-group stacked :id="props.id" :options="charsetOptions"
@ -189,12 +192,12 @@
<b-wrapped-form-group class="col-md-6" id="edit_form_backend_performance_mode"
:field="form.backend_config.performance_mode" advanced>
<template #label="{lang}">
<translate :key="lang">Liquidsoap Performance Tuning</translate>
{{ $gettext('Liquidsoap Performance Tuning') }}
</template>
<template #description="{lang}">
<translate :key="lang">If your installation is constrained by CPU or memory, you can change
this setting to tune the resources used by Liquidsoap.
</translate>
{{
$gettext('If your installation is constrained by CPU or memory, you can change this setting to tune the resources used by Liquidsoap.')
}}
</template>
<template #default="props">
<b-form-radio-group stacked :id="props.id" :options="performanceModeOptions"
@ -207,12 +210,12 @@
:field="form.backend_config.duplicate_prevention_time_range"
input-type="number" :input-attrs="{ min: '0', max: '1440' }" advanced>
<template #label="{lang}">
<translate :key="lang">Duplicate Prevention Time Range (Minutes)</translate>
{{ $gettext('Duplicate Prevention Time Range (Minutes)') }}
</template>
<template #description="{lang}">
<translate :key="lang">This specifies the time range (in minutes) of the song history that
the duplicate song prevention algorithm should take into account.
</translate>
{{
$gettext('This specifies the time range (in minutes) of the song history that the duplicate song prevention algorithm should take into account.')
}}
</template>
</b-wrapped-form-group>
</b-form-row>

View File

@ -1,12 +1,11 @@
<template>
<b-form-fieldset>
<template #label>
<translate key="lang_backend_disabled">No AutoDJ Enabled</translate>
{{ $gettext('No AutoDJ Enabled') }}
</template>
<p class="card-text">
<translate
key="lang_backend_disabled_desc">This feature requires the AutoDJ feature to be enabled.</translate>
{{ $gettext('This feature requires the AutoDJ feature to be enabled.') }}
</p>
</b-form-fieldset>
</template>

View File

@ -5,11 +5,10 @@
<b-wrapped-form-group class="col-md-12" id="edit_form_frontend_type"
:field="form.frontend_type">
<template #label="{lang}">
<translate :key="lang">Broadcasting Service</translate>
{{ $gettext('Broadcasting Service') }}
</template>
<template #description="{lang}">
<translate
:key="lang">This software delivers your broadcast to the listening audience.</translate>
{{ $gettext('This software delivers your broadcast to the listening audience.') }}
</template>
<template #default="props">
<b-form-radio-group stacked :id="props.id" :options="frontendTypeOptions"
@ -26,14 +25,14 @@
<b-wrapped-form-group class="col-md-6" id="edit_form_frontend_sc_license_id"
:field="form.frontend_config.sc_license_id">
<template #label="{lang}">
<translate :key="lang">Shoutcast License ID</translate>
{{ $gettext('Shoutcast License ID') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_frontend_sc_user_id"
:field="form.frontend_config.sc_user_id">
<template #label="{lang}">
<translate :key="lang">Shoutcast User ID</translate>
{{ $gettext('Shoutcast User ID') }}
</template>
</b-wrapped-form-group>
</b-form-row>
@ -44,20 +43,20 @@
<b-wrapped-form-group class="col-md-6" id="edit_form_frontend_source_pw"
:field="form.frontend_config.source_pw">
<template #label="{lang}">
<translate :key="lang">Customize Source Password</translate>
{{ $gettext('Customize Source Password') }}
</template>
<template #description="{lang}">
<translate :key="lang">Leave blank to automatically generate a new password.</translate>
{{ $gettext('Leave blank to automatically generate a new password.') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_frontend_admin_pw"
:field="form.frontend_config.admin_pw">
<template #label="{lang}">
<translate :key="lang">Customize Administrator Password</translate>
{{ $gettext('Customize Administrator Password') }}
</template>
<template #description="{lang}">
<translate :key="lang">Leave blank to automatically generate a new password.</translate>
{{ $gettext('Leave blank to automatically generate a new password.') }}
</template>
</b-wrapped-form-group>
@ -65,20 +64,24 @@
:field="form.frontend_config.port" input-type="number"
:input-attrs="{min: '0'}" advanced>
<template #label="{lang}">
<translate :key="lang">Customize Broadcasting Port</translate>
{{ $gettext('Customize Broadcasting Port') }}
</template>
<template #description="{lang}">
<translate :key="lang">No other program can be using this port. Leave blank to automatically assign a port.</translate>
{{
$gettext('No other program can be using this port. Leave blank to automatically assign a port.')
}}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group v-if="showAdvanced" class="col-md-6" id="edit_form_max_listeners"
:field="form.frontend_config.max_listeners" advanced>
<template #label="{lang}">
<translate :key="lang">Maximum Listeners</translate>
{{ $gettext('Maximum Listeners') }}
</template>
<template #description="{lang}">
<translate :key="lang">Maximum number of total listeners across all streams. Leave blank to use the default.</translate>
{{
$gettext('Maximum number of total listeners across all streams. Leave blank to use the default.')
}}
</template>
</b-wrapped-form-group>
</b-form-row>
@ -91,11 +94,10 @@
:field="form.frontend_config.banned_ips" input-type="textarea"
:input-attrs="{class: 'text-preformatted'}" advanced>
<template #label="{lang}">
<translate :key="lang">Banned IP Addresses</translate>
{{ $gettext('Banned IP Addresses') }}
</template>
<template #description="{lang}">
<translate
:key="lang">List one IP address or group (in CIDR format) per line.</translate>
{{ $gettext('List one IP address or group (in CIDR format) per line.') }}
</template>
</b-wrapped-form-group>
@ -103,11 +105,10 @@
:field="form.frontend_config.allowed_ips" input-type="textarea"
:input-attrs="{class: 'text-preformatted'}" advanced>
<template #label="{lang}">
<translate :key="lang">Allowed IP Addresses</translate>
{{ $gettext('Allowed IP Addresses') }}
</template>
<template #description="{lang}">
<translate
:key="lang">List one IP address or group (in CIDR format) per line.</translate>
{{ $gettext('List one IP address or group (in CIDR format) per line.') }}
</template>
</b-wrapped-form-group>
@ -115,11 +116,10 @@
:field="form.frontend_config.banned_user_agents" input-type="textarea"
:input-attrs="{class: 'text-preformatted'}" advanced>
<template #label="{lang}">
<translate :key="lang">Banned User Agents</translate>
{{ $gettext('Banned User Agents') }}
</template>
<template #description="{lang}">
<translate
:key="lang">List one user agent per line. Wildcards (*) are allowed.</translate>
{{ $gettext('List one user agent per line. Wildcards (*) are allowed.') }}
</template>
</b-wrapped-form-group>
</b-col>
@ -128,11 +128,10 @@
:field="form.frontend_config.banned_countries"
advanced>
<template #label="{lang}">
<translate :key="lang">Banned Countries</translate>
{{ $gettext('Banned Countries') }}
</template>
<template #description="{lang}">
<translate
:key="lang">Select the countries that are not allowed to connect to the streams.</translate>
{{ $gettext('Select the countries that are not allowed to connect to the streams.') }}
</template>
<template #default="props">
<b-form-select :id="props.id" v-model="props.field.$model"
@ -140,7 +139,7 @@
multiple></b-form-select>
<b-button block variant="outline-primary" @click.prevent="clearCountries">
<translate key="lang_btn_clear_countries">Clear List</translate>
{{ $gettext('Clear List') }}
</b-button>
</template>
</b-wrapped-form-group>
@ -149,10 +148,10 @@
<b-form-fieldset v-if="showAdvanced">
<template #label>
<translate key="lang_hdr_custom_config">Custom Configuration</translate>
{{ $gettext('Custom Configuration') }}
</template>
<template #description>
<translate key="lang_custom_config_1">This code will be included in the frontend configuration. Allowed formats are:</translate>
{{ $gettext('This code will be included in the frontend configuration. Allowed formats are:') }}
<ul>
<li>JSON: <code>{"new_key": "new_value"}</code></li>
<li>XML: <code>&lt;new_key&gt;new_value&lt;/new_key&gt;</code></li>
@ -165,7 +164,7 @@
:input-attrs="{class: 'text-preformatted', spellcheck: 'false', 'max-rows': 25, rows: 5}"
advanced>
<template #label="{lang}">
<translate :key="lang">Custom Configuration</translate>
{{ $gettext('Custom Configuration') }}
</template>
</b-wrapped-form-group>
</b-form-row>

View File

@ -3,10 +3,10 @@
<b-form-fieldset v-if="isBackendEnabled">
<b-form-fieldset>
<template #label>
<translate key="lang_hls">HTTP Live Streaming (HLS)</translate>
{{ $gettext('HTTP Live Streaming (HLS)') }}
</template>
<template #description>
<translate key="lang_hls_desc">HTTP Live Streaming (HLS) is a new adaptive-bitrate technology supported by some clients. It does not use the standard broadcasting frontends.</translate>
{{ $gettext('HTTP Live Streaming (HLS) is a new adaptive-bitrate technology supported by some clients. It does not use the standard broadcasting frontends.') }}
</template>
<b-form-fieldset>
@ -14,7 +14,7 @@
<b-wrapped-form-checkbox class="col-md-12" id="edit_form_enable_hls"
:field="form.enable_hls">
<template #label="{lang}">
<translate :key="lang">Enable HTTP Live Streaming (HLS)</translate>
{{ $gettext('Enable HTTP Live Streaming (HLS)') }}
</template>
</b-wrapped-form-checkbox>
</b-form-row>
@ -25,14 +25,14 @@
<b-wrapped-form-checkbox class="col-md-12" id="edit_form_backend_hls_enable_on_public_player"
:field="form.backend_config.hls_enable_on_public_player">
<template #label="{lang}">
<translate :key="lang">Show HLS Stream on Public Player</translate>
{{ $gettext('Show HLS Stream on Public Player') }}
</template>
</b-wrapped-form-checkbox>
<b-wrapped-form-checkbox class="col-md-12" id="edit_form_backend_hls_is_default"
:field="form.backend_config.hls_is_default">
<template #label="{lang}">
<translate :key="lang">Make HLS Stream Default in Public Player</translate>
{{ $gettext('Make HLS Stream Default in Public Player') }}
</template>
</b-wrapped-form-checkbox>
</b-form-row>
@ -45,7 +45,7 @@
:field="form.backend_config.hls_segment_length" input-type="number"
:input-attrs="{ min: '0', max: '60' }" advanced>
<template #label="{lang}">
<translate :key="lang">Segment Length (Seconds)</translate>
{{ $gettext('Segment Length (Seconds)') }}
</template>
</b-wrapped-form-group>
@ -54,7 +54,7 @@
:field="form.backend_config.hls_segments_in_playlist" input-type="number"
:input-attrs="{ min: '0', max: '60' }" advanced>
<template #label="{lang}">
<translate :key="lang">Segments in Playlist</translate>
{{ $gettext('Segments in Playlist') }}
</template>
</b-wrapped-form-group>
@ -63,7 +63,7 @@
:field="form.backend_config.hls_segments_overhead" input-type="number"
:input-attrs="{ min: '0', max: '60' }" advanced>
<template #label="{lang}">
<translate :key="lang">Segments Overhead</translate>
{{ $gettext('Segments Overhead') }}
</template>
</b-wrapped-form-group>
</b-form-row>

View File

@ -4,38 +4,42 @@
<b-form-row>
<b-wrapped-form-group class="col-md-12" id="edit_form_name" :field="form.name">
<template #label="{lang}">
<translate :key="lang">Name</translate>
{{ $gettext('Name') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-12" id="edit_form_description" :field="form.description"
input-type="textarea">
<template #label="{lang}">
<translate :key="lang">Description</translate>
{{ $gettext('Description') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_genre" :field="form.genre">
<template #label="{lang}">
<translate :key="lang">Genre</translate>
{{ $gettext('Genre') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_url" :field="form.url" input-type="url">
<template #label="{lang}">
<translate :key="lang">Web Site URL</translate>
{{ $gettext('Web Site URL') }}
</template>
<template #description="{lang}">
<translate :key="lang">Note: This should be the public-facing homepage of the radio station, not the AzuraCast URL. It will be included in broadcast details.</translate>
{{
$gettext('Note: This should be the public-facing homepage of the radio station, not the AzuraCast URL. It will be included in broadcast details.')
}}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-12" id="edit_form_timezone" :field="form.timezone">
<template #label="{lang}">
<translate :key="lang">Time Zone</translate>
{{ $gettext('Time Zone') }}
</template>
<template #description="{lang}">
<translate :key="lang">Scheduled playlists and other timed items will be controlled by this time zone.</translate>
{{
$gettext('Scheduled playlists and other timed items will be controlled by this time zone.')
}}
</template>
<template #default="props">
<b-form-select :id="props.id" v-model="props.field.$model"
@ -46,30 +50,36 @@
<b-wrapped-form-group class="col-md-6" id="edit_form_default_album_art_url"
:field="form.default_album_art_url">
<template #label="{lang}">
<translate :key="lang">Default Album Art URL</translate>
{{ $gettext('Default Album Art URL') }}
</template>
<template #description="{lang}">
<translate :key="lang">If a song has no album art, this URL will be listed instead. Leave blank to use the standard placeholder art.</translate>
{{
$gettext('If a song has no album art, this URL will be listed instead. Leave blank to use the standard placeholder art.')
}}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group v-if="showAdvanced" class="col-md-6" id="edit_form_short_name"
:field="form.short_name" advanced>
<template #label="{lang}">
<translate :key="lang">URL Stub</translate>
{{ $gettext('URL Stub') }}
</template>
<template #description="{lang}">
<translate :key="lang">Optionally specify a short URL-friendly name, such as "my_station_name", that will be used in this station's URLs. Leave this field blank to automatically create one based on the station name.</translate>
{{
$gettext('Optionally specify a short URL-friendly name, such as "my_station_name", that will be used in this station\'s URLs. Leave this field blank to automatically create one based on the station name.')
}}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group v-if="showAdvanced" class="col-md-6" id="edit_form_api_history_items"
:field="form.api_history_items" advanced>
<template #label="{lang}">
<translate :key="lang">Number of Visible Recent Songs</translate>
{{ $gettext('Number of Visible Recent Songs') }}
</template>
<template #description="{lang}">
<translate :key="lang">Customize the number of songs that will appear in the "Song History" section for this station and in all public APIs.</translate>
{{
$gettext('Customize the number of songs that will appear in the "Song History" section for this station and in all public APIs.')
}}
</template>
<template #default="props">
<b-form-select :id="props.id" v-model="props.field.$model"
@ -81,17 +91,17 @@
<b-form-fieldset>
<template #label>
<translate key="lang_header_public_pages">Public Pages</translate>
{{ $gettext('Public Pages') }}
</template>
<b-form-row>
<b-wrapped-form-checkbox class="col-md-12" id="edit_form_enable_public_page"
:field="form.enable_public_page">
<template #label="{lang}">
<translate :key="lang">Enable Public Pages</translate>
{{ $gettext('Enable Public Pages') }}
</template>
<template #description="{lang}">
<translate :key="lang">Show the station in public pages and general API results.</translate>
{{ $gettext('Show the station in public pages and general API results.') }}
</template>
</b-wrapped-form-checkbox>
</b-form-row>
@ -99,17 +109,19 @@
<b-form-fieldset>
<template #label>
<translate key="lang_header_on_demand">On-Demand Streaming</translate>
{{ $gettext('On-Demand Streaming') }}
</template>
<b-form-row>
<b-wrapped-form-checkbox class="col-md-12" id="edit_form_enable_on_demand"
:field="form.enable_on_demand">
<template #label="{lang}">
<translate :key="lang">Enable On-Demand Streaming</translate>
{{ $gettext('Enable On-Demand Streaming') }}
</template>
<template #description="{lang}">
<translate :key="lang">If enabled, music from playlists with on-demand streaming enabled will be available to stream via a specialized public page.</translate>
{{
$gettext('If enabled, music from playlists with on-demand streaming enabled will be available to stream via a specialized public page.')
}}
</template>
</b-wrapped-form-checkbox>
@ -117,10 +129,12 @@
id="edit_form_enable_on_demand_download"
:field="form.enable_on_demand_download">
<template #label="{lang}">
<translate :key="lang">Enable Downloads on On-Demand Page</translate>
{{ $gettext('Enable Downloads on On-Demand Page') }}
</template>
<template #description="{lang}">
<translate :key="lang">If enabled, a download button will also be present on the public "On-Demand" page.</translate>
{{
$gettext('If enabled, a download button will also be present on the public "On-Demand" page.')
}}
</template>
</b-wrapped-form-checkbox>
</b-form-row>

View File

@ -3,12 +3,12 @@
<b-form-fieldset v-if="isBackendEnabled">
<b-form-fieldset>
<template #label>
<translate key="lang_hdr_song_requests">Song Requests</translate>
{{ $gettext('Song Requests') }}
</template>
<template #description>
<translate key="lang_song_requests_desc">Some stream licensing providers may have specific rules
regarding song requests. Check your local regulations for more information.
</translate>
{{
$gettext('Some stream licensing providers may have specific rules regarding song requests. Check your local regulations for more information.')
}}
</template>
<b-form-fieldset>
@ -16,12 +16,12 @@
<b-wrapped-form-checkbox class="col-md-12" id="edit_form_enable_requests"
:field="form.enable_requests">
<template #label="{lang}">
<translate :key="lang">Allow Song Requests</translate>
{{ $gettext('Allow Song Requests') }}
</template>
<template #description="{lang}">
<translate :key="lang">Enable listeners to request a song for play on your station. Only
songs that are already in your playlists are requestable.
</translate>
{{
$gettext('Enable listeners to request a song for play on your station. Only songs that are already in your playlists are requestable.')
}}
</template>
</b-wrapped-form-checkbox>
</b-form-row>
@ -33,13 +33,12 @@
:field="form.request_delay" input-type="number"
:input-attrs="{ min: '0', max: '1440' }">
<template #label="{lang}">
<translate :key="lang">Request Minimum Delay (Minutes)</translate>
{{ $gettext('Request Minimum Delay (Minutes)') }}
</template>
<template #description="{lang}">
<translate :key="lang">If requests are enabled, this specifies the minimum delay (in
minutes) between a request being submitted and being played. If set to zero, a minor
delay of 15 seconds is applied to prevent request floods.
</translate>
{{
$gettext('If requests are enabled, this specifies the minimum delay (in minutes) between a request being submitted and being played. If set to zero, a minor delay of 15 seconds is applied to prevent request floods.')
}}
</template>
</b-wrapped-form-group>
@ -47,13 +46,12 @@
:field="form.request_threshold" input-type="number"
:input-attrs="{ min: '0', max: '1440' }">
<template #label="{lang}">
<translate :key="lang">Request Last Played Threshold (Minutes)</translate>
{{ $gettext('Request Last Played Threshold (Minutes)') }}
</template>
<template #description="{lang}">
<translate :key="lang">This specifies the minimum time (in minutes) between a song
playing on the radio and being available to request again. Set to 0 for no
threshold.
</translate>
{{
$gettext('This specifies the minimum time (in minutes) between a song playing on the radio and being available to request again. Set to 0 for no threshold.')
}}
</template>
</b-wrapped-form-group>
</b-form-row>

View File

@ -3,7 +3,7 @@
<b-form-fieldset v-if="isBackendEnabled">
<b-form-fieldset>
<template #label>
<translate key="lang_hdr_streamers">Streamers/DJs</translate>
{{ $gettext('Streamers/DJs') }}
</template>
<b-form-fieldset>
@ -11,12 +11,12 @@
<b-wrapped-form-checkbox class="col-md-12" id="edit_form_enable_streamers"
:field="form.enable_streamers">
<template #label="{lang}">
<translate :key="lang">Allow Streamers / DJs</translate>
{{ $gettext('Allow Streamers / DJs') }}
</template>
<template #description="{lang}">
<translate :key="lang">If enabled, streamers (or DJs) will be able to connect directly
to your stream and broadcast live music that interrupts the AutoDJ stream.
</translate>
{{
$gettext('If enabled, streamers (or DJs) will be able to connect directly to your stream and broadcast live music that interrupts the AutoDJ stream.')
}}
</template>
</b-wrapped-form-checkbox>
</b-form-row>
@ -28,12 +28,12 @@
<b-wrapped-form-checkbox class="col-md-12" id="edit_form_backend_record_streams"
:field="form.backend_config.record_streams">
<template #label="{lang}">
<translate :key="lang">Record Live Broadcasts</translate>
{{ $gettext('Record Live Broadcasts') }}
</template>
<template #description="{lang}">
<translate :key="lang">If enabled, AzuraCast will automatically record any live
broadcasts made to this station to per-broadcast recordings.
</translate>
{{
$gettext('If enabled, AzuraCast will automatically record any live broadcasts made to this station to per-broadcast recordings.')
}}
</template>
</b-wrapped-form-checkbox>
</b-form-row>
@ -44,7 +44,7 @@
<b-wrapped-form-group class="col-md-6" id="edit_form_backend_record_streams_format"
:field="form.backend_config.record_streams_format">
<template #label="{lang}">
<translate :key="lang">Live Broadcast Recording Format</translate>
{{ $gettext('Live Broadcast Recording Format') }}
</template>
<template #default="props">
@ -57,7 +57,7 @@
<b-wrapped-form-group class="col-md-6" id="edit_form_backend_record_streams_bitrate"
:field="form.backend_config.record_streams_bitrate">
<template #label="{lang}">
<translate :key="lang">Live Broadcast Recording Bitrate (kbps)</translate>
{{ $gettext('Live Broadcast Recording Bitrate (kbps)') }}
</template>
<template #default="props">
@ -75,13 +75,12 @@
:field="form.disconnect_deactivate_streamer" input-type="number"
:input-attrs="{ min: '0' }">
<template #label="{lang}">
<translate :key="lang">Deactivate Streamer on Disconnect (Seconds)</translate>
{{ $gettext('Deactivate Streamer on Disconnect (Seconds)') }}
</template>
<template #description="{lang}">
<translate :key="lang">This is the number of seconds until a streamer who has been
manually disconnected can reconnect to the stream. Set to 0 to allow the
streamer to immediately reconnect.
</translate>
{{
$gettext('This is the number of seconds until a streamer who has been manually disconnected can reconnect to the stream. Set to 0 to allow the streamer to immediately reconnect.')
}}
</template>
</b-wrapped-form-group>
@ -90,16 +89,16 @@
:field="form.backend_config.dj_port" input-type="number"
:input-attrs="{ min: '0' }" advanced>
<template #label="{lang}">
<translate :key="lang">Customize DJ/Streamer Port</translate>
{{ $gettext('Customize DJ/Streamer Port') }}
</template>
<template #description="{lang}">
<translate :key="lang">No other program can be using this port. Leave blank to
automatically assign a port.
</translate>
{{
$gettext('No other program can be using this port. Leave blank to automatically assign a port.')
}}
<br>
<translate :key="lang+'2'">Note: the port after this one will automatically be used
for legacy connections.
</translate>
{{
$gettext('Note: the port after this one will automatically be used for legacy connections.')
}}
</template>
</b-wrapped-form-group>
@ -107,13 +106,12 @@
:field="form.backend_config.dj_buffer" input-type="number"
:input-attrs="{ min: '0', max: '60' }">
<template #label="{lang}">
<translate :key="lang">DJ/Streamer Buffer Time (Seconds)</translate>
{{ $gettext('DJ/Streamer Buffer Time (Seconds)') }}
</template>
<template #description="{lang}">
<translate :key="lang">The number of seconds of signal to store in case of
interruption. Set to the lowest value that your DJs can use without stream
interruptions.
</translate>
{{
$gettext('The number of seconds of signal to store in case of interruption. Set to the lowest value that your DJs can use without stream interruptions.')
}}
</template>
</b-wrapped-form-group>
@ -121,12 +119,12 @@
id="edit_form_backend_dj_mount_point"
:field="form.backend_config.dj_mount_point" advanced>
<template #label="{lang}">
<translate :key="lang">Customize DJ/Streamer Mount Point</translate>
{{ $gettext('Customize DJ/Streamer Mount Point') }}
</template>
<template #description="{lang}">
<translate :key="lang">If your streaming software requires a specific mount point
path, specify it here. Otherwise, use the default.
</translate>
{{
$gettext('If your streaming software requires a specific mount point path, specify it here. Otherwise, use the default.')
}}
</template>
</b-wrapped-form-group>
</b-form-row>

View File

@ -6,7 +6,7 @@
<b-tabs :card="!isModal" pills :content-class="tabContentClass">
<b-tab :title-link-class="getTabClass(v$.$validationGroups.profileTab)" active>
<template #title>
<translate key="tab_profile">Profile</translate>
{{ $gettext('Profile') }}
</template>
<admin-stations-profile-form :form="v$.form" :timezones="timezones"
@ -15,7 +15,7 @@
<b-tab :title-link-class="getTabClass(v$.$validationGroups.frontendTab)">
<template #title>
<translate key="tab_frontend">Broadcasting</translate>
{{ $gettext('Broadcasting') }}
</template>
<admin-stations-frontend-form :form="v$.form"
@ -26,7 +26,7 @@
<b-tab :title-link-class="getTabClass(v$.$validationGroups.backendTab)">
<template #title>
<translate key="tab_backend">AutoDJ</translate>
{{ $gettext('AutoDJ') }}
</template>
<admin-stations-backend-form :form="v$.form" :station="station"
@ -36,7 +36,7 @@
<b-tab :title-link-class="getTabClass(v$.$validationGroups.hlsTab)">
<template #title>
<translate key="tab_hls">HLS</translate>
{{ $gettext('HLS') }}
</template>
<admin-stations-hls-form :form="v$.form" :station="station" :show-advanced="showAdvanced">
@ -45,7 +45,7 @@
<b-tab :title-link-class="getTabClass(v$.$validationGroups.requestsTab)">
<template #title>
<translate key="tab_requests">Song Requests</translate>
{{ $gettext('Song Requests') }}
</template>
<admin-stations-requests-form :form="v$.form" :station="station" :show-advanced="showAdvanced">
@ -54,7 +54,7 @@
<b-tab :title-link-class="getTabClass(v$.$validationGroups.streamersTab)">
<template #title>
<translate key="tab_streamers">Streamers/DJs</translate>
{{ $gettext('Streamers/DJs') }}
</template>
<admin-stations-streamers-form :form="v$.form" :station="station" :show-advanced="showAdvanced">
@ -63,7 +63,7 @@
<b-tab v-if="showAdminTab" :title-link-class="getTabClass(v$.$validationGroups.adminTab)">
<template #title>
<translate key="tab_admin">Administration</translate>
{{ $gettext('Administration') }}
</template>
<admin-stations-admin-form :form="v$.form"
@ -78,7 +78,7 @@
<b-card-body body-class="card-padding-sm">
<b-button size="lg" type="submit" :variant="(!isValid) ? 'danger' : 'primary'">
<slot name="submitButtonText">
<translate key="lang_btn_save_changes">Save Changes</translate>
{{ $gettext('Save Changes') }}
</slot>
</b-button>
</b-card-body>

View File

@ -2,7 +2,7 @@
<div class="card">
<div class="card-header bg-primary-dark">
<h2 class="card-title">
<translate key="lang_title">Install Stereo Tool</translate>
{{ $gettext('Install Stereo Tool') }}
</h2>
</div>
@ -12,35 +12,45 @@
<div class="col-md-7">
<fieldset>
<legend>
<translate key="lang_instructions">Instructions</translate>
{{ $gettext('Instructions') }}
</legend>
<p class="card-text">
<translate key="lang_disclaimer">Stereo Tool can be resource-intensive for both CPU and Memory. Please ensure you have sufficient resources before proceeding.</translate>
{{
$gettext('Stereo Tool can be resource-intensive for both CPU and Memory. Please ensure you have sufficient resources before proceeding.')
}}
</p>
<p class="card-text">
<translate key="lang_instructions_1a">Stereo Tool is not free software, and its restrictive license does not allow AzuraCast to distribute the Stereo Tool binary.</translate>
{{
$gettext('Stereo Tool is not free software, and its restrictive license does not allow AzuraCast to distribute the Stereo Tool binary.')
}}
</p>
<p class="card-text">
<translate key="lang_instructions_1b">In order to install Stereo Tool:</translate>
{{ $gettext('In order to install Stereo Tool:') }}
</p>
<ul>
<li>
<translate key="lang_instructions_2">Download the appropriate binary from the Stereo Tool downloads page:</translate>
{{
$gettext('Download the appropriate binary from the Stereo Tool downloads page:')
}}
<br>
<a href="https://www.thimeo.com/stereo-tool/download/"
target="_blank">
<translate key="lang_instructions_2_url">Stereo Tool Downloads</translate>
{{ $gettext('Stereo Tool Downloads') }}
</a>
</li>
<li>
<translate key="lang_instructions_3">For most installations, you should choose the "Command line version 64 bit". For Raspberry Pi devices, select "Raspberry Pi 3/4 64 bit command line".</translate>
{{
$gettext('For most installations, you should choose the "Command line version 64 bit". For Raspberry Pi devices, select "Raspberry Pi 3/4 64 bit command line".')
}}
</li>
<li>
<translate key="lang_instructions_4">Upload the file on this page to automatically extract it into the proper directory.</translate>
{{
$gettext('Upload the file on this page to automatically extract it into the proper directory.')
}}
</li>
</ul>
</fieldset>
@ -48,15 +58,14 @@
<div class="col-md-5">
<fieldset class="mb-3">
<legend>
<translate key="lang_current_version">Current Installed Version</translate>
{{ $gettext('Current Installed Version') }}
</legend>
<p v-if="version" class="text-success card-text">
{{ langInstalledVersion }}
</p>
<p v-else class="text-danger card-text">
<translate
key="lang_not_installed">Stereo Tool is not currently installed on this installation.</translate>
{{ $gettext('Stereo Tool is not currently installed on this installation.') }}
</p>
</fieldset>

View File

@ -4,21 +4,21 @@
<b-form-row>
<b-wrapped-form-group class="col-md-12" id="form_edit_adapter" :field="form.adapter">
<template #label="{lang}">
<translate :key="lang">Storage Adapter</translate>
{{ $gettext('Storage Adapter') }}
</template>
<template #default="props">
<b-form-radio-group stacked :id="props.id" v-model="props.field.$model">
<b-form-radio value="local">
<translate key="lang_form_adapter_local">Local Filesystem</translate>
{{ $gettext('Local Filesystem') }}
</b-form-radio>
<b-form-radio value="s3">
<translate key="lang_form_adapter_s3">Remote: S3 Compatible</translate>
{{ $gettext('Remote: S3 Compatible') }}
</b-form-radio>
<b-form-radio value="dropbox">
<translate key="lang_form_adapter_dropbox">Remote: Dropbox</translate>
{{ $gettext('Remote: Dropbox') }}
</b-form-radio>
<b-form-radio value="sftp">
<translate key="lang_form_adapter_sftp">Remote: SFTP</translate>
{{ $gettext('Remote: SFTP') }}
</b-form-radio>
</b-form-radio-group>
</template>
@ -26,19 +26,19 @@
<b-wrapped-form-group class="col-md-12" id="form_edit_path" :field="form.path">
<template #label="{lang}">
<translate :key="lang">Path/Suffix</translate>
{{ $gettext('Path/Suffix') }}
</template>
<template #description="{lang}">
<translate :key="lang">For local filesystems, this is the base path of the directory. For remote filesystems, this is the folder prefix.</translate>
{{ $gettext('For local filesystems, this is the base path of the directory. For remote filesystems, this is the folder prefix.') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-12" id="form_edit_storageQuota" :field="form.storageQuota">
<template #label="{lang}">
<translate :key="lang">Storage Quota</translate>
{{ $gettext('Storage Quota') }}
</template>
<template #description="{lang}">
<translate :key="lang">Set a maximum disk space that this storage location can use. Specify the size with unit, i.e. "8 GB". Units are measured in 1024 bytes. Leave blank to default to the available space on the disk.</translate>
{{ $gettext('Set a maximum disk space that this storage location can use. Specify the size with unit, i.e. "8 GB". Units are measured in 1024 bytes. Leave blank to default to the available space on the disk.') }}
</template>
</b-wrapped-form-group>
</b-form-row>
@ -47,7 +47,7 @@
<b-card v-show="form.adapter.$model === 's3'" class="mb-3" no-body>
<div class="card-header bg-primary-dark">
<h2 class="card-title">
<translate key="lang_form_adapter_s3">Remote: S3 Compatible</translate>
{{ $gettext('Remote: S3 Compatible') }}
</h2>
</div>
<b-card-body>
@ -56,38 +56,38 @@
<b-wrapped-form-group class="col-md-6" id="form_edit_s3CredentialKey"
:field="form.s3CredentialKey">
<template #label="{lang}">
<translate :key="lang">Access Key ID</translate>
{{ $gettext('Access Key ID') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="form_edit_s3CredentialSecret"
:field="form.s3CredentialSecret">
<template #label="{lang}">
<translate :key="lang">Secret Key</translate>
{{ $gettext('Secret Key') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="form_edit_s3Endpoint" :field="form.s3Endpoint">
<template #label="{lang}">
<translate :key="lang">Endpoint</translate>
{{ $gettext('Endpoint') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="form_edit_s3Bucket" :field="form.s3Bucket">
<template #label="{lang}">
<translate :key="lang">Bucket Name</translate>
{{ $gettext('Bucket Name') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="form_edit_s3Region" :field="form.s3Region">
<template #label="{lang}">
<translate :key="lang">Region</translate>
{{ $gettext('Region') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="form_edit_s3Version" :field="form.s3Version">
<template #label="{lang}">
<translate :key="lang">API Version</translate>
{{ $gettext('API Version') }}
</template>
</b-wrapped-form-group>
</b-form-row>
@ -98,7 +98,7 @@
<b-card v-show="form.adapter.$model === 'dropbox'" class="mb-3" no-body>
<div class="card-header bg-primary-dark">
<h2 class="card-title">
<translate key="lang_form_adapter_dropbox">Remote: Dropbox</translate>
{{ $gettext('Remote: Dropbox') }}
</h2>
</div>
<b-card-body>
@ -107,10 +107,10 @@
<b-wrapped-form-group class="col-md-12" id="form_edit_dropboxAuthToken"
:field="form.dropboxAuthToken">
<template #label="{lang}">
<translate :key="lang">Dropbox Generated Access Token</translate>
{{ $gettext('Dropbox Generated Access Token') }}
</template>
<template #description="{lang}">
<translate :key="lang">Note: Dropbox now only issues short-lived tokens that will not work for this purpose. If your token begins with "sl", it is short-lived and will not work correctly.</translate>
{{ $gettext('Note: Dropbox now only issues short-lived tokens that will not work for this purpose. If your token begins with "sl", it is short-lived and will not work correctly.') }}
</template>
</b-wrapped-form-group>
</b-form-row>
@ -121,7 +121,7 @@
<b-card v-show="form.adapter.$model === 'sftp'" class="mb-3" no-body>
<div class="card-header bg-primary-dark">
<h2 class="card-title">
<translate key="lang_form_adapter_sftp">Remote: SFTP</translate>
{{ $gettext('Remote: SFTP') }}
</h2>
</div>
<b-card-body>
@ -130,42 +130,42 @@
<b-wrapped-form-group class="col-md-12 col-lg-6" id="form_edit_sftpHost"
:field="form.sftpHost">
<template #label="{lang}">
<translate :key="lang">SFTP Host</translate>
{{ $gettext('SFTP Host') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-12 col-lg-6" id="form_edit_sftpPort" input-type="number" min="1" step="1"
:field="form.sftpPort">
<template #label="{lang}">
<translate :key="lang">SFTP Port</translate>
{{ $gettext('SFTP Port') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-12 col-lg-6" id="form_edit_sftpUsername"
:field="form.sftpUsername">
<template #label="{lang}">
<translate :key="lang">SFTP Username</translate>
{{ $gettext('SFTP Username') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-12 col-lg-6" id="form_edit_sftpPassword"
:field="form.sftpPassword">
<template #label="{lang}">
<translate :key="lang">SFTP Password</translate>
{{ $gettext('SFTP Password') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-12" id="form_edit_sftpPrivateKeyPassPhrase"
:field="form.sftpPrivateKeyPassPhrase">
<template #label="{lang}">
<translate :key="lang">SFTP Private Key Pass Phrase</translate>
{{ $gettext('SFTP Private Key Pass Phrase') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-12" id="form_edit_sftpPrivateKey" input-type="textarea"
:field="form.sftpPrivateKey">
<template #label="{lang}">
<translate :key="lang">SFTP Private Key</translate>
{{ $gettext('SFTP Private Key') }}
</template>
</b-wrapped-form-group>
</b-form-row>

View File

@ -3,31 +3,31 @@
<b-form-row>
<b-wrapped-form-group class="col-md-6" id="edit_form_email" :field="form.email" input-type="email">
<template #label="{lang}">
<translate :key="lang">E-mail Address</translate>
{{ $gettext('E-mail Address') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_new_password" :field="form.new_password"
input-type="password">
<template #label="{lang}">
<translate v-if="isEditMode" :key="lang+'a'">Reset Password</translate>
<translate v-else :key="lang+'b'">Password</translate>
{{ $gettext('Reset Password') }}
{{ $gettext('Password') }}
</template>
<template v-if="isEditMode" #description="{lang}">
<translate :key="lang">Leave blank to use the current password.</translate>
{{ $gettext('Leave blank to use the current password.') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-12" id="edit_form_name" :field="form.name">
<template #label="{lang}">
<translate :key="lang">Display Name</translate>
{{ $gettext('Display Name') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-12" id="edit_form_roles"
:field="form.roles">
<template #label="{lang}">
<translate :key="lang">Roles</translate>
{{ $gettext('Roles') }}
</template>
<template #default="props">
<b-form-checkbox-group :id="props.id" :options="roleOptions" v-model="props.field.$model">

View File

@ -15,10 +15,10 @@
</template>
</div>
<div class="file-drop-target" ref="file_drop_target">
<translate key="lang_upload_target">Drag file(s) here to upload or</translate>
{{ $gettext('Drag file(s) here to upload or') }}
<button ref="file_browse_target" class="file-upload btn btn-primary text-center ml-1" type="button">
<icon icon="cloud_upload"></icon>
<translate key="lang_select_file">Select File</translate>
{{ $gettext('Select File') }}
</button>
<small class="file-name"></small>
<input type="file" :accept="validMimeTypesList" :multiple="allowMultiple"

View File

@ -17,11 +17,11 @@
<template #modal-footer="slotProps">
<slot name="modal-footer" v-bind="slotProps">
<b-button variant="default" type="button" @click="close">
<translate key="lang_btn_close">Close</translate>
{{ $gettext('Close') }}
</b-button>
<b-button :variant="(disableSaveButton) ? 'danger' : 'primary'" type="submit" @click="doSubmit">
<slot name="save-button-name">
<translate key="lang_btn_save_changes">Save Changes</translate>
{{ $gettext('Save Changes') }}
</slot>
</b-button>
</slot>

View File

@ -5,10 +5,10 @@
<template #modal-footer>
<b-button variant="default" type="button" @click="close">
<translate key="lang_btn_close">Close</translate>
{{ $gettext('Close') }}
</b-button>
<b-button variant="primary" class="btn_copy" @click.prevent="doCopy" type="button">
<translate key="lang_btn_copy">Copy to Clipboard</translate>
{{ $gettext('Copy to Clipboard') }}
</b-button>
</template>
</b-modal>

View File

@ -2,7 +2,7 @@
<b-overlay variant="card" :show="loading">
<b-form-group label-for="modal_scroll_to_bottom">
<b-form-checkbox id="modal_scroll_to_bottom" v-model="scrollToBottom">
<translate key="scroll_to_bottom">Automatically Scroll to Bottom</translate>
{{ $gettext('Automatically Scroll to Bottom') }}
</b-form-checkbox>
</b-form-group>

View File

@ -13,11 +13,11 @@
<div class="flex-md-shrink-0 mt-3 mt-md-0 buttons">
<a class="btn btn-bg" role="button" :href="profileUrl">
<icon icon="account_circle"></icon>
<translate key="dashboard_btn_my_account">My Account</translate>
{{ $gettext('My Account') }}
</a>
<a v-if="showAdmin" class="btn btn-bg" role="button" :href="adminUrl">
<icon icon="settings"></icon>
<translate key="dashboard_btn_administration">Administration</translate>
{{ $gettext('Administration') }}
</a>
</div>
</div>
@ -47,9 +47,7 @@
<section class="card mb-4" role="region" v-if="showCharts">
<div class="card-header bg-primary-dark d-flex align-items-center">
<div class="flex-fill">
<h3 class="card-title">
<translate key="dashboard_header_listeners_per_station">Listeners Per Station</translate>
</h3>
<h3 class="card-title">{{ $gettext('Listeners Per Station') }}</h3>
</div>
<div class="flex-shrink-0">
<b-button variant="outline-light" size="sm" class="py-2" @click="toggleCharts">{{
@ -66,7 +64,7 @@
<b-tabs pills card lazy v-else>
<b-tab active>
<template #title>
<translate key="tab_average_listeners">Average Listeners</translate>
{{ $gettext('Average Listeners') }}
</template>
<time-series-chart style="width: 100%;" :data="chartsData.average.metrics">
@ -75,7 +73,7 @@
</b-tab>
<b-tab>
<template #title>
<translate key="tab_unique_listeners">Unique Listeners</translate>
{{ $gettext('Unique Listeners') }}
</template>
<time-series-chart style="width: 100%;" :data="chartsData.unique.metrics">
@ -90,14 +88,12 @@
<section class="card" role="region">
<div class="card-header bg-primary-dark d-flex flex-wrap align-items-center">
<div class="flex-fill">
<h2 class="card-title">
<translate key="dashboard_header_stations">Station Overview</translate>
</h2>
<h2 class="card-title">{{ $gettext('Station Overview') }}</h2>
</div>
<div class="flex-shrink-0" v-if="showAdmin">
<b-button variant="outline-light" size="sm" class="py-2" :href="manageStationsUrl">
<icon icon="settings"></icon>
<translate key="dashboard_btn_manage_stations">Manage Stations</translate>
{{ $gettext('Manage Stations') }}
</b-button>
</div>
</div>
@ -117,15 +113,9 @@
<thead>
<tr>
<th class="pr-3">&nbsp;</th>
<th class="pl-2">
<translate key="lang_col_station_name">Station Name</translate>
</th>
<th class="text-center">
<translate key="lang_col_listeners">Listeners</translate>
</th>
<th>
<translate key="lang_col_now_playing">Now Playing</translate>
</th>
<th class="pl-2">{{ $gettext('Station Name') }}</th>
<th class="text-center">{{ $gettext('Listeners') }}</th>
<th>{{ $gettext('Now Playing') }}</th>
<th class="text-right"></th>
</tr>
</thead>
@ -139,7 +129,7 @@
<big>{{ item.station.name }}</big><br>
<template v-if="item.station.is_public">
<a :href="item.links.public" target="_blank">
<translate key="dashboard_link_public_page">Public Page</translate>
{{ $gettext('Public Page') }}
</a>
</template>
</td>
@ -162,7 +152,7 @@
class="flex-shrink-0 pr-3"></album-art>
<div v-if="!item.is_online" class="flex-fill text-muted">
<translate key="station_offline">Station Offline</translate>
{{ $gettext('Station Offline') }}
</div>
<div v-else-if="item.now_playing.song.title !== ''" class="flex-fill">
<strong><span class="nowplaying-title">
@ -179,7 +169,7 @@
</td>
<td class="text-right">
<a class="btn btn-primary" v-bind:href="item.links.manage">
<translate key="dashboard_btn_manage_station">Manage</translate>
{{ $gettext('Manage') }}
</a>
</td>
</tr>

View File

@ -11,7 +11,7 @@
<span class="sr-only">Required</span>
</span>
<span v-if="advanced" class="badge small badge-primary">
<translate key="badge_advanced">Advanced</translate>
{{ $gettext('Advanced') }}
</span>
</b-form-checkbox>

View File

@ -22,7 +22,7 @@
<span class="sr-only">Required</span>
</span>
<span v-if="advanced" class="badge small badge-primary">
<translate key="badge_advanced">Advanced</translate>
{{ $gettext('Advanced') }}
</span>
</template>
<template #description="slotProps">

View File

@ -10,7 +10,7 @@
{{ stationName }}
</template>
<template v-else>
<translate key="lang_title">On-Demand Media</translate>
{{ $gettext('On-Demand Media') }}
</template>
</h2>
</div>

View File

@ -11,13 +11,13 @@
</div>
<div class="now-playing-main">
<h6 class="now-playing-live" v-if="np.live.is_live">
<translate key="lang_live" class="badge badge-primary">Live</translate>
{{ $gettext('Live') }}
{{ np.live.streamer_name }}
</h6>
<div v-if="!np.is_online">
<h4 class="now-playing-title text-muted">
<translate key="station_offline">Station Offline</translate>
{{ $gettext('Station Offline') }}
</h4>
</div>
<div v-else-if="np.now_playing.song.title !== ''">

View File

@ -16,7 +16,7 @@
<template #cell(actions)="row">
<b-button-group size="sm">
<b-button size="sm" variant="primary" @click.prevent="doSubmitRequest(row.item.request_url)">
<translate key="lang_btn_request">Request</translate>
{{ $gettext('Request') }}
</b-button>
</b-button-group>
</template>

View File

@ -10,7 +10,7 @@
{{ stationName }}
</template>
<template v-else>
<translate key="lang_title">Schedule</translate>
{{ $gettext('Schedule') }}
</template>
</h2>
</div>

View File

@ -4,13 +4,13 @@
<div class="d-flex align-items-center">
<div class="flex-fill">
<h5 class="card-title">
<translate key="lang_mixer_title">Mixer</translate>
{{ $gettext('Mixer') }}
</h5>
</div>
<div class="flex-shrink-0 pl-3">
<div class="d-flex flex-row align-items-center">
<div class="flex-shrink-0">
<translate key="lang_playlist_1">Playlist 1</translate>
{{ $gettext('Playlist 1') }}
</div>
<div class="flex-fill px-2">
<input type="range" min="0" max="1" step="0.01" class="custom-range slider"
@ -18,7 +18,7 @@
style="width: 200px; height: 10px;">
</div>
<div class="flex-shrink-0">
<translate key="lang_playlist_2">Playlist 2</translate>
{{ $gettext('Playlist 2') }}
</div>
</div>
</div>

View File

@ -29,7 +29,7 @@
<icon icon="stop"></icon>
</button>
<button class="btn btn-sm" v-on:click="cue()" v-bind:class="{ 'btn-primary': passThrough }">
<translate key="lang_btn_cue">Cue</translate>
{{ $gettext('Cue') }}
</button>
</div>
</div>
@ -61,7 +61,7 @@
<input v-bind:id="id + '_files'" type="file" class="custom-file-input files" accept="audio/*"
multiple="multiple" v-on:change="addNewFiles($event.target.files)">
<label v-bind:for="id + '_files'" class="custom-file-label">
<translate key="lang_btn_add_files_to_playlist">Add Files to Playlist</translate>
{{ $gettext('Add Files to Playlist') }}
</label>
</div>
</div>
@ -72,13 +72,13 @@
<input v-bind:id="id + '_playthrough'" type="checkbox" class="custom-control-input"
v-model="playThrough">
<label v-bind:for="id + '_playthrough'" class="custom-control-label">
<translate key="lang_continuous_play">Continuous Play</translate>
{{ $gettext('Continuous Play') }}
</label>
</div>
<div class="custom-control custom-checkbox custom-control-inline">
<input v-bind:id="id + '_loop'" type="checkbox" class="custom-control-input" v-model="loop">
<label v-bind:for="id + '_loop'" class="custom-control-label">
<translate key="lang_repeat_playlist">Repeat</translate>
{{ $gettext('Repeat') }}
</label>
</div>
</div>

View File

@ -2,7 +2,7 @@
<div class="card settings">
<div class="card-header bg-primary-dark">
<h5 class="card-title">
<translate key="lang_title">WebDJ</translate>
{{ $gettext('WebDJ') }}
<br>
<small>{{ stationName }}</small>
</h5>
@ -13,12 +13,12 @@
<ul class="nav nav-tabs card-header-tabs mt-0">
<li class="nav-item">
<a class="nav-link active" href="#settings" data-toggle="tab">
<translate key="lang_settings_title">Settings</translate>
{{ $gettext('Settings') }}
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#metadata" data-toggle="tab">
<translate key="lang_metadata_title">Metadata</translate>
{{ $gettext('Metadata') }}
</a>
</li>
</ul>
@ -159,7 +159,7 @@
{{ langStreamButton }}
</button>
<button class="btn" v-on:click="cue" v-bind:class="{ 'btn-primary': passThrough }">
<translate key="lang_btn_cue">Cue</translate>
{{ $gettext('Cue') }}
</button>
</div>
</div>

View File

@ -4,11 +4,11 @@
<div class="card-body p-4">
<div class="mb-3">
<h2 class="card-title mb-0 text-center">
<translate key="lang_hdr">Recover Account</translate>
{{ $gettext('Recover Account') }}
</h2>
<h3 class="text-center">
<small class="text-muted">
<translate key="lang_subhdr">Choose a new password for your account.</translate>
{{ $gettext('Choose a new password for your account.') }}
</small>
</h3>
</div>
@ -22,13 +22,13 @@
input-type="password">
<template #label="{lang}">
<icon icon="vpn_key" class="mr-1"></icon>
<translate :key="lang">Password</translate>
{{ $gettext('Password') }}
</template>
</b-wrapped-form-group>
<b-button type="submit" size="lg" block variant="primary" :disabled="v$.form.$invalid"
class="mt-2">
<translate key="btn_submit">Recover Account</translate>
{{ $gettext('Recover Account') }}
</b-button>
</form>
</div>

View File

@ -5,11 +5,11 @@
<div class="row mb-2">
<div class="col-sm">
<h2 class="card-title mb-0 text-center">
<translate key="lang_hdr_setup">AzuraCast First-Time Setup</translate>
{{ $gettext('AzuraCast First-Time Setup') }}
</h2>
<h3 class="text-center">
<small class="text-muted">
<translate key="lang_subhdr_welcome">Welcome to AzuraCast!</translate>
{{ $gettext('Welcome to AzuraCast!') }}
</small>
</h3>
</div>
@ -18,10 +18,12 @@
<div class="row mb-3">
<div class="col-sm">
<p class="card-text">
<translate key="lang_intro_1">Let's get started by creating your Super Administrator account.</translate>
{{ $gettext('Let\'s get started by creating your Super Administrator account.') }}
</p>
<p class="card-text">
<translate key="lang_intro_2">This account will have full access to the system, and you'll automatically be logged in to it for the rest of setup.</translate>
{{
$gettext('This account will have full access to the system, and you\'ll automatically be logged in to it for the rest of setup.')
}}
</p>
</div>
</div>
@ -35,7 +37,7 @@
input-type="email">
<template #label="{lang}">
<icon icon="email" class="mr-1"></icon>
<translate :key="lang">E-mail Address</translate>
{{ $gettext('E-mail Address') }}
</template>
</b-wrapped-form-group>
@ -43,13 +45,13 @@
input-type="password">
<template #label="{lang}">
<icon icon="vpn_key" class="mr-1"></icon>
<translate :key="lang">Password</translate>
{{ $gettext('Password') }}
</template>
</b-wrapped-form-group>
<b-button type="submit" size="lg" block variant="primary" :disabled="v$.form.$invalid"
class="mt-2">
<translate key="btn_create_acct">Create Account</translate>
{{ $gettext('Create Account') }}
</b-button>
</form>
</div>

View File

@ -4,15 +4,15 @@
<setup-step :step="3"></setup-step>
</template>
<template #cardTitle>
<translate key="lang_setup_settings_hdr">Customize AzuraCast Settings</translate>
{{ $gettext('Customize AzuraCast Settings') }}
</template>
<template #cardUpper>
<info-card>
<translate key="lang_setup_settings_info">Complete the setup process by providing some information about your broadcast environment. These settings can be changed later from the administration panel.</translate>
{{ $gettext('Complete the setup process by providing some information about your broadcast environment. These settings can be changed later from the administration panel.') }}
</info-card>
</template>
<template #submitButtonName>
<translate key="lang_setup_settings_btn">Save and Continue</translate>
{{ $gettext('Save and Continue') }}
</template>
</admin-settings>
</template>

View File

@ -6,7 +6,7 @@
<span v-else>1</span>
</div>
<span class="stepper-text">
<translate key="lang_step_register">Create Account</translate>
{{ $gettext('Create Account') }}
</span>
</div>
<div :class="getStepperClass(2)">
@ -15,7 +15,7 @@
<span v-else>2</span>
</div>
<span class="stepper-text">
<translate key="lang_step_station">Create Station</translate>
{{ $gettext('Create Station') }}
</span>
</div>
<div :class="getStepperClass(3)">
@ -23,7 +23,7 @@
<span>3</span>
</div>
<span class="stepper-text">
<translate key="lang_step_settings">System Settings</translate>
{{ $gettext('System Settings') }}
</span>
</div>
</div>

View File

@ -5,18 +5,18 @@
<b-card no-body>
<div class="card-header bg-primary-dark">
<h3 class="card-title">
<translate key="lang_hdr_new_station">Create a New Radio Station</translate>
{{ $gettext('Create a New Radio Station') }}
</h3>
</div>
<info-card>
<translate key="lang_hdr_info">Continue the setup process by creating your first radio station below. You can edit any of these details later.</translate>
{{ $gettext('Continue the setup process by creating your first radio station below. You can edit any of these details later.') }}
</info-card>
<admin-stations-form v-bind="$props" ref="form" :is-edit-mode="false" :create-url="createUrl"
@submitted="onSubmitted">
<template #submitButtonText>
<translate key="lang_btn_create_and_continue">Create and Continue</translate>
{{ $gettext('Create and Continue') }}
</template>
</admin-stations-form>
</b-card>

View File

@ -4,21 +4,25 @@
<section class="card" role="region">
<div class="card-header bg-primary-dark">
<h2 class="card-title">
<translate key="lang_hdr_export">Export Media to CSV</translate>
{{ $gettext('Export Media to CSV') }}
</h2>
</div>
<div class="card-body">
<p class="card-text">
<translate key="export_details">Click the button below to generate a CSV file with all of this station's media. You can make any necessary changes, and then import the file using the file picker on the right.</translate>
{{
$gettext('Click the button below to generate a CSV file with all of this station\'s media. You can make any necessary changes, and then import the file using the file picker on the right.')
}}
</p>
<p class="card-text">
<translate key="export_details_2">Note: If your media metadata has UTF-8 characters, you should use a spreadsheet editor that supports UTF-8 encoding, like OpenOffice.</translate>
{{
$gettext('Note: If your media metadata has UTF-8 characters, you should use a spreadsheet editor that supports UTF-8 encoding, like OpenOffice.')
}}
</p>
<div class="buttons">
<b-button variant="primary" size="lg" block :href="apiUrl">
<translate key="btn_export">Export Media to CSV</translate>
{{ $gettext('Export Media to CSV') }}
</b-button>
</div>
</div>
@ -28,25 +32,27 @@
<section class="card" role="region">
<div class="card-header bg-primary-dark">
<h2 class="card-title">
<translate key="lang_hdr_import">Import Changes from CSV</translate>
{{ $gettext('Import Changes from CSV') }}
</h2>
</div>
<div class="card-body">
<p class="card-text">
<translate key="import_details">The format and headers of this CSV should match the format generated by the export function on this page.</translate>
{{
$gettext('The format and headers of this CSV should match the format generated by the export function on this page.')
}}
</p>
<b-form class="form" @submit.prevent="doSubmit">
<b-form-group label-for="import_file">
<template #label>
<translate key="lang_form_import_file">Select CSV File</translate>
{{ $gettext('Select CSV File') }}
</template>
<b-form-file id="import_modal_playlist_file" v-model="importFile"></b-form-file>
</b-form-group>
<b-button type="submit" size="lg" block variant="primary" class="mt-2">
<translate key="btn_import">Import Changes from CSV</translate>
{{ $gettext('Import Changes from CSV') }}
</b-button>
</b-form>
@ -62,10 +68,10 @@
<b-thead>
<b-tr>
<b-th class="p-2">
<translate key="col_media">Media File</translate>
{{ $gettext('Media File') }}
</b-th>
<b-th class="p-2">
<translate key="col_results">Import Results</translate>
{{ $gettext('Import Results') }}
</b-th>
</b-tr>
</b-thead>
@ -78,12 +84,12 @@
<b-td class="p-2" style="overflow-x: auto;">
<template v-if="row.success">
<div class="text-success">
<translate key="import_success">Updated successfully.</translate>
{{ $gettext('Updated successfully.') }}
</div>
</template>
<template v-else>
<div class="text-danger">
<translate key="import_failure">Unable to update.</translate>
{{ $gettext('Unable to update.') }}
</div>
<div v-if="row.error">
{{ row.error }}
@ -96,7 +102,7 @@
</div>
<template #modal-footer>
<b-button variant="default" type="button" @click="closeModal">
<translate key="lang_btn_close">Close</translate>
{{ $gettext('Close') }}
</b-button>
</template>
</b-modal>

View File

@ -2,13 +2,13 @@
<section class="card" role="region">
<div class="card-header bg-primary-dark">
<h2 class="card-title">
<translate key="lang_hdr">Custom Fallback File</translate>
{{ $gettext('Custom Fallback File') }}
</h2>
</div>
<info-card>
<p class="card-text">
<translate key="lang_fallback_1">This file will be played on your radio station any time no media is scheduled to play or a critical error occurs that interrupts regular broadcasting.</translate>
{{ $gettext('This file will be played on your radio station any time no media is scheduled to play or a critical error occurs that interrupts regular broadcasting.') }}
</p>
</info-card>
@ -17,7 +17,7 @@
<b-form-row>
<b-form-group class="col-md-6" label-for="intro_file">
<template #label>
<translate key="intro_file">Select Custom Fallback File</translate>
{{ $gettext('Select Custom Fallback File') }}
</template>
<flow-upload :target-url="apiUrl" :valid-mime-types="acceptMimeTypes"
@ -26,22 +26,22 @@
<b-form-group class="col-md-6">
<template #label>
<translate key="existing_intro">Current Custom Fallback File</translate>
{{ $gettext('Current Custom Fallback File') }}
</template>
<div v-if="hasFallback">
<div class="buttons pt-3">
<b-button block variant="bg" :href="apiUrl"
target="_blank">
<translate key="btn_download">Download</translate>
{{ $gettext('Download') }}
</b-button>
<b-button block variant="danger" @click="deleteFallback">
<translate key="btn_delete_fallback">Clear File</translate>
{{ $gettext('Clear File') }}
</b-button>
</div>
</div>
<div v-else>
<translate key="no_existing_fallback">There is no existing custom fallback file associated with this station.</translate>
{{ $gettext('There is no existing custom fallback file associated with this station.') }}
</div>
</b-form-group>
</b-form-row>

View File

@ -4,7 +4,7 @@
<div class="card">
<div class="card-header bg-primary-dark">
<h2 class="card-title">
<translate key="hdr_logs">Available Logs</translate>
{{ $gettext('Available Logs') }}
</h2>
</div>
@ -17,27 +17,29 @@
<div class="card">
<div class="card-header bg-primary-dark">
<h2 class="card-title">
<translate key="hdr_need_help">Need Help?</translate>
{{ $gettext('Need Help?') }}
</h2>
</div>
<div class="card-body">
<p class="card-text">
<translate key="help_section_1">You can find answers for many common questions in our support documents.</translate>
{{ $gettext('You can find answers for many common questions in our support documents.') }}
</p>
<p class="card-text">
<a href="https://docs.azuracast.com/en/user-guide/troubleshooting" target="_blank">
<translate key="help_link_support_docs">Support Documents</translate>
{{ $gettext('Support Documents') }}
</a>
</p>
<p class="card-text">
<translate key="help_section_2">If you're experiencing a bug or error, you can submit a GitHub issue using the link below.</translate>
{{
$gettext('If you\'re experiencing a bug or error, you can submit a GitHub issue using the link below.')
}}
</p>
</div>
<div class="card-actions">
<a class="btn btn-outline-primary" role="button"
href="https://github.com/AzuraCast/AzuraCast/issues/new/choose" target="_blank">
<icon icon="contact_support"></icon>
<translate key="btn_add_github_issue">Add New GitHub Issue</translate>
{{ $gettext('Add New GitHub Issue') }}
</a>
</div>
</div>

View File

@ -4,16 +4,16 @@
<b-form-row class="mb-3">
<b-wrapped-form-group class="col-md-12" id="edit_form_name" :field="form.name">
<template #label="{lang}">
<translate :key="lang">Programmatic Name</translate>
{{ $gettext('Programmatic Name') }}
</template>
<template #description="{lang}">
<translate :key="lang">A name for this stream that will be used internally in code. Should only contain letters, numbers, and underscores (i.e. "stream_lofi").</translate>
{{ $gettext('A name for this stream that will be used internally in code. Should only contain letters, numbers, and underscores (i.e. "stream_lofi").') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_format" :field="form.format">
<template #label="{lang}">
<translate :key="lang">Audio Format</translate>
{{ $gettext('Audio Format') }}
</template>
<template #default="props">
<b-form-radio-group
@ -27,7 +27,7 @@
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_bitrate" :field="form.bitrate">
<template #label="{lang}">
<translate :key="lang">Audio Bitrate (kbps)</translate>
{{ $gettext('Audio Bitrate (kbps)') }}
</template>
<template #default="props">
<b-form-radio-group

View File

@ -3,19 +3,25 @@
<section class="card" role="region">
<div class="card-header bg-primary-dark">
<h2 class="card-title">
<translate key="lang_hdr">Edit Liquidsoap Configuration</translate>
{{ $gettext('Edit Liquidsoap Configuration') }}
</h2>
</div>
<info-card>
<p class="card-text">
<translate key="lang_ls_config_1">Using this page, you can customize several sections of the Liquidsoap configuration. This allows you to add advanced functionality to your station's AutoDJ.</translate>
{{
$gettext('Using this page, you can customize several sections of the Liquidsoap configuration. This allows you to add advanced functionality to your station\'s AutoDJ.')
}}
</p>
<p class="card-text">
<translate key="lang_ls_config_2">The editable text boxes are areas where you can insert custom configuration code. The non-editable sections are automatically generated by AzuraCast.</translate>
{{
$gettext('The editable text boxes are areas where you can insert custom configuration code. The non-editable sections are automatically generated by AzuraCast.')
}}
</p>
<p class="card-text">
<translate key="lang_ls_config_3">This is an advanced feature and custom code is not officially supported by AzuraCast. You may break your station by adding custom code, but removing it should fix any issues.</translate>
{{
$gettext('This is an advanced feature and custom code is not officially supported by AzuraCast. You may break your station by adding custom code, but removing it should fix any issues.')
}}
</p>
</info-card>
@ -32,7 +38,7 @@
</b-form-fieldset>
<b-button size="lg" type="submit" :variant="(v$.form.$invalid) ? 'danger' : 'primary'">
<translate key="lang_btn_save_changes">Save Changes</translate>
{{ $gettext('Save Changes') }}
</b-button>
</div>
</b-overlay>

View File

@ -6,7 +6,7 @@
<b-row class="align-items-center">
<b-col md="7">
<h2 class="card-title">
<translate key="lang_title">Music Files</translate>
{{ $gettext('Music Files') }}
</h2>
</b-col>
<b-col md="5" class="text-right text-white-50">
@ -21,12 +21,12 @@
</div>
<div class="flex-fill">
<p class="mb-0">
<translate key="lang_sftp_details">You can also upload files in bulk via SFTP.</translate>
{{ $gettext('You can also upload files in bulk via SFTP.') }}
</p>
</div>
<div class="flex-shrink-0 ml-2">
<a class="btn btn-sm btn-light" target="_blank" :href="sftpUrl">
<translate key="lang_sftp_btn">Manage SFTP Accounts</translate>
{{ $gettext('Manage SFTP Accounts') }}
</a>
</div>
</div>

View File

@ -5,21 +5,21 @@
<b-tabs content-class="mt-3" pills>
<b-tab active>
<template #title>
<translate key="tab_basic_info">Basic Information</translate>
{{ $gettext('Basic Information') }}
</template>
<media-form-basic-info :form="v$.form"></media-form-basic-info>
</b-tab>
<b-tab>
<template #title>
<translate key="tab_playlists">Playlists</translate>
{{ $gettext('Playlists') }}
</template>
<media-form-playlists :form="v$.form" :playlists="playlists"></media-form-playlists>
</b-tab>
<b-tab lazy>
<template #title>
<translate key="tab_album_art">Album Art</translate>
{{ $gettext('Album Art') }}
</template>
<media-form-album-art :album-art-url="albumArtUrl"></media-form-album-art>
@ -27,7 +27,7 @@
<b-tab v-if="customFields.length > 0">
<template #title>
<translate key="tab_custom_fields">Custom Fields</translate>
{{ $gettext('Custom Fields') }}
</template>
<media-form-custom-fields :form="v$.form" :custom-fields="customFields"></media-form-custom-fields>
@ -35,7 +35,7 @@
<b-tab lazy>
<template #title>
<translate key="tab_waveform_editor">Visual Cue Editor</translate>
{{ $gettext('Visual Cue Editor') }}
</template>
<media-form-waveform-editor :form="form" :audio-url="audioUrl"
@ -44,7 +44,7 @@
<b-tab>
<template #title>
<translate key="tab_advanced">Advanced</translate>
{{ $gettext('Advanced') }}
</template>
<media-form-advanced-settings :form="v$.form" :song-length="songLength"></media-form-advanced-settings>

View File

@ -3,7 +3,7 @@
<b-form-row>
<b-form-group class="col-md-6" label-for="edit_form_song_length">
<template #label>
<translate key="lang_song_length">Song Length</translate>
{{ $gettext('Song Length') }}
</template>
<b-form-input id="edit_form_song_length" readonly :value="songLength"></b-form-input>
@ -12,62 +12,68 @@
<b-wrapped-form-group class="col-md-6" id="edit_form_amplify" :field="form.amplify"
input-type="number" :input-attrs="{ step: '0.1' }">
<template #label="{lang}">
<translate :key="lang">Amplify: Amplification (dB)</translate>
{{ $gettext('Amplify: Amplification (dB)') }}
</template>
<template #description="{lang}">
<translate :key="lang">The volume in decibels to amplify the track with. Leave blank to use the system default.</translate>
{{
$gettext('The volume in decibels to amplify the track with. Leave blank to use the system default.')
}}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_fade_overlap" :field="form.fade_overlap"
input-type="number" :input-attrs="{ step: '0.1' }">
<template #label="{lang}">
<translate :key="lang">Custom Fading: Overlap Time (seconds)</translate>
{{ $gettext('Custom Fading: Overlap Time (seconds)') }}
</template>
<template #description="{lang}">
<translate :key="lang">The time that this song should overlap its surrounding songs when fading. Leave blank to use the system default.</translate>
{{
$gettext('The time that this song should overlap its surrounding songs when fading. Leave blank to use the system default.')
}}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_fade_in" :field="form.fade_in"
input-type="number" :input-attrs="{ step: '0.1' }">
<template #label="{lang}">
<translate :key="lang">Custom Fading: Fade-In Time (seconds)</translate>
{{ $gettext('Custom Fading: Fade-In Time (seconds)') }}
</template>
<template #description="{lang}">
<translate :key="lang">The time period that the song should fade in. Leave blank to use the system default.</translate>
{{
$gettext('The time period that the song should fade in. Leave blank to use the system default.')
}}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_fade_out" :field="form.fade_out"
input-type="number" :input-attrs="{ step: '0.1' }">
<template #label="{lang}">
<translate :key="lang">Custom Fading: Fade-Out Time (seconds)</translate>
{{ $gettext('Custom Fading: Fade-Out Time (seconds)') }}
</template>
<template #description="{lang}">
<translate :key="lang">The time period that the song should fade out. Leave blank to use the system default.</translate>
{{
$gettext('The time period that the song should fade out. Leave blank to use the system default.')
}}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_cue_in" :field="form.cue_in"
input-type="number" :input-attrs="{ step: '0.1' }">
<template #label="{lang}">
<translate :key="lang">Custom Cues: Cue-In Point (seconds)</translate>
{{ $gettext('Custom Cues: Cue-In Point (seconds)') }}
</template>
<template #description="{lang}">
<translate
:key="lang">Seconds from the start of the song that the AutoDJ should start playing.</translate>
{{ $gettext('Seconds from the start of the song that the AutoDJ should start playing.') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_cue_out" :field="form.cue_out"
input-type="number" :input-attrs="{ step: '0.1' }">
<template #label="{lang}">
<translate :key="lang">Custom Cues: Cue-Out Point (seconds)</translate>
{{ $gettext('Custom Cues: Cue-Out Point (seconds)') }}
</template>
<template #description="{lang}">
<translate
:key="lang">Seconds from the start of the song that the AutoDJ should stop playing.</translate>
{{ $gettext('Seconds from the start of the song that the AutoDJ should stop playing.') }}
</template>
</b-wrapped-form-group>
</b-form-row>

View File

@ -5,13 +5,13 @@
<b-img :src="albumArtSrc" rounded fluid></b-img>
<br>
<b-button block variant="link" class="text-danger mt-2" @click="deleteArt">
<translate key="lang_btn_delete_art">Delete Album Art</translate>
{{ $gettext('Delete Album Art') }}
</b-button>
</b-col>
<b-col md="8">
<b-form-group label-for="edit_form_art">
<template #label>
<translate key="lang_btn_replace_art">Replace Album Cover Art</translate>
{{ $gettext('Replace Album Cover Art') }}
</template>
<b-form-file id="edit_form_art" v-model="artFile" accept="image/*"
@input="uploadNewArt"></b-form-file>

View File

@ -3,51 +3,49 @@
<b-form-row>
<b-wrapped-form-group class="col-md-6" id="edit_form_path" :field="form.path">
<template #label="{lang}">
<translate :key="lang">File Name</translate>
{{ $gettext('File Name') }}
</template>
<template #description="{lang}">
<translate
:key="lang">The relative path of the file in the station's media directory.</translate>
{{ $gettext('The relative path of the file in the station\'s media directory.') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_title" :field="form.title">
<template #label="{lang}">
<translate :key="lang">Song Title</translate>
{{ $gettext('Song Title') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_artist" :field="form.artist">
<template #label="{lang}">
<translate :key="lang">Song Artist</translate>
{{ $gettext('Song Artist') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_genre" :field="form.genre">
<template #label="{lang}">
<translate :key="lang">Song Genre</translate>
{{ $gettext('Song Genre') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_album" :field="form.album">
<template #label="{lang}">
<translate :key="lang">Song Album</translate>
{{ $gettext('Song Album') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_lyrics" :field="form.lyrics" input-type="textarea">
<template #label="{lang}">
<translate :key="lang">Song Lyrics</translate>
{{ $gettext('Song Lyrics') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_isrc" :field="form.isrc">
<template #label="{lang}">
<translate :key="lang">ISRC</translate>
{{ $gettext('ISRC') }}
</template>
<template #description="{lang}">
<translate
:key="lang">International Standard Recording Code, used for licensing reports.</translate>
{{ $gettext('International Standard Recording Code, used for licensing reports.') }}
</template>
</b-wrapped-form-group>
</b-form-row>

View File

@ -3,7 +3,7 @@
<b-row>
<b-wrapped-form-group class="col-md-12" id="edit_form_playlists" :field="form.playlists">
<template #label>
<translate key="field_playlists">Playlists</translate>
{{ $gettext('Playlists') }}
</template>
<template #default="props">
<b-form-checkbox-group

View File

@ -1,7 +1,7 @@
<template>
<div>
<p>
<translate key="lang_waveform_editor_desc">Set cue and fade points using the visual editor. The timestamps will be saved to the corresponding fields in the advanced playback settings.</translate>
{{ $gettext('Set cue and fade points using the visual editor. The timestamps will be saved to the corresponding fields in the advanced playback settings.') }}
</p>
<b-form-group>
@ -12,34 +12,34 @@
<b-button-group>
<b-button variant="light" @click="playAudio">
<icon icon="play_arrow"></icon>
<span class="sr-only"><translate key="lang_btn_play">Play</translate></span>
<span class="sr-only">{{ $gettext('Play') }}</span>
</b-button>
<b-button variant="dark" @click="stopAudio">
<icon icon="stop"></icon>
<span class="sr-only"><translate key="lang_btn_stop">Stop</translate></span>
<span class="sr-only">{{ $gettext('Stop') }}</span>
</b-button>
</b-button-group>
<b-button-group>
<b-button variant="primary" @click="setCueIn">
<translate key="lang_btn_set_cue_in">Set Cue In</translate>
{{ $gettext('Set Cue In') }}
</b-button>
<b-button variant="primary" @click="setCueOut">
<translate key="lang_btn_set_cue_out">Set Cue Out</translate>
{{ $gettext('Set Cue Out') }}
</b-button>
</b-button-group>
<b-button-group>
<b-button variant="warning" @click="setFadeOverlap">
<translate key="lang_btn_set_fade_overlap">Set Overlap</translate>
{{ $gettext('Set Overlap') }}
</b-button>
</b-button-group>
<b-button-group>
<b-button variant="danger" @click="setFadeIn">
<translate key="lang_btn_set_fade_in">Set Fade In</translate>
{{ $gettext('Set Fade In') }}
</b-button>
<b-button variant="danger" @click="setFadeOut">
<translate key="lang_btn_set_fade_out">Set Fade Out</translate>
{{ $gettext('Set Fade Out') }}
</b-button>
</b-button-group>
</b-form-group>

View File

@ -6,7 +6,7 @@
:title="langPlaylistDropdown">
<template #button-content>
<icon icon="clear_all"></icon>
<translate key="lang_playlists_title">Playlists</translate>
{{ $gettext('Playlists') }}
<span class="caret"></span>
</template>
<b-dropdown-form class="pt-2" @submit.prevent="setPlaylists">
@ -33,17 +33,17 @@
</div>
<b-button type="submit" size="sm" variant="primary">
<translate key="lang_btn_save">Save</translate>
{{ $gettext('Save') }}
</b-button>
<b-button type="button" size="sm" variant="warning" @click="clearPlaylists()">
<translate key="lang_btn_clear">Clear</translate>
{{ $gettext('Clear') }}
</b-button>
</b-dropdown-form>
</b-dropdown>
</div>
<b-button size="sm" variant="primary" v-b-modal.move_file>
<icon icon="open_with"></icon>
<translate key="lang_btn_move">Move</translate>
{{ $gettext('Move') }}
</b-button>
<b-dropdown size="sm" variant="default">
<template #button-content>
@ -51,26 +51,26 @@
{{ langMore }}
</template>
<b-dropdown-item @click="doQueue" v-b-tooltip.hover :title="langQueue">
<translate key="lang_btn_queue">Queue</translate>
{{ $gettext('Queue') }}
</b-dropdown-item>
<b-dropdown-item v-if="supportsImmediateQueue" @click="doImmediateQueue" v-b-tooltip.hover
:title="langImmediateQueue">
<translate key="lang_btn_immediate_queue">Play Now</translate>
{{ $gettext('Play Now') }}
</b-dropdown-item>
<b-dropdown-item @click="doReprocess" v-b-tooltip.hover :title="langReprocess">
<translate key="lang_btn_reprocess">Reprocess</translate>
{{ $gettext('Reprocess') }}
</b-dropdown-item>
</b-dropdown>
<b-button size="sm" variant="danger" @click="doDelete">
<icon icon="delete"></icon>
<translate key="lang_btn_delete">Delete</translate>
{{ $gettext('Delete') }}
</b-button>
</div>
<div class="col-md-4 text-right">
<b-button size="sm" variant="primary" v-b-modal.create_directory>
<icon icon="folder"></icon>
<translate key="lang_btn_new_folder">New Folder</translate>
{{ $gettext('New Folder') }}
</b-button>
</div>
</div>

View File

@ -4,7 +4,7 @@
<b-col md="6">
<b-button size="sm" variant="primary" @click="pageBack" :disabled="dirHistory.length === 0">
<icon icon="chevron_left"></icon>
<translate key="lang_btn_back">Back</translate>
{{ $gettext('Back') }}
</b-button>
</b-col>
<b-col md="6" class="text-right">
@ -32,10 +32,10 @@
</b-row>
<template #modal-footer>
<b-button variant="default" @click="close">
<translate key="lang_btn_close">Close</translate>
{{ $gettext('Close') }}
</b-button>
<b-button variant="primary" @click="doMove">
<translate key="lang_btn_move">Move to Directory</translate>
{{ $gettext('Move to Directory') }}
</b-button>
</template>
</b-modal>

View File

@ -3,16 +3,16 @@
<b-form @submit.prevent="doRename">
<b-wrapped-form-group id="new_directory_name" :field="v$.form.newPath" autofocus>
<template #label="{lang}">
<translate :key="lang">New File Name</translate>
{{ $gettext('New File Name') }}
</template>
</b-wrapped-form-group>
</b-form>
<template #modal-footer>
<b-button variant="default" @click="close">
<translate key="lang_btn_close">Close</translate>
{{ $gettext('Close') }}
</b-button>
<b-button :variant="(v$.form.$invalid) ? 'danger' : 'primary'" @click="doRename">
<translate key="lang_btn_rename">Rename</translate>
{{ $gettext('Rename') }}
</b-button>
</template>
</b-modal>

View File

@ -6,10 +6,12 @@
<b-wrapped-form-group class="col-md-12" id="edit_form_custom_listen_url"
:field="form.custom_listen_url" advanced>
<template #label="{lang}">
<translate :key="lang">Mount Point URL</translate>
{{ $gettext('Mount Point URL') }}
</template>
<template #description="{lang}">
<translate :key="lang">You can set a custom URL for this stream that AzuraCast will use when referring to it. Leave empty to use the default value.</translate>
{{
$gettext('You can set a custom URL for this stream that AzuraCast will use when referring to it. Leave empty to use the default value.')
}}
</template>
</b-wrapped-form-group>
@ -20,10 +22,12 @@
input-type="textarea" advanced
:input-attrs="{class: 'text-preformatted', spellcheck: 'false', 'max-rows': 25, rows: 5}">
<template #label="{lang}">
<translate :key="lang">Custom Frontend Configuration</translate>
{{ $gettext('Custom Frontend Configuration') }}
</template>
<template #description="{lang}">
<translate :key="lang">You can include any special mount point settings here, in either JSON { key: 'value' } format or XML &lt;key&gt;value&lt;/key&gt;</translate>
{{
$gettext('You can include any special mount point settings here, in either JSON { key: \'value\' } format or XML &lt;key&gt;value&lt;/key&gt;')
}}
</template>
</b-wrapped-form-group>

View File

@ -4,11 +4,10 @@
<b-form-row class="mb-3">
<b-wrapped-form-checkbox class="col-md-12" id="edit_form_enable_autodj" :field="form.enable_autodj">
<template #label="{lang}">
<translate :key="lang">Enable AutoDJ</translate>
{{ $gettext('Enable AutoDJ') }}
</template>
<template #description="{lang}">
<translate
:key="lang">If enabled, the AutoDJ will automatically play music to this mount point.</translate>
{{ $gettext('If enabled, the AutoDJ will automatically play music to this mount point.') }}
</template>
</b-wrapped-form-checkbox>
</b-form-row>
@ -16,7 +15,7 @@
<b-form-row v-if="form.enable_autodj.$model">
<b-wrapped-form-group class="col-md-6" id="edit_form_autodj_format" :field="form.autodj_format">
<template #label="{lang}">
<translate :key="lang">AutoDJ Format</translate>
{{ $gettext('AutoDJ Format') }}
</template>
<template #default="props">
<b-form-radio-group
@ -31,7 +30,7 @@
<b-wrapped-form-group class="col-md-6" id="edit_form_autodj_bitrate" :field="form.autodj_bitrate"
v-if="formatSupportsBitrateOptions">
<template #label="{lang}">
<translate :key="lang">AutoDJ Bitrate (kbps)</translate>
{{ $gettext('AutoDJ Bitrate (kbps)') }}
</template>
<template #default="props">
<b-form-radio-group

View File

@ -6,56 +6,68 @@
<b-wrapped-form-group class="col-md-6" id="edit_form_name" :field="form.name">
<template #label="{lang}">
<translate :key="lang">Mount Point URL</translate>
{{ $gettext('Mount Point URL') }}
</template>
<template #description="{lang}">
<translate :key="lang">This name should always begin with a slash (/), and must be a valid URL, such as /autodj.mp3</translate>
{{
$gettext('This name should always begin with a slash (/), and must be a valid URL, such as /autodj.mp3')
}}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_display_name" :field="form.display_name">
<template #label="{lang}">
<translate :key="lang">Display Name</translate>
{{ $gettext('Display Name') }}
</template>
<template #description="{lang}">
<translate :key="lang">The display name assigned to this mount point when viewing it on administrative or public pages. Leave blank to automatically generate one.</translate>
{{
$gettext('The display name assigned to this mount point when viewing it on administrative or public pages. Leave blank to automatically generate one.')
}}
</template>
</b-wrapped-form-group>
<b-wrapped-form-checkbox class="col-md-6" id="edit_form_is_visible_on_public_pages"
:field="form.is_visible_on_public_pages">
<template #label="{lang}">
<translate :key="lang">Show on Public Pages</translate>
{{ $gettext('Show on Public Pages') }}
</template>
<template #description="{lang}">
<translate :key="lang">Enable to allow listeners to select this mount point on this station's public pages.</translate>
{{
$gettext('Enable to allow listeners to select this mount point on this station\'s public pages.')
}}
</template>
</b-wrapped-form-checkbox>
<b-wrapped-form-checkbox class="col-md-6" id="edit_form_is_default" :field="form.is_default">
<template #label="{lang}">
<translate :key="lang">Set as Default Mount Point</translate>
{{ $gettext('Set as Default Mount Point') }}
</template>
<template #description="{lang}">
<translate :key="lang">If this mount is the default, it will be played on the radio preview and the public radio page in this system.</translate>
{{
$gettext('If this mount is the default, it will be played on the radio preview and the public radio page in this system.')
}}
</template>
</b-wrapped-form-checkbox>
<b-wrapped-form-group class="col-md-6" id="edit_form_relay_url" :field="form.relay_url">
<template #label="{lang}">
<translate :key="lang">Relay Stream URL</translate>
{{ $gettext('Relay Stream URL') }}
</template>
<template #description="{lang}">
<translate :key="lang">Enter the full URL of another stream to relay its broadcast through this mount point.</translate>
{{
$gettext('Enter the full URL of another stream to relay its broadcast through this mount point.')
}}
</template>
</b-wrapped-form-group>
<b-wrapped-form-checkbox class="col-md-6" id="edit_form_is_public" :field="form.is_public">
<template #label="{lang}">
<translate :key="lang">Publish to "Yellow Pages" Directories</translate>
{{ $gettext('Publish to "Yellow Pages" Directories') }}
</template>
<template #description="{lang}">
<translate :key="lang">Enable to advertise this mount point on "Yellow Pages" public radio directories.</translate>
{{
$gettext('Enable to advertise this mount point on "Yellow Pages" public radio directories.')
}}
</template>
</b-wrapped-form-checkbox>
@ -63,17 +75,19 @@
:field="form.max_listener_duration" input-type="number"
:input-attrs="{min: '0', max: '2147483647'}">
<template #label="{lang}">
<translate :key="lang">Max Listener Duration</translate>
{{ $gettext('Max Listener Duration') }}
</template>
<template #description="{lang}">
<translate :key="lang">Set the length of time (seconds) a listener will stay connected to the stream. If set to 0, listeners can stay connected infinitely.</translate>
{{
$gettext('Set the length of time (seconds) a listener will stay connected to the stream. If set to 0, listeners can stay connected infinitely.')
}}
</template>
</b-wrapped-form-group>
<template v-if="isShoutcast">
<b-wrapped-form-group class="col-md-6" id="edit_form_authhash" :field="form.authhash">
<template #label="{lang}">
<translate :key="lang">YP Directory Authorization Hash</translate>
{{ $gettext('YP Directory Authorization Hash') }}
</template>
<template #description><span v-html="langAuthhashDesc"></span></template>
</b-wrapped-form-group>
@ -81,10 +95,12 @@
<template v-if="isIcecast">
<b-wrapped-form-group class="col-md-6" id="edit_form_fallback_mount" :field="form.fallback_mount">
<template #label="{lang}">
<translate :key="lang">Fallback Mount</translate>
{{ $gettext('Fallback Mount') }}
</template>
<template #description="{lang}">
<translate :key="lang">If this mount point is not playing audio, listeners will automatically be redirected to this mount point. The default is /error.mp3, a repeating error message.</translate>
{{
$gettext('If this mount point is not playing audio, listeners will automatically be redirected to this mount point. The default is /error.mp3, a repeating error message.')
}}
</template>
</b-wrapped-form-group>
</template>

View File

@ -4,10 +4,10 @@
<b-form-row>
<b-form-group class="col-md-6" label-for="intro_file">
<template #label>
<translate key="intro_file">Select Intro File</translate>
{{ $gettext('Select Intro File') }}
</template>
<template #description>
<translate key="intro_file_desc">This introduction file should exactly match the bitrate and format of the mount point itself.</translate>
{{ $gettext('This introduction file should exactly match the bitrate and format of the mount point itself.') }}
</template>
<flow-upload :target-url="targetUrl" :valid-mime-types="acceptMimeTypes"
@ -16,21 +16,21 @@
<b-form-group class="col-md-6">
<template #label>
<translate key="existing_intro">Current Intro File</translate>
{{ $gettext('Current Intro File') }}
</template>
<div v-if="hasIntro">
<div class="buttons pt-3">
<b-button v-if="editIntroUrl" block variant="bg" :href="editIntroUrl" target="_blank">
<translate key="btn_download">Download</translate>
{{ $gettext('Download') }}
</b-button>
<b-button block variant="danger" @click="deleteIntro">
<translate key="btn_delete_intro">Clear File</translate>
{{ $gettext('Clear File') }}
</b-button>
</div>
</div>
<div v-else>
<translate key="no_existing_intro">There is no existing intro file associated with this mount point.</translate>
{{ $gettext('There is no existing intro file associated with this mount point.') }}
</div>
</b-form-group>
</b-form-row>

View File

@ -5,21 +5,21 @@
<b-form-row>
<b-wrapped-form-group class="col-md-12" id="form_edit_name" :field="v$.form.name">
<template #label="{lang}">
<translate :key="lang">New Playlist Name</translate>
{{ $gettext('New Playlist Name') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-12" id="form_edit_clone" :field="v$.form.clone">
<template #label="{lang}">
<translate :key="lang">Customize Copy</translate>
{{ $gettext('Customize Copy') }}
</template>
<template #default="props">
<b-form-checkbox-group stacked :id="props.id" v-model="props.field.$model">
<b-form-checkbox value="media">
<translate key="lang_clone_media">Copy associated media and folders.</translate>
{{ $gettext('Copy associated media and folders.') }}
</b-form-checkbox>
<b-form-checkbox value="schedule">
<translate key="lang_clone_schedule">Copy scheduled playback times.</translate>
{{ $gettext('Copy scheduled playback times.') }}
</b-form-checkbox>
</b-form-checkbox-group>
</template>

View File

@ -4,23 +4,21 @@
<b-form-row>
<b-wrapped-form-group class="col-md-6" id="edit_form_backend_options" :field="form.backend_options">
<template #label="{lang}">
<translate :key="lang">Advanced Manual AutoDJ Scheduling Options</translate>
{{ $gettext('Advanced Manual AutoDJ Scheduling Options') }}
</template>
<template #description="{lang}">
<translate :key="lang">Control how this playlist is handled by the AutoDJ software.</translate>
{{ $gettext('Control how this playlist is handled by the AutoDJ software.') }}
</template>
<template #default="props">
<b-form-checkbox-group stacked :id="props.id" v-model="props.field.$model">
<b-form-checkbox value="interrupt">
<translate key="lang_backend_option_interrupt">Interrupt other songs to play at scheduled time.</translate>
{{ $gettext('Interrupt other songs to play at scheduled time.') }}
</b-form-checkbox>
<b-form-checkbox value="single_track">
<translate
key="lang_backend_option_single_track">Only play one track at scheduled time.</translate>
{{ $gettext('Only play one track at scheduled time.') }}
</b-form-checkbox>
<b-form-checkbox value="merge">
<translate
key="lang_backend_option_merge">Merge playlist to play as a single track.</translate>
{{ $gettext('Merge playlist to play as a single track.') }}
</b-form-checkbox>
</b-form-checkbox-group>
</template>

View File

@ -4,32 +4,34 @@
<b-form-row>
<b-wrapped-form-group class="col-md-6" id="form_edit_name" :field="form.name">
<template #label="{lang}">
<translate :key="lang">Playlist Name</translate>
{{ $gettext('Playlist Name') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-checkbox class="col-md-6" id="form_edit_is_enabled" :field="form.is_enabled">
<template #label="{lang}">
<translate :key="lang">Enable</translate>
{{ $gettext('Enable') }}
</template>
<template #description="{lang}">
<translate :key="lang">If disabled, the playlist will not be included in radio playback, but can still be managed.</translate>
{{
$gettext('If disabled, the playlist will not be included in radio playback, but can still be managed.')
}}
</template>
</b-wrapped-form-checkbox>
<b-wrapped-form-group class="col-md-12" id="edit_form_source" :field="form.source">
<template #label="{lang}">
<translate :key="lang">Source</translate>
{{ $gettext('Source') }}
</template>
<template #default="props">
<b-form-radio-group stacked :id="props.id" v-model="props.field.$model">
<b-form-radio value="songs">
<translate key="lang_edit_form_source_songs">Song-Based</translate>
<translate class="form-text mt-0" key="lang_edit_form_source_songs_desc">A playlist containing media files hosted on this server.</translate>
{{ $gettext('Song-Based') }}
{{ $gettext('A playlist containing media files hosted on this server.') }}
</b-form-radio>
<b-form-radio value="remote_url">
<translate key="lang_edit_form_source_remote_url">Remote URL</translate>
<translate class="form-text mt-0" key="lang_edit_form_source_remote_url_desc">A playlist that instructs the station to play from a remote URL.</translate>
{{ $gettext('Remote URL') }}
{{ $gettext('A playlist that instructs the station to play from a remote URL.') }}
</b-form-radio>
</b-form-radio-group>
</template>
@ -40,7 +42,7 @@
<b-card v-show="form.source.$model === 'songs'" class="mb-3" no-body>
<div class="card-header bg-primary-dark">
<h2 class="card-title">
<translate key="lang_source_songs">Song-Based Playlist</translate>
{{ $gettext('Song-Based Playlist') }}
</h2>
</div>
<b-card-body>
@ -49,77 +51,85 @@
<b-wrapped-form-checkbox class="col-md-6" id="form_edit_avoid_duplicates"
:field="form.avoid_duplicates">
<template #label="{lang}">
<translate :key="lang">Avoid Duplicate Artists/Titles</translate>
{{ $gettext('Avoid Duplicate Artists/Titles') }}
</template>
<template #description="{lang}">
<translate :key="lang">Whether the AutoDJ should attempt to avoid duplicate artists and track titles when playing media from this playlist.</translate>
{{
$gettext('Whether the AutoDJ should attempt to avoid duplicate artists and track titles when playing media from this playlist.')
}}
</template>
</b-wrapped-form-checkbox>
<b-wrapped-form-checkbox class="col-md-6" id="form_edit_include_in_on_demand"
:field="form.include_in_on_demand">
<template #label="{lang}">
<translate :key="lang">Include in On-Demand Player</translate>
{{ $gettext('Include in On-Demand Player') }}
</template>
<template #description="{lang}">
<translate :key="lang">If this station has on-demand streaming and downloading enabled, only songs that are in playlists with this setting enabled will be visible.</translate>
{{
$gettext('If this station has on-demand streaming and downloading enabled, only songs that are in playlists with this setting enabled will be visible.')
}}
</template>
</b-wrapped-form-checkbox>
<b-wrapped-form-group class="col-md-6" id="form_edit_include_in_requests"
:field="form.include_in_requests">
<template #description="{lang}">
<translate :key="lang">If requests are enabled for your station, users will be able to request media that is on this playlist.</translate>
{{
$gettext('If requests are enabled for your station, users will be able to request media that is on this playlist.')
}}
</template>
<template #default="props">
<b-form-checkbox :id="props.id" v-model="props.field.$model">
<translate key="lang_form_edit_include_in_requests">Allow Requests from This Playlist</translate>
{{ $gettext('Allow Requests from This Playlist') }}
</b-form-checkbox>
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="form_edit_is_jingle" :field="form.is_jingle">
<template #description="{lang}">
<translate :key="lang">Enable this setting to prevent metadata from being sent to the AutoDJ for files in this playlist. This is useful if the playlist contains jingles or bumpers.</translate>
{{
$gettext('Enable this setting to prevent metadata from being sent to the AutoDJ for files in this playlist. This is useful if the playlist contains jingles or bumpers.')
}}
</template>
<template #default="props">
<b-form-checkbox :id="props.id" v-model="props.field.$model">
<translate key="lang_form_edit_is_jingle">Hide Metadata from Listeners ("Jingle Mode")</translate>
{{ $gettext('Hide Metadata from Listeners ("Jingle Mode")') }}
</b-form-checkbox>
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_type" :field="form.type">
<template #label="{lang}">
<translate :key="lang">Playlist Type</translate>
{{ $gettext('Playlist Type') }}
</template>
<template #default="props">
<b-form-radio-group stacked :id="props.id" v-model="props.field.$model">
<b-form-radio value="default">
<translate key="lang_form_type_default">General Rotation</translate>
<translate class="form-text mt-0" key="lang_form_type_default_desc">Standard playlist, shuffles with other standard playlists based on weight.</translate>
{{ $gettext('General Rotation') }}
{{
$gettext('Standard playlist, shuffles with other standard playlists based on weight.')
}}
</b-form-radio>
<b-form-radio value="once_per_x_songs">
<translate key="lang_form_type_once_per_x_songs">Once per x Songs</translate>
<translate class="form-text mt-0" key="lang_form_type_once_per_x_songs_desc">Play exactly once every $x songs.</translate>
{{ $gettext('Once per x Songs') }}
{{ $gettext('Play exactly once every $x songs.') }}
</b-form-radio>
<b-form-radio value="once_per_x_minutes">
<translate
key="lang_form_type_once_per_x_minutes">Once per x Minutes</translate>
<translate class="form-text mt-0" key="lang_form_type_once_per_x_minutes_desc">Play exactly once every $x minutes.</translate>
{{ $gettext('Once per x Minutes') }}
{{ $gettext('Play exactly once every $x minutes.') }}
</b-form-radio>
<b-form-radio value="once_per_hour">
<translate key="lang_form_type_once_per_hour">Once per Hour</translate>
<translate class="form-text mt-0" key="lang_form_type_once_per_hour_desc">Play once per hour at the specified minute.</translate>
{{ $gettext('Once per Hour') }}
{{ $gettext('Play once per hour at the specified minute.') }}
</b-form-radio>
<b-form-radio value="custom">
<translate key="lang_form_type_custom">Advanced</translate>
{{ $gettext('Advanced') }}
<span class="form-text mt-0">
<translate key="lang_form_type_custom_desc">Manually define how this playlist is used in Liquidsoap configuration.</translate>
{{ $gettext('Manually define how this playlist is used in Liquidsoap configuration.') }}
<a href="https://docs.azuracast.com/en/user-guide/playlists/advanced-playlists"
target="_blank">
<translate
key="lang_form_type_custom_more">Learn about Advanced Playlists</translate>
{{ $gettext('Learn about Advanced Playlists') }}
</a>
</span>
</b-form-radio>
@ -129,21 +139,27 @@
<b-wrapped-form-group class="col-md-6" id="edit_form_order" :field="form.order">
<template #label="{lang}">
<translate :key="lang">Song Playback Order</translate>
{{ $gettext('Song Playback Order') }}
</template>
<template #default="props">
<b-form-radio-group stacked :id="props.id" v-model="props.field.$model">
<b-form-radio value="shuffle">
<translate key="lang_edit_form_order_shuffle">Shuffled</translate>
<translate class="form-text mt-0" key="lang_edit_form_order_shuffle_info">The full playlist is shuffled and then played through in the shuffled order.</translate>
{{ $gettext('Shuffled') }}
{{
$gettext('The full playlist is shuffled and then played through in the shuffled order.')
}}
</b-form-radio>
<b-form-radio value="random">
<translate key="lang_edit_form_order_random">Random</translate>
<translate class="form-text mt-0" key="lang_edit_form_order_random_info">A completely random track is picked for playback every time the queue is populated.</translate>
{{ $gettext('Random') }}
{{
$gettext('A completely random track is picked for playback every time the queue is populated.')
}}
</b-form-radio>
<b-form-radio value="sequential">
<translate key="lang_edit_form_order_sequential">Sequential</translate>
<translate class="form-text mt-0" key="lang_edit_form_order_sequential_info">The order of the playlist is manually specified and followed by the AutoDJ.</translate>
{{ $gettext('Sequential') }}
{{
$gettext('The order of the playlist is manually specified and followed by the AutoDJ.')
}}
</b-form-radio>
</b-form-radio-group>
</template>
@ -153,17 +169,19 @@
<b-form-fieldset v-show="form.type.$model === 'default'">
<template #label>
<translate key="lang_type_default">General Rotation</translate>
{{ $gettext('General Rotation') }}
</template>
<b-form-group>
<b-form-row>
<b-wrapped-form-group class="col-md-12" id="form_edit_weight" :field="form.weight">
<template #label="{lang}">
<translate :key="lang">Playlist Weight</translate>
{{ $gettext('Playlist Weight') }}
</template>
<template #description="{lang}">
<translate :key="lang">Higher weight playlists are played more frequently compared to other lower-weight playlists.</translate>
{{
$gettext('Higher weight playlists are played more frequently compared to other lower-weight playlists.')
}}
</template>
<template #default="props">
<b-form-select :id="props.id" v-model="props.field.$model" :options="weightOptions"
@ -176,7 +194,7 @@
<b-form-fieldset v-show="form.type.$model === 'once_per_x_songs'">
<template #label>
<translate key="lang_type_once_per_x_songs">Once per x Songs</translate>
{{ $gettext('Once per x Songs') }}
</template>
<b-form-group>
@ -185,10 +203,12 @@
:field="form.play_per_songs" input-type="number"
:input-attrs="{min: '0', max: '150'}">
<template #label="{lang}">
<translate :key="lang">Number of Songs Between Plays</translate>
{{ $gettext('Number of Songs Between Plays') }}
</template>
<template #description="{lang}">
<translate :key="lang">This playlist will play every $x songs, where $x is specified here.</translate>
{{
$gettext('This playlist will play every $x songs, where $x is specified here.')
}}
</template>
</b-wrapped-form-group>
</b-form-row>
@ -197,7 +217,7 @@
<b-form-fieldset v-show="form.type.$model === 'once_per_x_minutes'">
<template #label>
<translate key="lang_form_type_once_per_x_minutes">Once per x Minutes</translate>
{{ $gettext('Once per x Minutes') }}
</template>
<b-form-group>
@ -207,10 +227,12 @@
:field="form.play_per_minutes" input-type="number"
:input-attrs="{min: '0', max: '360'}">
<template #label="{lang}">
<translate :key="lang">Number of Minutes Between Plays</translate>
{{ $gettext('Number of Minutes Between Plays') }}
</template>
<template #description="{lang}">
<translate :key="lang">This playlist will play every $x minutes, where $x is specified here.</translate>
{{
$gettext('This playlist will play every $x minutes, where $x is specified here.')
}}
</template>
</b-wrapped-form-group>
@ -220,7 +242,7 @@
<b-form-fieldset v-show="form.type.$model === 'once_per_hour'">
<template #label>
<translate key="lang_type_once_per_hour">Once per Hour</translate>
{{ $gettext('Once per Hour') }}
</template>
<b-form-group>
@ -229,11 +251,10 @@
:field="form.play_per_hour_minute" input-type="number"
:input-attrs="{min: '0', max: '59'}">
<template #label="{lang}">
<translate :key="lang">Minute of Hour to Play</translate>
{{ $gettext('Minute of Hour to Play') }}
</template>
<template #description="{lang}">
<translate
:key="lang">Specify the minute of every hour that this playlist should play.</translate>
{{ $gettext('Specify the minute of every hour that this playlist should play.') }}
</template>
</b-wrapped-form-group>
</b-form-row>
@ -245,7 +266,7 @@
<b-card v-show="form.source.$model === 'remote_url'" class="mb-3" no-body>
<div class="card-header bg-primary-dark">
<h2 class="card-title">
<translate key="lang_source_remote_url">Remote URL Playlist</translate>
{{ $gettext('Remote URL Playlist') }}
</h2>
</div>
<b-card-body>
@ -253,22 +274,21 @@
<b-form-row>
<b-wrapped-form-group class="col-md-6" id="form_edit_remote_url" :field="form.remote_url">
<template #label="{lang}">
<translate :key="lang">Remote URL</translate>
{{ $gettext('Remote URL') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_remote_type" :field="form.remote_type">
<template #label="{lang}">
<translate :key="lang">Remote URL Type</translate>
{{ $gettext('Remote URL Type') }}
</template>
<template #default="props">
<b-form-radio-group stacked :id="props.id" v-model="props.field.$model">
<b-form-radio value="stream">
<translate key="lang_edit_form_remote_type_stream">Direct Stream URL</translate>
{{ $gettext('Direct Stream URL') }}
</b-form-radio>
<b-form-radio value="playlist">
<translate
key="lang_edit_form_remote_type_playlist">Playlist (M3U/PLS) URL</translate>
{{ $gettext('Playlist (M3U/PLS) URL') }}
</b-form-radio>
</b-form-radio-group>
</template>
@ -276,10 +296,12 @@
<b-wrapped-form-group class="col-md-6" id="form_edit_remote_buffer" :field="form.remote_buffer">
<template #label="{lang}">
<translate :key="lang">Remote Playback Buffer (Seconds)</translate>
{{ $gettext('Remote Playback Buffer (Seconds)') }}
</template>
<template #description="{lang}">
<translate :key="lang">The length of playback time that Liquidsoap should buffer when playing this remote playlist. Shorter times may lead to intermittent playback on unstable connections.</translate>
{{
$gettext('The length of playback time that Liquidsoap should buffer when playing this remote playlist. Shorter times may lead to intermittent playback on unstable connections.')
}}
</template>
<template #default="props">
<b-form-input id="form_edit_remote_buffer" type="number" min="0" max="120"

View File

@ -2,10 +2,10 @@
<b-tab :title="langTabTitle">
<b-form-group v-if="scheduleItems.length === 0">
<label>
<translate key="lang_playlist_schedule_not_scheduled">Not Scheduled</translate>
{{ $gettext('Not Scheduled') }}
</label>
<p>
<translate key="lang_playlist_schedule_desc">This playlist currently has no scheduled times. It will play at all times. To add a new scheduled time, click the button below.</translate>
{{ $gettext('This playlist currently has no scheduled times. It will play at all times. To add a new scheduled time, click the button below.') }}
</p>
</b-form-group>
@ -17,7 +17,7 @@
<b-button-group>
<b-button size="sm" variant="outline-primary" @click.prevent="add">
<icon icon="add"></icon>
<translate key="lang_btn_add">Add Schedule Item</translate>
{{ $gettext('Add Schedule Item') }}
</b-button>
</b-button-group>
</b-tab>

View File

@ -3,13 +3,13 @@
<div class="card-header bg-primary-dark d-flex align-items-center">
<div class="flex-fill">
<h2 class="card-title">
<translate :key="'lang_schedule_entry_'+index" :translate-params="{ num: parseInt(index)+1 }">Scheduled Time #%{num}</translate>
{{ $gettext('Scheduled Time #%{num}') }}
</h2>
</div>
<div class="flex-shrink-0">
<b-button size="sm" variant="outline-light" class="py-2 pr-0" @click.prevent="$emit('remove')">
<icon icon="remove"></icon>
<translate key="lang_btn_remove">Remove</translate>
{{ $gettext('Remove') }}
</b-button>
</div>
</div>
@ -19,11 +19,10 @@
<b-wrapped-form-group class="col-md-4" :id="'edit_form_start_time_'+index"
:field="v$.row.start_time">
<template #label="{lang}">
<translate :key="lang">Start Time</translate>
{{ $gettext('Start Time') }}
</template>
<template #description="{lang}">
<translate
:key="lang">To play once per day, set the start and end times to the same value.</translate>
{{ $gettext('To play once per day, set the start and end times to the same value.') }}.00
</template>
<template #default="props">
<playlist-time :id="props.id" v-model="props.field.$model"
@ -33,10 +32,12 @@
<b-wrapped-form-group class="col-md-4" :id="'edit_form_end_time_'+index" :field="v$.row.end_time">
<template #label="{lang}">
<translate :key="lang">End Time</translate>
{{ $gettext('End Time') }}
</template>
<template #description="{lang}">
<translate :key="lang">If the end time is before the start time, the playlist will play overnight.</translate>
{{
$gettext('If the end time is before the start time, the playlist will play overnight.')
}}
</template>
<template #default="props">
<playlist-time :id="props.id" v-model="props.field.$model"
@ -46,20 +47,22 @@
<b-col md="4" class="form-group">
<label>
<translate key="lang_station_tz">Station Time Zone</translate>
{{ $gettext('Station Time Zone') }}
</label>
<div>
<translate key="lang_station_tz_desc" :translate-params="{ tz: stationTimeZone }">This station's time zone is currently %{tz}.</translate>
{{ $gettext('This station\'s time zone is currently %{tz}.', {tz: stationTimeZone}) }}
</div>
</b-col>
<b-wrapped-form-group class="col-md-4" :id="'edit_form_start_date_'+index"
:field="v$.row.start_date">
<template #label="{lang}">
<translate :key="lang">Start Date</translate>
{{ $gettext('Start Date') }}
</template>
<template #description="{lang}">
<translate :key="lang">To set this schedule to run only within a certain date range, specify a start and end date.</translate>
{{
$gettext('To set this schedule to run only within a certain date range, specify a start and end date.')
}}
</template>
<template #default="props">
<b-form-input :id="props.id" type="date"
@ -69,7 +72,7 @@
<b-wrapped-form-group class="col-md-4" :id="'edit_form_end_date_'+index" :field="v$.row.end_date">
<template #label="{lang}">
<translate :key="lang">End Date</translate>
{{ $gettext('End Date') }}
</template>
<template #default="props">
<b-form-input :id="props.id" type="date" v-model="props.field.$model"
@ -80,19 +83,19 @@
<b-wrapped-form-checkbox class="col-md-4" :id="'edit_form_loop_once_'+index"
:field="v$.row.loop_once">
<template #label="{lang}">
<translate :key="lang">Loop Once</translate>
{{ $gettext('Loop Once') }}
</template>
<template #description="{lang}">
<translate :key="lang">Only loop through playlist once.</translate>
{{ $gettext('Only loop through playlist once.') }}
</template>
</b-wrapped-form-checkbox>
<b-wrapped-form-group class="col-md-4" :id="'edit_form_days_'+index" :field="v$.row.days">
<template #label="{lang}">
<translate :key="lang">Scheduled Play Days of Week</translate>
{{ $gettext('Scheduled Play Days of Week') }}
</template>
<template #description="{lang}">
<translate :key="lang">Leave blank to play on every day of the week.</translate>
{{ $gettext('Leave blank to play on every day of the week.') }}
</template>
<template #default="props">
<b-checkbox-group stacked :id="'edit_form_days_'+index" v-model="v$.row.days.$model"

View File

@ -7,9 +7,9 @@
<b-thead>
<b-tr>
<b-th class="p-2">
<translate key="lang_playlist_results_original">Original Path</translate>
{{ $gettext('Original Path') }}
<br>
<translate key="lang_playlist_results_matched">Matched</translate>
{{ $gettext('Matched') }}
</b-th>
</b-tr>
</b-thead>
@ -19,7 +19,7 @@
<pre class="mb-0">{{ row.path }}</pre>
<pre v-if="row.match" class="mb-0 text-success">{{ row.match }}</pre>
<pre v-else class="mb-0 text-danger">
<translate key="lang_playlist_results_no_match">No Match</translate>
{{ $gettext('No Match') }}
</pre>
</b-td>
</b-tr>
@ -29,10 +29,12 @@
<b-form v-else class="form" @submit.prevent="doSubmit">
<b-form-group label-for="import_modal_playlist_file">
<template #label>
<translate key="lang_form_playlist_file">Select PLS/M3U File to Import</translate>
{{ $gettext('Select PLS/M3U File to Import') }}
</template>
<template #description>
<translate key="lang_form_playlist_file_desc">AzuraCast will scan the uploaded file for matches in this station's music library. Media should already be uploaded before running this step. You can re-run this tool as many times as needed.</translate>
{{
$gettext('AzuraCast will scan the uploaded file for matches in this station\'s music library. Media should already be uploaded before running this step. You can re-run this tool as many times as needed.')
}}
</template>
<b-form-file id="import_modal_playlist_file" v-model="playlistFile"></b-form-file>
</b-form-group>
@ -41,10 +43,10 @@
</b-form>
<template #modal-footer>
<b-button variant="default" type="button" @click="close">
<translate key="lang_btn_close">Close</translate>
{{ $gettext('Close') }}
</b-button>
<b-button v-if="!results" variant="primary" type="submit" @click="doSubmit">
<translate key="lang_btn_import">Import from PLS/M3U</translate>
{{ $gettext('Import from PLS/M3U') }}
</b-button>
</template>
</b-modal>

View File

@ -5,10 +5,10 @@
<b-col md="8">
<b-form-group label-for="edit_form_art">
<template #label>
<translate key="artwork_file">Select PNG/JPG artwork file</translate>
{{ $gettext('Select PNG/JPG artwork file') }}
</template>
<template #description>
<translate key="artwork_file_desc">Artwork must be a minimum size of 1400 x 1400 pixels and a maximum size of 3000 x 3000 pixels for Apple Podcasts.</translate>
{{ $gettext('Artwork must be a minimum size of 1400 x 1400 pixels and a maximum size of 3000 x 3000 pixels for Apple Podcasts.') }}
</template>
<b-form-file id="edit_form_art" accept="image/jpeg, image/png"
@input="uploadNewArt"></b-form-file>
@ -19,7 +19,7 @@
<div class="buttons pt-3">
<b-button block variant="danger" @click="deleteArt">
<translate key="lang_btn_delete_art">Clear Artwork</translate>
{{ $gettext('Clear Artwork') }}
</b-button>
</div>
</b-col>

View File

@ -5,35 +5,35 @@
<b-wrapped-form-group class="col-md-6" id="form_edit_title" :field="form.title">
<template #label="{lang}">
<translate :key="lang">Episode</translate>
{{ $gettext('Episode') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="form_edit_link" :field="form.link">
<template #label="{lang}">
<translate :key="lang">Website</translate>
{{ $gettext('Website') }}
</template>
<template #description="{lang}">
<translate :key="lang">Typically a website with content about the episode.</translate>
{{ $gettext('Typically a website with content about the episode.') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-12" id="form_edit_description" :field="form.description"
input-type="textarea">
<template #label="{lang}">
<translate :key="lang">Description</translate>
{{ $gettext('Description') }}
</template>
<template #description="{lang}">
<translate :key="lang">The description of the episode. The typical maximum amount of text allowed for this is 4000 characters.</translate>
{{ $gettext('The description of the episode. The typical maximum amount of text allowed for this is 4000 characters.') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="form_edit_publish_date" :field="form.publish_date">
<template #label="{lang}">
<translate :key="lang">Publish Date</translate>
{{ $gettext('Publish Date') }}
</template>
<template #description="{lang}">
<translate :key="lang">The date when the episode should be published.</translate>
{{ $gettext('The date when the episode should be published.') }}
</template>
<template #default="props">
<b-form-datepicker :id="props.id" v-model="props.field.$model" :state="props.state"
@ -43,10 +43,10 @@
<b-wrapped-form-group class="col-md-6" id="form_edit_publish_time" :field="form.publish_time">
<template #label="{lang}">
<translate :key="lang">Publish Time</translate>
{{ $gettext('Publish Time') }}
</template>
<template #description="{lang}">
<translate :key="lang">The time when the episode should be published (according to the stations timezone).</translate>
{{ $gettext('The time when the episode should be published (according to the stations timezone).') }}
</template>
<template #default="props">
<b-form-timepicker :id="props.id" v-model="props.field.$model"
@ -56,10 +56,10 @@
<b-wrapped-form-checkbox class="col-md-12" id="form_edit_explicit" :field="form.explicit">
<template #label="{lang}">
<translate :key="lang">Contains explicit content</translate>
{{ $gettext('Contains explicit content') }}
</template>
<template #description="{lang}">
<translate :key="lang">Indicates the presence of explicit content (explicit language or adult content). Apple Podcasts displays an Explicit parental advisory graphic for your episode if turned on. Episodes containing explicit material arent available in some Apple Podcasts territories.</translate>
{{ $gettext('Indicates the presence of explicit content (explicit language or adult content). Apple Podcasts displays an Explicit parental advisory graphic for your episode if turned on. Episodes containing explicit material arent available in some Apple Podcasts territories.') }}
</template>
</b-wrapped-form-checkbox>
</b-form-row>

View File

@ -4,10 +4,12 @@
<b-form-row>
<b-form-group class="col-md-6" label-for="media_file">
<template #label>
<translate key="media_file">Select Media File</translate>
{{ $gettext('Select Media File') }}
</template>
<template #description>
<translate key="media_file_desc">Podcast media should be in the MP3 or M4A (AAC) format for the greatest compatibility.</translate>
{{
$gettext('Podcast media should be in the MP3 or M4A (AAC) format for the greatest compatibility.')
}}
</template>
<flow-upload :target-url="targetUrl" :valid-mime-types="acceptMimeTypes"
@ -16,22 +18,21 @@
<b-form-group class="col-md-6">
<template #label>
<translate key="existing_media">Current Podcast Media</translate>
{{ $gettext('Current Podcast Media') }}
</template>
<div v-if="hasMedia">
<div class="buttons pt-3">
<b-button v-if="downloadUrl" block variant="bg" :href="downloadUrl" target="_blank">
<translate key="btn_download">Download</translate>
{{ $gettext('Download') }}
</b-button>
<b-button block variant="danger" @click="deleteMedia">
<translate key="btn_delete_media">Clear Media</translate>
{{ $gettext('Clear Media') }}
</b-button>
</div>
</div>
<div v-else>
<translate
key="no_existing_media">There is no existing media associated with this episode.</translate>
{{ $gettext('There is no existing media associated with this episode.') }}
</div>
</b-form-group>
</b-form-row>

View File

@ -5,35 +5,35 @@
<b-wrapped-form-group class="col-md-6" id="form_edit_title" :field="form.title">
<template #label="{lang}">
<translate :key="lang">Podcast Title</translate>
{{ $gettext('Podcast Title') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="form_edit_link" :field="form.link">
<template #label="{lang}">
<translate :key="lang">Website</translate>
{{ $gettext('Website') }}
</template>
<template #description="{lang}">
<translate :key="lang">Typically the home page of a podcast.</translate>
{{ $gettext('Typically the home page of a podcast.') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-12" id="form_edit_description" :field="form.description"
input-type="textarea">
<template #label="{lang}">
<translate :key="lang">Description</translate>
{{ $gettext('Description') }}
</template>
<template #description="{lang}">
<translate :key="lang">The description of your podcast. The typical maximum amount of text allowed for this is 4000 characters.</translate>
{{ $gettext('The description of your podcast. The typical maximum amount of text allowed for this is 4000 characters.') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-12" id="form_edit_language" :field="form.language">
<template #label="{lang}">
<translate :key="lang">Language</translate>
{{ $gettext('Language') }}
</template>
<template #description="{lang}">
<translate :key="lang">The language spoken on the podcast.</translate>
{{ $gettext('The language spoken on the podcast.') }}
</template>
<template #default="props">
<b-form-select :id="props.id" v-model="props.field.$model" :options="languageOptions"
@ -43,28 +43,28 @@
<b-wrapped-form-group class="col-md-6" id="form_edit_author" :field="form.author">
<template #label="{lang}">
<translate :key="lang">Author</translate>
{{ $gettext('Author') }}
</template>
<template #description="{lang}">
<translate :key="lang">The contact person of the podcast. May be required in order to list the podcast on services like Apple Podcasts, Spotify, Google Podcasts, etc.</translate>
{{ $gettext('The contact person of the podcast. May be required in order to list the podcast on services like Apple Podcasts, Spotify, Google Podcasts, etc.') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="form_edit_email" :field="form.email" input-type="email">
<template #label="{lang}">
<translate :key="lang">E-Mail</translate>
{{ $gettext('E-Mail') }}
</template>
<template #description="{lang}">
<translate :key="lang">The email of the podcast contact. May be required in order to list the podcast on services like Apple Podcasts, Spotify, Google Podcasts, etc.</translate>
{{ $gettext('The email of the podcast contact. May be required in order to list the podcast on services like Apple Podcasts, Spotify, Google Podcasts, etc.') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-12" id="form_edit_categories" :field="form.categories">
<template #label="{lang}">
<translate :key="lang">Categories</translate>
{{ $gettext('Categories') }}
</template>
<template #description="{lang}">
<translate :key="lang">Select the category/categories that best reflects the content of your podcast.</translate>
{{ $gettext('Select the category/categories that best reflects the content of your podcast.') }}
</template>
<template #default="props">
<b-form-select :id="props.id" v-model="props.field.$model" :options="categoriesOptions"

View File

@ -2,7 +2,7 @@
<section class="card mb-4" role="region" id="profile-frontend">
<div class="card-header bg-primary-dark">
<h3 class="card-title">
<translate key="lang_frontend_title">Broadcasting Service</translate>
{{ $gettext('Broadcasting Service') }}
<running-badge :running="np.services.frontend_running"></running-badge>
<br>
@ -16,16 +16,16 @@
<tr class="align-middle">
<td>
<a :href="frontendAdminUri" target="_blank">
<translate key="lang_frontend_admin">Administration</translate>
{{ $gettext('Administration') }}
</a>
</td>
<td class="px-0">
<div>
<translate key="lang_username">Username:</translate>
{{ $gettext('Username:') }}
<span class="text-monospace">admin</span>
</div>
<div>
<translate key="lang_password">Password:</translate>
{{ $gettext('Password:') }}
<span class="text-monospace">{{ frontendAdminPassword }}</span>
</div>
</td>
@ -35,15 +35,15 @@
</tr>
<tr class="align-middle">
<td>
<translate key="lang_frontend_source">Source</translate>
{{ $gettext('Source') }}
</td>
<td class="px-0">
<div>
<translate key="lang_username">Username:</translate>
{{ $gettext('Username:') }}
<span class="text-monospace">source</span>
</div>
<div>
<translate key="lang_password">Password:</translate>
{{ $gettext('Password:') }}
<span class="text-monospace">{{ frontendSourcePassword }}</span>
</div>
</td>
@ -53,15 +53,15 @@
</tr>
<tr class="align-middle">
<td>
<translate key="lang_frontend_relay">Relay</translate>
{{ $gettext('Relay') }}
</td>
<td class="px-0">
<div>
<translate key="lang_username">Username:</translate>
{{ $gettext('Username:') }}
<span class="text-monospace">relay</span>
</div>
<div>
<translate key="lang_password">Password:</translate>
{{ $gettext('Password:') }}
<span class="text-monospace">{{ frontendRelayPassword }}</span>
</div>
</td>
@ -75,17 +75,17 @@
<div class="card-actions" v-if="hasStarted">
<a class="api-call no-reload btn btn-outline-secondary" :href="frontendRestartUri">
<icon icon="update"></icon>
<translate key="lang_profile_frontend_restart">Restart</translate>
{{ $gettext('Restart') }}
</a>
<a class="api-call no-reload btn btn-outline-success" v-show="!np.services.frontend_running"
:href="frontendStartUri">
<icon icon="play_arrow"></icon>
<translate key="lang_profile_frontend_start">Start</translate>
{{ $gettext('Start') }}
</a>
<a class="api-call no-reload btn btn-outline-danger" v-show="np.services.frontend_running"
:href="frontendStopUri">
<icon icon="stop"></icon>
<translate key="lang_profile_frontend_stop">Stop</translate>
{{ $gettext('Stop') }}
</a>
</div>
</template>

View File

@ -10,7 +10,7 @@
<div class="flex-shrink-0 ml-3" v-if="userCanManageProfile">
<a class="btn btn-primary btn-lg" role="button" :href="manageProfileUri">
<icon icon="edit"></icon>
<translate key="lang_profile_btn_edit">Edit Profile</translate>
{{ $gettext('Edit Profile') }}
</a>
</div>
</div>

View File

@ -3,7 +3,7 @@
<template v-if="enablePublicPage">
<div class="card-header bg-primary-dark">
<h3 class="card-title">
<translate key="lang_profile_public_title">Public Pages</translate>
{{ $gettext('Public Pages') }}
<enabled-badge :enabled="true"></enabled-badge>
</h3>
</div>

View File

@ -3,32 +3,32 @@
<template v-if="enableRequests">
<div class="card-header bg-primary-dark">
<h3 class="card-title">
<translate key="lang_profile_requests_title">Song Requests</translate>
{{ $gettext('Song Requests') }}
<enabled-badge :enabled="true"></enabled-badge>
</h3>
</div>
<div class="card-actions" v-if="userCanManageReports || userCanManageProfile">
<a class="btn btn-outline-primary" v-if="userCanManageReports" :href="requestsViewUri">
<icon icon="assignment"></icon>
<translate key="lang_profile_requests_view">View</translate>
{{ $gettext('View') }}
</a>
<a class="btn btn-outline-danger" v-if="userCanManageProfile" :data-confirm-title="langDisableRequests" :href="requestsToggleUri">
<icon icon="close"></icon>
<translate key="lang_profile_requests_disable">Disable</translate>
{{ $gettext('Disable') }}
</a>
</div>
</template>
<template v-else>
<div class="card-header bg-primary-dark">
<h3 class="card-title">
<translate key="lang_profile_requests_title">Song Requests</translate>
{{ $gettext('Song Requests') }}
<enabled-badge :enabled="false"></enabled-badge>
</h3>
</div>
<div class="card-actions" v-if="userCanManageProfile">
<a class="btn btn-outline-success" :data-confirm-title="langEnableRequests" :href="requestsToggleUri">
<icon icon="check"></icon>
<translate key="lang_profile_requests_enable">Enable</translate>
{{ $gettext('Enable') }}
</a>
</div>
</template>

View File

@ -3,32 +3,32 @@
<template v-if="enableStreamers">
<div class="card-header bg-primary-dark">
<h3 class="card-title">
<translate key="lang_profile_streamers_title">Streamers/DJs</translate>
{{ $gettext('Streamers/DJs') }}
<enabled-badge :enabled="true"></enabled-badge>
</h3>
</div>
<div class="card-actions" v-if="userCanManageStreamers || userCanManageProfile">
<a class="btn btn-outline-primary" v-if="userCanManageStreamers" :href="streamersViewUri">
<icon icon="settings"></icon>
<translate key="lang_profile_streamers_manage">Manage</translate>
{{ $gettext('Manage') }}
</a>
<a class="btn btn-outline-danger" v-if="userCanManageProfile" :data-confirm-title="langDisableStreamers" :href="streamersToggleUri">
<icon icon="close"></icon>
<translate key="lang_profile_streamers_disable">Disable</translate>
{{ $gettext('Disable') }}
</a>
</div>
</template>
<template v-else>
<div class="card-header bg-primary-dark">
<h3 class="card-title">
<translate key="lang_profile_streamers_title">Streamers/DJs</translate>
{{ $gettext('Streamers/DJs') }}
<enabled-badge :enabled="false"></enabled-badge>
</h3>
</div>
<div class="card-actions" v-if="userCanManageProfile">
<a class="btn btn-outline-success" :data-confirm-title="langEnableStreamers" :href="streamersToggleUri">
<icon icon="check"></icon>
<translate key="lang_profile_streamers_enable">Enable</translate>
{{ $gettext('Enable') }}
</a>
</div>
</template>

View File

@ -2,7 +2,7 @@
<section class="card" role="region">
<div class="card-header bg-primary-dark">
<h3 class="card-title">
<translate key="lang_hdr_profile_edit">Edit Station Profile</translate>
{{ $gettext('Edit Station Profile') }}
</h3>
</div>

View File

@ -4,10 +4,10 @@
<template #modal-footer>
<b-button variant="default" type="button" @click="close">
<translate key="lang_btn_close">Close</translate>
{{ $gettext('Close') }}
</b-button>
<b-button variant="primary" class="btn_copy" @click.prevent="doCopy" type="button">
<translate key="lang_btn_copy">Copy to Clipboard</translate>
{{ $gettext('Copy to Clipboard') }}
</b-button>
</template>
</b-modal>

View File

@ -4,10 +4,12 @@
<b-wrapped-form-checkbox class="col-md-12" id="edit_form_enable_autodj" :field="form.enable_autodj">
<template #label="{lang}">
<translate :key="lang">Broadcast AutoDJ to Remote Station</translate>
{{ $gettext('Broadcast AutoDJ to Remote Station') }}
</template>
<template #description="{lang}">
<translate :key="lang">If enabled, the AutoDJ on this installation will automatically play music to this mount point.</translate>
{{
$gettext('If enabled, the AutoDJ on this installation will automatically play music to this mount point.')
}}
</template>
</b-wrapped-form-checkbox>
@ -17,7 +19,7 @@
<b-wrapped-form-group class="col-md-6" id="edit_form_autodj_format" :field="form.autodj_format">
<template #label="{lang}">
<translate :key="lang">AutoDJ Format</translate>
{{ $gettext('AutoDJ Format') }}
</template>
<template #default="props">
<b-form-radio-group stacked :id="props.id" v-model="props.field.$model"
@ -28,7 +30,7 @@
<b-wrapped-form-group class="col-md-6" id="edit_form_autodj_bitrate" :field="form.autodj_bitrate"
v-if="formatSupportsBitrateOptions">
<template #label="{lang}">
<translate :key="lang">AutoDJ Bitrate (kbps)</translate>
{{ $gettext('AutoDJ Bitrate (kbps)') }}
</template>
<template #default="props">
<b-form-radio-group stacked :id="props.id" v-model="props.field.$model"
@ -38,49 +40,52 @@
<b-wrapped-form-group class="col-md-6" id="edit_form_source_port" :field="form.source_port">
<template #label="{lang}">
<translate :key="lang">Remote Station Source Port</translate>
{{ $gettext('Remote Station Source Port') }}
</template>
<template #description="{lang}">
<translate :key="lang">If the port you broadcast to is different from the one you listed in the URL above, specify the source port here.</translate>
{{
$gettext('If the port you broadcast to is different from the one you listed in the URL above, specify the source port here.')
}}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_source_mount" :field="form.source_mount">
<template #label="{lang}">
<translate :key="lang">Remote Station Source Mountpoint/SID</translate>
{{ $gettext('Remote Station Source Mountpoint/SID') }}
</template>
<template #description="{lang}">
<translate
:key="lang">If the mountpoint (i.e. <code>/radio.mp3</code>) or Shoutcast SID (i.e. <code>2</code>) you broadcast to is different from the one listed above, specify the source mount point here.</translate>
{{
$gettext('If the mountpoint (i.e. /radio.mp3) or Shoutcast SID (i.e. 2) you broadcast to is different from the one listed above, specify the source mount point here.')
}}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_source_username" :field="form.source_username">
<template #label="{lang}">
<translate :key="lang">Remote Station Source Username</translate>
{{ $gettext('Remote Station Source Username') }}
</template>
<template #description="{lang}">
<translate :key="lang">If you are broadcasting using AutoDJ, enter the source username here. This may be blank.</translate>
{{
$gettext('If you are broadcasting using AutoDJ, enter the source username here. This may be blank.')
}}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_source_password" :field="form.source_password">
<template #label="{lang}">
<translate :key="lang">Remote Station Source Password</translate>
{{ $gettext('Remote Station Source Password') }}
</template>
<template #description="{lang}">
<translate
:key="lang">If you are broadcasting using AutoDJ, enter the source password here.</translate>
{{ $gettext('If you are broadcasting using AutoDJ, enter the source password here.') }}
</template>
</b-wrapped-form-group>
<b-wrapped-form-checkbox class="col-md-6" id="edit_form_is_public" :field="form.is_public">
<template #label="{lang}">
<translate :key="lang">Publish to "Yellow Pages" Directories</translate>
{{ $gettext('Publish to "Yellow Pages" Directories') }}
</template>
<template #description="{lang}">
<translate
:key="lang">Enable to advertise this relay on "Yellow Pages" public radio directories.</translate>
{{ $gettext('Enable to advertise this relay on "Yellow Pages" public radio directories.') }}
</template>
</b-wrapped-form-checkbox>

View File

@ -4,7 +4,7 @@
<b-form-row>
<b-wrapped-form-group class="col-md-12" id="edit_form_type" :field="form.type">
<template #label="{lang}">
<translate :key="lang">Remote Station Type</translate>
{{ $gettext('Remote Station Type') }}
</template>
<template #default="props">
<b-form-radio-group
@ -19,47 +19,57 @@
<b-wrapped-form-group class="col-md-6" id="edit_form_display_name" :field="form.display_name">
<template #label="{lang}">
<translate :key="lang">Display Name</translate>
{{ $gettext('Display Name') }}
</template>
<template #description="{lang}">
<translate :key="lang">The display name assigned to this relay when viewing it on administrative or public pages. Leave blank to automatically generate one.</translate>
{{
$gettext('The display name assigned to this relay when viewing it on administrative or public pages. Leave blank to automatically generate one.')
}}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_url" :field="form.url">
<template #label="{lang}">
<translate :key="lang">Remote Station Listening URL</translate>
{{ $gettext('Remote Station Listening URL') }}
</template>
<template #description="{lang}">
<translate :key="lang">Example: if the remote radio URL is http://station.example.com:8000/radio.mp3, enter "http://station.example.com:8000".</translate>
{{
$gettext('Example: if the remote radio URL is http://station.example.com:8000/radio.mp3, enter "http://station.example.com:8000".')
}}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_mount" :field="form.mount">
<template #label="{lang}">
<translate :key="lang">Remote Station Listening Mountpoint/SID</translate>
{{ $gettext('Remote Station Listening Mountpoint/SID') }}
</template>
<template #description="{lang}">
<translate :key="lang">Specify a mountpoint (i.e. "/radio.mp3") or a Shoutcast SID (i.e. "2") to specify a specific stream to use for statistics or broadcasting.</translate>
{{
$gettext('Specify a mountpoint (i.e. "/radio.mp3") or a Shoutcast SID (i.e. "2") to specify a specific stream to use for statistics or broadcasting.')
}}
</template>
</b-wrapped-form-group>
<b-wrapped-form-group class="col-md-6" id="edit_form_admin_password" :field="form.admin_password">
<template #label="{lang}">
<translate :key="lang">Remote Station Administrator Password</translate>
{{ $gettext('Remote Station Administrator Password') }}
</template>
<template #description="{lang}">
<translate :key="lang">To retrieve detailed unique listeners and client details, an administrator password is often required.</translate>
{{
$gettext('To retrieve detailed unique listeners and client details, an administrator password is often required.')
}}
</template>
</b-wrapped-form-group>
<b-wrapped-form-checkbox class="col-md-6" id="edit_form_is_visible_on_public_pages"
:field="form.is_visible_on_public_pages">
<template #label="{lang}">
<translate :key="lang">Show on Public Pages</translate>
{{ $gettext('Show on Public Pages') }}
</template>
<template #description="{lang}">
<translate :key="lang">Enable to allow listeners to select this relay on this station's public pages.</translate>
{{
$gettext('Enable to allow listeners to select this relay on this station\'s public pages.')
}}
</template>
</b-wrapped-form-checkbox>

View File

@ -6,13 +6,13 @@
<div class="d-flex align-items-center">
<div class="flex-fill my-0">
<h2 class="card-title">
<translate key="lang_header">Listeners</translate>
{{ $gettext('Listeners') }}
</h2>
</div>
<div class="flex-shrink buttons">
<a class="btn btn-bg" id="btn-export" :href="exportUrl" target="_blank">
<icon icon="file_download"></icon>
<translate key="lang_download_csv_button">Download CSV</translate>
{{ $gettext('Download CSV') }}
</a>
<date-range-dropdown v-if="!isLive" time-picker :min-date="minDate" :max-date="maxDate"
@ -33,20 +33,20 @@
<div class="card-body row">
<div class="col-md-4">
<h5>
<translate key="lang_unique_listeners">Unique Listeners</translate>
{{ $gettext('Unique Listeners') }}
<br>
<small>
<translate key="lang_for_selected_period">for selected period</translate>
{{ $gettext('for selected period') }}
</small>
</h5>
<h3>{{ listeners.length }}</h3>
</div>
<div class="col-md-4">
<h5>
<translate key="lang_tlh">Total Listener Hours</translate>
{{ $gettext('Total Listener Hours') }}
<br>
<small>
<translate key="lang_for_selected_period">for selected period</translate>
{{ $gettext('for selected period') }}
</small>
</h5>
<h3>{{ totalListenerHours }}</h3>
@ -69,13 +69,13 @@
<span v-if="row.item.is_mobile">
<icon icon="smartphone"></icon>
<span class="sr-only">
<translate key="lang_device_mobile">Mobile Device</translate>
{{ $gettext('Mobile Device') }}
</span>
</span>
<span v-else>
<icon icon="desktop_windows"></icon>
<span class="sr-only">
<translate key="lang_device_desktop">Desktop Device</translate>
{{ $gettext('Desktop Device') }}
</span>
</span>
@ -87,15 +87,15 @@
</template>
<template #cell(stream)="row">
<span v-if="row.item.mount_name == ''">
<translate key="lang_stream_unknown">Unknown</translate>
{{ $gettext('Unknown') }}
</span>
<span v-else>
{{ row.item.mount_name }}<br>
<small v-if="row.item.mount_is_local">
<translate key="lang_mount_local">Local</translate>
{{ $gettext('Local') }}
</small>
<small v-else>
<translate key="lang_mount_remote">Remote</translate>
{{ $gettext('Remote') }}
</small>
</span>
</template>
@ -104,7 +104,7 @@
{{ row.item.location.description }}
</span>
<span v-else>
<translate key="lang_location_unknown">Unknown</translate>
{{ $gettext('Unknown') }}
</span>
</template>
</data-table>

View File

@ -3,17 +3,17 @@
:attribution="attribution">
<map-point v-for="l in visibleListeners" :key="l.hash"
:position="[l.location.lat, l.location.lon]">
<translate key="l-ip">IP</translate>
{{ $gettext('IP') }}
: {{ l.ip }}<br>
<translate key="l-country">Country</translate>
{{ $gettext('Country') }}
: {{ l.location.country }}<br>
<translate key="l-region">Region</translate>
{{ $gettext('Region') }}
: {{ l.location.region }}<br>
<translate key="l-city">City</translate>
{{ $gettext('City') }}
: {{ l.location.city }}<br>
<translate key="l-time">Time</translate>
{{ $gettext('Time') }}
: {{ l.connected_time }}<br>
<translate key="l-ua">User Agent</translate>
{{ $gettext('User Agent') }}
: {{ l.user_agent }}
</map-point>
</inner-map>

Some files were not shown because too many files have changed in this diff Show More