Fix linting issues

1930-first-upload-in-a-batch-always-fails
wvffle 2022-11-27 12:15:43 +00:00 zatwierdzone przez Kasper Seweryn
rodzic 14c784e06d
commit fea7493725
48 zmienionych plików z 101161 dodań i 101227 usunięć

13
.vscode/settings.json vendored
Wyświetl plik

@ -2,20 +2,13 @@
"python.defaultInterpreterPath": "/workspace/funkwhale/api/.venv/bin/python",
"python.testing.cwd": "/workspace/funkwhale/api",
"python.envFile": "/workspace/funkwhale/.gitpod/.env",
"python.testing.pytestArgs": [
"--cov=funkwhale_api",
"tests/"
],
"python.testing.pytestArgs": ["--cov=funkwhale_api", "tests/"],
"python.testing.unittestEnabled": false,
"python.testing.pytestEnabled": true,
"vitest.enable": true,
"vitest.commandLine": "yarn vitest",
"i18n-ally.localesPaths": [
"front/src/locales"
],
"i18n-ally.localesPaths": ["front/src/locales"],
"i18n-ally.pathMatcher": "*.json",
"i18n-ally.enabledFrameworks": [
"vue"
],
"i18n-ally.enabledFrameworks": ["vue"],
"i18n-ally.keystyle": "nested"
}

Wyświetl plik

