Fix linting issues

This commit is contained in:
wvffle 2022-11-27 12:15:43 +00:00 committed by Kasper Seweryn
parent 14c784e06d
commit fea7493725
48 changed files with 101161 additions and 101227 deletions

13
.vscode/settings.json vendored
View File

@ -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"
}

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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>

View File

@ -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>

View File

@ -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)))

View File

@ -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"

View File

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

View File

@ -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,

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -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": "اعلان های شما"
}
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -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 계정에 접근하려고 합니다"
}
}
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -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"
}
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -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": "该应用程序有新版本可用。"
}
}
}

View File

@ -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 {

View File

@ -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>

View File

@ -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"