Compare commits

..

1 commit

Author SHA1 Message Date
teutat3s 86c7f9543d
feat: add fly.toml 2024-05-07 12:03:41 +02:00
140 changed files with 11325 additions and 15446 deletions

View file

@ -40,6 +40,7 @@
"groupName": "lint",
"matchPackageNames": [
"@antfu/eslint-config",
"@types/prettier",
"eslint",
"prettier"
]

View file

@ -35,7 +35,7 @@ jobs:
username: ${{ github.actor }}
password: ${{ github.token }}
- name: Build and push
uses: docker/build-push-action@v6
uses: docker/build-push-action@v5
with:
context: .
platforms: linux/amd64,linux/arm64

View file

@ -19,6 +19,6 @@ jobs:
name: Semantic Pull Request
steps:
- name: Validate PR title
uses: amannn/action-semantic-pull-request@v5.5.3
uses: amannn/action-semantic-pull-request@v5.4.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

1
.npmrc
View file

@ -1,4 +1,3 @@
shamefully-hoist=true
shell-emulator=true
ignore-workspace-root-check=true
package-manager-strict=false

View file

@ -18,10 +18,10 @@ To develop and test the Elk package:
1. Fork the Elk repository to your own GitHub account and then clone it to your local device.
2. Ensure using the latest Node.js (20.x).
2. Ensure using the latest Node.js (16.x).
If you have [nvm](https://github.com/nvm-sh/nvm), you can run `nvm i` to install the required version.
3. The package manager used to install and link dependencies must be [pnpm](https://pnpm.io/) v9. To use it you must first enable [Corepack](https://github.com/nodejs/corepack) by running `corepack enable`. (Note: on Linux in a standard Node 20+ environment, you should follow the instructions to install via Node's `corepack` rather than using the `curl` command)
3. The package manager used to install and link dependencies must be [pnpm](https://pnpm.io/) v7. To use it you must first enable [Corepack](https://github.com/nodejs/corepack) by running `corepack enable`. (Note: on Linux in a standard Node 16+ environment, you should follow the instructions to install via Node's `corepack` rather than using the `curl` command)
4. Check out a branch where you can work and commit your changes:
```shell
@ -97,7 +97,7 @@ You can check the current [translation status](https://docs.elk.zone/docs/guide/
If you are updating a translation in your local environment, you can run the following commands to check the status:
- from root folder: `nr prepare-translation-status`
- change to `docs` folder and run docs dev server `nr dev`
- open `http://localhost:3000/guide/contributing#translation-status` in your browser
- open `http://localhost:3000/docs/guide/contributing#translation-status` in your browser
### Adding a new language

View file

@ -67,7 +67,6 @@ These are known deployments using Elk as an alternative Web client for Mastodon
- [elk.mstdn.ca](https://elk.mstdn.ca) - Use Elk for the `mstdn.ca` Server
- [elk.mastodonapp.uk](https://elk.mastodonapp.uk) - Use Elk for the `mastodonapp.uk` Server
- [elk.bolha.us](https://elk.bolha.us) - Use Elk for the `bolha.us` Server
- [crab.bumscode.com](https://crab.bumscode.com) - Use [crab](https://github.com/maybeanerd/crab) - a soft fork of Elk - for the `bumscode.com` Server
> **Note**: Community deployments are **NOT** maintained by the Elk team. It may not be synced with Elk's source code. Please do your own research about the host servers before using them.

View file

@ -1,4 +1,4 @@
<script setup lang="ts">
<script lang="ts" setup>
import type { mastodon } from 'masto'
defineOptions({

View file

@ -189,6 +189,7 @@ async function copyAccountName() {
<div flex="~ col gap1" pt2>
<div flex gap2 items-center flex-wrap>
<AccountDisplayName :account="account" font-bold sm:text-2xl text-xl />
<AccountRolesIndicator v-if="account.roles?.length" :account="account" />
<AccountLockIndicator v-if="account.locked" show-label />
<AccountBotIndicator v-if="account.bot" show-label />
</div>
@ -201,9 +202,6 @@ async function copyAccountName() {
</button>
</CommonTooltip>
</div>
<div self-start mt-1>
<AccountRolesIndicator v-if="account.roles?.length" :account="account" />
</div>
</div>
</div>
<label

View file

@ -12,7 +12,7 @@ const relationship = useRelationship(account)
<div v-show="relationship" flex="~ col gap2" rounded min-w-90 max-w-120 z-100 overflow-hidden p-4>
<div flex="~ gap2" items-center>
<NuxtLink :to="getAccountRoute(account)" flex-auto rounded-full hover:bg-active transition-100 pe5 me-a>
<AccountInfo :account="account" :hover-card="true" />
<AccountInfo :account="account" />
</NuxtLink>
<AccountFollowButton text-sm :account="account" :relationship="relationship" />
</div>

View file

@ -16,20 +16,18 @@ const { account, as = 'div' } = defineProps<{
<!-- TODO: Make this work for both buttons and links -->
<!-- This is sometimes (like in the sidebar) used directly as a button, and sometimes, like in follow notifications, as a link. I think this component may need a second refactor that either lets an implementation pass in a link or an action and adapt to what's passed in, or the implementations need to be updated to wrap in the action they want to take and this be just the layout for these items -->
<template>
<component :is="as" flex items-center gap-3 v-bind="$attrs">
<component :is="as" flex gap-3 v-bind="$attrs">
<AccountHoverWrapper :disabled="!hoverCard" :account="account">
<AccountBigAvatar :account="account" shrink-0 :square="square" />
</AccountHoverWrapper>
<div flex="~ col" shrink h-full overflow-hidden justify-center leading-none select-none p-1>
<div flex="~ col" shrink pt-1 h-full overflow-hidden justify-center leading-none select-none>
<div flex="~" gap-2>
<AccountDisplayName :account="account" font-bold line-clamp-1 ws-pre-wrap break-all text-lg />
<AccountRolesIndicator v-if="account.roles?.length" :account="account" :limit="1" />
<AccountLockIndicator v-if="account.locked" text-xs />
<AccountBotIndicator v-if="account.bot" text-xs />
</div>
<AccountHandle :account="account" text-secondary-light />
<div self-start mt-1>
<AccountRolesIndicator v-if="account.roles?.length" :account="account" :limit="1" />
</div>
</div>
</component>
</template>

View file

@ -56,7 +56,7 @@ async function removeUserNote() {
<template>
<CommonDropdown :eager-mount="command">
<button flex gap-1 items-center w-full rounded op75 hover="op100 text-purple" group :aria-label="t('actions.more')">
<button flex gap-1 items-center w-full rounded op75 hover="op100 text-purple" group aria-label="More actions">
<div rounded-5 p2 elk-group-hover="bg-purple/10">
<div i-ri:more-2-fill />
</div>

View file

@ -38,14 +38,12 @@ onMounted(() => {
announce(t('a11y.loading_page'))
})
router.afterEach((to, from) => {
if (from) {
setTimeout(() => {
requestAnimationFrame(() => {
const title = document.title.trim().split('|')
announce(t('a11y.route_loaded', [title[0]]))
})
}, 512)
}
from && setTimeout(() => {
requestAnimationFrame(() => {
const title = document.title.trim().split('|')
announce(t('a11y.route_loaded', [title[0]]))
})
}, 512)
})
})
</script>

View file

@ -1,4 +1,4 @@
<script setup lang="ts">
<script lang="ts" setup>
import type { ResolvedCommand } from '~/composables/command'
const {

View file

@ -1,4 +1,4 @@
<script setup lang="ts">
<script lang="ts" setup>
const emit = defineEmits<{
(event: 'close'): void
}>()

View file

@ -1,4 +1,4 @@
<script setup lang="ts">
<script lang="ts" setup>
import type { Boundaries } from 'vue-advanced-cropper'
import { Cropper } from 'vue-advanced-cropper'
import 'vue-advanced-cropper/dist/style.css'

View file

@ -1,4 +1,4 @@
<script setup lang="ts">
<script lang="ts" setup>
import { fileOpen } from 'browser-fs-access'
import type { FileWithHandle } from 'browser-fs-access'

View file

@ -3,6 +3,7 @@
import { DynamicScroller } from 'vue-virtual-scroller'
import 'vue-virtual-scroller/dist/vue-virtual-scroller.css'
import type { mastodon } from 'masto'
import type { UnwrapRef } from 'vue'
const {
paginator,
@ -32,7 +33,7 @@ defineSlots<{
newer: U // newer is undefined when index === 0
}) => void
items: (props: {
items: U[]
items: UnwrapRef<U[]>
}) => void
updater: (props: {
number: number
@ -73,7 +74,7 @@ defineExpose({ createEntry, removeEntry, updateEntry })
<template>
<div>
<slot v-if="prevItems.length" name="updater" v-bind="{ number: prevItems.length, update }" />
<slot name="items" :items="items as U[]">
<slot name="items" :items="items">
<template v-if="virtualScroller">
<DynamicScroller
v-slot="{ item, active, index }"

View file

@ -20,7 +20,7 @@ const tabs = computed(() => {
})
function toValidName(option: string) {
return option.toLowerCase().replace(/[^a-z0-9]/gi, '-')
return option.toLowerCase().replace(/[^a-zA-Z0-9]/g, '-')
}
useCommands(() => command

View file

@ -1,4 +1,4 @@
<script setup lang="ts">
<script lang="ts" setup>
import type { mastodon } from 'masto'
const {

View file

@ -1,4 +1,4 @@
<script setup lang="ts">
<script lang="ts" setup>
import type { mastodon } from 'masto'
import sparkline from '@fnando/sparkline'

View file

@ -8,7 +8,7 @@ const vAutoFocus = (el: HTMLElement) => el.focus()
<template>
<div my-8 px-3 sm:px-8 md:max-w-200 flex="~ col gap-4" relative>
<button v-auto-focus type="button" btn-action-icon absolute top--8 right-0 m1 :aria-label="$t('action.close')" @click="emit('close')">
<button v-auto-focus type="button" btn-action-icon absolute top--8 right-0 m1 aria-label="Close" @click="emit('close')">
<span i-ri:close-line />
</button>

View file

@ -15,10 +15,9 @@ const isRemoved = ref(false)
async function edit() {
try {
if (isRemoved.value)
await client.v1.lists.$select(list).accounts.create({ accountIds: [account.id] })
else
await client.v1.lists.$select(list).accounts.remove({ accountIds: [account.id] })
isRemoved.value
? await client.v1.lists.$select(list).accounts.create({ accountIds: [account.id] })
: await client.v1.lists.$select(list).accounts.remove({ accountIds: [account.id] })
isRemoved.value = !isRemoved.value
}
catch (err) {

View file

@ -1,4 +1,4 @@
<script setup lang="ts">
<script lang="ts" setup>
const { userId } = defineProps<{
userId: string
}>()

View file

@ -32,14 +32,14 @@ const shortcutItemGroups = computed<ShortcutItemGroup[]>(() => [
description: t('magic_keys.groups.navigation.shortcut_help'),
shortcut: { keys: ['?'], isSequence: false },
},
{
description: t('magic_keys.groups.navigation.next_status'),
shortcut: { keys: ['j'], isSequence: false },
},
{
description: t('magic_keys.groups.navigation.previous_status'),
shortcut: { keys: ['k'], isSequence: false },
},
// {
// description: t('magic_keys.groups.navigation.next_status'),
// shortcut: { keys: ['j'], isSequence: false },
// },
// {
// description: t('magic_keys.groups.navigation.previous_status'),
// shortcut: { keys: ['k'], isSequence: false },
// },
{
description: t('magic_keys.groups.navigation.go_to_search'),
shortcut: { keys: ['/'], isSequence: false },

View file

@ -27,7 +27,7 @@ const containerClass = computed(() => {
<template>
<div ref="container" :class="containerClass">
<div
sticky top-0 z-20
sticky top-0 z10
pt="[env(safe-area-inset-top,0)]"
bg="[rgba(var(--rgb-bg-base),0.7)]"
class="native:lg:w-[calc(100vw-5rem)] native:xl:w-[calc(135%+(100vw-1200px)/2)]"

View file

@ -1,5 +1,6 @@
<script setup lang="ts">
import type { ConfirmDialogChoice, ConfirmDialogOptions } from '~/types'
import DurationPicker from '~/components/modal/DurationPicker.vue'
const props = defineProps<ConfirmDialogOptions>()

View file

@ -63,14 +63,13 @@ function handleFavouritedBoostedByClose() {
</ModalDialog>
<ModalDialog
v-model="isPublishDialogOpen"
max-w-180 flex w-full
max-w-180 flex
@close="handlePublishClose"
>
<!-- This `w-0` style is used to avoid overflow problems in flex layoutsso don't remove it unless you know what you're doing -->
<PublishWidgetList
v-if="dialogDraftKey"
:draft-key="dialogDraftKey"
expanded
class="flex-1"
:draft-key="dialogDraftKey" expanded flex-1 w-0
@published="handlePublished"
/>
</ModalDialog>

View file

@ -1,4 +1,4 @@
<script setup lang="ts">
<script lang="ts" setup>
import { useFocusTrap } from '@vueuse/integrations/useFocusTrap'
export interface Props {

View file

@ -39,14 +39,14 @@ onUnmounted(() => locked.value = false)
<template>
<div relative h-full w-full flex pt-12 @click="onClick">
<button
v-if="hasNext" pointer-events-auto btn-action-icon bg="black/20" :aria-label="$t('action.next')"
v-if="hasNext" pointer-events-auto btn-action-icon bg="black/20" :aria-label="$t('action.previous')"
hover:bg="black/40" dark:bg="white/30" dark-hover:bg="white/20" absolute top="1/2" right-1 z5
:title="$t('action.next')" @click="next"
>
<div i-ri:arrow-right-s-line text-white />
</button>
<button
v-if="hasPrev" pointer-events-auto btn-action-icon bg="black/20" :aria-label="$t('action.prev')"
v-if="hasPrev" pointer-events-auto btn-action-icon bg="black/20" aria-label="action.next"
hover:bg="black/40" dark:bg="white/30" dark:hover-bg="white/20" absolute top="1/2" left-1 z5
:title="$t('action.prev')" @click="prev"
>
@ -71,7 +71,7 @@ onUnmounted(() => locked.value = false)
<div absolute top-0 w-full flex justify-end>
<button
btn-action-icon bg="black/30" :aria-label="$t('action.close')" hover:bg="black/40" dark:bg="white/30"
btn-action-icon bg="black/30" aria-label="action.close" hover:bg="black/40" dark:bg="white/30"
dark:hover-bg="white/20" pointer-events-auto shrink-0 @click="emit('close')"
>
<div i-ri:close-line text-white />

View file

@ -1,4 +1,4 @@
<script setup lang="ts">
<script lang="ts" setup>
import { invoke } from '@vueuse/core'
const modelValue = defineModel<boolean>({ required: true })

View file

@ -8,31 +8,6 @@ const { notifications } = useNotifications()
const useStarFavoriteIcon = usePreferences('useStarFavoriteIcon')
const lastAccessedNotificationRoute = useLocalStorage(STORAGE_KEY_LAST_ACCESSED_NOTIFICATION_ROUTE, '')
const lastAccessedExploreRoute = useLocalStorage(STORAGE_KEY_LAST_ACCESSED_EXPLORE_ROUTE, '')
const notificationsLink = computed(() => {
const hydrated = isHydrated.value
const user = currentUser.value
const lastRoute = lastAccessedNotificationRoute.value
if (!hydrated || !user || !lastRoute) {
return '/notifications'
}
return `/notifications/${lastRoute}`
})
const exploreLink = computed(() => {
const hydrated = isHydrated.value
const server = currentServer.value
let lastRoute = lastAccessedExploreRoute.value
if (!hydrated) {
return '/explore'
}
if (lastRoute.length) {
lastRoute = `/${lastRoute}`
}
return server ? `/${server}/explore${lastRoute}` : `/explore${lastRoute}`
})
</script>
<template>
@ -41,7 +16,7 @@ const exploreLink = computed(() => {
<div class="spacer" shrink xl:hidden />
<NavSideItem :text="$t('nav.home')" to="/home" icon="i-ri:home-5-line" user-only :command="command" />
<NavSideItem :text="$t('nav.notifications')" :to="notificationsLink" icon="i-ri:notification-4-line" user-only :command="command">
<NavSideItem :text="$t('nav.notifications')" :to="`/notifications/${lastAccessedNotificationRoute}`" icon="i-ri:notification-4-line" user-only :command="command">
<template #icon>
<div flex relative>
<div class="i-ri:notification-4-line" text-xl />
@ -59,7 +34,7 @@ const exploreLink = computed(() => {
<NavSideItem :text="$t('action.compose')" to="/compose" icon="i-ri:quill-pen-line" user-only :command="command" />
<div class="spacer" shrink hidden sm:block />
<NavSideItem :text="$t('nav.explore')" :to="exploreLink" icon="i-ri:compass-3-line" :command="command" />
<NavSideItem :text="$t('nav.explore')" :to="isHydrated ? `/${currentServer}/explore/${lastAccessedExploreRoute}` : `/explore/${lastAccessedExploreRoute}`" icon="i-ri:compass-3-line" :command="command" />
<NavSideItem :text="$t('nav.local')" :to="isHydrated ? `/${currentServer}/public/local` : '/public/local'" icon="i-ri:group-2-line " :command="command" />
<NavSideItem :text="$t('nav.federated')" :to="isHydrated ? `/${currentServer}/public` : '/public'" icon="i-ri:earth-line" :command="command" />
<NavSideItem :text="$t('nav.lists')" :to="isHydrated ? `/${currentServer}/lists` : '/lists'" icon="i-ri:list-check" user-only :command="command" />

View file

@ -1,4 +1,4 @@
<script setup lang="ts">
<script setup>
const { busy, oauth, singleInstanceServer } = useSignIn()
</script>

View file

@ -10,7 +10,7 @@ defineModel<boolean>()
<button
flex items-center place-content-center h-full flex-1 class="select-none"
:class="show ? '!text-primary' : ''"
:aria-label="$t('nav.more_menu')"
aria-label="More menu"
@click="toggleVisible"
>
<span :class="show ? 'i-ri:close-fill' : 'i-ri:more-fill'" />

View file

@ -27,16 +27,16 @@ const likes = computed(() => group.likes.filter(i => i.favourite && !i.reblog))
{{ $t('notification.reblogged_post') }}
</div>
</div>
<div v-if="likes.length" flex="~ gap-1 wrap">
<div v-if="likes.length" flex="~ gap-1">
<div :class="useStarFavoriteIcon ? 'i-ri:star-line color-yellow' : 'i-ri:heart-line color-red'" text-xl me-2 />
<template v-for="i, idx of likes" :key="idx">
<AccountHoverWrapper :account="i.account" relative me--4 border="2 bg-base" rounded-full hover:z-1 focus-within:z-1>
<AccountHoverWrapper :account="i.account">
<NuxtLink :to="getAccountRoute(i.account)">
<AccountAvatar text-primary font-bold :account="i.account" class="h-1.5em w-1.5em" />
</NuxtLink>
</AccountHoverWrapper>
</template>
<div ms-4>
<div ms1>
{{ $t('notification.favourited_post') }}
</div>
</div>

View file

@ -17,7 +17,7 @@ const modelValue = defineModel<boolean>({ required: true })
text-red-600 dark:text-red-400
border="~ base rounded red-600 dark:red-400"
>
<header id="notification-failed" flex justify-between>
<head id="notification-failed" flex justify-between>
<div flex items-center gap-x-2 font-bold>
<div aria-hidden="true" i-ri:error-warning-fill />
<p>{{ title ?? $t('settings.notifications.push_notifications.subscription_error.title') }}</p>
@ -32,7 +32,7 @@ const modelValue = defineModel<boolean>({ required: true })
<span aria-hidden="true" w="1.75em" h="1.75em" i-ri:close-line />
</button>
</CommonTooltip>
</header>
</head>
<p>{{ message }}</p>
<p py-2>
<i18n-t keypath="settings.notifications.push_notifications.subscription_error.error_hint">

View file

@ -32,10 +32,9 @@ async function openEmojiPicker() {
picker.value = new Picker({
data: () => dataPromise,
onEmojiSelect({ native, src, alt, name }: any) {
if (native)
emit('select', native)
else
emit('selectCustom', { src, alt, 'data-emoji-id': name })
native
? emit('select', native)
: emit('selectCustom', { src, alt, 'data-emoji-id': name })
},
set: 'twitter',
theme: colorMode,

View file

@ -5,7 +5,6 @@ import type { mastodon } from 'masto'
import type { DraftItem } from '~/types'
const {
threadComposer,
draftKey,
draftItemIndex,
expanded = false,
@ -16,7 +15,6 @@ const {
draftKey: string
draftItemIndex: number
initial?: () => DraftItem
threadComposer?: ReturnType<typeof useThreadComposer>
placeholder?: string
inReplyToId?: string
inReplyToVisibility?: mastodon.v1.StatusVisibility
@ -30,7 +28,7 @@ const emit = defineEmits<{
const { t } = useI18n()
const { threadItems, threadIsActive, publishThread } = threadComposer ?? useThreadComposer(draftKey)
const { threadItems, threadIsActive, publishThread } = useThreadComposer(draftKey)
const draft = computed({
get: () => threadItems.value[draftItemIndex],
@ -87,12 +85,10 @@ function trimPollOptions() {
const trimmedOptions = draft.value.params.poll!.options.slice(0, indexLastNonEmpty + 1)
if (currentInstance.value?.configuration
&& trimmedOptions.length >= currentInstance.value?.configuration?.polls.maxOptions) {
&& trimmedOptions.length >= currentInstance.value?.configuration?.polls.maxOptions)
draft.value.params.poll!.options = trimmedOptions
}
else {
else
draft.value.params.poll!.options = [...trimmedOptions, '']
}
}
function editPollOptionDraft(event: Event, index: number) {
@ -139,10 +135,10 @@ const characterCount = computed(() => {
let length = stringLength(text)
// taken from https://github.com/mastodon/mastodon/blob/07f8b4d1b19f734d04e69daeb4c3421ef9767aac/app/lib/text_formatter.rb
const linkRegex = /(https?:\/\/|xmpp:)\S+/g
const linkRegex = /(https?:\/\/(www\.)?|xmpp:)\S+/g
// taken from https://github.com/mastodon/mastodon/blob/af578e/app/javascript/mastodon/features/compose/util/counter.js
const countableMentionRegex = /(^|[^/\w])@((\w+)@[a-z0-9.-]+[a-z0-9])/gi
const countableMentionRegex = /(^|[^/\w])@(([a-z0-9_]+)@[a-z0-9.-]+[a-z0-9]+)/ig
// maximum of 23 chars per link
// https://github.com/elk-zone/elk/issues/1651

View file

@ -20,8 +20,9 @@ const {
dialogLabelledBy?: string
}>()
const threadComposer = useThreadComposer(draftKey, initial)
const threadItems = computed(() => threadComposer.threadItems.value)
const threadItems = computed(() =>
useThreadComposer(draftKey, initial).threadItems.value,
)
onDeactivated(() => {
clearEmptyDrafts()
@ -36,8 +37,6 @@ function isFirstItem(index: number) {
<template v-if="isHydrated && currentUser">
<PublishWidget
v-for="(_, index) in threadItems" :key="`${draftKey}-${index}`"
v-bind="$attrs"
:thread-composer="threadComposer"
:draft-key="draftKey"
:draft-item-index="index"
:expanded="isFirstItem(index) ? expanded : true"

View file

@ -97,7 +97,7 @@ function resetModal() {
<b text-primary>@{{ account.acct }}</b>
</i18n-t>
</h2>
<button ref="dismissButton" btn-action-icon absolute top--8 right-0 m1 :aria-label="$t('action.close')" @click="emit('close')">
<button ref="dismissButton" btn-action-icon absolute top--8 right-0 m1 aria-label="Close" @click="emit('close')">
<div i-ri:close-line />
</button>

View file

@ -90,7 +90,7 @@ function activate() {
</button>
</div>
<!-- Results -->
<div left-0 top-11 absolute w-full z-10 group-focus-within="pointer-events-auto visible" invisible pointer-events-none>
<div left-0 top-11 absolute w-full z10 group-focus-within="pointer-events-auto visible" invisible pointer-events-none>
<div w-full bg-base border="~ base" rounded-3 max-h-100 overflow-auto py2>
<span v-if="query.trim().length === 0" block text-center text-sm text-secondary>
{{ t('search.search_desc') }}

View file

@ -1,4 +1,4 @@
<script setup lang="ts">
<script lang="ts" setup>
import { DEFAULT_FONT_SIZE } from '~/constants'
import type { FontSize } from '~/composables/settings'

View file

@ -1,4 +1,4 @@
<script setup lang="ts">
<script lang="ts" setup>
const props = defineProps<{
text?: string
content?: string

View file

@ -1,4 +1,4 @@
<script setup lang="ts">
<script lang="ts" setup>
import type { ComputedRef } from 'vue'
import type { LocaleObject } from '@nuxtjs/i18n'

View file

@ -15,34 +15,34 @@ const { disabled = false } = defineProps<{
:disabled="disabled"
:class="disabled ? 'opacity-50 cursor-not-allowed' : ''"
>
<span
<div
w-full flex px5 py3 md:gap2 gap4 items-center
transition-250
:class="disabled ? '' : 'group-hover:bg-active'"
group-focus-visible:ring="2 current"
>
<span flex-1 flex items-center md:gap2 gap4>
<span
<div flex-1 flex items-center md:gap2 gap4>
<div
v-if="icon" flex items-center justify-center
flex-shrink-0
:class="$slots.description ? 'w-12 h-12' : ''"
>
<slot name="icon">
<span v-if="icon" :class="icon" md:text-size-inherit text-xl />
<div v-if="icon" :class="icon" md:text-size-inherit text-xl />
</slot>
</span>
<span space-y-1>
<span :class="checked ? 'text-base' : 'text-secondary'">
</div>
<div space-y-1>
<p :class="checked ? 'text-base' : 'text-secondary'">
<slot>
<span>{{ text }}</span>
</slot>
</span>
<span v-if="$slots.description" block text-sm text-secondary>
</p>
<p v-if="$slots.description" text-sm text-secondary>
<slot name="description" />
</span>
</span>
</span>
<span text-lg :class="checked ? 'i-ri-checkbox-line text-primary' : 'i-ri-checkbox-blank-line text-secondary'" />
</span>
</p>
</div>
</div>
<div text-lg :class="checked ? 'i-ri-checkbox-line text-primary' : 'i-ri-checkbox-blank-line text-secondary'" />
</div>
</button>
</template>

View file

@ -1,4 +1,4 @@
<script setup lang="ts">
<script lang="ts" setup>
import ISO6391 from 'iso-639-1'
const supportedTranslationLanguages = ISO6391.getLanguages([...supportedTranslationCodes])

View file

@ -83,8 +83,7 @@ useIntersectionObserver(video, (entries) => {
entries.forEach((entry) => {
if (entry.intersectionRatio <= 0.75) {
if (ready && !video.value?.paused)
video.value?.pause()
ready && !video.value?.paused && video.value?.pause()
}
else {
video.value?.play().then(() => {
@ -212,7 +211,7 @@ watch(shouldLoadAttachment, () => {
rounded-lg
h-full
w-full
:aria-label="$t('action.open_image_preview_dialog')"
aria-label="Open image preview dialog"
relative
@click="!shouldLoadAttachment ? loadAttachment() : openMediaPreview(attachments ? attachments : [attachment], attachments?.indexOf(attachment) || 0)"
>

View file

@ -72,7 +72,7 @@ const forceShow = ref(false)
<template>
<StatusLink :status="status" :hover="hover">
<!-- Upper border -->
<div :h="showUpperBorder ? '1px' : '0'" w-auto bg-border mb-1 z--1 />
<div :h="showUpperBorder ? '1px' : '0'" w-auto bg-border mb-1 />
<slot name="meta">
<!-- Line connecting to previous status -->

View file

@ -44,9 +44,7 @@ const allowEmbeddedMedia = computed(() => status.card?.html && embeddedMediaPref
<StatusBody v-if="(!isFiltered && isSensitiveNonSpoiler) || hideAllMedia" :status="status" :newer="newer" :with-action="!isDetails" :class="isDetails ? 'text-xl' : ''" />
<StatusSpoiler :enabled="hasSpoilerOrSensitiveMedia || isFiltered" :filter="isFiltered" :sensitive-non-spoiler="isSensitiveNonSpoiler || hideAllMedia" :is-d-m="isDM">
<template v-if="spoilerTextPresent" #spoiler>
<p>
<ContentRich :content="status.spoilerText" :emojis="status.emojis" :markdown="false" />
</p>
<p>{{ status.spoilerText }}</p>
</template>
<template v-else-if="filterPhrase" #spoiler>
<p>{{ `${$t('status.filter_hidden_phrase')}: ${filterPhrase}` }}</p>

View file

@ -28,7 +28,7 @@ const card = ref(status.card)
absolute
w-full
h-full
z-10
z-100
rounded-lg
style="background: linear-gradient(black, rgba(0,0,0,0.5), transparent, transparent, rgba(0,0,0,0.20))"
>

View file

@ -26,7 +26,7 @@ async function toggleFollowTag() {
emit('change')
}
catch {
catch (error) {
// eslint-disable-next-line vue/no-mutating-props
tag.following = previousFollowingState
}

View file

@ -1,11 +1,7 @@
<script setup lang="ts">
import type { mastodon } from 'masto'
const { isSupported, effectiveType } = useNetwork()
const isSlow = computed(() => isSupported.value && effectiveType.value && ['slow-2g', '2g', '3g'].includes(effectiveType.value))
const limit = computed(() => isSlow.value ? 10 : 30)
const paginator = useMastoClient().v1.timelines.home.list({ limit: limit.value })
const paginator = useMastoClient().v1.timelines.home.list({ limit: 30 })
const stream = useStreaming(client => client.user.subscribe())
function reorderAndFilter(items: mastodon.v1.Status[]) {
return reorderedTimeline(items, 'home')

View file

@ -1,5 +1,6 @@
<script setup lang="ts">
import { getEmojiMatchesInText } from '@iconify/utils/lib/emoji/replace/find'
import CommonScrollIntoView from '../common/CommonScrollIntoView.vue'
import type { CustomEmoji, Emoji } from '~/composables/tiptap/suggestion'
import { isCustomEmoji } from '~/composables/tiptap/suggestion'
import { emojiFilename, emojiPrefix, emojiRegEx } from '~~/config/emojis'

View file

@ -1,5 +1,6 @@
<script setup lang="ts">
import type { mastodon } from 'masto'
import CommonScrollIntoView from '../common/CommonScrollIntoView.vue'
import type { CommandHandler } from '~/composables/command'
const { items, command } = defineProps<{

View file

@ -1,5 +1,6 @@
<script setup lang="ts">
import type { mastodon } from 'masto'
import CommonScrollIntoView from '../common/CommonScrollIntoView.vue'
import type { CommandHandler } from '~/composables/command'
const { items, command } = defineProps<{

View file

@ -20,7 +20,7 @@ function clickUser(user: UserLogin) {
<button
flex rounded
cursor-pointer
:aria-label="$t('action.switch_account')"
aria-label="Switch user"
:class="user.account.acct === currentUser?.account.acct ? '' : 'op25 grayscale'"
hover="filter-none op100"
@click="clickUser(user)"

View file

@ -27,7 +27,7 @@ function isValidUrl(str: string) {
new URL(str)
return true
}
catch {
catch (err) {
return false
}
}
@ -42,16 +42,13 @@ async function handleInput() {
if (
isValidUrl(`https://${input}`)
&& input.match(/^[a-z0-9-]+(\.[a-z0-9-]+)+(:\d+)?$/i)
&& input.match(/^[a-z0-9-]+(\.[a-z0-9-]+)+(:[0-9]+)?$/i)
// Do not hide the autocomplete if a result has an exact substring match on the input
&& !filteredServers.value.some(s => s.includes(input))
) {
)
autocompleteShow.value = false
}
else {
else
autocompleteShow.value = true
}
}
function toSelector(server: string) {

View file

@ -36,7 +36,7 @@ function processSignIn() {
<button
flex rounded px4 py3 text-left
hover:bg-active cursor-pointer transition-100
:aria-label="$t('action.switch_account')"
aria-label="Switch user"
@click="clickUser(user)"
>
<AccountInfo :account="user.account" :hover-card="false" square />

View file

@ -19,7 +19,7 @@ export interface ContentParseOptions {
inReplyToStatus?: mastodon.v1.Status
}
const sanitizerBasicClasses = filterClasses(/^h-\S*|p-\S*|u-\S*|dt-\S*|e-\S*|mention|hashtag|ellipsis|invisible$/u)
const sanitizerBasicClasses = filterClasses(/^(h-\S*|p-\S*|u-\S*|dt-\S*|e-\S*|mention|hashtag|ellipsis|invisible)$/u)
const sanitizer = sanitize({
// Allow basic elements as seen in https://github.com/mastodon/mastodon/blob/17f79082b098e05b68d6f0d38fabb3ac121879a9/lib/sanitize_ext/sanitize_config.rb
br: {},
@ -93,7 +93,6 @@ export function parseMastodonHTML(
if (markdown) {
// Handle code blocks
html = html
/* eslint-disable regexp/no-super-linear-backtracking, regexp/no-misleading-capturing-group */
.replace(/>(```|~~~)(\w*)([\s\S]+?)\1/g, (_1, _2, lang: string, raw: string) => {
const code = htmlToText(raw)
.replace(/</g, '&lt;')
@ -192,7 +191,7 @@ export function recursiveTreeToText(input: Node): string {
return treeToText(input)
}
const emojiIdNeedsWrappingRE = /^([\w\-])+$/
const emojiIdNeedsWrappingRE = /^(\d|\w|-|_)+$/
export function treeToText(input: Node): string {
let pre = ''
@ -418,7 +417,7 @@ function removeCustomEmoji(customEmojis: Record<string, mastodon.v1.CustomEmoji>
if (node.type !== TEXT_NODE)
return node
const split = node.value.split(/\s?:([\w-]+):/g)
const split = node.value.split(/\s?:([\w-]+?):/g)
if (split.length === 1)
return node
@ -440,7 +439,7 @@ function replaceCustomEmoji(customEmojis: Record<string, mastodon.v1.CustomEmoji
if (node.type !== TEXT_NODE)
return node
const split = node.value.split(/:([\w-]+):/g)
const split = node.value.split(/:([\w-]+?):/g)
if (split.length === 1)
return node
@ -485,9 +484,9 @@ const _markdownReplacements: [RegExp, (c: (string | Node)[]) => Node][] = [
[/\*\*(.*?)\*\*/g, c => h('b', null, c)],
[/\*(.*?)\*/g, c => h('em', null, c)],
[/~~(.*?)~~/g, c => h('del', null, c)],
[/`([^`]+)`/g, c => h('code', null, c)],
[/`([^`]+?)`/g, c => h('code', null, c)],
// transform @username@twitter.com as links
[/\B@(\w+)@twitter\.com\b/gi, c => h('a', { href: `https://twitter.com/${c}`, target: '_blank', rel: 'nofollow noopener noreferrer', class: 'mention external' }, `@${c}@twitter.com`)],
[/\B@([a-zA-Z0-9_]+)@twitter\.com\b/gi, c => h('a', { href: `https://twitter.com/${c}`, target: '_blank', rel: 'nofollow noopener noreferrer', class: 'mention external' }, `@${c}@twitter.com`)],
]
function _markdownProcess(value: string) {

View file

@ -1,53 +1,39 @@
import type { MaybeRefOrGetter, RemovableRef } from '@vueuse/core'
import type { Ref } from 'vue'
import type { UseIDBOptions } from '@vueuse/integrations/useIDBKeyval'
import { del, get, set, update } from '~/utils/elk-idb'
export interface UseAsyncIDBKeyvalReturn<T> {
set: (value: T) => Promise<void>
readIDB: () => Promise<T | undefined>
}
const isIDBSupported = !process.test && typeof indexedDB !== 'undefined'
export async function useAsyncIDBKeyval<T>(
key: IDBValidKey,
initialValue: MaybeRefOrGetter<T>,
source: RemovableRef<T>,
options: Omit<UseIDBOptions, 'shallow'> = {},
): Promise<UseAsyncIDBKeyvalReturn<T>> {
options: UseIDBOptions = {},
): Promise<RemovableRef<T>> {
const {
flush = 'pre',
deep = true,
writeDefaults = true,
shallow,
onError = (e: unknown) => {
console.error(e)
},
} = options
const rawInit: T = toValue<T>(initialValue)
const data = (shallow ? shallowRef : ref)(initialValue) as Ref<T>
try {
const rawValue = await get<T>(key)
if (rawValue === undefined) {
if (rawInit !== undefined && rawInit !== null && writeDefaults) {
await set(key, rawInit)
source.value = rawInit
}
}
else {
source.value = rawValue
}
}
catch (e) {
onError(e)
}
const rawInit: T = toValue(initialValue)
async function write(data: T) {
async function read() {
if (!isIDBSupported)
return
try {
if (data == null) {
await del(key)
const rawValue = await get<T>(key)
if (rawValue === undefined) {
if (rawInit !== undefined && rawInit !== null)
await set(key, rawInit)
}
else {
// IndexedDB does not support saving proxies, convert from proxy before saving
await update(key, () => toRaw(data))
data.value = rawValue
}
}
catch (e) {
@ -55,21 +41,31 @@ export async function useAsyncIDBKeyval<T>(
}
}
const {
pause: pauseWatch,
resume: resumeWatch,
} = watchPausable(source, data => write(data), { flush, deep })
await read()
async function setData(value: T): Promise<void> {
pauseWatch()
async function write() {
if (!isIDBSupported)
return
try {
await write(value)
source.value = value
if (data.value == null) {
await del(key)
}
else {
// IndexedDB does not support saving proxies, convert from proxy before saving
if (Array.isArray(data.value))
await update(key, () => (JSON.parse(JSON.stringify(data.value))))
else if (typeof data.value === 'object')
await update(key, () => ({ ...data.value }))
else
await update(key, () => (data.value))
}
}
finally {
resumeWatch()
catch (e) {
onError(e)
}
}
return { set: setData, readIDB: () => get<T>(key) }
watch(data, () => write(), { flush, deep })
return data as RemovableRef<T>
}

View file

@ -4,7 +4,7 @@ export function getDisplayName(account: mastodon.v1.Account, options?: { rich?:
const displayName = account.displayName || account.username || account.acct || ''
if (options?.rich)
return displayName
return displayName.replace(/:([\w-]+):/g, '')
return displayName.replace(/:([\w-]+?):/g, '')
}
export function accountToShortHandle(acct: string) {

View file

@ -80,9 +80,8 @@ export function usePublish(options: {
options.length < currentInstance.value.configuration.polls.maxOptions
|| options[options.length - 1].trim().length === 0
)
) {
)
options = options.slice(0, options.length - 1)
}
poll = { ...draftItem.value.params.poll, options }
}

View file

@ -123,9 +123,8 @@ export function usePaginator<T, P, U = T>(
&& state.value === 'idle'
// No new content is loaded when the keepAlive page enters the background
&& deactivated.value === false
) {
)
loadNext()
}
},
)
}

View file

@ -102,8 +102,7 @@ async function unsubscribeFromBackend(fromSWPushManager: boolean, removePushNoti
const cu = currentUser.value
if (cu) {
await removePushNotifications(cu)
if (removePushNotification)
await removePushNotificationData(cu, fromSWPushManager)
removePushNotification && await removePushNotificationData(cu, fromSWPushManager)
}
}

View file

@ -178,8 +178,7 @@ export function usePushManager() {
else
currentUser.value.pushSubscription = await client.value.v1.push.subscription.update({ data })
if (policyChanged)
await nextTick()
policyChanged && await nextTick()
// force change policy when changed: watch is resetting it on push subscription update
await saveSettings(policyChanged ? policy : undefined)

View file

@ -29,7 +29,7 @@ declare module '@tiptap/core' {
}
}
const inputRegex = /(?:^|\s)(!\[(.+|:?)\]\((\S+)(?:\s+["'](\S+)["'])?\))$/
const inputRegex = /(?:^|\s)(!\[(.+|:?)]\((\S+)(?:(?:\s+)["'](\S+)["'])?\))$/
export const TiptapPluginCustomEmoji = Node.create<EmojiOptions>({
name: 'custom-emoji',

View file

@ -14,7 +14,7 @@ function wrapHandler<T extends (...args: any[]) => any>(handler: T): T {
try {
return handler(...args)
}
catch {
catch (e) {
return null
}
})

View file

@ -119,8 +119,7 @@ function createSuggestionRenderer(component: Component): SuggestionOptions['rend
// Use arrow function here because Nuxt will transform it incorrectly as Vue hook causing the build to fail
onBeforeUpdate: (props) => {
if (props.editor.isFocused)
renderer.updateProps({ ...props, isPending: true })
props.editor.isFocused && renderer.updateProps({ ...props, isPending: true })
},
onUpdate(props) {

View file

@ -12,14 +12,39 @@ import {
STORAGE_KEY_NOTIFICATION,
STORAGE_KEY_NOTIFICATION_POLICY,
STORAGE_KEY_SERVERS,
STORAGE_KEY_USERS,
} from '~/constants'
import type { PushNotificationPolicy, PushNotificationRequest } from '~/composables/push-notifications/types'
import { useAsyncIDBKeyval } from '~/composables/idb'
const mock = process.mock
const users: Ref<UserLogin[]> | RemovableRef<UserLogin[]> = import.meta.server ? ref<UserLogin[]>([]) : ref<UserLogin[]>([]) as RemovableRef<UserLogin[]>
function initializeUsers(): Promise<Ref<UserLogin[]> | RemovableRef<UserLogin[]>> | Ref<UserLogin[]> | RemovableRef<UserLogin[]> {
let defaultUsers = mock ? [mock.user] : []
// Backward compatibility with localStorage
let removeUsersOnLocalStorage = false
if (globalThis?.localStorage) {
const usersOnLocalStorageString = globalThis.localStorage.getItem(STORAGE_KEY_USERS)
if (usersOnLocalStorageString) {
defaultUsers = JSON.parse(usersOnLocalStorageString)
removeUsersOnLocalStorage = true
}
}
const users = import.meta.server
? ref<UserLogin[]>(defaultUsers)
: useAsyncIDBKeyval<UserLogin[]>(STORAGE_KEY_USERS, defaultUsers, { deep: true })
if (removeUsersOnLocalStorage)
globalThis.localStorage.removeItem(STORAGE_KEY_USERS)
return users
}
const users = import.meta.server ? initializeUsers() as Ref<UserLogin[]> | RemovableRef<UserLogin[]> : await initializeUsers()
const nodes = useLocalStorage<Record<string, any>>(STORAGE_KEY_NODES, {}, { deep: true })
export const currentUserHandle = useLocalStorage<string>(STORAGE_KEY_CURRENT_USER_HANDLE, mock ? mock.user.account.id : '')
const currentUserHandle = useLocalStorage<string>(STORAGE_KEY_CURRENT_USER_HANDLE, mock ? mock.user.account.id : '')
export const instanceStorage = useLocalStorage<Record<string, mastodon.v1.Instance>>(STORAGE_KEY_SERVERS, mock ? mock.server : {}, { deep: true })
export type ElkInstance = Partial<mastodon.v1.Instance> & {
@ -32,24 +57,17 @@ export function getInstanceCache(server: string): mastodon.v1.Instance | undefin
}
export const currentUser = computed<UserLogin | undefined>(() => {
const handle = currentUserHandle.value
const currentUsers = users.value
if (handle) {
const user = currentUsers.find(user => user.account?.acct === handle)
if (currentUserHandle.value) {
const user = users.value.find(user => user.account?.acct === currentUserHandle.value)
if (user)
return user
}
// Fallback to the first account
return currentUsers.length ? currentUsers[0] : undefined
return users.value[0]
})
const publicInstance = ref<ElkInstance | null>(null)
export const currentInstance = computed<null | ElkInstance>(() => {
const user = currentUser.value
const storage = instanceStorage.value
const instance = publicInstance.value
return user ? storage[user.server] ?? null : instance
})
export const currentInstance = computed<null | ElkInstance>(() => currentUser.value ? instanceStorage.value[currentUser.value.server] ?? null : publicInstance.value)
export function getInstanceDomain(instance: ElkInstance) {
return instance.accountDomain || withoutProtocol(instance.uri)
@ -62,6 +80,37 @@ export const currentNodeInfo = computed<null | Record<string, any>>(() => nodes.
export const isGotoSocial = computed(() => currentNodeInfo.value?.software?.name === 'gotosocial')
export const isGlitchEdition = computed(() => currentInstance.value?.version?.includes('+glitch'))
// when multiple tabs: we need to reload window when sign in, switch account or sign out
if (import.meta.client) {
const windowReload = () => {
document.visibilityState === 'visible' && window.location.reload()
}
watch(currentUserHandle, async (handle, oldHandle) => {
// when sign in or switch account
if (handle) {
if (handle === currentUser.value?.account?.acct) {
// when sign in, the other tab will not have the user, idb is not reactive
const newUser = users.value.find(user => user.account?.acct === handle)
// if the user is there, then we are switching account
if (newUser) {
// check if the change is on current tab: if so, don't reload
if (document.hasFocus() || document.visibilityState === 'visible')
return
}
}
window.addEventListener('visibilitychange', windowReload, { capture: true })
}
// when sign out
else if (oldHandle) {
const oldUser = users.value.find(user => user.account?.acct === oldHandle)
// when sign out, the other tab will not have the user, idb is not reactive
if (oldUser)
window.addEventListener('visibilitychange', windowReload, { capture: true })
}
}, { immediate: true, flush: 'post' })
}
export function useUsers() {
return users
}
@ -71,10 +120,7 @@ export function useSelfAccount(user: MaybeRefOrGetter<mastodon.v1.Account | unde
export const characterLimit = computed(() => currentInstance.value?.configuration?.statuses.maxCharacters ?? DEFAULT_POST_CHARS_LIMIT)
export async function loginTo(
masto: ElkMasto,
user: Overwrite<UserLogin, { account?: mastodon.v1.AccountCredentials }>,
) {
export async function loginTo(masto: ElkMasto, user: Overwrite<UserLogin, { account?: mastodon.v1.AccountCredentials }>) {
const { client } = masto
const instance = mastoLogin(masto, user)
@ -275,7 +321,7 @@ export async function signOut() {
if (!currentUserHandle.value)
await useRouter().push('/')
await loginTo(masto, currentUser.value || { server: publicServer.value })
loginTo(masto, currentUser.value || { server: publicServer.value })
}
export function checkLogin() {

View file

@ -114,11 +114,6 @@ const locales: LocaleObjectData[] = [
file: 'ca.json',
name: 'Català',
},
{
code: 'el-GR',
file: 'el-GR.json',
name: 'Ελληνικά',
},
{
code: 'de-DE',
file: 'de-DE.json',
@ -218,8 +213,8 @@ const locales: LocaleObjectData[] = [
name: 'Indonesia',
},
{
code: 'fi',
file: 'fi.json',
code: 'fi-FI',
file: 'fi-FI.json',
name: 'Suomi',
},
{

View file

@ -7,7 +7,7 @@ export const pwa: VitePWANuxtOptions = {
disable: /* temporarily test in CI isPreview || */ (isDevelopment && process.env.VITE_DEV_PWA !== 'true'),
scope: '/',
srcDir: './service-worker',
filename: 'elk-sw.ts',
filename: 'sw.ts',
strategies: 'injectManifest',
injectRegister: false,
includeManifestIcons: false,

View file

@ -26,7 +26,7 @@ export const STORAGE_KEY_LAST_ACCESSED_NOTIFICATION_ROUTE = 'elk-last-accessed-n
export const STORAGE_KEY_LAST_ACCESSED_EXPLORE_ROUTE = 'elk-last-accessed-explore-route'
export const STORAGE_KEY_BOTTOM_NAV_BUTTONS = 'elk-bottom-nav-buttons'
export const HANDLED_MASTO_URLS = /^(https?:\/\/)?([\w\-]+\.)+\w+\/(@[@\w\-.]+)(\/objects)?(\/\d+)?$/
export const HANDLED_MASTO_URLS = /^(https?:\/\/)?([\w\d-]+\.)+\w+\/(@[@\w\d-\.]+)(\/objects)?(\/\d+)?$/
export const NOTIFICATION_FILTER_TYPES: mastodon.v1.NotificationType[] = ['status', 'reblog', 'follow', 'follow_request', 'favourite', 'poll', 'update', 'admin.sign_up', 'admin.report']

View file

@ -1,7 +1,8 @@
<script setup lang="ts">
const { copy } = defineProps<{
copy?: boolean
}>()
<script>
export default {
name: 'ClipboardIcon',
props: { copy: Boolean },
}
</script>
<template>

View file

@ -1,4 +1,8 @@
<script setup lang="ts"></script>
<script>
export default {
name: 'IconMastodon',
}
</script>
<template>
<svg width="1em" height="1em" viewBox="0 0 24 24"><path fill="currentColor" d="M21.258 13.99c-.274 1.41-2.456 2.955-4.962 3.254c-1.306.156-2.593.3-3.965.236c-2.243-.103-4.014-.535-4.014-.535c0 .218.014.426.04.62c.292 2.215 2.196 2.347 4 2.41c1.82.062 3.44-.45 3.44-.45l.076 1.646s-1.274.684-3.542.81c-1.25.068-2.803-.032-4.612-.51c-3.923-1.039-4.598-5.22-4.701-9.464c-.031-1.26-.012-2.447-.012-3.44c0-4.34 2.843-5.611 2.843-5.611c1.433-.658 3.892-.935 6.45-.956h.062c2.557.02 5.018.298 6.451.956c0 0 2.843 1.272 2.843 5.61c0 0 .036 3.201-.397 5.424zm-2.956-5.087c0-1.074-.273-1.927-.822-2.558c-.567-.631-1.308-.955-2.229-.955c-1.065 0-1.871.41-2.405 1.228l-.518.87l-.519-.87C11.276 5.8 10.47 5.39 9.405 5.39c-.921 0-1.663.324-2.229.955c-.549.631-.822 1.484-.822 2.558v5.253h2.081V9.057c0-1.075.452-1.62 1.357-1.62c1 0 1.501.647 1.501 1.927v2.79h2.07v-2.79c0-1.28.5-1.927 1.5-1.927c.905 0 1.358.545 1.358 1.62v5.1h2.08V8.902z" /></svg>

View file

@ -1,7 +1,8 @@
<script setup lang="ts">
const { up } = defineProps<{
up?: boolean
}>()
<script>
export default {
name: 'ToggleIcon',
props: { up: Boolean },
}
</script>
<template>

View file

@ -13,6 +13,6 @@
},
"devDependencies": {
"@nuxt-themes/docus": "^1.15.0",
"nuxt": "^3.13.2"
"nuxt": "^3.11.2"
}
}

View file

@ -1,4 +1,4 @@
<script setup lang="ts">
<script lang="ts" setup>
import { usePreferences } from '~/composables/settings'
const route = useRoute()

View file

@ -7,8 +7,6 @@
"route_loaded": "Seite {0} geladen"
},
"account": {
"authorize": "Erlauben zu folgen",
"authorized": "Du hast die Folgeanfrage erlaubt",
"avatar_description": "{0}'s Avatar",
"blocked_by": "Du wurdest von diesem Account geblockt",
"blocked_domains": "Geblockte Mastodon-Instanzen",
@ -27,7 +25,6 @@
"follows_you": "Folgt dir",
"go_to_profile": "Gehe zum Profil",
"joined": "Beigetreten",
"lock": "Sperren",
"moved_title": "hat angegeben, dass dies der neue Account ist:",
"muted_users": "Stummgeschaltete Accounts",
"muting": "Stummgeschaltet",
@ -40,16 +37,12 @@
"profile_description": "{0}'s Profil",
"profile_personal_note": "Persönliche Notiz",
"profile_unavailable": "Profil nicht verfügbar",
"reject": "Folgeanfrage ablehnen",
"rejected": "Du hast den Antrag abgelehnt",
"request_follow": "Folgeanfrage senden",
"requested": "{0} hat beantragt, dir zu folgen",
"unblock": "Entblocken",
"unfollow": "Entfolgen",
"unmute": "Stummschaltung aufheben",
"view_other_followers": "Follower aus anderen Instanzen werden möglicherweise nicht angezeigt.",
"view_other_following": "Das Folgen von anderen Instanzen wird möglicherweise nicht angezeigt.",
"withdraw_follow_request": "Folgeanfrage zurückziehen"
"view_other_following": "Das Folgen von anderen Instanzen wird möglicherweise nicht angezeigt."
},
"action": {
"apply": "Anwenden",
@ -59,8 +52,7 @@
"boost_count": "{0}",
"boosted": "Geteilt",
"clear_publish_failed": "Veröffentlichungsfehler löschen",
"clear_save_failed": "Speicherfehler löschen",
"clear_upload_failed": "Uploadfehler entfernen",
"clear_upload_failed": "Fehler beim Hochladen von Dateien entfernen",
"close": "Schließen",
"compose": "Verfassen",
"confirm": "Bestätigen",
@ -72,7 +64,6 @@
"favourited": "Favorisiert",
"more": "Mehr",
"next": "Nächster",
"open_image_preview_dialog": "Bildvorschau öffnen",
"prev": "Vorheriger",
"publish": "Veröffentlichen",
"publish_thread": "Thread veröffentlichen",
@ -123,14 +114,12 @@
"block_account": {
"cancel": "Abbrechen",
"confirm": "Blockieren",
"description": "Bist du sicher, dass du {0} blockieren möchtest?",
"title": "Konto blockieren"
"description": "Bist du sicher, dass du {0} blockieren möchtest?"
},
"block_domain": {
"cancel": "Abbrechen",
"confirm": "Blockieren",
"description": "Bist du sicher, dass du {0} blockieren möchtest?",
"title": "Domain blockieren"
"description": "Bist du sicher, dass du {0} blockieren möchtest?"
},
"common": {
"cancel": "Abbrechen",
@ -139,37 +128,27 @@
"delete_list": {
"cancel": "Abbrechen",
"confirm": "Löschen",
"description": "Bist du sicher, dass du die Liste \"{0}\" löschen möchtest?",
"title": "Liste löschen"
"description": "Bist du sicher, dass du die Liste \"{0}\" löschen möchtest?"
},
"delete_posts": {
"cancel": "Abbrechen",
"confirm": "Löschen",
"description": "Möchtest du diesen Beitrag wirklich löschen?",
"title": "Beitrag löschen"
"description": "Möchtest du diesen Beitrag wirklich löschen?"
},
"mute_account": {
"cancel": "Abbrechen",
"confirm": "Stummschalten",
"days": "Tage|Tag|Tage",
"description": "Bist du sicher, dass du {0} stummschalten möchtest?",
"hours": "Stunden|Stunde|Stunden",
"minute": "Minuten|Minute|Minuten",
"notifications": "Benachrichtigungen stummschalten",
"specify_duration": "Dauer der Stummschaltung festlegen",
"title": "Konto stummschalten"
"description": "Bist du sicher, dass du {0} stummschalten möchtest?"
},
"show_reblogs": {
"cancel": "Abbrechen",
"confirm": "Anzeigen",
"description": "Bist du sicher, dass du Weiterleitungen von {0} anzeigen möchtest?",
"title": "Weiterleitungen anzeigen"
"description": "Bist du sicher, dass du Weiterleitungen von {0} anzeigen möchtest?"
},
"unfollow": {
"cancel": "Abbrechen",
"confirm": "Entfolgen",
"description": "Bist du sicher, dass du entfolgen möchtest?",
"title": "Entfolgen"
"description": "Bist du sicher, dass du entfolgen möchtest?"
}
},
"conversation": {
@ -234,8 +213,6 @@
"command_mode": "Befehlsmodus",
"compose": "Verfassen",
"favourite": "Favorisieren",
"search": "Suchen",
"show_new_items": "Neue Einträge anzeigen",
"title": "Aktionen"
},
"media": {
@ -280,7 +257,6 @@
"pin_on_profile": "An Profil anpinnen",
"remove_personal_note": "Persönliche Notiz von {0} entfernen",
"report_account": "{0} melden",
"share_account": "Konto von {0} teilen",
"share_post": "Teile diesen Beitrag",
"show_favourited_and_boosted_by": "Zeige mir, wer favorisiert und geboostet hat",
"show_reblogs": "Boosts von {0} anzeigen",
@ -308,16 +284,13 @@
"built_at": "Letzter Build: {0}",
"compose": "Verfassen",
"conversations": "Direktnachrichten",
"docs": "Dokumentation",
"explore": "Entdecken",
"favourites": "Favoriten",
"federated": "Föderiert",
"hashtags": "Hashtags",
"home": "Startseite",
"list": "Liste",
"lists": "Listen",
"local": "Lokal",
"more_menu": "Mehr Menü",
"muted_users": "Stummgeschaltete Benutzer",
"notifications": "Mitteilungen",
"privacy": "Datenschutz",
@ -463,7 +436,6 @@
},
"language": {
"display_language": "Anzeigesprache",
"how_to_contribute": "Wie kann ich mithelfen?",
"label": "Sprache",
"post_language": "Beitragssprache",
"status": "Übersetzungsstatus: {0}/{1} ({2}%)",
@ -531,8 +503,6 @@
},
"notifications_settings": "Benachrichtigungen",
"preferences": {
"embedded_media": "Eingebetteter Mediaplayer",
"embedded_media_description": "Zeige einen eingebetteten Player anstelle der normalen Vorschaukarte an, wenn gemeinsam genutzte Medien-Streaming-Links erweitert werden.",
"enable_autoplay": "Autoplay aktivieren",
"enable_data_saving": "Daten sparen aktivieren",
"enable_data_saving_description": "Spare Daten, indem du das automatische Laden von Anhängen verhinderst.",
@ -541,19 +511,16 @@
"github_cards_description": "Wenn ein GitHub-Link gepostet wird, wird anstelle des sozialen Bildes eine zugängliche HTML-Karte mit der Social-Graph-Meta angezeigt.",
"grayscale_mode": "Graustufenmodus",
"hide_account_hover_card": "Benutzer-Hover-Karte verbergen",
"hide_alt_indi_on_posts": "Alternativtext-Hinweis in Beiträgen verbergen",
"hide_boost_count": "Boost-Zähler verbergen",
"hide_favorite_count": "Favoritenzahl verbergen",
"hide_follower_count": "Anzahl der Follower verbergen",
"hide_gif_indi_on_posts": "GIF-Indikator auf Beiträgen verbergen",
"hide_news": "Nachrichten verbergen",
"hide_reply_count": "Antwortanzahl verbergen",
"hide_tag_hover_card": "Tag-Hover-Karte verbergen",
"hide_translation": "Übersetzungen komplett verbergen",
"hide_username_emojis": "Emojis in Namen verbergen",
"hide_username_emojis_description": "Verbirgt in der Timeline Emojis in den Namen von Kommentator:innen. In deren Profilen sind die Emojis weiterhin zu sehen.",
"hide_alt_indi_on_posts": "Alternativtext-Hinweis in Beiträgen ausblenden",
"hide_boost_count": "Boost-Zähler ausblenden",
"hide_favorite_count": "Favoritenzahl ausblenden",
"hide_follower_count": "Anzahl der Follower ausblenden",
"hide_news": "Nachrichten ausblenden",
"hide_reply_count": "Antwortanzahl ausblenden",
"hide_translation": "Übersetzungen komplett ausblenden",
"hide_username_emojis": "Emojis in Namen ausblenden",
"hide_username_emojis_description": "Blendet in der Timeline Emojis in den Namen von Kommentator:innen aus. In deren Profilen sind die Emojis weiterhin zu sehen.",
"label": "Einstellungen",
"optimize_for_low_performance_device": "Für Geräte mit geringer Leistung optimieren.",
"title": "Experimentelle Funktionen",
"use_star_favorite_icon": "Stern als Favoriten-Symbol verwenden",
"user_picker": "Benutzerauswahl",
@ -597,17 +564,12 @@
},
"state": {
"attachments_exceed_server_limit": "Die Anzahl der Anhänge hat das Limit pro Beitrag überschritten.",
"attachments_limit_audio_error": "Maximale Audio-Größe überschritten: {0}",
"attachments_limit_error": "Limit pro Beitrag überschritten",
"attachments_limit_image_error": "Maximale Bildgröße überschritten: {0}",
"attachments_limit_unknown_error": "Maximale Dateigröße überschritten: {0}",
"attachments_limit_video_error": "Maximale Video-Größe überschritten: {0}",
"edited": "(bearbeitet)",
"editing": "Bearbeiten",
"loading": "Laden...",
"publish_failed": "Veröffentlichung fehlgeschlagen",
"publishing": "Veröffentlichung",
"save_failed": "Speichern fehlgeschlagen",
"upload_failed": "Upload fehlgeschlagen",
"uploading": "Hochladen..."
},
@ -618,11 +580,9 @@
},
"boosted_by": "Boosted von",
"edited": "Zuletzt bearbeitet: {0}",
"embedded_warning": "Das Abspielen kann deine IP-Adresse anderen offenlegen.",
"favourited_by": "Favorisiert von",
"filter_hidden_phrase": "Versteckt durch",
"filter_show_anyway": "Trotzdem zeigen",
"gif": "GIF",
"img_alt": {
"ALT": "ALT",
"desc": "Beschreibung",
@ -655,17 +615,9 @@
"media": "Medien",
"news": "Nachrichten",
"notifications_all": "Alle",
"notifications_favourite": "Favorit",
"notifications_follow": "Folgen",
"notifications_follow_request": "Folgeanfrage",
"notifications_mention": "Erwähnungen",
"notifications_more_tooltip": "Benachrichtigungen nach Typ filtern",
"notifications_poll": "Umfrage",
"notifications_reblog": "Boost",
"notifications_status": "Status",
"notifications_update": "Aktualisierung",
"posts": "Beiträge",
"posts_with_replies": "Beiträge & Antworten"
"posts_with_replies": "Beiträge und Antworten"
},
"tag": {
"follow": "Folgen",

View file

@ -1,746 +0,0 @@
{
"a11y": {
"loading_page": "Η σελίδα φορτώνει, παρακαλώ περίμενε",
"loading_titled_page": "Η σελίδα {0} φορτώνει, παρακαλώ περίμενε",
"locale_changed": " Η γλώσσα άλλαξε σε {0}",
"locale_changing": "Η γλώσσα αλλάζει, παρακαλώ περίμενε",
"route_loaded": "Η σελίδα {0} φορτώθηκε"
},
"account": {
"authorize": "Εξουσιοδότησε για να ακολουθήσεις",
"authorized": "You have Authorized the request",
"avatar_description": "το άβαταρ του χρήστη {0}",
"blocked_by": "Είσαι αποκλεισμένος από αυτόν τον χρήστη.",
"blocked_domains": "Αποκλεισμένοι τομείς",
"blocked_users": "Αποκλεισμένοι χρήστες",
"blocking": "Αποκλεισμένοι",
"bot": "BOT",
"copy_account_name": "Αντιγραφή ονόματος λογαριασμού",
"favourites": "Αγαπημένα",
"follow": "Ακολούθησε",
"follow_back": "Ακολούθησε και συ",
"follow_requested": "Αιτήθηκε",
"followers": "Ακόλουθοι",
"followers_count": "{0} Ακόλουθοι|{0} Ακόλουθος|{0} Ακόλουθοι",
"following": "Ακολουθεί",
"following_count": "Ακολουθεί {0}",
"follows_you": "Σε ακολουθεί",
"go_to_profile": "Πήγαινε στο προφίλ",
"joined": "έγινε μέλος",
"lock": "Κλείδωμα",
"moved_title": "έχει δηλώσει ότι ο νέος του λογαριασμός είναι:",
"muted_users": "Χρήστες σε σίγαση",
"muting": "Σε σίγαση",
"mutuals": "Κοινοί",
"notifications_on_post_disable": "Σταμάτα να με ειδοποιείς όταν ο χρήστης {username} κάνει ανάρτηση",
"notifications_on_post_enable": "Ειδοποίησέ με όταν ο χρήστης {username} κάνει ανάρτηση",
"pinned": "Καρφιτσώθηκε",
"posts": "Αναρτήσεις",
"posts_count": "{0} Αναρτήσεις|{0} Ανάρτηση|{0} Αναρτήσεις",
"profile_description": "Κεφαλίδα προφίλ του χρήστη {0}",
"profile_personal_note": "Προσωπική Σημείωση",
"profile_unavailable": "Μη διαθέσιμο προφίλ",
"reject": "Άρνηση ακολούθησης",
"rejected": "Αρνήθηκες το αίτημα",
"request_follow": "Αίτημα ακολούθησης",
"requested": "Ο χρήστης {0} ζήτησε να σε ακολουθήσει",
"unblock": "Άρση αποκλεισμού",
"unfollow": "Άρση ακολούθησης",
"unmute": "Άρση σίγασης",
"view_other_followers": "Οι ακόλουθοι από άλλες οντότητες μπορεί να μην εμφανίζονται.",
"view_other_following": "Αυτοί που ακολουθείς από άλλες οντότητες μπορεί να μην εμφανίζονται.",
"withdraw_follow_request": "Ανάκληση αιτήματος ακολούθησης"
},
"action": {
"apply": "Εφαρμογή",
"bookmark": "Σελιδοδείκτης",
"bookmarked": "Με Σελιδοδείκτη",
"boost": "Ενίσχυση",
"boost_count": "{0}",
"boosted": "Ενισχύθηκε",
"clear_publish_failed": "Καθαρισμός σφαλμάτων ανάρτησης",
"clear_save_failed": "Καθαρισμός σφαλμάτων αποθήκευσης",
"clear_upload_failed": "Εκκαθάριση σφαλμάτων μεταμόρφωσης αρχείων",
"close": "Κλείσιμο",
"compose": "Σύνταξη",
"confirm": "Επιβεβαίωση",
"done": "Έγινε",
"edit": "Επεξεργασία",
"enter_app": "Είσοδος στην εφαρμογή",
"favourite": "Αγαπημένο",
"favourite_count": "{0}",
"favourited": "Είναι αγαπημένο",
"more": "Περισσότερα",
"next": "Επόμενο",
"prev": "Προηγ.",
"publish": "Δημοσίευση",
"reply": "Απάντηση",
"reply_count": "{0}",
"reset": "Επαναφορά",
"save": "Αποθήκευση",
"save_changes": "Αποθήκευση αλλαγών",
"sign_in": "Σύνδεση",
"sign_in_to": "Σύνδεση σε {0}",
"switch_account": "Εναλλαγή λογαριασμού",
"vote": "Ψήφος"
},
"app_desc_short": "Ένας ελαφρώς προσαρμοσμένος πελάτης για το Mastodon",
"app_logo": "Λογότυπο Elk",
"app_name": "Elk",
"attachment": {
"edit_title": "Περιγραφή",
"remove_label": "Αφαίρεση επισύναψης"
},
"command": {
"activate": "Ενεργοποίηση",
"complete": "Ολοκλήρωση",
"compose_desc": "Γράψε νέα ανάρτηση",
"n_people_in_the_past_n_days": "{0} άτομα τις τελευταίες {1} μέρες",
"select_lang": "Επιλογή γλώσσας",
"sign_in_desc": "Προσθήκη υπάρχοντος λογαριασμού",
"switch_account": "Εναλλαγή σε {0}",
"switch_account_desc": "Εναλλαγή σε άλλο λογαριασμό",
"toggle_dark_mode": "Εναλλαγή σκοτεινής λειτουργίας",
"toggle_zen_mode": "Εναλλαγή λειτουργίας Zen"
},
"common": {
"end_of_list": "Τέλος της λίστας",
"error": "ΣΦΑΛΜΑ",
"fetching": "Ανάκτηση...",
"in": "σε",
"no_bookmarks": "Δεν υπάρχουν αναρτήσεις με σελιδοδείκτη ακόμα",
"no_favourites": "Δεν υπάρχουν αγαπημένες αναρτήσεις ακόμα",
"not_found": "404 Δε βρέθηκε",
"offline_desc": "Φαίνεται να είσαι αποσυνδεδεμένος. Παρακαλώ έλεγξε τη σύνδεση σου στο διαδίκτυο."
},
"compose": {
"draft_title": "Πρόχειρο {0}",
"drafts": "Πρόχειρο ({v})"
},
"confirm": {
"block_account": {
"cancel": "Ακύρωση",
"confirm": "Αποκλεισμός",
"description": "Σίγουρα θες να αποκλείσεις τον {0};",
"title": "Αποκλεισμός λογαριασμού"
},
"block_domain": {
"cancel": "Ακύρωση",
"confirm": "Αποκλεισμός",
"description": "Σίγουρα θες να αποκλείσεις τον {0}?;",
"title": "Αποκλεισμός τομέα"
},
"common": {
"cancel": "Όχι",
"confirm": "Ναι"
},
"delete_list": {
"cancel": "Ακύρωση",
"confirm": "Διαγραφή",
"description": "Θες σίγουρα να διαγράψεις την λίστα \"{0}\";",
"title": "Διαγραφή λίστας"
},
"delete_posts": {
"cancel": "Ακύρωση",
"confirm": "Διαγραφή",
"description": "Θες σίγουρα να διαγράψεις αυτή την ανάρτηση;",
"title": "Διαγραφή ανάρτησης"
},
"mute_account": {
"cancel": "Ακύρωση",
"confirm": "Σίγαση",
"days": "μέρες|μέρα|μέρες",
"description": "Θες σίγουρα να κάνεις σίγαση στον {0};",
"hours": "ώρες|ώρα|ώρες",
"minute": "λεπτά|λεπτό|λεπτά",
"notifications": "Σίγαση ειδοποιήσεων",
"specify_duration": "Προσδιόρισε διάρκεια σίγασης",
"title": "Σίγαση λογαριασμού"
},
"show_reblogs": {
"cancel": "Ακύρωση",
"confirm": "Εμφάνιση",
"description": "Θες σίγουρα να εμφανίζεις τις ενισχύσεις του {0}?",
"title": "Εμφάνιση ενισχύσεων"
},
"unfollow": {
"cancel": "Ακύρωση",
"confirm": "Άρση ακολούθησης",
"description": "Θες σίγουρα να κάνεις άρση ακολούθησης στον {0};",
"title": "Άρση ακολούθησης"
}
},
"conversation": {
"with": "με"
},
"custom_cards": {
"stackblitz": {
"lines": "Γραμμές {0}",
"open": "Άνοιγμα",
"snippet_from": "Απόκομμα από {0}"
}
},
"error": {
"account_not_found": "Ο λογαριασμός {0} δεν βρέθηκε",
"explore_list_empty": "Δεν υπάρχει τίποτα δημοφιλές αυτήν τη στιγμή. Έλεγξε ξανά αργότερα!",
"file_size_cannot_exceed_n_mb": "Το μέγεθος του αρχείου δεν μπορεί να υπερβαίνει τα {0}MB",
"sign_in_error": "Σφάλμα σύνδεσης με τον διακομιστή",
"status_not_found": "Η ανάρτηση δεν βρέθηκε",
"unsupported_file_format": "Μη υποστηριζόμενη μορφή αρχείου"
},
"help": {
"build_preview": {
"desc1": "Βλέπεις, για την ώρα, μια δοκιμαστική έκδοση του Elk από την κοινότητα - {0}.",
"desc2": "Μπορεί να περιέχει μη αξιολογημένες ή ακόμα και κακόβουλες αλλαγές.",
"desc3": "Μην συνδεθείς με τον πραγματικό σου λογαριασμό",
"title": "Εκκίνηση προεπισκόπησης"
},
"desc_highlight": "Αναμένονται μερικά σφάλματα και ελλείψεις δυνατοτήτων πού και πού.",
"desc_para1": "Ευχαριστούμε για το ενδιαφέρον σου να δοκιμάσεις το Elk, τον εν εξελίξει πελάτη Mastodon για τον ιστό!",
"desc_para2": "Δουλεύουμε σκληρά στην ανάπτυξη και βελτίωσή του με τον καιρό.",
"desc_para3": "Για την ενίσχυση της ανάπτυξης, μπορείς να χρηματοδοτήσεις την Ομάδα μέσω του GitHub Sponsors. Ελπίζουμε να απολαμβάνεις τον Elk!",
"desc_para4": "Ο Elk είναι Ανοιχτού Κώδικα. Αν θες να βοηθήσεις με την αποσφαλμάτωση, να προσφέρεις σχόλια ή να συνεισφέρεις,",
"desc_para5": " βρες μας στο GitHub",
"desc_para6": " και αναμείξου.",
"footer_team": "Η ομάδα του Elk",
"title": "Ο Elk είναι σε προεπισκόπηση!"
},
"language": {
"search": "Αναζήτηση"
},
"list": {
"add_account": "Προσθήκη λογαριασμού στη λίστα",
"cancel_edit": "Ακύρωση επεξεργασίας",
"clear_error": "Εκκαθάριση σφάλματος",
"create": "Δημιουργία",
"delete": "Διαγραφή λίστας",
"delete_error": "Υπήρξε ένα σφάλμα κατά τη διαγραφή της λίστας",
"edit": "Επεξεργασία αυτής της λίστας",
"edit_error": "Παρουσιάστηκε σφάλμα κατά την ενημέρωση της λίστας",
"error": "Παρουσιάστηκε ένα σφάλμα κατά τη δημιουργία της λίστας",
"error_prefix": "Σφάλμα: ",
"list_title_placeholder": "Τίτλος λίστας",
"modify_account": "Τροποποίηση λιστών με λογαριασμό",
"remove_account": "Αφαίρεση λογαριασμού από τη λίστα",
"save": "Αποθήκευση αλλαγών"
},
"magic_keys": {
"dialog_header": "Συντομεύσεις πληκτρολογίου",
"groups": {
"actions": {
"boost": "Ενίσχυση",
"command_mode": "Λειτουργία εντολών",
"compose": "Σύνταξη",
"favourite": "Αγαπημένο",
"search": "Αναζήτηση",
"show_new_items": "Εμφάνιση νέων αντικειμένων",
"title": "Ενέργειες"
},
"media": {
"title": "Πολυμέσα"
},
"navigation": {
"go_to_bookmarks": "Σελιδοδείκτες",
"go_to_conversations": "Συζητήσεις",
"go_to_explore": "Εξερεύνηση",
"go_to_favourites": "Αγαπημένα",
"go_to_federated": "Σε ομοσπονδία",
"go_to_home": "Αρχική",
"go_to_lists": "Λίστες",
"go_to_local": "Τοπικό",
"go_to_notifications": "Ειδοποιήσεις",
"go_to_profile": "Προφίλ",
"go_to_search": "Αναζήτηση",
"go_to_settings": "Ρυθμίσεις",
"next_status": "Επόμενη ανάρτηση",
"previous_status": "Προηγούμενη ανάρτηση",
"shortcut_help": "Συντόμευση βοήθεια",
"title": "Πλοήγηση"
}
},
"sequence_then": "τότε"
},
"menu": {
"add_personal_note": "Προσθήκη προσωπικής σημείωσης σε {0}",
"block_account": "Αποκλεισμός {0}",
"block_domain": "Αποκλεισμός τομέα {0}",
"copy_link_to_post": "Αντιγραφή συνδέσμου σε αυτήν την ανάρτηση",
"copy_original_link_to_post": "Αντιγραφή αρχικού συνδέσμου σε αυτή την ανάρτηση",
"delete": "Διαγραφή",
"delete_and_redraft": "Διαγραφή & επαναδημιουργία",
"direct_message_account": "Άμεσο μήνυμα {0}",
"edit": "Επεξεργασία",
"hide_reblogs": "Απόκρυψη ενισχύσεων από {0}",
"mention_account": "Επισήμανση {0}",
"mute_account": "Σίγαση {0}",
"mute_conversation": "Σίγαση αυτής της ανάρτησης",
"open_in_original_site": "Άνοιγμα σε αρχικό ιστότοπο",
"pin_on_profile": "Καρφίτσωμα στο προφίλ",
"remove_personal_note": "Αφαίρεση προσωπικής σημείωσης {0}",
"report_account": "Αναφορά {0}",
"share_account": "Κοινοποίηση {0}",
"share_post": "Κοινοποίηση αυτής της ανάρτησης",
"show_favourited_and_boosted_by": "Εμφάνιση αυτών που το ενίσχυσαν ή το επισήμαναν ως αγαπημένο ",
"show_reblogs": "Εμφάνιση ενισχύσεων από {0}",
"show_untranslated": "Εμφάνιση μη μεταφρασμένου",
"toggle_theme": {
"dark": "Εναλλαγή σε σκοτεινή λειτουργία",
"light": "Εναλλαγή σε φωτεινή λειτουργία"
},
"translate_post": "Μετάφραση ανάρτησης",
"unblock_account": "Άρση αποκλεισμού {0}",
"unblock_domain": "Άρση αποκλεισμού τομέα {0}",
"unfollow_account": "Άρση ακολούθησης {0}",
"unmute_account": "Άρση σίγασης {0}",
"unmute_conversation": "Άρση σίγασης αυτής της ανάρτησης",
"unpin_on_profile": "Ξεκαρφίτσωμα από το προφίλ"
},
"modals": {
"aria_label_close": "Κλείσιμο"
},
"nav": {
"back": "Πίσω",
"blocked_domains": "Αποκλεισμένοι τομείς",
"blocked_users": "Αποκλεισμένοι χρήστες",
"bookmarks": "Σελιδοδείκτες",
"built_at": "Δημιουργήθηκε {0}",
"compose": "Σύνταξη",
"conversations": "Συζητήσεις",
"explore": "Εξερεύνηση",
"favourites": "Αγαπημένα",
"federated": "Σε ομοσπονδία",
"hashtags": "Ετικέτες",
"home": "Αρχική",
"list": "Λίστα",
"lists": "Λίστες",
"local": "Τοπικό",
"muted_users": "Χρήστες σε σίγαση",
"notifications": "Ειδοποιήσεις",
"privacy": "Ιδιωτικότητα",
"profile": "Προφίλ",
"search": "Αναζήτηση",
"select_feature_flags": "Εναλλαγή σημαιών δυνατοτήτων",
"select_font_size": "Μέγεθος γραμματοσειράς",
"select_language": "Επιλογή γλώσσας εμφάνισης",
"settings": "Ρυθμίσεις",
"show_intro": "Εμφάνιση εισαγωγής",
"toggle_theme": "Εναλλαγή θέματος",
"zen_mode": "Λειτουργία Ζεν"
},
"notification": {
"favourited_post": "Επισήμανε την ανάρτηση σου ως αγαπημένη",
"followed_you": "σε ακολούθησε",
"followed_you_count": "{0} άτομα σε ακολούθησαν|{0} άτομο σε ακολούθησε|{0} άτομα σε ακολούθησαν",
"missing_type": "ΛΕΙΠΕΙ ειδοποίηση.τύπος:",
"reblogged_post": "ενίσχυσε την ανάρτησή σου",
"reported": "Ο χρήστης {0} ανέφερε {1}",
"request_to_follow": "αιτήθηκε να σε ακολουθήσει",
"signed_up": "έκανε εγγραφή",
"update_status": "ενημέρωσε την ανάρτησή του"
},
"placeholder": {
"content_warning": "Γράψε την προειδοποίησή σου εδώ",
"default_1": "Τί σκέφτεσαι;",
"reply_to_account": "Απάντηση σε {0}",
"replying": "Απαντάται"
},
"polls": {
"allow_multiple": "Επιτρέπεται πολλαπλή επιλογή",
"cancel": "Ακύρωση",
"create": "Δημιουργία δημοσκόπησης",
"disallow_multiple": "Να μην επιτρέπεται πολλαπλή επιλογή",
"expiration": "Λήξη δημοσκόπησης",
"hide_votes": "Απόκρυψη συνολικών ψήφων μέχρι το τέλος",
"option_placeholder": "Επιλογή δημοσκόπησης {current}/{max}",
"remove_option": "Αφαίρεση επιλογής",
"settings": "Επιλογές δημοσκόπησης",
"show_votes": "Εμφάνιση συνολικών ψήφων πάντα"
},
"pwa": {
"dismiss": "Απόρριψη",
"install": "Εγκατάσταση",
"install_title": "Εγκατάσταση Elk",
"screenshots": {
"dark": "Στιγμιότυπο του Elk σε σκοτεινή λειτουργία",
"light": "Στιγμιότυπο του Elk σε φωτεινή λειτουργία"
},
"title": "Νέα διαθέσιμη ενημέρωση του Elk!",
"update": "Ενημέρωση",
"update_available_short": "Ενημέρωση του Elk",
"webmanifest": {
"canary": {
"description": "Ένας ελαφρώς προσαρμοσμένος πελάτης για το Mastodon (canary)",
"name": "Elk (canary)",
"short_name": "Elk (canary)"
},
"dev": {
"description": "Ένας ελαφρώς προσαρμοσμένος πελάτης για το Mastodon (dev)",
"name": "Elk (dev)",
"short_name": "Elk (dev)"
},
"preview": {
"description": "Ένας ελαφρώς προσαρμοσμένος πελάτης για το Mastodon (preview)",
"name": "Elk (preview)",
"short_name": "Elk (preview)"
},
"release": {
"description": "Ένας ελαφρώς προσαρμοσμένος πελάτης για το Mastodon",
"name": "Elk",
"short_name": "Elk"
}
}
},
"report": {
"additional_comments": "Επιπρόσθετα σχόλια",
"another_server": "Ο χρήστης που αναφέρεις είναι από άλλο διακομιστή",
"anything_else": "Υπάρχει κάτι άλλο που πιστεύεις ότι πρέπει να γνωρίζουμε;",
"block_desc": "Δεν θα βλέπεις πλέον καμία ανάρτηση από αυτόν τον χρήστη. Δεν θα μπορεί να δει τις αναρτήσεις σου ή να σε ακολουθήσει. Θα μπορεί να διαπιστώσει ότι έχει αποκλειστεί.",
"dontlike": "Δεν μου αρέσει",
"dontlike_desc": "Δεν είναι κάτι που θες να βλέπεις",
"forward": "Ναι, προώθηση αυτής της αναφοράς σε {0}",
"forward_question": "Θες να στείλεις ένα ανώνυμο αντίγραφο αυτής της αναφοράς και σε εκείνον τον διακομιστή;",
"further_actions": {
"limit": {
"description": "Ορίστε οι επιλογές σου για τον έλεγχο του τί βλέπεις:",
"title": "Δε θες να το βλέπεις αυτό;"
},
"report": {
"description": "Όσο το εξετάζουμε, ορίστε μερικές ενέργειες που μπορείς να κάνεις:",
"title": "Ευχαριστούμε για την αναφορά, θα το κοιτάξουμε"
}
},
"limiting": "Περιορίζεται ο χρήστης {0}",
"mute_desc": "Δεν θα βλέπεις πλέον αναρτήσεις από αυτόν τον χρήστη. Μπορεί ακόμα να σε ακολουθήσει και να βλέπει τις αναρτήσεις σου. Δεν θα ξέρει ότι είναι σε σίγαση.",
"other": "Είναι κάτι άλλο",
"other_desc": "Το ζήτημα δεν ταιριάζει στις άλλες κατηγορίες",
"reporting": "Γίνεται αναφορά του χρήστη {0}",
"select_many": "Επίλεξε όλα όσα ισχύουν:",
"select_one": "Διάλεξε τη καλύτερη αντιστοίχιση:",
"select_posts": "Υπάρχει κάποια ανάρτηση που υποστηρίζει αυτή την αναφορά;",
"select_posts_other": "Υπάρχουν άλλες αναρτήσεις που υποστηρίζουν αυτή την αναφορά;",
"spam": "Είναι σπαμ",
"spam_desc": "Επιβλαβείς σύνδεσμοι, ψεύτικη αλληλεπίδραση ή επαναλαμβανόμενες απαντήσεις",
"submit": "Καταχώριση Αναφοράς",
"unfollow_desc": "Δεν θα βλέπεις πλέον αναρτήσεις από αυτόν τον χρήστη στην αρχική ροή σου. Μπορεί να βλέπεις τις αναρτήσεις του αλλού.",
"violation": "Παραβιάζει τουλάχιστον ένα κανόνα του διακομιστή",
"whats_wrong_account": "Πες μας τί πάει στραβά με αυτόν τον λογαριασμό",
"whats_wrong_post": "Πες μας τί πάει στραβά με αυτή την ανάρτηση"
},
"search": {
"search_desc": "Αναζήτησε για άτομα & ετικέτες",
"search_empty": "Δεν βρέθηκε τίποτα με αυτούς τους όρους αναζήτησης"
},
"settings": {
"about": {
"built_at": "Δομήθηκε",
"label": "Σχετικά",
"meet_the_team": "Γνώρισε την ομάδα",
"sponsor_action": "Χορήγησέ μας",
"sponsor_action_desc": "Για να υποστηρίξεις την ομάδα που αναπτύσσει το Elk",
"sponsors": "Χορηγοί",
"sponsors_body_1": "Ο Elk έγινε πραγματικότητα χάρη στις γενναιόδωρες χορηγίες και βοήθεια των:",
"sponsors_body_2": "Και όλες τις εταιρείες και άτομα που χορήγησαν στην ομάδα του Elk και των μελών της.",
"sponsors_body_3": "Αν απολαμβάνεις την εφαρμογή, σκέψου να μας χορηγήσεις:",
"version": "Έκδοση"
},
"account_settings": {
"description": "Επεξεργάσου τις ρυθμίσεις του λογαριασμού σου στο UI του Mastodon",
"label": "Ρυθμίσεις λογαριασμού"
},
"interface": {
"color_mode": "Λειτουργία Χρώματος",
"dark_mode": "Σκοτεινό",
"default": " (προεπιλογή)",
"font_size": "Μέγεθος Γραμματοσειράς",
"label": "Διεπαφή",
"light_mode": "Φωτεινό",
"system_mode": "Σύστημα",
"theme_color": "Χρώμα Θέματος"
},
"language": {
"display_language": "Γλώσσα Εμφάνισης",
"label": "Γλώσσα",
"post_language": "Γλώσσα ανάρτησης",
"status": "Κατάσταση μετάφρασης: {0}/{1} ({2}%)",
"translations": {
"add": "Προσθήκη",
"choose_language": "Επίλεξε γλώσσα",
"heading": "Μεταφράσεις",
"hide_specific": "Απόκρυψη συγκεκριμένων μεταφράσεων",
"remove": "Remove"
}
},
"notifications": {
"label": "Ειδοποιήσεις",
"notifications": {
"label": "Ρυθμίσεις ειδοποιήσεων"
},
"push_notifications": {
"alerts": {
"favourite": "Αγαπημένα",
"follow": "Νέοι ακόλουθοι",
"mention": "Αναφορές",
"poll": "Δημοσκοπήσεις",
"reblog": "Ενισχύσεις",
"title": "Τί ειδοποιήσεις να λαμβάνω;"
},
"description": "Λήψη ειδοποιήσεων ακόμα και όταν δεν χρησιμοποιείς τον Elk.",
"instructions": "Μη ξεχάσεις να αποθηκεύσεις τις αλλαγές σου χρησιμοποιώντας το κουμπί @:settings.notifications.push_notifications.save_settings !",
"label": "Ρυθμίσεις ειδοποιήσεων Push",
"policy": {
"all": "Από όλους",
"followed": "Από άτομα που ακολουθώ",
"follower": "Από άτομα που με ακολουθούν",
"none": "Από κανένα",
"title": "Από ποιον μπορώ να λαμβάνω ειδοποιήσεις;"
},
"save_settings": "Αποθήκευση ρυθμίσεων",
"subscription_error": {
"clear_error": "Εκκαθάριση σφάλματος",
"error_hint": "Μπορείς να συμβουλευτείς τη λίστα των συχνών ερωτήσεων για να προσπαθήσεις να λύσεις το πρόβλημα: {0}.",
"invalid_vapid_key": "Το δημόσιο κλειδί VAPID φαίνεται να είναι άκυρο.",
"permission_denied": "Απορρίφθηκε άδεια: ενεργοποίησε τις ειδοποιήσεις στον περιηγητή σου.",
"repo_link": "Το αποθετήριο του Elk στο GitHub",
"request_error": "Προέκυψε σφάλμα κατά την αίτηση της εγγραφής, προσπάθησε ξανά και αν το σφάλμα παραμένει, παρακαλώ ανέφερε το ζήτημα στο αποθετήριο του Elk.",
"title": "Δε μπορούσες να κάνεις εγγραφή για ειδοποιήσεις push",
"too_many_registrations": "Λόγω περιορισμών του περιηγητή, ο Elk δε μπορεί να χρησιμοποιήσει την υπηρεσία ειδοποιήσεων push για πολλαπλούς λογαριασμούς σε διαφορετικούς διακομιστές. Πρέπει να καταργήσεις την εγγραφή από τις ειδοποιήσεις push σε έναν άλλο λογαριασμό και να προσπαθήσεις ξανά.",
"vapid_not_supported": "Ο περιηγητής σου υποστηρίζει Ειδοποιήσεις Ιστοτόπου Push αλλά, δε φαίνεται να υλοποιεί το πρωτόκολλο VAPID."
},
"title": "Ρυθμίσεις ειδοποιήσεων Push",
"undo_settings": "Αναίρεση αλλαγών",
"unsubscribe": "Απενεργοποίηση ειδοποιήσεων push",
"unsupported": "Ο περιηγητής σου δεν υποστηρίζει ειδοποιήσεις push.",
"warning": {
"enable_close": "Κλείσιμο",
"enable_description": "Για να λαμβάνεις ειδοποιήσεις όταν ο Elk δεν είναι ανοιχτός, ενεργοποίησε τις ειδοποιήσεις push. Μπορείς να ελέγξεις ακριβώς τί τύπου αλληλεπίδραση δημιουργεί ειδοποιήσεις push μέσω του κουμπιού \"@:settings.notifications.show_btn{'\"'} παραπάνω, μόλις ενεργοποιηθεί.",
"enable_description_desktop": "Για να λαμβάνεις ειδοποιήσεις όταν ο Elk δεν είναι ανοιχτός, ενεργοποίησε τις ειδοποιήσεις push. Μπορείς να χειρίζεσαι με ακρίβεια τί είδους αλληλεπιδράσεις δημιουργούν ειδοποιήσεις push στο \"Ρυθμίσεις > Ειδοποιήσεις > Ρυθμίσεις ειδοποιήσεων push\" μόλις ενεργοποιηθούν.",
"enable_description_mobile": "Μπορείς να έχεις πρόσβαση στις ειδοποιήσεις χρησιμοποιώντας το μενού πλοήγησης \"Ρυθμίσεις > Ειδοποιήσεις > Ρυθμίσεις ειδοποιήσεων\".",
"enable_description_settings": "Για να λαμβάνεις ειδοποιήσεις όταν ο Elk δεν είναι ανοιχτός, ενεργοποίησε τις ειδοποιήσεις push. Μπορείς να ελέγξεις ακριβώς τί τύπου αλληλεπίδραση δημιουργεί ειδοποιήσεις push σε αυτή την οθόνη, μόλις τις ενεργοποιήσεις.",
"enable_desktop": "ενεργοποίησε τις ειδοποιήσεις push",
"enable_title": "Μη χάσεις τίποτα",
"re_auth": "Από ό,τι φαίνεται, ο διακομιστής σου δεν υποστηρίζει ειδοποιήσεις push. Δοκίμασε να αποσυνδεθείς και να συνδεθείς ξανά και αν το μήνυμα παραμένει, επικοινώνησε με τον διαχειριστή του διακομιστή σου."
}
},
"show_btn": "Πήγαινε στις ρυθμίσεις ειδοποιήσεων",
"under_construction": "Υπό κατασκευή"
},
"notifications_settings": "Ειδοποιήσεις",
"preferences": {
"embedded_media": "Ενσωματωμένος Αναπαραγωγέας Πολυμέσων",
"embedded_media_description": "Προβάλλει έναν Ενσωματωμένο αναπαραγωγέα αντί για την κανονική κάρτα προεπισκόπησης όταν γίνεται επέκταση κοινοποιημένων συνδέσμων ροής.",
"enable_autoplay": "Ενεργοποίηση Αυτόματης αναπαραγωγής",
"enable_data_saving": "Ενεργοποίηση εξοικονόμησης δεδομένων",
"enable_data_saving_description": "Εξοικονόμησε δεδομένα αποτρέποντας τα συνημμένα από το να φορτώνουν αυτόματα.",
"enable_pinch_to_zoom": "Ενεργοποίηση του τσίμπημα για ζουμ",
"github_cards": "Κάρτες GitHub",
"github_cards_description": "Όταν ένας σύνδεσμος GitHub αναρτάται, εμφανίζεται μια προσβάσιμη κάρτα HTML που χρησιμοποιεί μεταδεδομένα κοινωνικών γράφων αντί για την κοινωνική εικόνα.",
"grayscale_mode": "Λειτουργία κλίμακα του γκρι",
"hide_account_hover_card": "Απόκρυψη αιωρούμενης κάρτας λογαριασμού",
"hide_alt_indi_on_posts": "Απόκρυψη ένδειξης ενλ στις αναρτήσεις",
"hide_boost_count": "Απόκρυψη αριθμού ενισχύσεων",
"hide_favorite_count": "Απόκρυψη αριθμού αγαπημένων",
"hide_follower_count": "Απόκρυψη αριθμού ακολούθων/ακολουθούμενων",
"hide_news": "Απόκρυψη ειδήσεων",
"hide_reply_count": "Απόκρυψη αριθμού απαντήσεων",
"hide_tag_hover_card": "Απόκρυψη αιωρούμενης κάρτας ετικέτας",
"hide_translation": "Απόκρυψη μετάφρασης",
"hide_username_emojis": "Απόκρυψη εμότζι στο όνομα χρήστη",
"hide_username_emojis_description": "Κρύβει τα εμότζι στις από τα ονόματα χρήστη στις ροές. Τα εμότζι θα είναι ορατά στα προφίλ τους.",
"label": "Προτιμήσεις",
"optimize_for_low_performance_device": "Βελτιστοποίηση γισ συσκευές χαμηλών επιδόσεων",
"title": "Πειραματικές Λειτουργίες",
"use_star_favorite_icon": "Χρήση εικονιδίου αστεριού για αγαπημένα",
"user_picker": "Επιλογέας Χρήστη",
"user_picker_description": "Εμφανίζει όλα τα άβαταρ των συνδεδεμένων λογαριασμών κάτω αριστερά για να μπορείς να εναλλάξεις μεταξύ τους εύκολα.",
"virtual_scroll": "Εικονική Κύλιση",
"virtual_scroll_description": "Χρήστη εικονικής λίστας στις ροές, ώστε να εμφανίζεται μεγαλύτερος αριθμός αντικειμένων αποδοτικότερα.",
"wellbeing": "Ψηφιακή Ευεξία",
"zen_mode": "Λειτουργία Ζεν",
"zen_mode_description": "Κρύβει τα πλαϊνά πεδία εκτός αν τοποθετηθεί το ποντίκι επάνω τους. Επίσης, κρύβει μερικά στοιχεία από τη ροή."
},
"profile": {
"appearance": {
"bio": "Βιογραφικό",
"description": "Επεξεργασία άβαταρ, ονόματος χρήστη, προφίλ κτλ.",
"display_name": "Εμφανιζόμενο όνομα",
"label": "Εμφάνιση",
"profile_metadata": "Μεταδεδομένα προφίλ",
"profile_metadata_desc": "Μπορείς να έχεις μέχρι {0} αντικείμενα εμφανιζόμενα σε πίνακα στο προφίλ σου",
"profile_metadata_label": "Ετικέτα",
"profile_metadata_value": "Περιεχόμενο",
"title": "Επεξεργασία προφίλ"
},
"featured_tags": {
"description": "Άτομα μπορούν να περιηγηθούν στις δημόσιες αναρτήσεις μέσω αυτών των ετικετών.",
"label": "Παρεχόμενες ετικέτες",
"under_construction": "Υπό κατασκευή"
},
"label": "Προφίλ"
},
"select_a_settings": "Επίλεξε μία ρύθμιση",
"users": {
"export": "Εξαγωγή Αναγνωριστικών Χρήστη",
"import": "Εισαγωγή Αναγνωριστικών Χρήστη",
"label": "Συνδεδεμένοι χρήστες"
}
},
"share_target": {
"description": "Ο Elk μπορεί να ρυθμιστεί έτσι ώστε να μπορείς να κοινοποιήσεις περιεχόμενο από άλλες εφαρμογές, απλά εγκατέστησε τον Elk στη συσκευή σου και συνδέσου.",
"hint": "Για να κοινοποιήσεις περιεχόμενο με τον Elk, πρέπει να είναι εγκατεστημένος και να έχεις συνδεθεί.",
"title": "Κοινοποίησε με τον Elk"
},
"state": {
"attachments_exceed_server_limit": "Ο αριθμός των συνημμένων ξεπερνάει το όριο ανά ανάρτηση.",
"attachments_limit_error": "Το όριο ανά ανάρτηση ξεπεράστηκε",
"edited": "(Επεξεργάστηκε)",
"editing": "Επεξεργάζεται",
"loading": "Φόρτωση...",
"publish_failed": "Η δημοσίευση απέτυχε",
"publishing": "Δημοσιεύεται",
"save_failed": "Η αποθήκευση απέτυχε",
"upload_failed": "Η μεταφόρτωση απέτυχε",
"uploading": "Μεταμόρφωση..."
},
"status": {
"account": {
"suspended_message": "Ο λογαριασμός αυτής της ανάρτησης έχει ανασταλεί.",
"suspended_show": "Εμφάνιση περιεχομένου ούτως ή άλλως;"
},
"boosted_by": "Ενισχύθηκε από",
"edited": "Επεξεργάστηκε {0}",
"embedded_warning": "Η αναπαραγωγή αυτού ίσως αποκαλύψει την διεύθυνση IP σου σε άλλους.",
"favourited_by": "Αγαπημένο από",
"filter_hidden_phrase": "Φιλτραρισμένο από",
"filter_show_anyway": "Εμφάνιση ούτως ή άλλως",
"img_alt": {
"ALT": "ΕΝΛ",
"desc": "Περιγραφή",
"dismiss": "Απόρριψη",
"read": "Ανάγνωση {0} περιγραφής"
},
"poll": {
"count": "{0} ψήφοι|{0} ψήφος|{0} ψήφοι",
"ends": "μέχρι {0}",
"finished": "ολοκληρώθηκε στις {0}"
},
"replying_to": "Απάντηση σε {0}",
"show_full_thread": "Εμφάνιση Πλήρους Νήματος",
"someone": "κάποιος",
"spoiler_media_hidden": "Κρυμμένα πολυμέσα",
"spoiler_show_less": "Εμφάνιση λιγότερων",
"spoiler_show_more": "Εμφάνιση περισσότερων",
"thread": "Νήμα",
"try_original_site": "Δοκίμασε την αρχική ιστοσελίδα"
},
"status_history": {
"created": "Δημιουργήθηκε στις {0}",
"edited": "επεξεργάστηκε στις {0}"
},
"tab": {
"accounts": "Λογαριασμοί",
"for_you": "Για σένα",
"hashtags": "Ετικέτες",
"list": "Λίστα",
"media": "Πολυμέσα",
"news": "Ειδήσεις",
"notifications_admin": {
"report": "Αναφορά",
"sign_up": "Εγγραφή"
},
"notifications_all": "Όλα",
"notifications_favourite": "Αγαπημένα",
"notifications_follow": "Ακολουθείς",
"notifications_follow_request": "Αιτήματα ακολούθησης",
"notifications_mention": "Αναφορές",
"notifications_more_tooltip": "Φιλτράρισμα ειδοποιήσεων βάσει τύπου",
"notifications_poll": "Δημοσκόπηση",
"notifications_reblog": "Ενίσχυση",
"notifications_status": "Κατάσταση",
"notifications_update": "Ενημέρωση",
"posts": "Αναρτήσεις",
"posts_with_replies": "Αναρτήσεις & Απαντήσεις"
},
"tag": {
"follow": "Ακολούθησε",
"follow_label": "Ακολούθησε την ετικέτα {0}",
"unfollow": "Άρση ακολούθησης",
"unfollow_label": "Άρση ακολούθησης ετικέτας {0}"
},
"time_ago_options": {
"day_future": "σε 0 ημέρες|αύριο|σε {n} ημέρες",
"day_past": "0 ημέρες πριν|χθες|{n} ημέρες πριν",
"hour_future": "σε 0 ώρες|σε 1 ώρα|σε {n} ώρες",
"hour_past": "0 ώρες πριν|1 ώρα πριν|{n} ώρες πριν",
"just_now": "μόλις τώρα",
"minute_future": "σε 0 λεπτά|σε 1 λεπτό|σε {n} λεπτά",
"minute_past": "0 λεπτά πριν|1 λεπτό πριν|{n} λεπτά πριν",
"month_future": "σε 0 μήνες|τον επόμενο μήνα|σε {n} μήνες",
"month_past": "0 μήνες πριν|τον προηγούμενο μήνα|{n} μήνες πριν",
"second_future": "μόλις τώρα|σε {n} δευτερόλεπτο|σε {n} δευτερόλεπτα",
"second_past": "μόλις τώρα|{n} δευτερόλεπτο πριν|{n} δευτερόλεπτα πριν",
"short_day_future": "σε {n}η",
"short_day_past": "{n}η",
"short_hour_future": "σε {n}ώ",
"short_hour_past": "{n}ώ",
"short_minute_future": "σε {n}λ",
"short_minute_past": "{n}λ",
"short_month_future": "σε {n}μήν",
"short_month_past": "{n}μήν",
"short_second_future": "σε {n}δ",
"short_second_past": "{n}δ",
"short_week_future": "σε {n}εβδ",
"short_week_past": "{n}εβδ",
"short_year_future": "σε {n}χ",
"short_year_past": "{n}χ",
"week_future": "σε 0 εβδομάδες|την επόμενη εβδομάδα|σε {n} εβδομάδες",
"week_past": "0 εβδομάδες πριν|την προηγούμενη εβδομάδα|{n} εβδομάδες πριν",
"year_future": "σε 0 χρόνια|τον επόμενο χρόνο|σε {n} χρόνια",
"year_past": "0 χρόνια πριν|πέρυσι|{n} χρόνια πριν"
},
"timeline": {
"show_new_items": "Εμφάνιση {v} νέων αντικειμένων|Εμφάνιση {v} νέου αντικειμένου|Εμφάνιση {v} νέων αντικειμένων",
"view_older_posts": "Παλιότερες αναρτήσεις από άλλες οντότητες ίσως δεν εμφανίζονται."
},
"title": {
"federated_timeline": "Ροή Ομοσπονδίας",
"local_timeline": "Τοπική Ροή"
},
"tooltip": {
"add_content_warning": "Προσθήκη προειδοποίησης περιεχομένου",
"add_emojis": "Προσθήκη εμότζι",
"add_media": "Προσθήκη εικόνων, βίντεο ή αρχείου ήχου",
"add_publishable_content": "Προσθήκη περιεχομένου προς δημοσίευση",
"change_content_visibility": "Αλλαγή ορατότητας περιεχομένου",
"change_language": "Αλλαγή γλώσσας",
"emoji": "Εμότζι",
"explore_links_intro": "Αυτές οι νέες ιστορίες συζητιούνται, αυτή τη στιγμή, από άτομα σε αυτόν και σε άλλους διακομιστές στο αποκεντρωμένο δίκτυο.",
"explore_posts_intro": "Αυτές οι αναρτήσεις λαμβάνουν προσοχή, αυτή τη στιγμή, από αυτόν και από άλλους διακομιστές σε αυτόν τον διακομιστή.",
"explore_tags_intro": "Αυτές οι ετικέτες λαμβάνουν προσοχή, αυτή τη στιγμή, από άτομα σε αυτόν και από άλλους διακομιστές του αποκεντρωμένου δικτύου.",
"open_editor_tools": "Εργαλεία συντάκτη",
"pick_an_icon": "Επιλογή ενός εικονιδίου",
"publish_failed": "Κλείσιμο αποτυχημένων μηνυμάτων στο πάνω μέρος του συντάκτη για επαναδημοσίευση αναρτήσεων",
"toggle_bold": "Εναλλαγή έντονης γραφής",
"toggle_code_block": "Εναλλαγή μπλοκ κώδικα",
"toggle_italic": "Εναλλαγή πλάγιας γραφής"
},
"user": {
"add_existing": "Προσθήκη υπάρχοντος λογαριασμού",
"server_address_label": "Διεύθυνση Διακομιστή Mastodon",
"sign_in_desc": "Συνδέσου για να ακολουθείς προφίλ ή ετικέτες, αγάπησε, μοιράσου και απάντησε σε αναρτήσεις ή αλληλεπίδρασε από τον λογαριασμό σου σε διαφορετικό διακομιστή.",
"sign_in_notice_title": "Προβολή δημοσίων δεδομένων {0}",
"sign_out_account": "Αποσύνδεση {0}",
"single_instance_sign_in_desc": "Συνδέσου για να ακολουθείς προφίλ ή ετικέτες, αγάπησε, μοιράσου και απάντησε σε αναρτήσεις.",
"tip_no_account": "Αν δεν έχεις ακόμα λογαριασμό στο Mastodon, {0}.",
"tip_register_account": "Επίλεξε τον διακομιστή σου και εγγράψου"
},
"visibility": {
"direct": "Άμεση",
"direct_desc": "Ορατή μόνο σε αναφερόμενους χρήστες",
"private": "Μόνο ακόλουθους",
"private_desc": "Ορατή μόνο σε ακόλουθους",
"public": "Δημόσια",
"public_desc": "Ορατή για όλους",
"unlisted": "Μη καταχωρημένη",
"unlisted_desc": "Ορατή για όλους, αλλά δεν εμφανίζεται σε ροές ανακάλυψης"
}
}

View file

@ -73,7 +73,6 @@
"favourited": "Favorited",
"more": "More",
"next": "Next",
"open_image_preview_dialog": "Open image preview dialog",
"prev": "Prev",
"publish": "Publish",
"publish_thread": "Publish thread",

View file

@ -73,7 +73,6 @@
"favourited": "Marcado como favorita",
"more": "Más",
"next": "Siguiente",
"open_image_preview_dialog": "Abrir diálogo de vista previa de la imagen",
"prev": "Anterior",
"publish": "Publicar",
"publish_thread": "Publicar hilo",
@ -218,12 +217,11 @@
"create": "Crear",
"delete": "Eliminar esta lista",
"delete_error": "Se produjo un error eliminando la lista",
"edit": "Editar esta lista",
"edit": "Ediar esta lista",
"edit_error": "Se produjo un error modificando la lista",
"error": "Se produjo un error creando la lista",
"error_prefix": "Error: ",
"list_title_placeholder": "Título de la lista",
"manage": "Administrar listas",
"modify_account": "Modificar listas con cuenta",
"remove_account": "Eliminar cuenta de la lista",
"save": "Guardar"

View file

@ -73,7 +73,6 @@
"favourited": "Gogoko eginda",
"more": "Gehiago",
"next": "Hurrengoa",
"open_image_preview_dialog": "Ireki irudiaren aurrebista-koadroa",
"prev": "Aurrekoa",
"publish": "Argitaratu",
"publish_thread": "Argitaratu haria",
@ -470,7 +469,7 @@
"how_to_contribute": "Nola lagun dezaket?",
"label": "Hizkuntza",
"post_language": "Bidalketen hizkuntza",
"status": "Itzulpenaren egoera: {1} kateetatik {0} itzulita ({'%'}{2}a)",
"status": "Itzulpenaren egoera: {1} kateetatik {0} itzulita (%{2}a)",
"translations": {
"add": "Gehitu",
"choose_language": "Hautatu hizkuntza",
@ -538,7 +537,7 @@
"embedded_media": "Kapsulatutako multimedia erreproduzigailua",
"embedded_media_description": "Kapsulatutako erreproduzigailu bat erakusten du partekatutako multimedia jarioen estekak zabaltzean, ez aurrebista txartel arrunta.",
"enable_autoplay": "Gaitu erreproduzitze automatikoa",
"enable_data_saving": "Gaitu datu-aurrezlea",
"enable_data_saving": "Gaitu datu aurrezlea",
"enable_data_saving_description": "Aurreztu datuak eranskinen kargatze-automatikoa galarazten.",
"enable_pinch_to_zoom": "Gaitu atximur keinua zoom egiteko",
"github_cards": "GitHub txartelak",
@ -548,30 +547,30 @@
"hide_alt_indi_on_posts": "Ezkutatu ALT adierazlea bidalketetan",
"hide_boost_count": "Ezkutatu bultzaden kopurua",
"hide_favorite_count": "Ezkutatu gogokoen kopurua",
"hide_follower_count": "Ezkutatu jarraitzaileen kopurua",
"hide_follower_count": "Ezkutatu jarraitzaile kopurua",
"hide_gif_indi_on_posts": "Ezkutatu GIF adierazlea bidalketetan",
"hide_news": "Ezkutatu berriak",
"hide_reply_count": "Ezkutatu erantzunen kopurua",
"hide_tag_hover_card": "Ezkutatu traolen aurrebista-txartelak sagua gainetik pasatzean",
"hide_translation": "Ezkutatu itzulpenak",
"hide_username_emojis": "Ezkutatu emojiak erabiltzaile-izenetan",
"hide_username_emojis_description": "Denbora-lerroetan erabiltzaile-izenetako emojiak ezkutatzen ditu. Emojiak ikusgai egoten jarraituko dute euren profiletan.",
"hide_username_emojis": "Ezkutatu emojiak erabiltzaile izenetan",
"hide_username_emojis_description": "Denbora-lerroetan erabiltzaile izenetako emojiak ezkutatzen ditu. Emojiak ikusgai egoten jarraituko dute euren profiletan.",
"label": "Hobespenak",
"optimize_for_low_performance_device": "Optimizatu errendimendu baxuko gailuetarako",
"title": "Ezaugarri esperimentalak",
"use_star_favorite_icon": "Erabili izarraren ikonoa gogokoetarako",
"user_picker": "Erabiltzaile-hautatzailea",
"user_picker": "Erabiltzaile hautatzailea",
"user_picker_description": "Beheko ezkerreko aldean saioa hasia duten kontuen abatar guztiak erakusten ditu, haien artean azkar aldatu ahal dezazun.",
"virtual_scroll": "Korritze birtuala",
"virtual_scroll_description": "Zerrenda birtual bat erabiltzen du denbora-lerroetan, item kopuru handiagoa modu eraginkorrean erakutsi ahal izateko.",
"wellbeing": "Ongizatea",
"zen_mode": "ZEN modua",
"zen_mode_description": "Aldamenetako elementuak ezkutatzen ditu sagua gainean jarri arte. Denbora-lerroko elementu batzuk ere ezkutatzen ditu."
"zen_mode_description": "Aldamenetako elementuak ezkutatzen ditu xagua gainean jarri arte. Denbora-lerroko elementu batzuk ere ezkutatzen ditu."
},
"profile": {
"appearance": {
"bio": "Bio",
"description": "Editatu abatarra, erabiltzaile-izena, profila, etab.",
"description": "Editatu abatarra, erabiltzaile izena, profila, etab.",
"display_name": "Pantaila izena",
"label": "Itxura",
"profile_metadata": "Profileko metadatuak",

View file

@ -7,9 +7,7 @@
"route_loaded": "Sivu {0} ladattu"
},
"account": {
"authorize": "Valtuuta seurataksesi",
"authorized": "Olet valtuuttanut pyynnön",
"avatar_description": "Käyttäjän {0} profiilikuva",
"avatar_description": "Käyttäjän {0} avatar",
"blocked_by": "Tämä käyttäjä on estänyt sinut.",
"blocked_domains": "Estetyt verkkotunnukset",
"blocked_users": "Estetyt käyttäjät",
@ -27,7 +25,6 @@
"follows_you": "Seuraa sinua",
"go_to_profile": "Siirry profiiliin",
"joined": "Liittynyt",
"lock": "Lukittu",
"moved_title": "on siirtynyt uudelle tilille:",
"muted_users": "Hiljennetyt käyttäjät",
"muting": "Hiljennetty",
@ -38,18 +35,14 @@
"posts": "Julkaisut",
"posts_count": "{0} julkaisua|{0} julkaisu|{0} julkaisua",
"profile_description": "Käyttäjän {0} profiilin ylätunniste",
"profile_personal_note": "Henkilökohtainen merkintä",
"profile_personal_note": "Henkilökohtainen muistiinpano",
"profile_unavailable": "Profiili ei saatavilla",
"reject": "Hylkää seuraamispyyntö",
"rejected": "Olet hylännyt pyynnön",
"request_follow": "Pyydä lupaa seurata",
"requested": "{0} on pyytänyt lupaa saada seurata sinua",
"unblock": "Poista esto",
"unfollow": "Älä seuraa",
"unmute": "Poista hiljennys",
"view_other_followers": "Seuraajat muilta palvelimilta eivät välttämättä näy.",
"view_other_following": "Seuratut muilta palvelimilta eivät välttämättä näy.",
"withdraw_follow_request": "Peruuta seuraamispyyntö"
"view_other_following": "Seuratut muilta palvelimilta eivät välttämättä näy."
},
"action": {
"apply": "Käytä",
@ -58,7 +51,6 @@
"boost": "Tehosta",
"boost_count": "{0}",
"boosted": "Tehostettu",
"clear": "Tyhjennä",
"clear_publish_failed": "Pyyhi julkaisuvirheet",
"clear_save_failed": "Pyyhi tallennusvirheet",
"clear_upload_failed": "Pyyhi tiedostojen lähetysvirheet",
@ -73,10 +65,8 @@
"favourited": "Lisätty suosikkeihin",
"more": "Lisää",
"next": "Seuraava",
"open_image_preview_dialog": "Avaa kuvan esikatseluikkuna",
"prev": "Edellinen",
"publish": "Julkaise",
"publish_thread": "Julkaise ketju",
"reply": "Vastaa",
"reply_count": "{0}",
"reset": "Palauta",
@ -98,7 +88,7 @@
"activate": "Valitse",
"complete": "Täydennä",
"compose_desc": "Kirjoita uusi julkaisu",
"n_people_in_the_past_n_days": "{0} ihmistä viimeisinä {1} päivänä",
"n_people_in_the_past_n_days": "{0} ihmistä viime {1} päivän aikana",
"select_lang": "Valitse kieli",
"sign_in_desc": "Lisää olemassa oleva tili",
"switch_account": "Vaihda tiliin {0}",
@ -124,14 +114,12 @@
"block_account": {
"cancel": "Peruuta",
"confirm": "Estä",
"description": "Haluatko varmasti estää tilin {0}?",
"title": "Estä tili"
"description": "Haluatko varmasti estää käyttäjän {0}?"
},
"block_domain": {
"cancel": "Peruuta",
"confirm": "Estä",
"description": "Haluatko varmasti estää verkkotunnuksen {0}?",
"title": "Estä verkkotunnus"
"description": "Haluatko varmasti estää verkkotunnuksen {0}?"
},
"common": {
"cancel": "Kyllä",
@ -140,37 +128,27 @@
"delete_list": {
"cancel": "Peruuta",
"confirm": "Poista",
"description": "Haluatko varmasti poistaa listan \"{0}\"?",
"title": "Poista lista"
"description": "Haluatko varmasti poistaa listan \"{0}\"?"
},
"delete_posts": {
"cancel": "Peruuta",
"confirm": "Poista",
"description": "Haluatko varmasti poistaa tämän julkaisun?",
"title": "Poista julkaisu"
"description": "Haluatko varmasti poistaa tämän julkaisun?"
},
"mute_account": {
"cancel": "Peruuta",
"confirm": "Hiljennä",
"days": "päivää|päivä|päivää",
"description": "Haluatko varmasti hiljentää tilin {0}?",
"hours": "tuntia|tunti|tuntia",
"minute": "minuuttia|minuutti|minuuttia",
"notifications": "Hiljennä ilmoitukset",
"specify_duration": "Määrittele hiljennyksen kesto",
"title": "Hiljennä tili"
"description": "Haluatko varmasti hiljentää käyttäjän {0}?"
},
"show_reblogs": {
"cancel": "Peruuta",
"confirm": "Näytä",
"description": "Haluatko varmasti näyttää tehostukset tililtä {0}?",
"title": "Näytä tehostukset"
"description": "Haluatko varmasti näyttää tehostukset käyttäjältä {0}?"
},
"unfollow": {
"cancel": "Peruuta",
"confirm": "Lopeta seuraaminen",
"description": "Haluatko varmasti lopettaa tilin {0} seuraamisen?",
"title": "Lopeta seuraaminen"
"description": "Haluatko varmasti lopettaa seuraamisen?"
}
},
"conversation": {
@ -199,14 +177,14 @@
"title": "Esijulkaisu"
},
"desc_highlight": "Saatat löytää bugeja ja puuttuvia ominaisuuksia sieltä täältä.",
"desc_para1": "Elk on ketterä verkkosovellus Mastodonille. Voit kirjautua sisään Mastodon-tilillesi ja olla sen avulla vuorovaikutuksessa fediversumin kanssa.",
"desc_para2": "Elk on avointa lähdekoodia, ja me parantelemme sitä vilkkaasti yhteisöprojektina. Liity joukkoomme, niin rakennamme sitä yhdessä!",
"desc_para1": "Kiitos, että kokeilet Elkiä, keskeneräistä Mastodon-verkkosovellustamme!",
"desc_para2": "Teemme kovasti töitä sen kehittämiseksi ja parantamiseksi.",
"desc_para3": "Voit auttaa kehityksessä tukemalla tiimiä GitHub-sponsorina. Toivomme, että nautit Elkin käytöstä!",
"desc_para4": "Jos haluat ilmoittaa ohjelmontivirheestä, auttaa testauksessa, antaa palautetta tai osallistua,",
"desc_para4": "Elk on avointa lähdekoodia. Jos haluat auttaa testaamalla, antamalla palautetta tai lahjoittamalla koodia,",
"desc_para5": "ota meihin yhteyttä GitHubissa",
"desc_para6": "ja tule mukaan.",
"desc_para6": "ja liity joukkoomme.",
"footer_team": "Elk-tiimi",
"title": "Tervetuloa Elkiin!"
"title": "Elk on koekäytössä!"
},
"language": {
"search": "Haku"
@ -223,7 +201,6 @@
"error": "Listan luonnissa tapahtui virhe",
"error_prefix": "Virhe: ",
"list_title_placeholder": "Listan nimi",
"manage": "Hallitse listoja",
"modify_account": "Muokkaa listoja, joilla tämä tili on",
"remove_account": "Poista tili listalta",
"save": "Tallenna muutokset"
@ -236,36 +213,24 @@
"command_mode": "Komentotila",
"compose": "Kirjoita",
"favourite": "Lisää suosikkeihin",
"search": "Hae",
"show_new_items": "Näytä uudet kohteet",
"title": "Toiminnot"
"title": "Toimet"
},
"media": {
"title": "Media"
},
"navigation": {
"go_to_bookmarks": "Kirjanmerkit",
"go_to_conversations": "Keskustelut",
"go_to_explore": "Tutustu",
"go_to_favourites": "Suosikit",
"go_to_federated": "Federoitu",
"go_to_home": "Koti",
"go_to_lists": "Listat",
"go_to_local": "Paikallinen",
"go_to_notifications": "Ilmoitukset",
"go_to_profile": "Profiili",
"go_to_search": "Haku",
"go_to_settings": "Asetukset",
"next_status": "Seuraava julkaisu",
"previous_status": "Edellinen julkaisu",
"shortcut_help": "Oikoteiden ohje",
"title": "Siirtyminen"
"title": "Navigointi"
}
},
"sequence_then": "ja sitten"
"sequence_then": "sitten"
},
"menu": {
"add_personal_note": "Lisää oma merkintä käyttäjälle {0}",
"add_personal_note": "Lisää oma muistiinpano käyttäjälle {0}",
"block_account": "Estä {0}",
"block_domain": "Estä verkkotunnus {0}",
"copy_link_to_post": "Kopioi linkki tähän julkaisuun",
@ -280,9 +245,8 @@
"mute_conversation": "Hiljennä tämä julkaisu",
"open_in_original_site": "Avaa alkuperäisellä sivustolla",
"pin_on_profile": "Kiinnitä profiiliin",
"remove_personal_note": "Poista oma merkintä käyttäjältä {0}",
"remove_personal_note": "Poista oma muistiinpano käyttäjältä {0}",
"report_account": "Ilmianna {0}",
"share_account": "Jaa {0}",
"share_post": "Jaa tämä julkaisu",
"show_favourited_and_boosted_by": "Näytä suosikkeihinsa lisänneet ja tehostaneet",
"show_reblogs": "Näytä tehostukset käyttäjältä {0}",
@ -310,16 +274,13 @@
"built_at": "Koottu {0}",
"compose": "Kirjoita",
"conversations": "Keskustelut",
"docs": "Dokumentaatio",
"explore": "Tutustu",
"favourites": "Suosikit",
"federated": "Federoitu",
"hashtags": "Aihetunnisteet",
"home": "Koti",
"list": "Lista",
"lists": "Listat",
"local": "Paikallinen",
"more_menu": "Lisää-valikko",
"muted_users": "Hiljennetyt käyttäjät",
"notifications": "Ilmoitukset",
"privacy": "Yksityisyys",
@ -353,13 +314,13 @@
"polls": {
"allow_multiple": "Salli monen valinta",
"cancel": "Peruuta",
"create": "Luo äänestys",
"create": "Luo kysely",
"disallow_multiple": "Estä monen valinta",
"expiration": "Äänestyksen päättyminen",
"expiration": "Kyselyn päättyminen",
"hide_votes": "Piilota äänestystulokset vastausaikana",
"option_placeholder": "Vastausvaihtoehto {current}/{max}",
"remove_option": "Poista vaihtoehto",
"settings": "Äänestyksen asetukset",
"settings": "Kyselyn asetukset",
"show_votes": "Näytä äänestystulokset koko ajan"
},
"pwa": {
@ -454,8 +415,6 @@
"label": "Tiliasetukset"
},
"interface": {
"bottom_nav": "Alanavigaatio",
"bottom_nav_instructions": "Valitse enintään viisi suosikkipainikettasi alanavigaatioon. Niiden joukossa pitää olla Lisää-valikon painike.",
"color_mode": "Pohjaväri",
"dark_mode": "Tumma",
"default": " (oletus)",
@ -467,7 +426,6 @@
},
"language": {
"display_language": "Sovelluksen kieli",
"how_to_contribute": "Miten osallistua?",
"label": "Kieli",
"post_language": "Julkaisukieli",
"status": "Käännöksen tila: {0}/{1} ({2}\u00A0%)",
@ -489,7 +447,7 @@
"favourite": "Suosikit",
"follow": "Uudet seuraajat",
"mention": "Maininnat",
"poll": "Äänestykset",
"poll": "Kyselyt",
"reblog": "Tehostukset",
"title": "Mitä ilmoituksia haluat saada?"
},
@ -535,8 +493,6 @@
},
"notifications_settings": "Ilmoitukset",
"preferences": {
"embedded_media": "Upotettu mediasoitin",
"embedded_media_description": "Näytä upotettu mediasoitin tavallisen esikatselukortin sijaan, kun jaettu linkki johtaa median suoratoistoon.",
"enable_autoplay": "Toista automaattisesti",
"enable_data_saving": "Säästä tiedonsiirrossa",
"enable_data_saving_description": "Estä liitteitä latautumasta automaattisesti.",
@ -548,16 +504,13 @@
"hide_alt_indi_on_posts": "Piilota julkaisujen ALT-ilmaisin",
"hide_boost_count": "Piilota tehostusten lukumäärä",
"hide_favorite_count": "Piilota suosikkien lukumäärä",
"hide_follower_count": "Piilota seurattujen ja seuraajien lukumäärä",
"hide_gif_indi_on_posts": "Piilota julkaisujen GIF-ilmaisin",
"hide_follower_count": "Piilota seurattujen/seuraajien lukumäärä",
"hide_news": "Piilota uutiset",
"hide_reply_count": "Piilota vastausten lukumäärä",
"hide_tag_hover_card": "Piilota tunnisteiden leijukortti",
"hide_translation": "Piilota käännös",
"hide_username_emojis": "Piilota käyttäjänimien emojit",
"hide_username_emojis_description": "Piilottaa emojit käyttäjien nimistä aikajanoilla. Emojit näkyvät silti heidän profiileissaan.",
"label": "Mieltymykset",
"optimize_for_low_performance_device": "Optimoi heikon suorituskyvyn laitteelle",
"title": "Kokeelliset ominaisuudet",
"use_star_favorite_icon": "Käytä tähteä suosikkikuvakkeena",
"user_picker": "Käyttäjävalitsin",
@ -596,16 +549,12 @@
},
"share_target": {
"description": "Elkin voi määrittää niin, että voit jakaa sisältöä muista sovelluksista: asenna Elk laitteellesi ja kirjaudu sisään.",
"hint": "Jotta voit jakaa sisältöä Elkillä, sen täytyy olla asennettuna ja sinun sisäänkirjautuneena.",
"hint": "Jotta voit jakaa sisältöä Elkillä, sen täytyy olla asennettuna ja sisään kirjautuneena.",
"title": "Jaa Elkillä"
},
"state": {
"attachments_exceed_server_limit": "Julkaisussa on liian monta liitettä.",
"attachments_limit_audio_error": "Ylitetty audion enimmäiskoko: {0}",
"attachments_limit_error": "Julkaisussa liikaa liitteitä",
"attachments_limit_image_error": "Ylitetty kuvan enimmäiskoko: {0}",
"attachments_limit_unknown_error": "Ylitetty tiedoston enimmäiskoko: {0}",
"attachments_limit_video_error": "Ylitetty videon enimmäiskoko: {0}",
"attachments_limit_error": "Liikaa liitteitä",
"edited": "(Muokattu)",
"editing": "Muokkaa",
"loading": "Ladataan...",
@ -622,11 +571,9 @@
},
"boosted_by": "Tehostaneet",
"edited": "Muokattu {0}",
"embedded_warning": "Tämän toistaminen voi paljastaa IP-osoitteesi muille.",
"favourited_by": "Lisänneet suosikiksi",
"filter_hidden_phrase": "Suodatettu",
"filter_show_anyway": "Näytä silti",
"gif": "GIF",
"img_alt": {
"ALT": "ALT",
"desc": "Kuvaus",
@ -658,20 +605,8 @@
"list": "Lista",
"media": "Media",
"news": "Uutiset",
"notifications_admin": {
"report": "Ilmianto",
"sign_up": "Rekisteröityminen"
},
"notifications_all": "Kaikki",
"notifications_favourite": "Suosikki",
"notifications_follow": "Seuraaminen",
"notifications_follow_request": "Seuraamispyyntö",
"notifications_mention": "Maininnat",
"notifications_more_tooltip": "Suodata ilmoitustyypin perusteella",
"notifications_poll": "Äänestys",
"notifications_reblog": "Tehostus",
"notifications_status": "Tila",
"notifications_update": "Päivitys",
"posts": "Julkaisut",
"posts_with_replies": "Julkaisut ja vastaukset"
},
@ -725,7 +660,6 @@
"add_emojis": "Lisää emojeja",
"add_media": "Lisää kuvia, video tai äänitiedosto",
"add_publishable_content": "Lisää julkaisuun sisältöä",
"add_thread_item": "Lisää kohde ketjuun",
"change_content_visibility": "Muuta sisällön näkyvyyttä",
"change_language": "Vaihda kieli",
"emoji": "Emoji",
@ -735,8 +669,6 @@
"open_editor_tools": "Editorin työkalut",
"pick_an_icon": "Valitse kuvake",
"publish_failed": "Sulje epäonnistuneet viestit editorin yläosasta, niin voit julkaista uudelleen",
"remove_thread_item": "Poista kohde ketjusta",
"start_thread": "Aloita ketju",
"toggle_bold": "Lihavoi",
"toggle_code_block": "Koodilohko",
"toggle_italic": "Kursivoi"

View file

@ -63,7 +63,7 @@
"enter_app": "Entrer dans l'application",
"favourite": "J'aime",
"favourite_count": "{0}",
"favourited": "J'aime",
"favourited": "Aimé",
"more": "Plus",
"next": "Suivant",
"prev": "Précédent",
@ -277,7 +277,7 @@
"compose": "Composer",
"conversations": "Conversations",
"explore": "Explorer",
"favourites": "Aimés",
"favourites": "Favoris",
"federated": "Fédérés",
"home": "Accueil",
"list": "Liste",

View file

@ -1,9 +1,9 @@
{
"a11y": {
"loading_page": "Az oldal töltődik, kérjük várj",
"loading_titled_page": "Töltődik a(z) {0} oldal, kérjük várj",
"loading_page": "Az oldal töltődik, kérjük várjon",
"loading_titled_page": "Töltődik a(z) {0} oldal, kérjük várjon",
"locale_changed": "A nyelv megváltoztatva: {0}",
"locale_changing": "Nyelv változtatás, kérjük várj",
"locale_changing": "Nyelv változtatás, kérjük várjon",
"route_loaded": "Oldal {0} betöltődött"
},
"account": {
@ -32,8 +32,8 @@
"muted_users": "Némított felhasználók",
"muting": "Némított",
"mutuals": "Kölcsönös",
"notifications_on_post_disable": "Ne értesíts, mikor {username} felhasználó bejegyzést tesz közzé",
"notifications_on_post_enable": "Értesíts, mikor {username} felhasználó bejegyzést tesz közzé",
"notifications_on_post_disable": "Ne értesítsen, mikor {username} felhasználó bejegyzést tesz közzé",
"notifications_on_post_enable": "Értesítsen, mikor {username} felhasználó bejegyzést tesz közzé",
"pinned": "Kitűzött",
"posts": "Bejegyzések",
"posts_count": "{0} Bejegyzések|{0} Bejegyzés|{0} Bejegyzések",
@ -41,15 +41,15 @@
"profile_personal_note": "Személyes jegyzetek",
"profile_unavailable": "A profil nem elérhető",
"reject": "Követés elutasítása",
"rejected": "Elutasított kérés",
"rejected": "Elutasítottad a kérést",
"request_follow": "Követés kérése",
"requested": "{0} kérte, hogy kövessen",
"unblock": "Ne legyen blokkolva",
"unfollow": "Nem követem",
"unmute": "Némítás megszűntetve",
"view_other_followers": "Másik instancekról származó követések nem feltétlenül lesznek megjelenítve.",
"view_other_following": "Másik instancekról származó követők nem feltétlenül lesznek megjelenítve.",
"withdraw_follow_request": "Követési kérés visszavonása"
"view_other_followers": "A másik instancekról származó követések nem feltétlenül lesznek megjelenítve.",
"view_other_following": "A másik instancekról származó követők nem feltétlenül lesznek megjelenítve.",
"withdraw_follow_request": "A követési kérés visszavonása"
},
"action": {
"apply": "Alkalmaz",
@ -73,7 +73,6 @@
"favourited": "Kedvencnek jelölt",
"more": "Tovább",
"next": "Következő",
"open_image_preview_dialog": "Kép előnézeti megnyitása",
"prev": "Előző",
"publish": "Közzététel",
"publish_thread": "Szál közzététele",
@ -113,7 +112,7 @@
"in": "be",
"no_bookmarks": "Még nincs könyvjelzőzött bejegyzés",
"no_favourites": "Még nincs kedvelt bejegyzés",
"not_found": "404 - Nem található",
"not_found": "404 Nem található",
"offline_desc": "Offline állapot. Kérljük ellenőrízze a hálózati csatlatkozását."
},
"compose": {
@ -124,13 +123,13 @@
"block_account": {
"cancel": "Mégsem",
"confirm": "Blokkol",
"description": "Biztosan blokkolod {0}?",
"description": "Biztosan blokkolod? {0}",
"title": "Hozzáférés blokkolása"
},
"block_domain": {
"cancel": "Mégsem",
"confirm": "Blokkol",
"description": "Biztosan blokkolod {0}?",
"description": "Biztosan blokkolod? {0}",
"title": "Domain blokkolása"
},
"common": {
@ -174,13 +173,13 @@
}
},
"conversation": {
"with": "vele"
"with": "vele: "
},
"custom_cards": {
"stackblitz": {
"lines": "Sorok {0}",
"lines": "Sorok: {0}",
"open": "Megnyit",
"snippet_from": "Töredék ebből {0}"
"snippet_from": "Töredék ebből: {0}"
}
},
"error": {
@ -198,10 +197,10 @@
"desc3": "Ne lépj be valódi hozzáféréssel.",
"title": "Előzetes változatát telepítése"
},
"desc_highlight": "Számíthatsz néhány hibára és hiányzó funkcióra itt és ott.",
"desc_highlight": "Számíthat néhány hibára és hiányzó funkcióra itt és ott.",
"desc_para1": "Köszönjük az érdeklődésedet és hogy kipróbálod az Elk folyamazban lévő és fejlesztés alatt álló Mastodon klienst!",
"desc_para2": "keményen dolgozunk a fejlesztésen és a javításokon időről időre.",
"desc_para3": "A fejlesztés lendületéhez tudod támogatni csapatunkat a GitHub szponoráción keresztül. Reméljük elnyeri tetszésedét az Elk!",
"desc_para3": "A fejlesztés lendületéhez tudja támogatni csapatunkat a GitHub szponoráción keresztül. Reméljük elnyeri tetszésedét az Elk!",
"desc_para4": "Az Elk nyílt forráskódú. Ha segíteni akar a tesztelésben, adhat visszajelzést vagy hozzájárulást,",
"desc_para5": "elér minket a GitHub-on",
"desc_para6": "és legyen elkötelezett.",
@ -330,7 +329,7 @@
"select_language": "Megjelenítő nyelv",
"settings": "Beállítások",
"show_intro": "Bemutatkozás",
"toggle_theme": "Téma váltása",
"toggle_theme": "Téma váltás",
"zen_mode": "Zen mód"
},
"notification": {
@ -345,13 +344,13 @@
"update_status": "frissítette a bejegyzését"
},
"placeholder": {
"content_warning": "Írj ide figyelmeztetést",
"content_warning": "Írja ide figyelmeztetését",
"default_1": "Mi jár a fejedben?",
"reply_to_account": "Válasz erre {0}",
"reply_to_account": "Válasz erre: {0}",
"replying": "Válaszol"
},
"polls": {
"allow_multiple": "Több választás megengedése",
"allow_multiple": "Több választás megenedése",
"cancel": "Mégsem",
"create": "Szavazás készítése",
"disallow_multiple": "Több válasz tiltása",
@ -367,8 +366,8 @@
"install": "Telepítés",
"install_title": "Elk telepítése",
"screenshots": {
"dark": "Az Elk képernyőkép sötét módban fut",
"light": "Az Elk képernyőkép világos módban fut"
"dark": "Az Elk képernyőképe sötét módban fut",
"light": "Az Elk képernyőképe világos módban fut"
},
"title": "Új Elk frissítés elérhető!",
"update": "Frissítés",
@ -450,7 +449,7 @@
"version": "Verzió"
},
"account_settings": {
"description": "Szerkeszd fiókbeállításaid a Mastodonban.",
"description": "Szerkessze fiókbeállításait a Mastodonban.",
"label": "Fiók beállítások"
},
"interface": {
@ -524,13 +523,13 @@
"enable_description": "Ha értesítéseket szeretne kapni amikor az Elk nincs nyitva, engedélyezze a push értesítéseket. A fenti \"@:settings.notifications.show_btn{'\"'} gomb segítségével pontosan szabályozhatja, hogy milyen típusú interakciók generáljanak push értesítéseket.",
"enable_description_desktop": "Ha értesítéseket szeretne kapni amikor az Elk nincs nyitva, engedélyezze a push értesítéseket. A \"Beállítások > Értesítések > Push értesítések beállításai\" menüpontban pontosan szabályozhatja, hogy az engedélyezést követően milyen típusú interakciók generáljanak push értesítéseket.",
"enable_description_mobile": "A beállításokat a \"Beállítások > Értesítések > Push értesítési beállítások\" navigációs menü segítségével is elérheti.",
"enable_description_settings": "Ha értesítéseket szeretnél kapni amikor az Elk nincs nyitva, engedélyezd a push értesítéseket. Pontosan szabályozhatod, hogy milyen típusú interakciók generálhatnak push értesítéseket ugyanazon a képernyőn, miután engedélyezted őket.",
"enable_description_settings": "Ha értesítéseket szeretne kapni amikor az Elk nincs nyitva, engedélyezze a push értesítéseket. Pontosan szabályozhatja, hogy milyen típusú interakciók generálnak push értesítéseket ugyanazon a képernyőn, miután engedélyezte őket.",
"enable_desktop": "Push értesítések engedélyezése",
"enable_title": "Sose hagyj ki semmit",
"re_auth": "Úgy tűnik, hogy szervered nem támogatja a push értesítéseket. Próbáljon kijelentkezni, majd újra bejelentkezni. Ha ez az üzenet továbbra is megjelenik, forduljon a szerver rendszergazdájához."
"re_auth": "Úgy tűnik, hogy a szervere nem támogatja a push értesítéseket. Próbáljon kijelentkezni, majd újra bejelentkezni. Ha ez az üzenet továbbra is megjelenik, forduljon a szerver rendszergazdájához."
}
},
"show_btn": "Nyisd meg az értesítési beállításokat",
"show_btn": "Nyissa meg az értesítési beállításokat",
"under_construction": "Felújítás alatt"
},
"notifications_settings": "Értesítések",
@ -581,7 +580,7 @@
"title": "Profil szerkesztése"
},
"featured_tags": {
"description": "Az emberek ezen címkék alatt böngészhetik a nyilvános bejegyzéseid.",
"description": "Az emberek ezen címkék alatt böngészhetik nyilvános bejegyzéseit.",
"label": "Kiemelt címkék",
"under_construction": "Felújítás alatt"
},
@ -595,8 +594,8 @@
}
},
"share_target": {
"description": "Az Elk konfigurálható úgy, hogy más alkalmazásokból is megoszthass tartalmat, egyszerűen telepítse az Elket eszközödre vagy számítógépedre, és jelentkezz be.",
"hint": "A tartalom megosztásához telepíteni kell az Elket, és be kell jelentkezni.",
"description": "Az Elk konfigurálható úgy, hogy más alkalmazásokból is megoszthasson tartalmat, egyszerűen telepítse az Elket eszközére vagy számítógépére, és jelentkezzen be.",
"hint": "A tartalom megosztásához telepíteni kell az Elket, és be kell jelentkeznie.",
"title": "Oszd meg Elkkel"
},
"state": {
@ -617,7 +616,7 @@
},
"status": {
"account": {
"suspended_message": "A bejegyzéshez tartoz fiók felfüggesztésre került.",
"suspended_message": "A bejegyzéshez tartoz fiókot felfüggesztettük.",
"suspended_show": "Ennek ellenére megjeleníti?"
},
"boosted_by": "Kiemelve: ",

View file

@ -73,7 +73,6 @@
"favourited": "Apprezzato",
"more": "Altro",
"next": "Successivo",
"open_image_preview_dialog": "Apri finestra di anteprima",
"prev": "Precedente",
"publish": "Pubblica",
"publish_thread": "Pubblica discussione",
@ -467,7 +466,7 @@
},
"language": {
"display_language": "Lingua interfaccia",
"how_to_contribute": "Come contribuire?",
"how_to_contribute": "Come posso contribuire?",
"label": "Lingua",
"post_language": "Lingua di pubblicazione",
"status": "Stato traduzione: {0}/{1} ({2}%)",
@ -545,7 +544,7 @@
"github_cards_description": "Quando viene pubblicato un link GitHub, viene mostrato un riquadro HTML accessibile usando i metadati del grafico sociale invece dell'immmagine.",
"grayscale_mode": "Modalità scala di grigi",
"hide_account_hover_card": "Nascondi anteprima profilo al passaggio del mouse",
"hide_alt_indi_on_posts": "Nascondi indicatore testo alternativo sui post",
"hide_alt_indi_on_posts": "Nascondi indicatori testo alternativo sui post",
"hide_boost_count": "Nascondi contatore potenziamenti",
"hide_favorite_count": "Nascondi contatore apprezzamenti",
"hide_follower_count": "Nascondi contatore seguaci/seguiti",

View file

@ -61,7 +61,7 @@
"confirm": "確認",
"done": "完了",
"edit": "編集する",
"enter_app": "始める",
"enter_app": "使い始める",
"favourite": "お気に入り",
"favourite_count": "{0}",
"favourited": "お気に入り済み",
@ -116,12 +116,12 @@
"block_account": {
"cancel": "キャンセル",
"confirm": "ブロック",
"description": "{0}さんを本当にミュートしすか?"
"description": "{0}さんを本当にミュートしたいですか?"
},
"block_domain": {
"cancel": "キャンセル",
"confirm": "ブロック",
"description": "{0}さんを本当にブロックしすか?"
"description": "{0}さんを本当にブロックしたいですか?"
},
"common": {
"cancel": "いいえ",
@ -130,27 +130,27 @@
"delete_list": {
"cancel": "キャンセル",
"confirm": "削除",
"description": "リスト \"{0}\" を本当に削除しすか?"
"description": "リスト \"{0}\" を本当に削除したいですか?"
},
"delete_posts": {
"cancel": "キャンセル",
"confirm": "削除",
"description": "この投稿を本当に削除しすか?"
"description": "この投稿を本当に削除したいですか?"
},
"mute_account": {
"cancel": "キャンセル",
"confirm": "ミュート",
"description": "{0}さんを本当にミュートしすか?"
"description": "{0}さんを本当にミュートしたいですか?"
},
"show_reblogs": {
"cancel": "キャンセル",
"confirm": "表示",
"description": "{0}さんのブーストを本当に表示しすか?"
"description": "{0}さんのブーストを本当に表示したいですか?"
},
"unfollow": {
"cancel": "キャンセル",
"confirm": "フォロー解除",
"description": "本当にフォローを解除しますか?"
"description": "本当にフォロー解除したいですか?"
}
},
"conversation": {
@ -166,7 +166,7 @@
"error": {
"account_not_found": "アカウント {0} が見つかりません",
"explore_list_empty": "現在トレンドには何もありません。またあとで!",
"file_size_cannot_exceed_n_mb": "{0}MBを超えるファイルはアップロードできません",
"file_size_cannot_exceed_n_mb": "ファイルサイズは{0}MBを超えてはいけません",
"sign_in_error": "サーバーに接続できません。",
"status_not_found": "投稿が見つかりません",
"unsupported_file_format": "対応していないファイル形式です"
@ -367,7 +367,7 @@
"anything_else": "他に私たちが知る必要があることはありますか?",
"block_desc": "あなたは今後、このユーザーの投稿を見ることはありません。このユーザーもあなたの投稿を見たり、あなたをフォローしたりすることもできなくなります。ただし、相手はブロックされたことが分かります。",
"dontlike": "気に入りません",
"dontlike_desc": "これは閲覧したくない投稿です",
"dontlike_desc": "これは見たくない投稿です。",
"forward": "はい、この報告を {0} に転送してください。",
"forward_question": "この報告の匿名化されたコピーをそのサーバーにも送信しますか?",
"further_actions": {
@ -453,7 +453,7 @@
"mention": "メンション",
"poll": "投票",
"reblog": "投稿のリブログ",
"title": "受け取りたい通知を選択してください"
"title": "どの通知を受け取りますか?"
},
"description": "Elkを使用していないときでも通知を受け取ります。",
"instructions": "@:settings.notifications.push_notifications.save_settings ボタンで設定を保存するのを忘れないように!",
@ -472,9 +472,9 @@
"invalid_vapid_key": "VAPID公開鍵が無効なようです。",
"permission_denied": "パーミッション拒否: ブラウザで通知を有効にしてください。",
"repo_link": "ElkのGitHubリポジトリ",
"request_error": "登録のリクエスト中にエラーが発生しました。再試行してもエラーが解消しない場合、Elkリポジトリにissueを報告してください。",
"title": "プッシュ通知を登録できませんでした",
"too_many_registrations": "ブラウザーの制限により、Elkは異なるサーバー上の複数アカウントに対してプッシュ通知サービスを使用できません。他のアカウントのプッシュ通知の登録を解除して、再登録する必要があります。",
"request_error": "購読のリクエスト中にエラーが発生しました。再試行してもエラーが解消しない場合、Elkリポジトリにissueを報告してください。",
"title": "プッシュ通知を購読できませんでした",
"too_many_registrations": "ブラウザーの制限により、Elkは異なるサーバー上の複数アカウントに対してプッシュ通知サービスを使用できません。他のアカウントのプッシュ通知の購読を解除して、再購読する必要があります。",
"vapid_not_supported": "このブラウザはWeb Push通知をサポートしていませんが、VAPIDプロトコルをサポートしているようです。"
},
"title": "プッシュ通知の設定",
@ -572,7 +572,7 @@
"status": {
"account": {
"suspended_message": "この投稿のアカウントは凍結されました。",
"suspended_show": "本当にコンテンツを表示しますか?"
"suspended_show": "それでもコンテンツを表示しますか?"
},
"boosted_by": "ブーストしたユーザー",
"edited": "編集済み {0}",
@ -708,6 +708,6 @@
"public": "公開",
"public_desc": "誰でも閲覧可能",
"unlisted": "非掲載",
"unlisted_desc": "誰でも閲覧可能ですが、検索機能からは非表示にします"
"unlisted_desc": "誰でも閲覧可能、検索機能からはオプトアウトする"
}
}

View file

@ -73,7 +73,6 @@
"favourited": "Adicionado aos favoritos",
"more": "Mais",
"next": "Próximo",
"open_image_preview_dialog": "Abrir caixa de diálogo de pré-visualização da imagem",
"prev": "Anterior",
"publish": "Publicar",
"publish_thread": "Publicar sequência",

View file

@ -343,10 +343,10 @@
},
"settings": {
"about": {
"built_at": "Kurulum",
"built_at": "Kurulmuş",
"label": "Hakkında",
"meet_the_team": "Takım ile buluş",
"sponsor_action": "Bize sponsor ol",
"sponsor_action": "Bize spponsor ol",
"sponsor_action_desc": "Elk'i geliştiren takıma destek olmak için",
"sponsors": "Sponsorlar",
"sponsors_body_1": "Elk cömert sponsorluk ve şunların yardımı sayesinde mümkün oldu:",

View file

@ -1,9 +1,9 @@
{
"a11y": {
"loading_page": "Завантаження сторінки, просимо почекати",
"loading_titled_page": "Завантаження сторінки {0}, просимо почекати",
"locale_changed": "Мова змінена на {0}",
"locale_changing": "Зміна мови, просимо почекати",
"loading_page": "Завантаження сторінки, будь ласка, зачекайте",
"loading_titled_page": "Завантаження сторінки {0}, будь ласка, зачекайте",
"locale_changed": "Мову змінено на {0}",
"locale_changing": "Зміна мови, будь ласка, зачекайте",
"route_loaded": "Сторінка {0} завантажена"
},
"account": {
@ -13,96 +13,78 @@
"blocked_users": "Заблоковані користувачі",
"blocking": "Заблоковані",
"bot": "БОТ",
"copy_account_name": "Скопіювати назву облікового запису",
"favourites": "Уподобані",
"copy_account_name": "Скопіюйте назву облікового запису",
"favourites": "Улюблені",
"follow": "Підписатися",
"follow_back": "Підписатися взаємно",
"follow_requested": "Запитані",
"follow_back": "Підписатися",
"follow_requested": "Запити",
"followers": "Підписники",
"followers_count": "{0} підписників|{0} підписник|{0} підписники|{0} підписників",
"following": "Підписані",
"following_count": "{0} підписок|{0} підписка|{0} підписки|{0} підписок",
"follows_you": "Підписані на вас",
"following": "Підписаний",
"following_count": "{0} підписок",
"follows_you": "Підписаний на вас",
"go_to_profile": "Перейти до профілю",
"joined": "Долучені",
"lock": "Прихований",
"moved_title": "указали, що їхній новий обліковий запис тепер:",
"muted_users": "Іґноровані користувачі",
"muting": "Іґноровані",
"mutuals": "Підписані взаємно",
"notifications_on_post_disable": "Не сповіщати про дописи від {username}",
"notifications_on_post_enable": "Сповіщати про дописи від {username}",
"joined": "Зареєстровано",
"moved_title": "вказав, що його новий обліковий запис тепер:",
"muted_users": "Приховані користувачі",
"muting": "Приховано",
"mutuals": "Взаємно",
"pinned": "Закріплені дописи",
"posts": "Дописи",
"posts_count": "{0} дописів|{0} допис|{0} дописи|{0} дописів",
"profile_description": "Заголовок профілю {0}",
"profile_personal_note": "Нотатка",
"profile_unavailable": "Профіль недоступний",
"reject": "Відхилити підписку",
"rejected": "Ви відхилили запит",
"request_follow": "Запит підписки",
"requested": "{0} запитали підписку на вас",
"unblock": "Розблочити",
"unblock": "Розблокувати",
"unfollow": "Відписатися",
"unmute": "Розіґнорити",
"view_other_followers": "Підписники з інших серверів можуть не відображатися.",
"view_other_following": "Підписки з інших серверів можуть не відображатися.",
"withdraw_follow_request": "Відкликати запит підписки"
"unmute": "Приховати"
},
"action": {
"apply": "Застосувати",
"bookmark": "Додати в закладки",
"bookmarked": "Додано в закладки",
"bookmarked": "Додано з закладки",
"boost": "Поширити",
"boost_count": "{0}",
"boosted": "Поширено",
"clear": "Очистити",
"clear_publish_failed": "Очистити помилки оприлюднення",
"clear_save_failed": "Очистити помилки збереження",
"clear_upload_failed": "Очистити помилки завантаження",
"close": "Закрити",
"compose": "Написати",
"confirm": "Підтвердити",
"done": "Зроблено",
"edit": "Правити",
"enter_app": "Ввійти в застосунок",
"favourite": "Уподобати",
"edit": "Редагувати",
"enter_app": "Перейти до додатку",
"favourite": "Вподобати",
"favourite_count": "{0}",
"favourited": "Уподобані",
"favourited": "Подобається",
"more": "Більше",
"next": "Наступний",
"open_image_preview_dialog": "Відкрити діалоґ передпоказу зображення",
"prev": "Попередній",
"publish": "Оприлюднити",
"publish_thread": "Оприлюднити ряд дописів",
"publish": "Опублікувати",
"reply": "Відповісти",
"reply_count": "{0}",
"reset": "Скинути",
"save": "Зберегти",
"save_changes": "Зберегти зміни",
"sign_in": "Ввійти",
"sign_in_to": "Ввійти до {0}",
"sign_in": "Увійти",
"switch_account": "Змінити обліковий запис",
"vote": "Голосувати"
},
"app_desc_short": "Спритний вебклієнт для Mastodon",
"app_logo": "Лоґо Elk",
"app_desc_short": "Спритний веб-клієнт для Mastodon",
"app_logo": "Elk лого",
"app_name": "Elk",
"attachment": {
"edit_title": "Опис",
"remove_label": "Вилучити вкладення"
"remove_label": "Видалити вкладення"
},
"command": {
"activate": "Активувати",
"complete": "Вибрати",
"compose_desc": "Написати новий допис",
"n_people_in_the_past_n_days": "{0} користувачів за останні {1} днів",
"select_lang": "Вибрати мову",
"sign_in_desc": "Додати наявний обліковий запис",
"select_lang": "Змінити мову",
"sign_in_desc": "Додати існуючий обліковий запис",
"switch_account": "Змінити обліковий запис на {0}",
"switch_account_desc": "Змінити активний обліковий запис",
"toggle_dark_mode": "Перемикнути темний режим",
"toggle_zen_mode": "Перемикнути Zen режим"
"toggle_dark_mode": "Перемкнути темний режим",
"toggle_zen_mode": "Перемкнути режим Zen"
},
"common": {
"end_of_list": "Кінець списку",
@ -110,9 +92,9 @@
"fetching": "Завантаження...",
"in": "в",
"no_bookmarks": "Немає збережених дописів",
"no_favourites": "Немає уподобаних дописів",
"no_favourites": "Немає вподобаних дописів",
"not_found": "404 Не знайдено",
"offline_desc": "Схоже, ви відключені від мережі. Просимо перевірити підключення до мережі."
"offline_desc": "Схоже, ви відключені від мережі. Будь ласка, перевірте ваше підключення до мережі."
},
"compose": {
"draft_title": "Чернетка {0}",
@ -121,15 +103,15 @@
"confirm": {
"block_account": {
"cancel": "Скасувати",
"confirm": "Блочити",
"description": "Упевнені, що хочете заблочити {0}?",
"title": "Заблочити користувача"
"confirm": "Блокувати",
"description": "Ви впевнені, що бажаєте заблокувати {0}?",
"title": "Заблокувати користувача"
},
"block_domain": {
"cancel": "Скасувати",
"confirm": "Блочити",
"description": "Упевнені, що хочете заблочити {0}?",
"title": "Заблочити домен"
"confirm": "Блокувати",
"description": "Ви впевнені, що бажаєте заблокувати {0}?",
"title": "Заблокувати домен"
},
"common": {
"cancel": "Скасувати",
@ -138,90 +120,73 @@
"delete_list": {
"cancel": "Скасувати",
"confirm": "Видалити",
"description": "Упевнені, що хочете видалити список «{0}»?",
"description": "Ви впевнені, що бажаєте видалити список \"{0}\"?",
"title": "Видалити список"
},
"delete_posts": {
"cancel": "Скасувати",
"confirm": "Видалити",
"description": "Упевнені, що хочете видалити допис?",
"description": "Ви впевнені, що хочете видалити цей допис?",
"title": "Видалити допис"
},
"mute_account": {
"cancel": "Скасувати",
"confirm": "Іґнорити",
"days": "днів|день|дні|днів",
"description": "Упевнені, що бажаєте іґнорити {0}?",
"hours": "годин|година|години|годин",
"minute": "хвилин|хвилина|хвилини|хвилин",
"title": "Іґнорити обліковий запис"
"confirm": "Приховати",
"description": "Ви впевнені, що бажаєте приховати {0}?",
"title": "Приховати обліковий запис"
},
"show_reblogs": {
"cancel": "Скасувати",
"confirm": "Показати",
"description": "Упевнені, що хочете показати поширення від {0}?",
"description": "Ви впевнені, що хочете показати поширення від {0}?",
"title": "Показати поширення"
},
"unfollow": {
"cancel": "Скасувати",
"confirm": "Відписатися",
"description": "Упевнені, що бажаєте відписатися від {0}?",
"description": "Ви впевнені, що бажаєте відписатися від {0}?",
"title": "Відписатися"
}
},
"conversation": {
"with": "з"
},
"custom_cards": {
"stackblitz": {
"lines": "Рядків {0}",
"open": "Відкрити",
"snippet_from": "Сніпет від {0}"
}
},
"error": {
"account_not_found": "Обліковий запис {0} не знайдено",
"explore_list_empty": "Зараз нічого не в тренді. Можете перевірити пізніше!",
"explore_list_empty": "Зараз нічого не в тренді. Перевірте пізніше!",
"file_size_cannot_exceed_n_mb": "Розмір файлу не може перевищувати {0} Мб",
"sign_in_error": "Не вдалося підключитися до сервера.",
"status_not_found": "Допис не знайдено",
"unsupported_file_format": "Непідтримуваний формат файлу"
},
"help": {
"build_preview": {
"desc1": "Зараз бачите попередню версію Elk від спільноти - {0}.",
"desc2": "Може містити неоглянути або навіть зловмисні зміни.",
"desc3": "Не треба заходити з дійсним обліковим записом.",
"title": "Попередній вигляд"
},
"desc_highlight": "Можете очікувати деякі помилки і відсутні функції тут і там.",
"desc_para1": "Elk є спритним вебклієнтом для Mastodon. Можете ввійти в обліковий Mastodon запис, через котрого взаємодіяти з Fediverse.",
"desc_para2": "Elk є відкритим ПЗ, котрого жваво покращуємо, як проєкт спільноти. Можете долучитися до нас і розвивати його разом!",
"desc_para3": "Аби прискорити розробку, можете спонсорувати Команду через GitHub Sponsors. Сподіваємося, ви задоволені застосунком Elk!",
"desc_para4": "Якщо хочете повідомити про помилку, допомогти з тестуванням, надіслати відгук чи зробити внесок,",
"desc_para5": "то можете подати до нас в GitHub",
"desc_para6": "і взяти участь.",
"desc_highlight": "Очікуйте деякі помилки та відсутні функції тут і там.",
"desc_para1": "Дякуємо за ваш інтерес до випробування Elk, нашого універсального клієнта Mastodon, який ще у розробці!",
"desc_para2": "Ми наполегливо працюємо над розробкою та вдосконалюємо його. Ми відкриємо вихідний код, коли він буде готовий для загального використання.",
"desc_para3": "Щоб допомогти прискорити розробку, ви можете спонсорувати членів нашої команди за посиланнями нижче. Сподіваємося, вам сподобається Elk!",
"desc_para4": "До цього, якщо ви хочете допомогти з тестуванням, надіслати відгук або зробити внесок,",
"desc_para5": "зв’яжіться з нами на GitHub",
"desc_para6": "і долучіться.",
"footer_team": "Команда Elk",
"title": "Ласкаво просимо до Elk!"
"title": "Elk у попередньому перегляді!"
},
"language": {
"search": "Пошук"
},
"list": {
"add_account": "Додати обліковий запис до списку",
"cancel_edit": "Скасувати правку",
"cancel_edit": "Скасувати редагування",
"clear_error": "Очистити помилку",
"create": "Створити",
"delete": "Видалити список",
"delete_error": "Під час видалення списку сталася помилка",
"edit": "Правити список",
"edit_error": "Під час оновлення списку сталася помилка",
"edit": "Редагувати список",
"edit_error": "Під час редагування списку сталася помилка",
"error": "Під час створення списку сталася помилка",
"error_prefix": "Помилка: ",
"error_prefix": "Помилка:",
"list_title_placeholder": "Назва списку",
"manage": "Управляти списками",
"modify_account": "Змінити належність облікового запису до списків",
"remove_account": "Вилучити обліковий запис зі списку",
"modify_account": "Редагувати списки з цим обліковим записом",
"remove_account": "Видалити обліковий запис зі списку",
"save": "Зберегти зміни"
},
"magic_keys": {
@ -231,8 +196,8 @@
"boost": "Поширити",
"command_mode": "Командний режим",
"compose": "Написати",
"favourite": "Уподобати",
"search": "Шукати",
"favourite": "Вподобати",
"search": "Пошук",
"show_new_items": "Показати нові елементи",
"title": "Дії"
},
@ -243,8 +208,8 @@
"go_to_bookmarks": "Закладки",
"go_to_conversations": "Розмови",
"go_to_explore": "Огляд",
"go_to_favourites": "Уподобане",
"go_to_federated": "Ґлобальна",
"go_to_favourites": "Вподобане",
"go_to_federated": "Глобальна",
"go_to_home": "Головна",
"go_to_lists": "Списки",
"go_to_local": "Локальна",
@ -255,108 +220,90 @@
"next_status": "Наступний допис",
"previous_status": "Попередній допис",
"shortcut_help": "Допомога з гарячими клавішами",
"title": "Навіґація"
"title": "Навігація"
}
},
"sequence_then": "потім"
},
"menu": {
"add_personal_note": "Додати нотатку до {0}",
"block_account": "Заблочити {0}",
"block_domain": "Заблочити домен {0}",
"copy_link_to_post": "Скопіювати посилання на допис",
"copy_original_link_to_post": "Скопіювати ориґінальне посилання на допис",
"block_account": "Заблокувати {0}",
"block_domain": "Заблокувати домен {0}",
"copy_link_to_post": "Скопіювати посилання на цей допис",
"copy_original_link_to_post": "Скопіювати оригінальне посилання на цей допис",
"delete": "Видалити",
"delete_and_redraft": "Видалити і переписати",
"direct_message_account": "Пряме повідомлення {0}",
"edit": "Правити",
"hide_reblogs": "Сховати поширення від {0}",
"edit": "Редагувати",
"hide_reblogs": "Приховати поширення від {0}",
"mention_account": "Згадати {0}",
"mute_account": "Іґнорити {0}",
"mute_conversation": "Іґнорити допис",
"open_in_original_site": "Відкрити на ориґінальному сайті",
"mute_account": "Приховати {0}",
"mute_conversation": "Ігнорувати цей допис",
"open_in_original_site": "Відкрити на оригінальному сайті",
"pin_on_profile": "Закріпити на профілі",
"remove_personal_note": "Вилучити нотатку з {0}",
"report_account": "Поскаржитися на {0}",
"report_account": "Повідомити про зловживання {0}",
"share_account": "Поділитися {0}",
"share_post": "Поділитися дописом",
"show_favourited_and_boosted_by": "Показати, хто уподобали і поширили",
"share_post": "Поділіться цим дописом",
"show_favourited_and_boosted_by": "Показати, хто вподобав та поширив",
"show_reblogs": "Показати поширення від {0}",
"show_untranslated": "Показати без перекладу",
"toggle_theme": {
"dark": "Перемикнути темний режим",
"light": "Перемикнути світлий режим"
"dark": "Увімкнути темний режим",
"light": "Увімкнути світлий режим"
},
"translate_post": "Перекласти допис",
"unblock_account": "Розблочити {0}",
"unblock_domain": "Розблочити домен {0}",
"unfollow_account": "Відписатися від {0}",
"unmute_account": "Розіґнорити {0}",
"unmute_conversation": "Розіґнорити допис",
"unblock_account": "Розблокувати {0}",
"unblock_domain": "Розблокувати домен {0}",
"unfollow_account": "Скасувати підписку на {0}",
"unmute_account": "Не приховувати {0}",
"unmute_conversation": "Не ігнорувати цей допис",
"unpin_on_profile": "Відкріпити з профілю"
},
"modals": {
"aria_label_close": "Закрити"
},
"nav": {
"back": "Перейти назад",
"back": "Назад",
"blocked_domains": "Заблоковані домени",
"blocked_users": "Заблоковані користувачі",
"bookmarks": "Закладки",
"built_at": "Оновлено {0}",
"compose": "Написати",
"conversations": "Розмови",
"docs": "Документація",
"explore": "Огляд",
"favourites": "Уподобане",
"federated": "Ґлобальна",
"hashtags": "Гаштаґи",
"favourites": "Вподобане",
"federated": "Глобальна стрічка",
"hashtags": "Хештеґи",
"home": "Головна",
"list": "Список",
"lists": "Списки",
"local": "Локальна",
"more_menu": "Додаткове меню",
"muted_users": "Іґноровані користувачі",
"local": "Локальна стрічка",
"muted_users": "Приховані користувачі",
"notifications": "Сповіщення",
"privacy": "Конфіденційність",
"profile": "Профіль",
"search": "Пошук",
"select_feature_flags": "Перемикнути параметри",
"select_font_size": "Розмір шрифту",
"select_language": "Відображати мову",
"select_feature_flags": "Налаштування функцій",
"select_font_size": "Вибрати розмір шрифту",
"select_language": "Вибрати мову",
"settings": "Налаштування",
"show_intro": "Показати вступ",
"toggle_theme": "Перемикнути тему",
"zen_mode": "Zen режим"
"show_intro": "Показати інтро",
"toggle_theme": "Змінити тему",
"zen_mode": "Zen-режим"
},
"notification": {
"favourited_post": "уподобали допис",
"followed_you": "підписалися на вас",
"followed_you_count": "{0} підписалися на вас",
"favourited_post": "вподобав ваший допис",
"followed_you": "підписались на вас",
"followed_you_count": "{0} людей підписалися на вас|{0} людина підписалися на вас|{0} людини підписалися на вас|{0} людей підписалися на вас",
"missing_type": "ВІДСУТНІЙ notification.type:",
"reblogged_post": "поширили допис",
"reported": "{0} поскаржилися на {1}",
"request_to_follow": "запитали підписку на вас",
"signed_up": "долучилися",
"update_status": "оновили допис"
"reblogged_post": "поширили ваш допис",
"request_to_follow": "попросили підписатися на вас",
"signed_up": "зареєструвалися",
"update_status": "оновили свій допис"
},
"placeholder": {
"content_warning": "Напишіть попередження тут",
"default_1": "Що маєте на думці?",
"reply_to_account": "Відповісти до {0}",
"replying": "Відповiдь"
},
"polls": {
"allow_multiple": "Дозволяти чисельний вибір",
"cancel": "Скасувати",
"create": "Створити опит",
"disallow_multiple": "Не дозволяти чисельний вибір",
"expiration": "Завершення опиту",
"hide_votes": "Сховати кількість голосів до завершення",
"option_placeholder": "Вибір опиту {current}/{max}",
"remove_option": "Вилучити вибір",
"settings": "Опції опиту",
"show_votes": "Завжди показувати кількість голосів"
"content_warning": "Напишіть ваше попередження тут",
"default_1": "Що у вас на думці?",
"reply_to_account": "Відповісти {0}",
"replying": "Відповідь"
},
"pwa": {
"dismiss": "Закрити",
@ -371,90 +318,43 @@
"update_available_short": "Оновити Elk",
"webmanifest": {
"canary": {
"description": "Спритний вебклієнт для Mastodon (canary)",
"description": "Спритний веб-клієнт для Mastodon (canary)",
"name": "Elk (canary)",
"short_name": "Elk (canary)"
},
"dev": {
"description": "Спритний вебклієнт для Mastodon (dev)",
"description": "Спритний веб-клієнт для Mastodon (dev)",
"name": "Elk (dev)",
"short_name": "Elk (dev)"
},
"preview": {
"description": "Спритний вебклієнт для Mastodon (preview)",
"description": "Спритний веб-клієнт для Mastodon (preview)",
"name": "Elk (preview)",
"short_name": "Elk (preview)"
},
"release": {
"description": "Спритний вебклієнт для Mastodon",
"description": "Спритний веб-клієнт для Mastodon",
"name": "Elk",
"short_name": "Elk"
}
}
},
"report": {
"additional_comments": "Додаткові коментарі",
"another_server": "Користувач, на котрого скаржите, з іншого серверу",
"anything_else": "Чи щось ще ми повинні знати?",
"block_desc": "Більше не бачитимете дописів цього користувача. Він не зможе бачити ваші дописи чи підписатися на вас. Він зможе визначити, що він заблокований.",
"dontlike": "Не люблю це",
"dontlike_desc": "Це щось не те, що хочу бачити",
"forward": "Так, переслати скаргу до {0}",
"forward_question": "Хочeте також надіслати безіменну копію скарги на той сервер?",
"further_actions": {
"limit": {
"description": "Варіанти дій щодо того, що бачите:",
"title": "Не хочете бачити це?"
},
"report": {
"description": "Поки розглядаємо, ось що можете зробити:",
"title": "Дякуємо за скаргу, ми розглянемо"
}
},
"limiting": "Обмеження {0}",
"mute_desc": "Більше не бачитимете дописів цього користувача. Він все ще може бачити ваші дописи чи підписатися на вас. Він не зможе визначити, що він іґнорований.",
"other": "Щось інше",
"other_desc": "Проблема не підпадає під інші категорії",
"reporting": "Скарга {0}",
"select_many": "Можете вибрати все що підходить:",
"select_one": "Виберіть найкращий варіант:",
"select_posts": "Чи є якісь дописи, що підпадають під скаргу?",
"select_posts_other": "Чи є якісь інші дописи, що підпадають під скаргу?",
"spam": "Спам",
"spam_desc": "Зловмисні посилання, брехливі домовленості чи повторювані відповіді",
"submit": "Подати скаргу",
"unfollow_desc": "Більше не бачитимете дописів цього користувача в вашій головній стрічці. Все ще можете бачити дописи деінде.",
"violation": "Порушує одне чи більше правил сервера",
"whats_wrong_account": "Що не так з цим обліковим записом",
"whats_wrong_post": "Що не так з цим дописом"
},
"search": {
"search_desc": "Пошук користувачів і гаштаґів",
"search_empty": "Не вдалося знайти нічого під ці пошукові терміни"
"search_desc": "Пошук користувачів та хештеґів",
"search_empty": "Не вдалося знайти нічого, що відповідає цим пошуковим термінам"
},
"settings": {
"about": {
"built_at": "Оновлено",
"label": "Про нас",
"meet_the_team": "Команда",
"sponsor_action": "Спонсорувати",
"sponsor_action_desc": "Підтримати команду розробників Elk",
"sponsors": "Спонсори",
"sponsors_body_1": "Elk існує завдяки благородному спонсоруванню і допомозі:",
"sponsors_body_2": "І всім компанійним і індивідуальним спонсоруванням Команді Elk і її членам.",
"sponsors_body_3": "Якщо ви задоволені застосунком, то можете розглянути спонсорування нам:",
"version": "Версія"
"label": "Про нас"
},
"account_settings": {
"description": "Правити налаштування облікового запису через інтерфейс Mastodon",
"description": "Відредагуйте налаштування облікового запису використовуєчи інтерфейс Mastodon",
"label": "Налаштування облікового запису"
},
"interface": {
"bottom_nav": "Нижня навіґація",
"bottom_nav_instructions": "Можете вибрати до пʼять бажаних кнопок до нижної навіґації. Мусить включати кнопку «Додаткове меню».",
"color_mode": "Кольоровий режим",
"color_mode": "Кольорова тема",
"dark_mode": "Темна",
"default": " (уставно)",
"default": " (за замовчуванням)",
"font_size": "Розмір шрифта",
"label": "Інтерфейс",
"light_mode": "Світла",
@ -462,16 +362,16 @@
"theme_color": "Колір теми"
},
"language": {
"display_language": "Відображати мову",
"display_language": "Мова інтерфейсу",
"label": "Мова",
"post_language": "Мова дописів",
"status": "Стан перекладу: {0}/{1} ({2}%)",
"status": "Статус перекладу: {0}/{1} ({2}%)",
"translations": {
"add": "Додати",
"choose_language": "Вибрати мову",
"heading": "Переклади",
"hide_specific": "Сховати окремі переклади",
"remove": "Вилучити"
"choose_language": "Виберіть мову",
"heading": "Переклад",
"hide_specific": "Приховати переклад з мов",
"remove": "Видалити"
}
},
"notifications": {
@ -481,278 +381,214 @@
},
"push_notifications": {
"alerts": {
"favourite": "Уподобання",
"favourite": "Вподобання",
"follow": "Нові підписники",
"mention": "Згадки",
"poll": "Опит",
"reblog": "Поширення",
"poll": "Опитування",
"reblog": "Поширення вашого допису",
"title": "Які сповіщення отримувати?"
},
"description": "Отримувати сповіщення навіть поза Elk.",
"instructions": "Нагадка: зберегти зміни кнопкою «@:settings.notifications.push_notifications.save_settings{'»'}!",
"description": "Отримуйте сповіщення, навіть якщо ви не використовуєте Elk.",
"instructions": "Не забудьте зберегти зміни за допомогою кнопки \"@:settings.notifications.push_notifications.save_settings{'\"'}!",
"label": "Налаштування push-сповіщень",
"policy": {
"all": "Будь-кого",
"followed": "Підписок",
"follower": "Підписників",
"none": "Жодного",
"all": "Від будь-кого",
"followed": "Людей, за якими я стежу",
"follower": "Людей, які слідкують за мною",
"none": "Ні від кого",
"title": "Від кого отримувати сповіщення?"
},
"save_settings": "Зберегти налаштування",
"subscription_error": {
"clear_error": "Очистити помилку",
"error_hint": "Можете порадитися зі списком поширених запитань, аби спробувати рішити проблему: {0}.",
"invalid_vapid_key": "Схоже, прилюдний ключ VAPID є непридатним.",
"permission_denied": "У дозволі відмовлено: треба включити сповіщення в своєму бравзері.",
"repo_link": "Репозиторій Elk на GitHub",
"request_error": "Під час запиту на підписку сталася помилка. Можете повторити спробу, якщо помилка не зникне, просимо повідомити про проблему в репозиторій Elk.",
"title": "Не вдалося підписатися на push-сповіщення",
"too_many_registrations": "Через обмеження бравзера, Elk не може користуватися сервісом push-сповіщень для чисельних облікових записів на різних серверах. Ви повинні відписатися від push-сповіщення від інших облікових записів і спробувати знову.",
"vapid_not_supported": "Ваш бравзер підтримує push-сповіщення, але, схоже, не впровадив VAPID протокол."
"permission_denied": "У дозволі відмовлено: увімкніть сповіщення у своєму браузері.",
"request_error": "Під час запиту на підписку сталася помилка. Повторіть спробу, а якщо помилка не зникне, повідомте про проблему в репозиторій Elk.",
"title": "Не вдалося підписатися на push-сповіщення"
},
"title": "Налаштування push-сповіщення",
"undo_settings": "Скасувати зміни",
"unsubscribe": "Вимкнути push-сповіщення",
"unsupported": "Ваш бравзер не підтримує push-сповіщення.",
"unsupported": "Ваш браузер не підтримує push-сповіщення.",
"warning": {
"enable_close": "Закрити",
"enable_description": "Push-сповіщення надають змогу отримувати сповіщення при невідкритому Elk. Після ввімкнення їх можете указати які види взаємодій створюють вони за кнопкою «@:settings.notifications.show_btn{'»'} .",
"enable_description_desktop": "Push-сповіщення надають змогу отримувати сповіщення при невідкритому Elk. Після ввімкнення їх можете указати які види взаємодій створюють вони в «Налаштування > Сповіщення > Налаштування push-сповіщення».",
"enable_description_mobile": "Налаштування також доступне за навіґаційним меню «Налаштування > Сповіщення > Налаштування push-сповіщення».",
"enable_description_settings": "Push-сповіщення надають змогу отримувати сповіщення при невідкритому Elk. Після ввімкнення їх тут зможете указати які види взаємодій створюють вони.",
"enable_desktop": "Ввімкнути push-сповіщення",
"enable_description": "Щоб отримувати сповіщення, коли Elk не відкрито, увімкніть push-сповіщення. Ви можете контролювати, які саме типи сповіщень генерують push-повідомлення, за допомогою кнопки \"@:settings.notifications.show_btn{'\"'} після ввімкнення.",
"enable_desktop": "Увімкнути push-повідомлення",
"enable_title": "Ніколи нічого не пропускайте",
"re_auth": "Здається, ваш сервер не підтримує push-сповіщення. Спробуйте вийти і ввійти знову, якщо це повідомлення однаково з’являється, варто звернутися до адміністратора сервера."
"re_auth": "Здається, ваш сервер не підтримує push-повідомлення. Спробуйте вийти та увійти знову, якщо це повідомлення все одно з’являється, зверніться до адміністратора свого сервера."
}
},
"show_btn": "Перейти до налаштувань сповіщень",
"under_construction": "Під розробкою"
"show_btn": "Перейти до налаштувань сповіщень"
},
"notifications_settings": "Сповіщення",
"preferences": {
"embedded_media": "Вбудований медіаплеєр",
"embedded_media_description": "Відображати вбудований медіаплеєр замість картки в дописі з посиланням на медіа.",
"enable_autoplay": "Ввімкнути автовідтворення",
"enable_data_saving": "Ввімкнути заощадження трафіку",
"enable_data_saving_description": "Заощаджити трафік через запобігання автозавантаження вкладень.",
"embedded_media_description": "Відображати вбудований медіаплеєр замість картки, коли допис містить посилання на медіа.",
"enable_autoplay": "Увімкнути автовідтворення",
"enable_data_saving": "Увімкнути економію трафіку",
"enable_data_saving_description": "Економте трафік, відключивши автоматичне завантаження вкладень.",
"github_cards": "Картки GitHub",
"github_cards_description": "Посилання в дописі на GitHub створює доступну HTML картку з соціальним метаґрафом замість соціального зображення.",
"grayscale_mode": "Сіротонний режим",
"hide_account_hover_card": "Сховати картку при наведенні на обліковий запис",
"hide_alt_indi_on_posts": "Сховати ALT-покажчик в дописах",
"hide_boost_count": "Сховати кількість поширень",
"hide_favorite_count": "Сховати кількість уподобань",
"hide_follower_count": "Сховати кількість підписок/підписників",
"hide_gif_indi_on_posts": "Сховати GIF-покажчик в дописах",
"hide_news": "Сховати новини",
"hide_reply_count": "Сховати кількість відповідей",
"hide_tag_hover_card": "Сховати картку при наведенні на гаштаґ",
"hide_translation": "Сховати переклад",
"hide_username_emojis": "Сховати емоджі в назвах користувачів",
"hide_username_emojis_description": "Сховати емоджі в назвах користувачів в стрічках дописів. \nЕмоджі все ще відображатимуться на сторінках профілів.",
"grayscale_mode": "Режим відтінків сірого",
"hide_account_hover_card": "Не відображати картку при наведенні на обліковий запис",
"hide_alt_indi_on_posts": "Приховати індикатор альтернативного тексту у дописах",
"hide_boost_count": "Приховати кількість поширень",
"hide_favorite_count": "Приховати кількість вподобань",
"hide_follower_count": "Приховати кількість підписок/підписників",
"hide_news": "Приховати новини",
"hide_reply_count": "Приховати кількість відповідей",
"hide_tag_hover_card": "Не відображати картку при наведенні на хештеґ",
"hide_translation": "Приховати переклад",
"hide_username_emojis": "Приховати емодзі в іменах користувачів",
"hide_username_emojis_description": "Приховати емодзі в іменах користувачів у стрічках дописів. \nЕмодзі все одно відображатимуться на сторінках профілів.",
"label": "Налаштування",
"optimize_for_low_performance_device": "Оптимізувати для низькопродуктивних пристроїв",
"title": "Дослідні налаштування",
"use_star_favorite_icon": "Використовувати іконку «зірка» для уподобань",
"title": "Експериментальні налаштування",
"use_star_favorite_icon": "Використовувати піктограму \"зірка\" для вподобань",
"user_picker": "Перемикач облікових записів",
"user_picker_description": "Відображати аватари ваших облікових записів в нижньолівому куті для швидкого перемикатися між ними.",
"user_picker_description": "Відображати аватари ваших облікових записів у нижньому лівому куті, щоб ви могли швидко перемикатися між ними.",
"virtual_scroll": "Віртуальний список",
"virtual_scroll_description": "Використовувати віртуальний список в стрічках дописів. Це дозволяє відображати більшу кількість елементів без втрати продуктивності.",
"wellbeing": "Благополуччя",
"zen_mode": "Zen режим",
"zen_mode_description": "Сховати бічні панелі, якщо на них не наведено курсор миші. \nТакож приховує деякі елементи в стрічці дописів."
"virtual_scroll_description": "Використовувати віртуальний список у стрічках дописів. Це дозволяє відображати більшу кількість елементів без втрати продуктивності.",
"zen_mode": "Дзен режим",
"zen_mode_description": "Приховати бокові панелі, якщо на них не наведено курсор миші. \nТакож приховує деякі елементи у стрічці дописів."
},
"profile": {
"appearance": {
"bio": "Про вас",
"description": "Правити аватар, назву, профіль тощо.",
"display_name": "Відображати назву",
"bio": "Про Вас",
"description": "Редагувати аватар, ім'я, профіль, тощо.",
"display_name": "Ім'я",
"label": "Вигляд",
"profile_metadata": "Метадані профілю",
"profile_metadata_desc": "Можете відобразити до {0} елементів як таблицю в профілі",
"profile_metadata_label": "Ярлик",
"profile_metadata_value": "Вміст",
"title": "Правити профіль"
"profile_metadata_desc": "У вашому профілі можна відображати до 4 елементів у вигляді таблиці",
"title": "Редагувати профіль"
},
"featured_tags": {
"description": "Ваші прилюдні дописи можуть бути проглянуті за цими гаштаґами.",
"label": "Рекомендовані гаштаґи",
"under_construction": "Під розробкою"
"description": "Користувачі можуть фільтрувати ваші загальнодоступні дописи за цими хештеґами.",
"label": "Рекомендовані хештеґи"
},
"label": "Профіль"
},
"select_a_settings": "Вибрати налаштування",
"select_a_settings": "Виберіть налаштування",
"users": {
"export": "Винести токени користувачів",
"import": "Внести токени користувачів",
"export": "Експортувати токени користувачів",
"import": "Імпортувати токени користувачів",
"label": "Користувачі"
}
},
"share_target": {
"description": "Можна підлаштувати Elk, тож можете ділитися контентом з інших застосунків лише встановивши Elk на вашому пристрої чи компʼютері і ввійшовши.",
"hint": "Щоби поширити контент з Elk, Elk мусть бути встановленим, а ви мусите бути ввійденим.",
"title": "Поділитися з Elk"
},
"state": {
"attachments_exceed_server_limit": "Кількість вкладених файлів на допис перевищено.",
"attachments_limit_audio_error": "Перевищено маскимальний розмір авдіо: {0}",
"attachments_limit_error": "Перевищено максимальну кількість вкладень: {0}",
"attachments_limit_image_error": "Перевищено маскимальний розмір зображення: {0}",
"attachments_limit_unknown_error": "Перевищено маскимальний розмір файла: {0}",
"attachments_limit_video_error": "Перевищено маскимальний розмір відео: {0}",
"edited": "(Виправлено)",
"editing": "Виправлення",
"attachments_exceed_server_limit": "Кількість вкладених файлів перевищила ліміт на допис.",
"attachments_limit_error": "Перевищено максимальну кількість вкладень",
"edited": "(Відредаговано)",
"editing": "Редагування",
"loading": "Завантаження...",
"publish_failed": "Помилка оприлюднення",
"publishing": "Оприлюднення",
"save_failed": "Помилка збереження",
"upload_failed": "Помилка завантаження",
"uploading": "Завантаження..."
},
"status": {
"account": {
"suspended_message": "Обліковий запис цього допису заморожений.",
"suspended_show": "Все одно показати допис?"
},
"boosted_by": "Поширено від",
"edited": "Виправлено {0}",
"embedded_warning": "Програвання цього може розкрити ваш IP-адрес іншим.",
"favourited_by": "Уподобано від",
"filter_hidden_phrase": "Відфільтровано від",
"edited": "Редаговано {0}",
"filter_hidden_phrase": "Відфільтровано",
"filter_show_anyway": "Показати все одно",
"gif": "GIF",
"img_alt": {
"ALT": "ALT",
"desc": "Опис",
"dismiss": "Закрити",
"read": "Читати {0} опис"
"desc": "Опис зображення",
"dismiss": "Закрити"
},
"poll": {
"count": "{0} голосів|{0} голос|{0} голоси|{0} голосів",
"ends": "завершується {0}",
"finished": "зевершилось {0}"
},
"replying_to": "Відповідь до {0}",
"show_full_thread": "Показати ряд дописів",
"someone": "когось",
"spoiler_media_hidden": "Медіа приховано",
"replying_to": "Відповідає {0}",
"show_full_thread": "Показати потік дописів",
"someone": "комусь",
"spoiler_show_less": "Показувати менше",
"spoiler_show_more": "Показати більше",
"thread": "Ряд дописів",
"try_original_site": "Спробувати ориґінальний сайт"
"try_original_site": "Спробуйте оригінальний сайт"
},
"status_history": {
"created": "створено {0}",
"edited": "виправлено {0}"
"edited": "редаговано {0}"
},
"tab": {
"accounts": "Облікові записи",
"for_you": "Для вас",
"hashtags": "Гаштаґи",
"list": "Список",
"hashtags": "Хештеґи",
"media": "Медіа",
"news": "Новини",
"notifications_admin": {
"report": "Скагра",
"sign_up": "Долучення"
},
"notifications_all": "Всі",
"notifications_favourite": "Уподобані",
"notifications_follow": "Підписки",
"notifications_follow_request": "Запит підписки",
"notifications_all": "Усі",
"notifications_mention": "Згадки",
"notifications_more_tooltip": "Фільтрувати сповіщення за типом",
"notifications_poll": "Опити",
"notifications_reblog": "Поширення",
"notifications_status": "Статуси",
"notifications_update": "Оновлення",
"posts": "Дописи",
"posts_with_replies": "Дописи і відповіді"
"posts_with_replies": "Дописи та відповіді"
},
"tag": {
"follow": "Підписатися",
"follow_label": "Підписатися на гаштаґ {0}",
"unfollow": "Відписатися",
"unfollow_label": "Відписатися від гаштаґа {0}"
"follow": "Стежити",
"follow_label": "Стежити за хештеґом {0}",
"unfollow": "Не стежити",
"unfollow_label": "Не стежити за хештеґом {0}"
},
"time_ago_options": {
"day_future": "через {n} днів|через {n} день|через {n} дні|через {n} днів",
"day_past": "{n} днів тому|{n} день тому|{n} дні тому|{n} днів тому",
"day_past": "{n} днів томо|{n} день тому|{n} дні тому|{n} днів тому",
"hour_future": "через {n} годин|через {n} годину|через {n} години|через {n} годин",
"hour_past": "{n} годин тому|{n} годину тому|{n} години тому|{n} годин тому",
"just_now": "щойно",
"just_now": "тільки що",
"minute_future": "через {n} хвилин|через {n} хвилину|через {n} хвилини|через {n} хвилин",
"minute_past": "{n} хвилин тому|{n} хвилину тому|{n} хвилини тому|{n} хвилин тому",
"month_future": "через {n} місяців|через {n} місяць|через {n} місяці|через {n} місяців",
"month_past": "{n} місяців тому|{n} місяць тому|{n} місяці тому|{n} місяців тому",
"second_future": "щойно|через {n} секунду|через {n} секунди|через {n} секунд",
"second_past": "щойно|{n} секунду тому|{n} секунди тому|{n} секунд тому",
"short_day_future": "через {n} д",
"short_day_past": "{n} д",
"short_hour_future": "через {n} г",
"short_hour_past": "{n} г",
"short_minute_future": "через {n} хв",
"short_minute_past": "{n} хв",
"short_month_future": "через {n} м",
"short_month_past": "{n} м",
"short_second_future": "через {n} с",
"short_second_past": "{n} с",
"short_week_future": "через {n} т",
"short_week_past": "{n} т",
"short_year_future": "через {n} р",
"short_year_past": "{n} р",
"second_future": "тільки що|через {n} секунду|через {n} секунди|через {n} секунд",
"second_past": "тільки що|{n} секунду тому|{n} секунди тому|{n} секунд тому",
"short_day_future": "через {n}дн",
"short_day_past": "{n}дн",
"short_hour_future": "через {n}год",
"short_hour_past": "{n}год",
"short_minute_future": "через {n}хв",
"short_minute_past": "{n}хв",
"short_month_future": "через {n}міс",
"short_month_past": "{n}міс",
"short_second_future": "через {n}сек",
"short_second_past": "{n}сек",
"short_week_future": "через {n}тиж",
"short_week_past": "{n}тиж",
"short_year_future": "через {n}р",
"short_year_past": "{n}р",
"week_future": "через {n} тижнів|через {n} тиждень|через {n} тижні|через {n} тижнів",
"week_past": "{n} тижнів тому|{n} тиждень тому|{n} тижні тому|{n} тижнів тому",
"year_future": "через {n} років|через {n} рік|через {n} роки|через {n} років",
"year_past": "{n} років тому|{n} рік тому|{n} роки тому|{n} років тому"
},
"timeline": {
"show_new_items": "Показати {v} нових дописів|Показати {v} новий допис|Показати {v} нових дописів|Показати {v} нових дописів",
"show_new_items": "Показати {v} нових дописів|Показати {v} новий допис|Показати {v} нових дописи|Показати {v} нових дописів",
"view_older_posts": "Старіші дописи з інших серверів можуть не відображатися."
},
"title": {
"federated_timeline": "Ґлобальна стрічка",
"federated_timeline": "Глобальна стрічка",
"local_timeline": "Локальна стрічка"
},
"tooltip": {
"add_content_warning": "Додати попередження про вміст",
"add_emojis": "Додати емоджі",
"add_media": "Додати зображення, відео або авдіо",
"add_publishable_content": "Варто додати вміст для оприлюднення",
"add_thread_item": "Додати допис до ряду",
"add_media": "Додати зображення, відео або аудіо",
"change_content_visibility": "Змінити видимість вмісту",
"change_language": "Змінити мову",
"emoji": "Емоджі",
"explore_links_intro": "Прямо зараз на цьому і інших серверах децентралізованої мережі обговорюють ці новини.",
"explore_posts_intro": "Прямо зараз на цьому і інших серверах децентралізованої мережі розходяться ці дописи.",
"explore_tags_intro": "Прямо зараз на цьому і інших серверах децентралізованої мережі розходяться ці гаштаґи",
"open_editor_tools": "Інструменти редактора",
"pick_an_icon": "Підібрати іконку",
"publish_failed": "Закрити повідомлення помилок нагорі редактора для переоприлюднення дописів",
"remove_thread_item": "Вилучити допис з ряду",
"start_thread": "Запустити ряд дописів",
"toggle_bold": "Жирний",
"toggle_code_block": "Блок коду",
"toggle_italic": "Курсив"
"emoji": "Емодзі",
"explore_links_intro": "Ці новини розповідають історії про людей на цих та інших серверах децентралізованої мережі прямо зараз.",
"explore_posts_intro": "Ці дописи з цього та інших серверів децентралізованої мережі зараз набирають популярності на цьому сервері.",
"explore_tags_intro": "Ці хештеґи зараз набирають популярності серед людей на цьому та інших серверах децентралізованої мережі.",
"toggle_code_block": "Блок коду"
},
"user": {
"add_existing": "Додати наявний обліковий запис",
"add_existing": "Додати аккаунт",
"server_address_label": "Адреса серверу Mastodon",
"sign_in_desc": "Ввійти, аби підписатися на профілі або гаштаґи; уподобувати, відповідати на і ділитися з кимось дописи, або взаємодіяти з вашого облікового запису на іншому сервері.",
"sign_in_notice_title": "Перегляд прилюдних даних {0}",
"sign_in_desc": "Увійдіть, щоб стежити за профілями або хештеґами, додавати до обраного, ділитися дописами та відповідати на них, або взаємодіяти з вашого аккаунту на іншому сервері.",
"sign_in_notice_title": "Перегляд публічних даних {0}",
"sign_out_account": "Вийти з {0}",
"single_instance_sign_in_desc": "Ввійти, аби підписатися на профілі або гаштаґи; уподобувати, відповідати на і ділитися з кимось дописи.",
"tip_no_account": "Якщо не маєте облікового Mastodon запису, {0}.",
"tip_register_account": "то можете підібрати сервер і долучитися"
"single_instance_sign_in_desc": "Увійдіть, щоб стежити за профілями чи хештеґами, додавати до обраного, ділитися дописами та відповідати на них.",
"tip_no_account": "Якщо у вас ще немає аккаунту Mastodon, {0}.",
"tip_register_account": "оберіть сервер і зареєструйтесь"
},
"visibility": {
"direct": "Прямий",
"direct_desc": "Видимий лише згаданим користувачам",
"private": "Лише підписникам",
"private_desc": "Видимий лише підписникам",
"public": рилюдний",
"public_desc": "Видимий всім",
"direct": "Лише згадані користувачі",
"direct_desc": "Показати лише згаданим користувачам",
"private": "Тільки для підписників",
"private_desc": "Показати лише підписникам",
"public": ублічно",
"public_desc": "Видимий для всіх",
"unlisted": "Прихований",
"unlisted_desc": "Видимий всім, але не в прилюдних стрічках"
"unlisted_desc": "Видимий для всіх, але не через можливості виявлення"
}
}

View file

@ -28,7 +28,7 @@
"go_to_profile": "Xem hồ sơ",
"joined": "Đã tham gia",
"lock": "KHÓA",
"moved_title": "đã chuyển sang địa chỉ mới:",
"moved_title": "cho hay địa chỉ mới của họ bây giờ là:",
"muted_users": "Người đã ẩn",
"muting": "Đã ẩn",
"mutuals": "Theo dõi nhau",
@ -73,7 +73,6 @@
"favourited": "Đã thích",
"more": "Xem thêm",
"next": "Kế tiếp",
"open_image_preview_dialog": "Mở hộp thoại xem trước hình ảnh",
"prev": "Trước đó",
"publish": "Đăng",
"publish_thread": "Đăng chuỗi tút",
@ -187,7 +186,7 @@
"account_not_found": "Không tìm thấy {0}",
"explore_list_empty": "Chưa có xu hướng. Hãy quay lại sau!",
"file_size_cannot_exceed_n_mb": "Dung lượng file tối đa {0}MB",
"sign_in_error": "Không thể kết nối đến máy chủ.",
"sign_in_error": "Không thể kết nối tới máy chủ.",
"status_not_found": "Không tìm thấy tút",
"unsupported_file_format": "Định dạng file không được hỗ trợ"
},
@ -247,7 +246,7 @@
"go_to_bookmarks": "Tút đã lưu",
"go_to_conversations": "Nhắn riêng",
"go_to_explore": "Khám phá",
"go_to_favourites": "Đã thích",
"go_to_favourites": "Lượt thích",
"go_to_federated": "Liên hợp",
"go_to_home": "Trang chủ",
"go_to_lists": "Danh sách",
@ -306,13 +305,13 @@
"back": "Quay về",
"blocked_domains": "Máy chủ đã chặn",
"blocked_users": "Người đã chặn",
"bookmarks": "Đã lưu",
"bookmarks": "Tút đã lưu",
"built_at": "Bản dựng {0}",
"compose": "Soạn tút",
"conversations": "Nhắn riêng",
"docs": "Tài liệu",
"explore": "Khám phá",
"favourites": "Đã thích",
"favourites": "Lượt thích",
"federated": "Liên hợp",
"hashtags": "Hashtag",
"home": "Trang chủ",
@ -346,8 +345,8 @@
},
"placeholder": {
"content_warning": "Viết cảnh báo của bạn ở đây",
"default_1": "Bạn đang nghĩ gì đó?",
"reply_to_account": "Trả lời đến {0}",
"default_1": "Bạn đang nghĩ gì vậy?",
"reply_to_account": "Trả lời {0}",
"replying": "Trả lời"
},
"polls": {
@ -356,7 +355,7 @@
"create": "Tạo bình chọn",
"disallow_multiple": "Chỉ chọn một lựa chọn",
"expiration": "Hết hạn",
"hide_votes": "Ẩn số lượt bình chọn đến khi hết hạn",
"hide_votes": "Ẩn số lượt bình chọn cho tới khi hết hạn",
"option_placeholder": "Lựa chọn {current}/{max}",
"remove_option": "Xóa lựa chọn",
"settings": "Tùy chọn",
@ -403,8 +402,8 @@
"block_desc": "Bạn sẽ không còn thấy tút của người này. Họ sẽ không thể thấy tút của bạn hoặc theo dõi bạn. Họ biết là bạn đã chặn họ.",
"dontlike": "Tôi không thích nó",
"dontlike_desc": "Đó không phải là thứ gì mà bạn muốn thấy",
"forward": "Gửi luôn báo cáo đến {0}",
"forward_question": "Bạn có chắc muốn gửi luôn báo cáo đến máy chủ của người này?",
"forward": "Gửi luôn báo cáo tới {0}",
"forward_question": "Bạn có chắc muốn gửi luôn báo cáo tới máy chủ của người này?",
"further_actions": {
"limit": {
"description": "Đây là cách kiểm soát những thứ mà bạn thấy:",
@ -442,7 +441,7 @@
"label": "Giới thiệu",
"meet_the_team": "Đội ngũ",
"sponsor_action": "Tài trợ",
"sponsor_action_desc": "Ủng hộ đội ngũ phát triển Elk",
"sponsor_action_desc": "Hỗ trợ đội ngũ phát triển Elk",
"sponsors": "Nhà tài trợ",
"sponsors_body_1": "Elk được thực hiện nhờ sự tài trợ và giúp đỡ hào phóng của:",
"sponsors_body_2": "Và tất cả các công ty, cá nhân tài trợ cho đội ngũ Elk.",
@ -494,7 +493,7 @@
"title": "Bạn muốn nhận những kiểu thông báo nào?"
},
"description": "Nhận thông báo kể cả khi bạn không sử dụng Elk.",
"instructions": "Nhớ @:settings.notifications.push_notifications.save_settings sau khi chọn xong!",
"instructions": "Nhớ lưu các thay đổi của bạn bằng cách nhấn @:settings.notifications.push_notifications.save_settings !",
"label": "Cài đặt thông báo đẩy",
"policy": {
"all": "Từ bất kỳ ai",
@ -551,7 +550,7 @@
"hide_follower_count": "Ẩn số lượt người theo dõi/đang theo dõi",
"hide_gif_indi_on_posts": "Ẩn biểu tượng GIF trên tút",
"hide_news": "Ẩn tin tức",
"hide_reply_count": "Ẩn số lượng trả lời",
"hide_reply_count": "Ẩn số lượt trả lời",
"hide_tag_hover_card": "Ẩn xem trước hashtag",
"hide_translation": "Ẩn chức năng dịch",
"hide_username_emojis": "Ẩn emoji trong tên người dùng",
@ -635,8 +634,8 @@
},
"poll": {
"count": "{0} bình chọn|{0} bình chọn|{0} bình chọn",
"ends": "đóng {0}",
"finished": "kết thúc {0}"
"ends": "kết thúc {0}",
"finished": "hết hạn {0}"
},
"replying_to": "Trả lời {0}",
"show_full_thread": "Chuỗi tút liên quan",
@ -673,7 +672,7 @@
"notifications_status": "Tút mới",
"notifications_update": "Sửa tút",
"posts": "Tút",
"posts_with_replies": "Trả lời"
"posts_with_replies": "Lượt trả lời"
},
"tag": {
"follow": "Theo dõi",
@ -736,7 +735,7 @@
"pick_an_icon": "Chọn biểu tượng",
"publish_failed": "Đóng các thông báo không thành công để đăng lại tút",
"remove_thread_item": "Xóa tút khỏi chuỗi",
"start_thread": "Tạo chuỗi tút",
"start_thread": "Bắt đầu chuỗi tút",
"toggle_bold": "In đậm",
"toggle_code_block": "Đoạn mã",
"toggle_italic": "In nghiêng"

View file

@ -27,7 +27,6 @@
"follows_you": "已关注你",
"go_to_profile": "转到个人资料",
"joined": "已加入",
"lock": "非公开",
"moved_title": "的新账号是:",
"muted_users": "已屏蔽的用户",
"muting": "已屏蔽",
@ -58,9 +57,7 @@
"boost": "转发",
"boost_count": "{0}",
"boosted": "已转发",
"clear": "清除",
"clear_publish_failed": "清除发布失败信息",
"clear_save_failed": "清除保存失败信息",
"clear_upload_failed": "清除上传失败信息",
"close": "关闭",
"compose": "撰写",
@ -73,10 +70,8 @@
"favourited": "已喜欢",
"more": "更多",
"next": "下一个",
"open_image_preview_dialog": "打开图像预览框",
"prev": "上一个",
"publish": "发布",
"publish_thread": "发布串",
"reply": "回复",
"reply_count": "{0}",
"reset": "重置",
@ -124,14 +119,12 @@
"block_account": {
"cancel": "取消",
"confirm": "拉黑",
"description": "你确定拉黑 {0} 吗?",
"title": "拉黑用户"
"description": "你确定拉黑 {0} 吗?"
},
"block_domain": {
"cancel": "取消",
"confirm": "拉黑",
"description": "你确定拉黑域名 {0} 吗?",
"title": "拉黑域名"
"description": "你确定拉黑域名 {0} 吗?"
},
"common": {
"cancel": "否",
@ -140,37 +133,27 @@
"delete_list": {
"cancel": "取消",
"confirm": "删除",
"description": "你确定要删除 \"{0}\" 列表吗?",
"title": "删除列表"
"description": "你确定要删除 \"{0}\" 列表吗?"
},
"delete_posts": {
"cancel": "取消",
"confirm": "删除",
"description": "你确定要删除这条帖文吗?",
"title": "删除帖文"
"description": "你确定要删除这条帖文吗?"
},
"mute_account": {
"cancel": "取消",
"confirm": "屏蔽",
"days": "{0} 天",
"description": "你确定屏蔽{0} 吗?",
"hours": "{0} 小时",
"minute": "{0} 分钟",
"notifications": "屏蔽通知",
"specify_duration": "指定时长",
"title": "屏蔽用户"
"description": "你确定屏蔽 {0} 吗?"
},
"show_reblogs": {
"cancel": "取消",
"confirm": "显示",
"description": "你确定要显示来自 {0} 的转发吗?",
"title": "显示转发"
"description": "你确定要显示来自 {0} 的转发吗?"
},
"unfollow": {
"cancel": "取消",
"confirm": "取消关注",
"description": "你确定要取消关注吗?",
"title": "取消关注"
"description": "你确定要取消关注吗?"
}
},
"conversation": {
@ -223,7 +206,6 @@
"error": "创建列表时出现了一个错误",
"error_prefix": "错误:",
"list_title_placeholder": "列表标题",
"manage": "管理列表",
"modify_account": "修改列表中的用户",
"remove_account": "移除列表中的用户",
"save": "保存更改"
@ -236,26 +218,14 @@
"command_mode": "命令面板",
"compose": "撰写",
"favourite": "喜欢",
"search": "搜索",
"show_new_items": "显示新的帖子",
"title": "操作"
},
"media": {
"title": "媒体"
},
"navigation": {
"go_to_bookmarks": "书签",
"go_to_conversations": "会话",
"go_to_explore": "探索",
"go_to_favourites": "收藏",
"go_to_federated": "联合",
"go_to_home": "首页",
"go_to_lists": "列表",
"go_to_local": "本地",
"go_to_notifications": "通知",
"go_to_profile": "个人资料",
"go_to_search": "搜索",
"go_to_settings": "设置",
"next_status": "下一条帖文",
"previous_status": "上一条帖文",
"shortcut_help": "快捷键帮助",
@ -310,16 +280,13 @@
"built_at": "构建于 {0}",
"compose": "撰写",
"conversations": "私信",
"docs": "文档",
"explore": "探索",
"favourites": "喜欢",
"federated": "跨站",
"hashtags": "标签",
"home": "主页",
"list": "列表",
"lists": "列表",
"local": "本地",
"more_menu": "更多",
"muted_users": "已屏蔽的用户",
"notifications": "通知",
"privacy": "隐私协议",
@ -454,8 +421,6 @@
"label": "账号设置"
},
"interface": {
"bottom_nav": "底部导航",
"bottom_nav_instructions": "选择您最喜欢的导航按钮(最多五个)作为底部导航。\n必须包含“更多菜单”按钮。",
"color_mode": "颜色",
"dark_mode": "深色",
"default": "(默认)",
@ -467,9 +432,7 @@
},
"language": {
"display_language": "首选语言",
"how_to_contribute": "如何贡献?",
"label": "语言",
"post_language": "发布语言",
"status": "翻译进度: {0}/{1} ({2}%)",
"translations": {
"add": "添加",
@ -535,8 +498,6 @@
},
"notifications_settings": "通知",
"preferences": {
"embedded_media": "嵌入式媒体播放器",
"embedded_media_description": "扩展共享媒体流链接时显示嵌入式播放器而不是普通预览卡。",
"enable_autoplay": "开启自动播放",
"enable_data_saving": "启用数据流量节省",
"enable_data_saving_description": "通过阻止附件自动加载来节省数据流量。",
@ -549,15 +510,12 @@
"hide_boost_count": "隐藏转发数",
"hide_favorite_count": "隐藏收藏数",
"hide_follower_count": "隐藏关注者数",
"hide_gif_indi_on_posts": "隐藏帖子上的 gif 指示器",
"hide_news": "隐藏新闻页",
"hide_reply_count": "隐藏回复数",
"hide_tag_hover_card": "隐藏标签悬停卡",
"hide_translation": "隐藏翻译",
"hide_username_emojis": "隐藏用户昵称的表情符号",
"hide_username_emojis_description": "隐藏时间线上用户的表情符号。表情符号仍然会在用户个人资料中展示。",
"label": "首选项",
"optimize_for_low_performance_device": "针对低性能设备进行优化",
"title": "实验功能",
"use_star_favorite_icon": "使用星形喜欢图标",
"user_picker": "用户选择器",
@ -601,17 +559,12 @@
},
"state": {
"attachments_exceed_server_limit": "附件的数量超出了最大限制",
"attachments_limit_audio_error": "超出最大音频尺寸:{0}",
"attachments_limit_error": "超出每篇帖文的最大限制",
"attachments_limit_image_error": "超出最大图像尺寸:{0}",
"attachments_limit_unknown_error": "超出最大文件尺寸:{0}",
"attachments_limit_video_error": "超出最大视频尺寸:{0}",
"edited": "(已编辑)",
"editing": "编辑中",
"loading": "加载中...",
"publish_failed": "发布失败",
"publishing": "发布中...",
"save_failed": "保存失败",
"upload_failed": "上传失败",
"uploading": "上传中..."
},
@ -622,11 +575,9 @@
},
"boosted_by": "被转发",
"edited": "在 {0} 编辑了",
"embedded_warning": "播放此内容可能会将你的 IP 地址泄露给他人。",
"favourited_by": "被喜欢",
"filter_hidden_phrase": "筛选依据",
"filter_show_anyway": "仍然展示",
"gif": "GIF",
"img_alt": {
"ALT": "ALT",
"desc": "描述",
@ -658,20 +609,8 @@
"list": "列表",
"media": "媒体",
"news": "最新消息",
"notifications_admin": {
"report": "举报",
"sign_up": "注册"
},
"notifications_all": "全部",
"notifications_favourite": "喜欢",
"notifications_follow": "关注",
"notifications_follow_request": "请求关注",
"notifications_mention": "提及",
"notifications_more_tooltip": "按类型筛选通知",
"notifications_poll": "投票",
"notifications_reblog": "转发",
"notifications_status": "状态",
"notifications_update": "更新",
"posts": "帖文",
"posts_with_replies": "帖文与留言"
},
@ -725,7 +664,6 @@
"add_emojis": "添加表情符号",
"add_media": "添加图片、视频或者音频文件",
"add_publishable_content": "添加要发布的内容",
"add_thread_item": "添加到帖文串",
"change_content_visibility": "修改内容是否可见",
"change_language": "更改语言",
"emoji": "表情符号",
@ -735,8 +673,6 @@
"open_editor_tools": "编辑器工具",
"pick_an_icon": "选择一个图标",
"publish_failed": "关闭编辑器上方的错误信息以重新发布帖文。",
"remove_thread_item": "从帖文串中移除",
"start_thread": "开始帖文串",
"toggle_bold": "切换加粗",
"toggle_code_block": "切换代码块",
"toggle_italic": "切换斜体"

View file

@ -1,4 +1,4 @@
import { lstat } from 'node:fs'
import fs from 'fs-extra'
import { createResolver, defineNuxtModule } from '@nuxt/kit'
import { currentLocales } from '../config/i18n'
@ -53,7 +53,7 @@ export default defineNuxtModule({
async function isFile(path: string) {
return new Promise<boolean>((resolve) => {
lstat(path, (err, stats) => {
fs.lstat(path, (err, stats) => {
if (err)
resolve(false)
else

View file

@ -14,7 +14,7 @@ export default defineNuxtModule({
return
const s = new MagicString(code)
s.replace(/<!--.*?-->/gs, '')
s.replace(/<!--(?:.*?)-->/sg, '')
if (s.hasChanged()) {
return {

View file

@ -12,7 +12,7 @@ export function configurePWAOptions(options: Partial<VitePWAOptions>, nuxt: Nuxt
import('workbox-build').BasePartial
& import('workbox-build').GlobPartial
& import('workbox-build').RequiredGlobDirectoryPartial
>
>
if (options.strategies === 'injectManifest') {
options.injectManifest = options.injectManifest ?? {}
@ -76,7 +76,7 @@ function createManifestTransform(base: string, appManifestFolder?: string): impo
})
if (appManifestFolder) {
const regExp = /\/?[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\.json$/i
const regExp = /(\/)?[0-9a-f]{8}\b-[0-9a-f]{4}\b-[0-9a-f]{4}\b-[0-9a-f]{4}\b-[0-9a-f]{12}\.json$/i
// we need to remove the revision from the sw prechaing manifest, UUID is enough:
// we don't use dontCacheBustURLsMatching, single regex
entries.filter(e => e && e.url.startsWith(appManifestFolder) && regExp.test(e.url)).forEach((e) => {

View file

@ -1,5 +1,5 @@
import { Buffer } from 'node:buffer'
import { readFile } from 'node:fs/promises'
import { readFile } from 'fs-extra'
import { createResolver } from '@nuxt/kit'
import type { ManifestOptions } from 'vite-plugin-pwa'
import { getEnv } from '../../config/env'

View file

@ -202,11 +202,6 @@ export default defineNuxtModule<VitePWANuxtOptions>({
'Cache-Control': 'public, max-age=0, must-revalidate',
},
}
nitroConfig.routeRules!['/elk-sw.js'] = {
headers: {
'Cache-Control': 'public, max-age=0, must-revalidate',
},
}
for (const locale of pwaLocales) {
nitroConfig.routeRules![`/manifest-${locale.code}.webmanifest`] = {
headers: {

View file

@ -19,7 +19,7 @@ declare module '#app' {
}
}
declare module 'vue' {
declare module '@vue/runtime-core' {
interface ComponentCustomProperties {
$pwa?: UnwrapNestedRefs<PwaInjection>
}

View file

@ -8,12 +8,11 @@ import { currentLocales } from './config/i18n'
const { resolve } = createResolver(import.meta.url)
export default defineNuxtConfig({
compatibilityDate: '2024-09-11',
typescript: {
tsConfig: {
exclude: ['../service-worker'],
vueCompilerOptions: {
target: 3.5,
target: 3.4,
},
},
},
@ -262,7 +261,7 @@ export default defineNuxtConfig({
{ rel: 'apple-touch-icon', href: '/apple-touch-icon.png' },
],
meta: [
{ name: 'apple-mobile-web-app-status-bar-style', content: 'default' },
{ name: 'apple-mobile-web-app-status-bar-style', content: 'black-translucent' },
// open graph social image
{ property: 'og:title', content: 'Elk' },
{ property: 'og:description', content: 'A nimble Mastodon web client' },
@ -271,13 +270,13 @@ export default defineNuxtConfig({
{ property: 'og:image:width', content: '3800' },
{ property: 'og:image:height', content: '1900' },
{ property: 'og:site_name', content: 'Elk' },
{ name: 'twitter:site', content: '@elk_zone' },
{ name: 'twitter:card', content: 'summary_large_image' },
{ property: 'twitter:site', content: '@elk_zone' },
{ property: 'twitter:card', content: 'summary_large_image' },
],
},
},
// eslint-disable-next-line ts/ban-ts-comment
// eslint-disable-next-line ts/prefer-ts-expect-error
// @ts-ignore nuxt-security is conditional
security: {
headers: {
@ -300,7 +299,7 @@ export default defineNuxtConfig({
'upgrade-insecure-requests': true,
},
permissionsPolicy: {
fullscreen: '*',
fullscreen: ['\'self\'', 'https:', 'http:'],
},
},
rateLimiter: false,
@ -334,10 +333,6 @@ declare global {
}
declare module '#app' {
interface PageMeta {
wideLayout?: boolean
}
interface RuntimeNuxtHooks {
'elk-logo:click': () => void
}

View file

@ -1,8 +1,8 @@
{
"name": "@elk-zone/elk",
"type": "module",
"version": "0.15.1",
"packageManager": "pnpm@9.11.0",
"version": "0.14.0",
"packageManager": "pnpm@8.15.5",
"license": "MIT",
"homepage": "https://elk.zone/",
"main": "./nuxt.config.ts",
@ -37,11 +37,11 @@
"@iconify-emoji/twemoji": "^1.0.2",
"@iconify/json": "^2.2.170",
"@iconify/utils": "^2.1.22",
"@nuxt/devtools": "^1.5.0",
"@nuxt/test-utils": "^3.14.2",
"@nuxtjs/color-mode": "^3.4.4",
"@nuxtjs/i18n": "^8.5.3",
"@pinia/nuxt": "^0.5.4",
"@nuxt/devtools": "^1.0.8",
"@nuxt/test-utils": "^3.12.0",
"@nuxtjs/color-mode": "^3.3.2",
"@nuxtjs/i18n": "^8.3.0",
"@pinia/nuxt": "^0.5.1",
"@tiptap/core": "2.2.4",
"@tiptap/extension-bold": "2.2.4",
"@tiptap/extension-character-count": "2.2.4",
@ -56,40 +56,39 @@
"@tiptap/starter-kit": "2.2.4",
"@tiptap/suggestion": "2.2.4",
"@tiptap/vue-3": "2.2.4",
"@unocss/nuxt": "^0.62.3",
"@unocss/nuxt": "^0.58.9",
"@upstash/redis": "^1.27.1",
"@vercel/kv": "^2.0.0",
"@vue-macros/nuxt": "^1.11.12",
"@vueuse/core": "^11.0.3",
"@vercel/kv": "^1.0.1",
"@vue-macros/nuxt": "^1.6.0",
"@vueuse/core": "^10.9.0",
"@vueuse/gesture": "^2.0.0",
"@vueuse/integrations": "^11.0.3",
"@vueuse/math": "^11.0.3",
"@vueuse/motion": "2.2.5",
"@vueuse/nuxt": "^11.0.3",
"@vueuse/integrations": "^10.8.0",
"@vueuse/math": "^10.8.0",
"@vueuse/motion": "2.1.0",
"@vueuse/nuxt": "^10.8.0",
"blurhash": "^2.0.5",
"browser-fs-access": "^0.35.0",
"cheerio": "^1.0.0",
"chroma-js": "^3.0.0",
"chroma-js": "^2.4.2",
"emoji-mart": "^5.5.2",
"file-saver": "^2.0.5",
"floating-vue": "^5.2.2",
"focus-trap": "^7.5.1",
"form-data": "^4.0.0",
"fuse.js": "^7.0.0",
"fuse.js": "^6.6.2",
"github-reserved-names": "^2.0.4",
"happy-dom": "^15.0.0",
"happy-dom": "^10.5.2",
"idb-keyval": "^6.2.1",
"ignore-dependency-scripts": "^1.0.1",
"iso-639-1": "^3.0.0",
"js-yaml": "^4.1.0",
"lru-cache": "^11.0.0",
"masto": "^6.7.5",
"lru-cache": "^10.0.0",
"masto": "^6.7.0",
"node-emoji": "^2.1.3",
"nuxt-security": "^1.4.3",
"nuxt-security": "^0.13.1",
"page-lifecycle": "^0.1.2",
"pinia": "^2.2.2",
"pinia": "^2.1.7",
"postcss-nested": "^6.0.1",
"prosemirror-highlight": "^0.9.0",
"prosemirror-highlight": "^0.5.0",
"rollup-plugin-node-polyfills": "^0.2.1",
"shiki": "^1.0.0",
"simple-git": "^3.19.1",
@ -99,63 +98,61 @@
"string-length": "^5.0.1",
"tauri-plugin-log-api": "github:tauri-apps/tauri-plugin-log",
"tauri-plugin-store-api": "github:tauri-apps/tauri-plugin-store",
"theme-vitesse": "^0.8.0",
"theme-vitesse": "^0.7.2",
"tiny-decode": "^0.1.3",
"tippy.js": "^6.3.7",
"ufo": "^1.5.3",
"ultrahtml": "^1.5.3",
"unimport": "^3.10.0",
"vite-plugin-pwa": "^0.20.5",
"vue-advanced-cropper": "^2.8.9",
"unimport": "^3.7.1",
"vite-plugin-pwa": "^0.19.2",
"vue-advanced-cropper": "^2.8.8",
"vue-virtual-scroller": "2.0.0-beta.8",
"workbox-build": "^7.1.1",
"workbox-window": "^7.1.0",
"workbox-build": "^7.0.0",
"workbox-window": "^7.0.0",
"ws": "^8.15.1"
},
"devDependencies": {
"@antfu/eslint-config": "^2.27.3",
"@antfu/ni": "^0.23.0",
"@antfu/eslint-config": "^2.9.0",
"@antfu/ni": "^0.21.12",
"@types/chroma-js": "^2.4.4",
"@types/file-saver": "^2.0.7",
"@types/fnando__sparkline": "^0.3.7",
"@types/fs-extra": "^11.0.4",
"@types/js-yaml": "^4.0.9",
"@types/prettier": "^3.0.0",
"@types/wicg-file-system-access": "^2023.10.5",
"@types/ws": "^8.5.12",
"@unlazy/nuxt": "^0.11.3",
"@unocss/eslint-config": "^0.62.4",
"@vue/test-utils": "2.4.6",
"bumpp": "^9.5.2",
"@types/ws": "^8.5.10",
"@unlazy/nuxt": "^0.11.2",
"@unocss/eslint-config": "^0.58.9",
"@vue/test-utils": "2.4.5",
"bumpp": "^9.4.0",
"consola": "^3.2.3",
"eslint": "^9.11.0",
"eslint-plugin-format": "^0.1.2",
"eslint": "^8.57.0",
"eslint-plugin-format": "^0.1.0",
"flat": "^6.0.1",
"fs-extra": "^11.2.0",
"lint-staged": "^15.2.10",
"nuxt": "^3.13.2",
"prettier": "^3.3.3",
"sharp": "^0.33.5",
"lint-staged": "^15.2.2",
"nuxt": "^3.11.2",
"prettier": "^3.2.5",
"sharp": "^0.33.3",
"sharp-ico": "^0.1.5",
"simple-git-hooks": "^2.11.1",
"tsx": "^4.19.1",
"tsx": "^4.7.2",
"typescript": "^5.4.4",
"vitest": "2.1.1",
"vue-tsc": "^2.1.6"
"vitest": "1.4.0",
"vue-tsc": "^2.0.10"
},
"pnpm": {
"overrides": {
"unstorage": "^1.10.2"
},
"patchedDependencies": {
"@vueuse/motion": "patches/@vueuse__motion.patch",
"pinceau": "patches/pinceau.patch",
"vue-i18n": "patches/vue-i18n.patch",
"nuxt-security": "patches/nuxt-security.patch",
"nuxt": "patches/nuxt.patch"
"nuxt-security@0.13.1": "patches/nuxt-security@0.13.1.patch"
}
},
"resolutions": {
"nuxt-component-meta": "0.8.2",
"unstorage": "^1.12.0",
"vitest": "2.1.1",
"vue": "^3.5.4"
"vitest": "1.4.0",
"vue": "^3.4.21"
},
"simple-git-hooks": {
"pre-commit": "pnpm lint-staged"

View file

@ -88,7 +88,7 @@ onReactivated(() => {
<PublishWidgetList
v-if="currentUser"
ref="publishWidget"
class="border-y border-base"
border="y base"
:draft-key="replyDraft!.key"
:initial="replyDraft!.draft"
@published="refreshContext()"

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