@ -1,3 +1,11 @@
<i18n>
{
"en": {
"00:00": "00:00"
}
}
</i18n>
<script setup lang="ts">
import type { QueueItemSource } from '~/types'
@ -56,7 +64,7 @@ const store = useStore()
const labels = computed(() => ({
queue: t('components.Queue.label.queue'),
populating: t('components.Queue.queue.label.populatingRadio'),
populating: t('components.Queue.label.populatingRadio'),
duration: t('components.Queue.label.duration'),
addArtistContentFilter: t('components.Queue.label.addArtistContentFilter'),
restart: t('components.Queue.label.restart'),
@ -129,8 +137,7 @@ const queueItems = computed(() => queue.value.map((track, index) => ({
remove: t('components.Queue.label.remove'),
selectTrack: t('components.Queue.label.selectTrack'),
favorite: t('components.Queue.label.favorite')
},
duration: time.durationFormatted(track.uploads[0]?.duration ?? 0) ?? ''
}
}) as QueueItemSource))
const reorderTracks = async (from: number, to: number) => {
@ -261,7 +268,11 @@ const coverType = useStorage('queue:cover-type', CoverType.COVER_ART)
@click="loadRandomPreset()"
>
<h1>{{ currentTrack.title }}</h1>
<h2>{{ currentTrack.artistName }} &mdash; {{ currentTrack.albumTitle }}</h2>
<h2>
{{ currentTrack.artistName }}
<span class="symbol hyphen middle" />
{{ currentTrack.albumTitle }}
</h2>
</div>
</Transition>
</div>
@ -313,14 +324,10 @@ const coverType = useStorage('queue:cover-type', CoverType.COVER_ART)
class="ui small warning message"
>
<h3 class="header">
<translate translate-context="Sidebar/Player/No sources">
The track has no available sources
</translate>
{{ $t('components.Queue.header.noSources') }}
</h3>
<p v-if="hasNext && isPlaying">
<translate translate-context="Sidebar/Player/Error message.Paragraph">
The next track will play automatically in a few seconds
</translate>
{{ $t('components.Queue.message.automaticPlay') }}
<i class="loading spinner icon" />
</p>
</div>
@ -388,8 +395,8 @@ const coverType = useStorage('queue:cover-type', CoverType.COVER_ART)
<span class="right floated timer total">{{ time.parse(Math.round(duration)) }}</span>
</template>
<template v-else>
<span class="left floated timer">{{ durationFormatted(0) }}</span>
<span class="right floated timer">{{ durationFormatted(0) }}</span>
<span class="left floated timer">{{ $t('components.Queue.meta.startTime') }}</span>
<span class="right floated timer">{{ $t('components.Queue.meta.startTime') }}</span>
</template>
</div>
</div>
@ -470,7 +477,7 @@ const coverType = useStorage('queue:cover-type', CoverType.COVER_ART)
class="ui basic primary button"
@click="$store.dispatch('radios/stop')"
>
{{ $t('components.Queue.stopRadio') }}
{{ $t('components.Queue.button.stopRadio') }}
</button>
</div>
</div>

Wyświetl plik

@ -104,7 +104,7 @@ const moderationNotifications = computed(() =>
const showLanguageModal = ref(false)
const locale = ref(i18nLocale.value)
watch(locale, (locale) => {
// setI18nLanguage(locale)
setI18nLanguage(locale)
})
const isProduction = import.meta.env.PROD

Wyświetl plik

@ -44,7 +44,7 @@ const toggle = () => {
<span v-else-if="isPending">
{{ $t('components.audio.LibraryFollowButton.button.cancel') }}
</span>
<spanv-else>
<span v-else>
{{ $t('components.audio.LibraryFollowButton.button.follow') }}
</span>
</button>

Wyświetl plik

@ -103,10 +103,10 @@ initializeFirstTrack()
const loopingTitle = computed(() => {
const mode = looping.value
return mode === LoopingMode.None
? t('components.audio.Player.label.loopingDisabledLabel')
? t('components.audio.Player.label.loopingDisabled')
: mode === LoopingMode.LoopTrack
? t('components.audio.Player.label.loopingSingleLabel')
: t('components.audio.Player.label.loopingWholeQueueLabel')
? t('components.audio.Player.label.loopingSingle')
: t('components.audio.Player.label.loopingWholeQueue')
})
const hideArtist = () => {
@ -276,8 +276,14 @@ const hideArtist = () => {
v-if="looping !== LoopingMode.None"
class="ui circular tiny vibrant label"
>
<template v-if="looping === LoopingMode.LoopTrack">1</template>
<span v-else-if="looping === LoopingMode.LoopQueue" class="infinity symbol" />
<span
v-if="looping === LoopingMode.LoopTrack"
class="symbol single"
/>
<span
v-else-if="looping === LoopingMode.LoopQueue"
class="infinity symbol"
/>
</span>
</i>
</button>

Wyświetl plik

@ -1,5 +1,5 @@
<script setup lang="ts">
import { useGettext } from 'vue3-gettext'
import { useI18n } from 'vue-i18n'
import { computed } from 'vue'
import { usePlayer } from '~/composables/audio/player'
@ -8,12 +8,12 @@ import { useQueue } from '~/composables/audio/queue'
const { hasPrevious, playPrevious, hasNext, playNext, currentTrack } = useQueue()
const { isPlaying } = usePlayer()
const { $pgettext } = useGettext()
const { t } = useI18n()
const labels = computed(() => ({
previous: $pgettext('Sidebar/Player/Icon.Tooltip', 'Previous track'),
play: $pgettext('Sidebar/Player/Icon.Tooltip/Verb', 'Play'),
pause: $pgettext('Sidebar/Player/Icon.Tooltip/Verb', 'Pause'),
next: $pgettext('Sidebar/Player/Icon.Tooltip', 'Next track')
previous: t('components.audio.PlayerControls.labels.previous'),
play: t('components.audio.PlayerControls.labels.play'),
pause: t('components.audio.PlayerControls.labels.pause'),
next: t('components.audio.PlayerControls.labels.next')
}))
</script>

Wyświetl plik

@ -116,7 +116,7 @@ const actionsButtonLabel = computed(() => t('components.audio.podcast.MobileRow.
class="really discrete"
:date="track.creation_date"
/>
<span class="nospace middledot symbol" />
<span class="middledot symbol" />
<human-duration
v-if="track.uploads[0] && track.uploads[0].duration"
:duration="track.uploads[0].duration"
@ -127,7 +127,7 @@ const actionsButtonLabel = computed(() => t('components.audio.podcast.MobileRow.
class="track-meta mobile"
>
{{ track.artist?.name }}
<span class="nospace middledot symbol" />
<span class="middledot symbol" />
<human-duration
v-if="track.uploads[0] && track.uploads[0].duration"
:duration="track.uploads[0].duration"

Wyświetl plik

@ -58,7 +58,7 @@ const created = (application: Application) => {
{{ $t('components.auth.ApplicationNew.link.settings') }}
</router-link>
<h2 class="ui header">
{{ title }}
{{ labels.title }}
</h2>
<application-form
:defaults="defaults"

Wyświetl plik

@ -725,7 +725,7 @@ fetchOwnedApps()
{{ $t('components.auth.Settings.description.changeEmail') }}
</p>
<p>
{{ $t('components.auth.Settings.message.currentEmail', { email: email }) }}
{{ $t('components.auth.Settings.message.currentEmail', { email: $store.state.auth.profile?.email }) }}
</p>
<form
class="ui form"

Wyświetl plik

@ -2,10 +2,13 @@
import SemanticModal from '~/components/semantic/Modal.vue'
import useThemeList from '~/composables/useThemeList'
import useTheme from '~/composables/useTheme'
import { useVModel } from '@vueuse/core'
import { computed } from 'vue'
import { useI18n } from 'vue-i18n'
import { SUPPORTED_LOCALES } from '~/init/locale'
interface Events {
(e: 'update:show', value: boolean): void
(e: 'showLanguageModalEvent'): void
@ -94,7 +97,7 @@ const labels = computed(() => ({
<span class="left colon symbol" />
</span>
<div class="right floated">
<span class="user-modal list-item">{{ $language.available[$language.current] }}</span>
<span class="user-modal list-item">{{ SUPPORTED_LOCALES[$i18n.locale] }}</span>
<i class="action-hint chevron right icon" />
</div>
</div>

Wyświetl plik

@ -306,7 +306,7 @@ useEventListener(window, 'beforeunload', (event) => {
class="ui warning label"
>
{{ uploadedFilesCount + erroredFilesCount }}
<span class="nospace slash symbol" />
<span class="slash symbol" />
{{ files.length }}
</div>
<div
@ -314,7 +314,7 @@ useEventListener(window, 'beforeunload', (event) => {
:class="['ui', {'success': erroredFilesCount === 0}, {'danger': erroredFilesCount > 0}, 'label']"
>
{{ uploadedFilesCount + erroredFilesCount }}
<span class="nospace slash symbol" />
<span class="slash symbol" />
{{ files.length }}
</div>
</a>
@ -335,7 +335,7 @@ useEventListener(window, 'beforeunload', (event) => {
class="ui warning label"
>
{{ processedFilesCount }}
<span class="nospace slash symbol" />
<span class="slash symbol" />
{{ processableFiles }}
</div>
<div
@ -343,7 +343,7 @@ useEventListener(window, 'beforeunload', (event) => {
:class="['ui', {'success': uploads.errored === 0}, {'danger': uploads.errored > 0}, 'label']"
>
{{ processedFilesCount }}
<span class="nospace slash symbol" />
<span class="slash symbol" />
{{ processableFiles }}
</div>
</a>

Wyświetl plik

@ -102,7 +102,7 @@ onMounted(() => $('.ui.dropdown').dropdown())
const { t } = useI18n()
const labels = computed(() => ({
searchPlaceholder: t('components.library.Radios.placeholder.search'),
title: t('components.library.Podcasts.title')
title: t('components.library.Radios.title')
}))
const paginateOptions = computed(() => sortedUniq([12, 25, 50, paginateBy.value].sort((a, b) => a - b)))

Wyświetl plik

@ -165,7 +165,7 @@ const getCurrentState = (target?: StateTarget): ReviewState => {
<div class="ui inline form">
<div class="fields">
<div class="ui field">
<label for="search-edits">{{ $t('components.manage.library.EditsCardList.placeholder.search') }}</label>
<label for="search-edits">{{ $t('components.manage.library.EditsCardList.label.search') }}</label>
<form @submit.prevent="query = search.value">
<input
id="search-edits"

Wyświetl plik

@ -97,7 +97,7 @@ const labels = computed(() => ({
href="#"
class="item disabled"
>
<span class="nospace ellipses symbol" />
<span class="ellipses symbol" />
</a>
<a
v-else

Wyświetl plik

@ -1,19 +1,18 @@
import type { Track, Upload } from '~/types'
import { createGlobalState, useNow, useStorage, useTimeAgo, whenever } from '@vueuse/core'
import { shuffle as shuffleArray, sum } from 'lodash-es'
import { computed, ref, shallowReactive, watchEffect } from 'vue'
import { shuffle as shuffleArray, sum } from 'lodash-es'
import { useClamp } from '@vueuse/math'
import { delMany, getMany, setMany } from '~/composables/data/indexedDB'
import { looping, LoopingMode, isPlaying } from '~/composables/audio/player'
import { useI18n } from 'vue-i18n'
import { useStore } from '~/store'
import { looping, LoopingMode, isPlaying } from '~/composables/audio/player'
import { delMany, getMany, setMany } from '~/composables/data/indexedDB'
import { setGain } from '~/composables/audio/audio-api'
import { useTracks } from '~/composables/audio/tracks'
import { gettext } from '~/init/locale'
import axios from 'axios'
import { setGain } from './audio-api'
export interface QueueTrackSource {
uuid: string
@ -102,7 +101,7 @@ export const useQueue = createGlobalState(() => {
const { currentSound } = useTracks()
const createQueueTrack = async (track: Track): Promise<QueueTrack> => {
const { $pgettext } = gettext
const { t } = useI18n()
const { default: store } = await import('~/store')
if (track.uploads.length === 0) {
@ -116,8 +115,8 @@ export const useQueue = createGlobalState(() => {
return {
id: track.id,
title: track.title,
artistName: track.artist?.name ?? $pgettext('*/*/*', 'Unknown artist'),
albumTitle: track.album?.title ?? $pgettext('*/*/*', 'Unknown album'),
artistName: track.artist?.name ?? t('composables.audio.queue.unknownArtist'),
albumTitle: track.album?.title ?? t('composables.audio.queue.unknownAlbum'),
position: track.position,
artistId: track.artist?.id ?? -1,
albumId: track.album?.id ?? -1,

Plik diff jest za duży Load Diff

Plik diff jest za duży Load Diff

Plik diff jest za duży Load Diff

Plik diff jest za duży Load Diff

Plik diff jest za duży Load Diff

Plik diff jest za duży Load Diff

Plik diff jest za duży Load Diff

Plik diff jest za duży Load Diff

Wyświetl plik

@ -1,359 +1,359 @@
{
"components": {
"auth": {
"Settings": {
"label": {
"currentPassword": "تغییر پسورد"
},
"header": {
"passwordFailure": "پسورد شما قابل تغییر نیست"
}
},
"SignupForm": {
"label": {
"username": "نام کاربری"
}
},
"LoginForm": {
"label": {
"username": "نام کاربری یا ایمیل"
}
},
"ApplicationForm": {
"label": {
"scopes": {
"write": {
"label": "نوشتن"
}
}
}
},
"Logout": {
"button": {
"logout": "آره،می رم بیرون"
}
}
"components": {
"auth": {
"Settings": {
"label": {
"currentPassword": "تغییر پسورد"
},
"audio": {
"ChannelForm": {
"label": {
"email": "نام کاربری یا ایمیل",
"owner": "نام کاربری"
}
},
"header": {
"passwordFailure": "پسورد شما قابل تغییر نیست"
}
},
"SignupForm": {
"label": {
"username": "نام کاربری"
}
},
"LoginForm": {
"label": {
"username": "نام کاربری یا ایمیل"
}
},
"ApplicationForm": {
"label": {
"scopes": {
"write": {
"label": "نوشتن"
}
}
}
},
"Logout": {
"button": {
"logout": "آره،می رم بیرون"
}
}
},
"audio": {
"ChannelForm": {
"label": {
"email": "نام کاربری یا ایمیل",
"owner": "نام کاربری"
}
},
"track": {
"Table": {
"table": {
"header": {
"title": "عنوان"
}
}
}
},
"ChannelCard": {
"title": "به روز شده در { date }"
}
},
"channels": {
"AlbumForm": {
"label": {
"albumTitle": "عنوان"
}
},
"UploadMetadataForm": {
"label": {
"title": "عنوان"
}
}
},
"manage": {
"library": {
"AlbumsTable": {
"table": {
"album": {
"header": {
"name": "عنوان"
}
}
}
},
"TracksTable": {
"table": {
"track": {
"Table": {
"table": {
"header": {
"title": "عنوان"
}
}
}
},
"ChannelCard": {
"title": "به روز شده در { date }"
"header": {
"title": "عنوان"
}
}
},
"channels": {
"AlbumForm": {
"label": {
"albumTitle": "عنوان"
}
},
"UploadMetadataForm": {
"label": {
"title": "عنوان"
}
}
}
},
"users": {
"UsersTable": {
"table": {
"user": {
"header": {
"username": "نام کاربری"
}
}
},
"manage": {
"library": {
"AlbumsTable": {
"table": {
"album": {
"header": {
"name": "عنوان"
}
}
}
},
"TracksTable": {
"table": {
"track": {
"header": {
"title": "عنوان"
}
}
}
}
},
"users": {
"UsersTable": {
"table": {
"user": {
"header": {
"username": "نام کاربری"
}
}
}
}
},
"moderation": {
"DomainsTable": {
"table": {
"domain": {
"header": {
"users": "کاربرها"
},
"moderationRule": "بله"
}
},
"option": {
"yes": "بله"
}
},
"AccountsTable": {
"table": {
"account": {
"moderationRule": "بله"
}
}
}
}
},
"federation": {
"FetchButton": {
"table": {
"error": {
"value": {
"unknownError": "خطای ناشناخته"
}
}
}
}
},
"library": {
"ImportStatusModal": {
"error": {
"unknownError": {
"label": "خطای ناشناخته"
}
}
},
"AlbumDropdown": {
"link": {
"domain": "به روز شده در { date }"
}
},
"ArtistBase": {
"link": {
"domain": "به روز شده در { date }"
}
},
"TrackBase": {
"link": {
"domain": "به روز شده در { date }"
}
},
"TrackDetail": {
"table": {
"release": {
"year": "سال"
}
}
},
"EditForm": {
"header": {
"success": "تغییرات شما با موفقیت اعمال گردید"
}
}
},
"common": {
"AttachmentInput": {
"label": {
"upload": "أپلود عکس جدید"
}
},
"ContentForm": {
"button": {
"write": "نوشتن"
},
"placeholder": {
"input": "یه چند کلمه ای اینجا بنویس ..."
}
}
},
"Home": {
"header": {
"links": "لینک های مفید"
}
},
"Sidebar": {
"link": {
}
}
},
"moderation": {
"DomainsTable": {
"table": {
"domain": {
"header": {
"users": "کاربرها"
},
"moderationRule": "بله"
}
},
"option": {
"yes": "بله"
}
},
"admin": {
"SignupFormBuilder": {
"table": {
"additionalFields": {
"required": {
"true": "بله"
}
}
}
}
},
"favorites": {
"List": {
"title": "علاقه مندی های شما"
"AccountsTable": {
"table": {
"account": {
"moderationRule": "بله"
}
}
}
}
},
"composables": {
"moderation": {
"useEditConfigs": {
"album": {
"title": "عنوان"
},
"track": {
"title": "عنوان"
}
},
"useReportConfigs": {
"album": {
"title": "عنوان"
},
"track": {
"title": "عنوان"
}
}
},
"locale": {
"useSharedLabels": {
"filters": {
"username": "نام کاربری",
"users": "کاربرها"
}
"federation": {
"FetchButton": {
"table": {
"error": {
"value": {
"unknownError": "خطای ناشناخته"
}
}
}
}
},
"views": {
"admin": {
"library": {
"AlbumDetail": {
"table": {
"album": {
"title": "عنوان"
}
}
},
"TrackDetail": {
"table": {
"track": {
"title": "عنوان"
}
}
}
},
"moderation": {
"AccountsDetail": {
"table": {
"accountData": {
"username": "نام کاربری"
}
}
},
"DomainsDetail": {
"table": {
"instanceData": {
"inAllowList": {
"true": "بله"
}
}
}
}
},
"users": {
"Base": {
"link": {
"users": "کاربرها"
}
}
},
"CommonList": {
"title": {
"users": "کاربرها"
}
}
},
"content": {
"libraries": {
"FilesTable": {
"table": {
"file": {
"header": {
"title": "عنوان"
}
}
}
},
"Card": {
"button": {
"upload": "آپلود"
}
}
}
},
"auth": {
"PasswordResetConfirm": {
"button": {
"update": "تغییر پسورد"
},
"message": {
"success": "پسورد شما با موفقیت به روز گردید"
}
},
"ProfileBase": {
"link": {
"domainView": "به روز شده در { date }"
}
}
},
"library": {
"LibraryBase": {
"button": {
"upload": "آپلود"
},
"link": {
"domain": "به روز شده در { date }"
}
},
"Edit": {
"table": {
"action": {
"header": {
"user": "کاربر"
}
}
}
}
},
"channels": {
"DetailBase": {
"button": {
"upload": "آپلود"
},
"link": {
"domainView": "به روز شده در { date }"
}
}
},
"Notifications": {
"header": {
"messages": "پیام های شما",
"notifications": "اعلان های شما"
}
"library": {
"ImportStatusModal": {
"error": {
"unknownError": {
"label": "خطای ناشناخته"
}
}
},
"AlbumDropdown": {
"link": {
"domain": "به روز شده در { date }"
}
},
"ArtistBase": {
"link": {
"domain": "به روز شده در { date }"
}
},
"TrackBase": {
"link": {
"domain": "به روز شده در { date }"
}
},
"TrackDetail": {
"table": {
"release": {
"year": "سال"
}
}
},
"EditForm": {
"header": {
"success": "تغییرات شما با موفقیت اعمال گردید"
}
}
},
"common": {
"AttachmentInput": {
"label": {
"upload": "أپلود عکس جدید"
}
},
"ContentForm": {
"button": {
"write": "نوشتن"
},
"placeholder": {
"input": "یه چند کلمه ای اینجا بنویس ..."
}
}
},
"Home": {
"header": {
"links": "لینک های مفید"
}
},
"Sidebar": {
"link": {
"users": "کاربرها"
}
},
"admin": {
"SignupFormBuilder": {
"table": {
"additionalFields": {
"required": {
"true": "بله"
}
}
}
}
},
"favorites": {
"List": {
"title": "علاقه مندی های شما"
}
}
},
"composables": {
"moderation": {
"useEditConfigs": {
"album": {
"title": "عنوان"
},
"track": {
"title": "عنوان"
}
},
"useReportConfigs": {
"album": {
"title": "عنوان"
},
"track": {
"title": "عنوان"
}
}
},
"locale": {
"useSharedLabels": {
"filters": {
"username": "نام کاربری",
"users": "کاربرها"
}
}
}
},
"views": {
"admin": {
"library": {
"AlbumDetail": {
"table": {
"album": {
"title": "عنوان"
}
}
},
"TrackDetail": {
"table": {
"track": {
"title": "عنوان"
}
}
}
},
"moderation": {
"AccountsDetail": {
"table": {
"accountData": {
"username": "نام کاربری"
}
}
},
"DomainsDetail": {
"table": {
"instanceData": {
"inAllowList": {
"true": "بله"
}
}
}
}
},
"users": {
"Base": {
"link": {
"users": "کاربرها"
}
}
},
"CommonList": {
"title": {
"users": "کاربرها"
}
}
},
"content": {
"libraries": {
"FilesTable": {
"table": {
"file": {
"header": {
"title": "عنوان"
}
}
}
},
"Card": {
"button": {
"upload": "آپلود"
}
}
}
},
"auth": {
"PasswordResetConfirm": {
"button": {
"update": "تغییر پسورد"
},
"message": {
"success": "پسورد شما با موفقیت به روز گردید"
}
},
"ProfileBase": {
"link": {
"domainView": "به روز شده در { date }"
}
}
},
"library": {
"LibraryBase": {
"button": {
"upload": "آپلود"
},
"link": {
"domain": "به روز شده در { date }"
}
},
"Edit": {
"table": {
"action": {
"header": {
"user": "کاربر"
}
}
}
}
},
"channels": {
"DetailBase": {
"button": {
"upload": "آپلود"
},
"link": {
"domainView": "به روز شده در { date }"
}
}
},
"Notifications": {
"header": {
"messages": "پیام های شما",
"notifications": "اعلان های شما"
}
}
}
}

Plik diff jest za duży Load Diff

Plik diff jest za duży Load Diff

Plik diff jest za duży Load Diff

Wyświetl plik

@ -1,133 +1,133 @@
{
"components": {
"auth": {
"Authorize": {
"header": {
"access": "{ app } 이 Funkwhale 계정에 접근하려고 합니다"
}
}
},
"About": {
"stat": {
"activeUsers": "{ count } 활성 사용자"
}
},
"Home": {
"stat": {
"activeUsers": "{ count } 활성 사용자"
}
},
"audio": {
"artist": {
"Card": {
"meta": {
"episodes": "{ count } 에피소드",
"tracks": "{ count } 트랙"
}
}
},
"ChannelCard": {
"meta": {
"episodes": "{ count } 에피소드",
"tracks": "{ count } 트랙"
}
},
"ChannelSerieCard": {
"meta": {
"episodes": "{ count } 에피소드"
}
},
"album": {
"Card": {
"meta": {
"tracks": "{ count } 트랙"
}
}
}
},
"library": {
"AlbumBase": {
"meta": {
"episodes": "{ count } 에피소드",
"tracks": "{ count } 트랙"
}
}
},
"favorites": {
"List": {
"header": {
"favorites": "{ count } 즐겨찾기"
}
}
},
"channels": {
"AlbumSelect": {
"meta": {
"tracks": "{ count } 트랙"
}
}
},
"playlists": {
"Card": {
"meta": {
"tracks": "{ count } 트랙"
}
}
},
"AboutPod": {
"stat": {
"activeUsers": "{ count } 활성 사용자",
"listeningsCount": "{ count } 듣는중"
}
},
"RemoteSearchForm": {
"label": {
"rss": {
"fieldPlaceholder": "{'@'}channel{'@'}pod.example 또는 https://website.example/rss.xml"
}
}
"components": {
"auth": {
"Authorize": {
"header": {
"access": "{ app } 이 Funkwhale 계정에 접근하려고 합니다"
}
}
},
"views": {
"channels": {
"DetailBase": {
"meta": {
"episodes": "{ count } 에피소드",
"listenings": "{ count } 듣는중",
"subscribers": "{ count } 구독자",
"tracks": "{ count } 트랙"
}
}
},
"content": {
"libraries": {
"Card": {
"meta": {
"tracks": "{ count } 트랙"
}
}
},
"remote": {
"Card": {
"meta": {
"tracks": "{ count } 트랙"
}
}
}
},
"library": {
"LibraryBase": {
"meta": {
"tracks": "{ count } 트랙"
}
}
},
"auth": {
"Signup": {
"header": {
"createAccount": "{ app } 이 Funkwhale 계정에 접근하려고 합니다"
}
}
"About": {
"stat": {
"activeUsers": "{ count } 활성 사용자"
}
},
"Home": {
"stat": {
"activeUsers": "{ count } 활성 사용자"
}
},
"audio": {
"artist": {
"Card": {
"meta": {
"episodes": "{ count } 에피소드",
"tracks": "{ count } 트랙"
}
}
},
"ChannelCard": {
"meta": {
"episodes": "{ count } 에피소드",
"tracks": "{ count } 트랙"
}
},
"ChannelSerieCard": {
"meta": {
"episodes": "{ count } 에피소드"
}
},
"album": {
"Card": {
"meta": {
"tracks": "{ count } 트랙"
}
}
}
},
"library": {
"AlbumBase": {
"meta": {
"episodes": "{ count } 에피소드",
"tracks": "{ count } 트랙"
}
}
},
"favorites": {
"List": {
"header": {
"favorites": "{ count } 즐겨찾기"
}
}
},
"channels": {
"AlbumSelect": {
"meta": {
"tracks": "{ count } 트랙"
}
}
},
"playlists": {
"Card": {
"meta": {
"tracks": "{ count } 트랙"
}
}
},
"AboutPod": {
"stat": {
"activeUsers": "{ count } 활성 사용자",
"listeningsCount": "{ count } 듣는중"
}
},
"RemoteSearchForm": {
"label": {
"rss": {
"fieldPlaceholder": "{'@'}channel{'@'}pod.example 또는 https://website.example/rss.xml"
}
}
}
},
"views": {
"channels": {
"DetailBase": {
"meta": {
"episodes": "{ count } 에피소드",
"listenings": "{ count } 듣는중",
"subscribers": "{ count } 구독자",
"tracks": "{ count } 트랙"
}
}
},
"content": {
"libraries": {
"Card": {
"meta": {
"tracks": "{ count } 트랙"
}
}
},
"remote": {
"Card": {
"meta": {
"tracks": "{ count } 트랙"
}
}
}
},
"library": {
"LibraryBase": {
"meta": {
"tracks": "{ count } 트랙"
}
}
},
"auth": {
"Signup": {
"header": {
"createAccount": "{ app } 이 Funkwhale 계정에 접근하려고 합니다"
}
}
}
}
}

Plik diff jest za duży Load Diff

Plik diff jest za duży Load Diff

Plik diff jest za duży Load Diff

Plik diff jest za duży Load Diff

Plik diff jest za duży Load Diff

Plik diff jest za duży Load Diff

Wyświetl plik

@ -1,131 +1,131 @@
{
"components": {
"auth": {
"Authorize": {
"header": {
"access": "{ app } Funkwhale hesabına erişmek istiyor"
}
}
},
"About": {
"stat": {
"activeUsers": "{ count } aktif kullanıcı | { count } aktif kullanıcılar",
"hoursOfMusic": "{ count } müzik saati | { count } müzik saatleri"
}
},
"Home": {
"stat": {
"activeUsers": "{ count } aktif kullanıcı | { count } aktif kullanıcılar",
"hoursOfMusic": "{ count } müzik saati | { count } müzik saatleri"
}
},
"audio": {
"artist": {
"Card": {
"meta": {
"episodes": "{ count } bölüm | { count } bölümler",
"tracks": "{ count } parça | { count } parça"
}
}
},
"ChannelCard": {
"meta": {
"episodes": "{ count } bölüm | { count } bölümler",
"tracks": "{ count } parça | { count } parça"
}
},
"ChannelSerieCard": {
"meta": {
"episodes": "{ count } bölüm | { count } bölümler"
}
},
"album": {
"Card": {
"meta": {
"tracks": "{ count } parça | { count } parça"
}
}
}
},
"library": {
"AlbumBase": {
"meta": {
"episodes": "{ count } bölüm | { count } bölümler",
"tracks": "{ count } parça | { count } parça"
}
},
"radios": {
"Builder": {
"header": {
"matches": "{ count } tane parça filtrelendi | { count } tane parça filtrelendi"
}
}
}
},
"favorites": {
"List": {
"header": {
"favorites": "{ count } favori | { count } favoriler"
}
}
},
"channels": {
"UploadModal": {
"meta": {
"files": "{ count } dosya | { count } dosyalar"
}
},
"AlbumSelect": {
"meta": {
"tracks": "{ count } parça | { count } parça"
}
}
},
"AboutPod": {
"stat": {
"hoursOfMusic": "{ count } müzik saati | { count } müzik saatleri"
}
},
"playlists": {
"Card": {
"meta": {
"tracks": "{ count } parça | { count } parça"
}
}
"components": {
"auth": {
"Authorize": {
"header": {
"access": "{ app } Funkwhale hesabına erişmek istiyor"
}
}
},
"views": {
"channels": {
"DetailBase": {
"meta": {
"episodes": "{ count } bölüm | { count } bölümler",
"subscribers": "{ count } abone | { count } abone",
"tracks": "{ count } parça | { count } parça"
}
}
},
"content": {
"libraries": {
"Card": {
"meta": {
"tracks": "{ count } parça | { count } parça"
}
}
},
"remote": {
"Card": {
"meta": {
"tracks": "{ count } parça | { count } parça"
}
}
}
},
"library": {
"LibraryBase": {
"meta": {
"tracks": "{ count } parça | { count } parça"
}
}
"About": {
"stat": {
"activeUsers": "{ count } aktif kullanıcı | { count } aktif kullanıcılar",
"hoursOfMusic": "{ count } müzik saati | { count } müzik saatleri"
}
},
"Home": {
"stat": {
"activeUsers": "{ count } aktif kullanıcı | { count } aktif kullanıcılar",
"hoursOfMusic": "{ count } müzik saati | { count } müzik saatleri"
}
},
"audio": {
"artist": {
"Card": {
"meta": {
"episodes": "{ count } bölüm | { count } bölümler",
"tracks": "{ count } parça | { count } parça"
}
}
},
"ChannelCard": {
"meta": {
"episodes": "{ count } bölüm | { count } bölümler",
"tracks": "{ count } parça | { count } parça"
}
},
"ChannelSerieCard": {
"meta": {
"episodes": "{ count } bölüm | { count } bölümler"
}
},
"album": {
"Card": {
"meta": {
"tracks": "{ count } parça | { count } parça"
}
}
}
},
"library": {
"AlbumBase": {
"meta": {
"episodes": "{ count } bölüm | { count } bölümler",
"tracks": "{ count } parça | { count } parça"
}
},
"radios": {
"Builder": {
"header": {
"matches": "{ count } tane parça filtrelendi | { count } tane parça filtrelendi"
}
}
}
},
"favorites": {
"List": {
"header": {
"favorites": "{ count } favori | { count } favoriler"
}
}
},
"channels": {
"UploadModal": {
"meta": {
"files": "{ count } dosya | { count } dosyalar"
}
},
"AlbumSelect": {
"meta": {
"tracks": "{ count } parça | { count } parça"
}
}
},
"AboutPod": {
"stat": {
"hoursOfMusic": "{ count } müzik saati | { count } müzik saatleri"
}
},
"playlists": {
"Card": {
"meta": {
"tracks": "{ count } parça | { count } parça"
}
}
}
},
"views": {
"channels": {
"DetailBase": {
"meta": {
"episodes": "{ count } bölüm | { count } bölümler",
"subscribers": "{ count } abone | { count } abone",
"tracks": "{ count } parça | { count } parça"
}
}
},
"content": {
"libraries": {
"Card": {
"meta": {
"tracks": "{ count } parça | { count } parça"
}
}
},
"remote": {
"Card": {
"meta": {
"tracks": "{ count } parça | { count } parça"
}
}
}
},
"library": {
"LibraryBase": {
"meta": {
"tracks": "{ count } parça | { count } parça"
}
}
}
}
}

Wyświetl plik

@ -1,167 +1,167 @@
{
"components": {
"auth": {
"Authorize": {
"header": {
"access": "{ app } 需要訪問您的funkwhale賬戶"
}
},
"Logout": {
"header": {
"confirm": "您确定要登出吗?"
}
}
},
"About": {
"stat": {
"activeUsers": "{ count } 活躍用戶",
"hoursOfMusic": "{ count } 小時"
},
"header": {
"aboutPod": "關於此媒體庫"
},
"description": {
"funkwhale": "此 pod 运行 Funkwhale这是一个社区驱动的项目允许您在分散的开放式网络中收听和共享音乐和音频。",
"signup": "立即注册,以跟踪您的收藏夹,创建播放列表,发现新内容等等!"
}
},
"Home": {
"stat": {
"activeUsers": "{ count } 活躍用戶",
"hoursOfMusic": "{ count } 小時"
},
"header": {
"aboutFunkwhale": "關於 Funkwhale",
"about": "關於此Funkwhale媒體池"
},
"link": {
"userGuides": {
"description": "發現您需要了解的有關Funkwhale及其功能的所有信息"
}
},
"description": {
"signup": "立即注册,以跟踪您的收藏夹,创建播放列表,发现新内容等等!",
"funkwhale": {
"paragraph1": "此 pod 运行 Funkwhale这是一个社区驱动的项目允许您在分散的开放式网络中收听和共享音乐和音频。"
}
}
},
"audio": {
"artist": {
"Card": {
"meta": {
"episodes": "{ count } 正在聽"
}
}
},
"ChannelCard": {
"meta": {
"episodes": "{ count } 正在聽"
}
},
"ChannelSerieCard": {
"meta": {
"episodes": "{ count } 正在聽"
}
}
},
"library": {
"AlbumBase": {
"meta": {
"episodes": "{ count } 正在聽"
}
},
"FileUpload": {
"tooltip": {
"network": "上傳這個文件時發生了網絡錯誤"
}
}
},
"favorites": {
"List": {
"header": {
"favorites": "{ count } 喜愛"
}
}
},
"AboutPod": {
"stat": {
"hoursOfMusic": "{ count } 小時",
"activeUsers": "{ count } 活躍用戶",
"listeningsCount": "{ count } 正在聽"
},
"link": {
"about": "關於此媒體庫"
},
"header": {
"about": "關於此媒體庫"
}
},
"common": {
"ActionTable": {
"button": {
"selected": "{ count } 中 { total } 選中"
}
}
},
"channels": {
"LicenseSelect": {
"link": {
"license": "關於此許可"
}
}
},
"RemoteSearchForm": {
"label": {
"rss": {
"fieldPlaceholder": "{'@'}channel{'@'}pod.example 或 https://website.example/rss.xml"
}
}
"components": {
"auth": {
"Authorize": {
"header": {
"access": "{ app } 需要訪問您的funkwhale賬戶"
}
},
"Logout": {
"header": {
"confirm": "您确定要登出吗?"
}
}
},
"views": {
"channels": {
"DetailBase": {
"meta": {
"listenings": "{ count } 正在聽"
}
}
},
"library": {
"Edit": {
"button": {
"accept": "確認"
},
"table": {
"action": {
"status": {
"accepted": "已確認"
}
}
}
}
},
"auth": {
"PasswordReset": {
"link": {
"back": "返回登录"
}
},
"PasswordResetConfirm": {
"link": {
"back": "返回登录"
}
},
"Signup": {
"header": {
"createAccount": "{ app } 需要訪問您的funkwhale賬戶"
}
}
}
"About": {
"stat": {
"activeUsers": "{ count } 活躍用戶",
"hoursOfMusic": "{ count } 小時"
},
"header": {
"aboutPod": "關於此媒體庫"
},
"description": {
"funkwhale": "此 pod 运行 Funkwhale这是一个社区驱动的项目允许您在分散的开放式网络中收听和共享音乐和音频。",
"signup": "立即注册,以跟踪您的收藏夹,创建播放列表,发现新内容等等!"
}
},
"init": {
"serviceWorker": {
"newAppVersion": "该应用程序有新版本可用。"
"Home": {
"stat": {
"activeUsers": "{ count } 活躍用戶",
"hoursOfMusic": "{ count } 小時"
},
"header": {
"aboutFunkwhale": "關於 Funkwhale",
"about": "關於此Funkwhale媒體池"
},
"link": {
"userGuides": {
"description": "發現您需要了解的有關Funkwhale及其功能的所有信息"
}
},
"description": {
"signup": "立即注册,以跟踪您的收藏夹,创建播放列表,发现新内容等等!",
"funkwhale": {
"paragraph1": "此 pod 运行 Funkwhale这是一个社区驱动的项目允许您在分散的开放式网络中收听和共享音乐和音频。"
}
}
},
"audio": {
"artist": {
"Card": {
"meta": {
"episodes": "{ count } 正在聽"
}
}
},
"ChannelCard": {
"meta": {
"episodes": "{ count } 正在聽"
}
},
"ChannelSerieCard": {
"meta": {
"episodes": "{ count } 正在聽"
}
}
},
"library": {
"AlbumBase": {
"meta": {
"episodes": "{ count } 正在聽"
}
},
"FileUpload": {
"tooltip": {
"network": "上傳這個文件時發生了網絡錯誤"
}
}
},
"favorites": {
"List": {
"header": {
"favorites": "{ count } 喜愛"
}
}
},
"AboutPod": {
"stat": {
"hoursOfMusic": "{ count } 小時",
"activeUsers": "{ count } 活躍用戶",
"listeningsCount": "{ count } 正在聽"
},
"link": {
"about": "關於此媒體庫"
},
"header": {
"about": "關於此媒體庫"
}
},
"common": {
"ActionTable": {
"button": {
"selected": "{ count } 中 { total } 選中"
}
}
},
"channels": {
"LicenseSelect": {
"link": {
"license": "關於此許可"
}
}
},
"RemoteSearchForm": {
"label": {
"rss": {
"fieldPlaceholder": "{'@'}channel{'@'}pod.example 或 https://website.example/rss.xml"
}
}
}
},
"views": {
"channels": {
"DetailBase": {
"meta": {
"listenings": "{ count } 正在聽"
}
}
},
"library": {
"Edit": {
"button": {
"accept": "確認"
},
"table": {
"action": {
"status": {
"accepted": "已確認"
}
}
}
}
},
"auth": {
"PasswordReset": {
"link": {
"back": "返回登录"
}
},
"PasswordResetConfirm": {
"link": {
"back": "返回登录"
}
},
"Signup": {
"header": {
"createAccount": "{ app } 需要訪問您的funkwhale賬戶"
}
}
}
},
"init": {
"serviceWorker": {
"newAppVersion": "该应用程序有新版本可用。"
}
}
}

Wyświetl plik

@ -127,68 +127,32 @@ span.diff.removed {
}
.symbol {
&.left::after {
padding-right: 0.25em;
}
&.right::after {
padding-left: 0.25em;
}
&.middle::after {
padding: 0 0.25em;
}
&.at::after {
content: "@";
}
&.slash {
&.left::after {
padding-right: 0.25em;
content: "/";
}
&.right::after {
padding-left: 0.25em;
content: "/";
}
&.middle::after {
padding: 0.25em;
content: "/";
}
&.nospace::after {
content: "/";
}
&.slash::after {
content: "/";
}
&.pipe {
&.left::after {
padding-right: 0.25em;
content: "|";
}
&.right::after {
padding-left: 0.25em;
content: "|";
}
&.middle::after {
padding: 0.25em;
content: "|";
}
&.pipe::after {
content: "|";
}
&.middledot {
&.left::before {
padding-right: 0.25em;
content: "·";
}
&.right::after {
padding-left: 0.25em;
content: "·";
}
&.middle::after {
padding: 0.25em;
content: "·";
}
&.nospace::after {
content: "·";
}
&.middledot::after {
content: "·";
}
&.infinity::after {
@ -203,56 +167,20 @@ span.diff.removed {
content: "#";
}
&.ellipses {
&.nospace::after {
content: "";
}
&.middle::after {
padding: 0.25em;
content: "";
}
&.ellipses::after {
content: "";
}
&.doubledot::after {
content: "..";
}
&.hyphen {
&.left::before {
padding-right: 0.25em;
content: "-";
}
&.right {
padding-left: 0.25em;
content: "-";
}
&.middle::after {
padding: 0.25em;
content: "-";
}
&.hyphen::after {
content: "-";
}
&.colon {
&.left::before {
padding-right: 0.25em;
content: ":";
}
&.right::after {
padding-left: 0.25em;
content: ":";
}
&.middle::after {
padding: 0.25em;
content: ":";
}
&.colon::after {
content: ":";
}
&.percent::after {

Wyświetl plik

@ -93,7 +93,7 @@ const deletePlaylist = async () => {
<div class="content">
{{ playlist.name }}
<div class="sub header">
{{ $t('views.playlists.Detail.meta.tracks', {count: tracks_count, username: playlist.user.username}) }}
{{ $t('views.playlists.Detail.meta.tracks', {count: playlist.tracks_count, username: playlist.user.username}) }}
<br>
<duration :seconds="playlist.duration" />
</div>

Wyświetl plik

@ -3925,6 +3925,16 @@ json5@^2.1.3, json5@^2.2.0, json5@^2.2.1:
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c"
integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==
jsonc-eslint-parser@2.1.0, jsonc-eslint-parser@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/jsonc-eslint-parser/-/jsonc-eslint-parser-2.1.0.tgz#4c126b530aa583d85308d0b3041ff81ce402bbb2"
integrity sha512-qCRJWlbP2v6HbmKW7R3lFbeiVWHo+oMJ0j+MizwvauqnCV/EvtAeEeuCgoc/ErtsuoKgYB8U4Ih8AxJbXoE6/g==
dependencies:
acorn "^8.5.0"
eslint-visitor-keys "^3.0.0"
espree "^9.0.0"
semver "^7.3.5"
jsonc-eslint-parser@^1.0.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/jsonc-eslint-parser/-/jsonc-eslint-parser-1.4.1.tgz#8cbe99f6f5199acbc5a823c4c0b6135411027fa6"
@ -3936,16 +3946,6 @@ jsonc-eslint-parser@^1.0.1:
espree "^6.0.0"
semver "^6.3.0"
jsonc-eslint-parser@^2.0.0, jsonc-eslint-parser@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/jsonc-eslint-parser/-/jsonc-eslint-parser-2.1.0.tgz#4c126b530aa583d85308d0b3041ff81ce402bbb2"
integrity sha512-qCRJWlbP2v6HbmKW7R3lFbeiVWHo+oMJ0j+MizwvauqnCV/EvtAeEeuCgoc/ErtsuoKgYB8U4Ih8AxJbXoE6/g==
dependencies:
acorn "^8.5.0"
eslint-visitor-keys "^3.0.0"
espree "^9.0.0"
semver "^7.3.5"
jsonfile@^6.0.1:
version "6.1.0"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"