Merge branch 'main' into feat/totally-hide-strict-filters
|
@ -1,5 +1,6 @@
|
||||||
NUXT_PUBLIC_TRANSLATE_API=
|
NUXT_PUBLIC_TRANSLATE_API=
|
||||||
NUXT_PUBLIC_DEFAULT_SERVER=
|
NUXT_PUBLIC_DEFAULT_SERVER=
|
||||||
|
NUXT_PUBLIC_PRIVACY_POLICY_URL=
|
||||||
|
|
||||||
# Production only
|
# Production only
|
||||||
NUXT_CLOUDFLARE_ACCOUNT_ID=
|
NUXT_CLOUDFLARE_ACCOUNT_ID=
|
||||||
|
|
|
@ -93,17 +93,17 @@ We are using [vue-i18n](https://vue-i18n.intlify.dev/) via [nuxt-i18n](https://i
|
||||||
|
|
||||||
1. Add a new file in [locales](./locales) folder with the language code as the filename.
|
1. Add a new file in [locales](./locales) folder with the language code as the filename.
|
||||||
2. Copy [en-US](./locales/en-US.json) and translate the strings.
|
2. Copy [en-US](./locales/en-US.json) and translate the strings.
|
||||||
3. Add the language to the `locales` array in [config/i18n.ts](./config/i18n.ts#L12), below `en` and `ar`:
|
3. Add the language to the `locales` array in [config/i18n.ts](./config/i18n.ts#L61), below `en` and `ar`:
|
||||||
- If your language have multiple country variants, add the generic one for language only (only if there are a lot of common entries, you can always add it as a new one)
|
- If your language have multiple country variants, add the generic one for language only (only if there are a lot of common entries, you can always add it as a new one)
|
||||||
- Add all country variants in [country variants object](./config/i18n.ts#L97)
|
- Add all country variants in [country variants object](./config/i18n.ts#L12)
|
||||||
- Add all country variants files with empty `messages` object: `{}`
|
- Add all country variants files with empty `messages` object: `{}`
|
||||||
- Translate the strings in the generic language file
|
- Translate the strings in the generic language file
|
||||||
- Later, when anyone wants to add the corresponding translations for the country variant, you can override all entries in the corresponding file: check `en` (english variants), and override the entries in all country files, if you omit them, `i18n` module will use the language entry. You will need also copy from base file to the rest of country variants those messages not being shared (the Elk team is working on resolving this, assuming it can be resolved).
|
- Later, when anyone wants to add the corresponding translations for the country variant, just override any entry in the corresponding file: you can see an example with `en` variants.
|
||||||
- If the generic language already exists:
|
- If the generic language already exists:
|
||||||
- If the translation doesn't differ from the generic language, then add the corresponding translations in the corresponding file
|
- If the translation doesn't differ from the generic language, then add the corresponding translations in the corresponding file
|
||||||
- If the translation differs from the generic language, then add the corresponding translations in the corresponding file and remove it from the country variants entry
|
- If the translation differs from the generic language, then add the corresponding translations in the corresponding file and remove it from the country variants entry
|
||||||
4. If the language is `right-to-left`, add `dir` option with `rtl` value, for example, for [ar](./config/i18n.ts#L22)
|
4. If the language is `right-to-left`, add `dir` option with `rtl` value, for example, for [ar](./config/i18n.ts#L71)
|
||||||
5. If the language requires special pluralization rules, add `pluralRule` callback option, for example, for [ar](./config/i18n.ts#L23)
|
5. If the language requires special pluralization rules, add `pluralRule` callback option, for example, for [ar](./config/i18n.ts#L72)
|
||||||
|
|
||||||
Check [Pluralization rule callback](https://vue-i18n.intlify.dev/guide/essentials/pluralization.html#custom-pluralization) for more info.
|
Check [Pluralization rule callback](https://vue-i18n.intlify.dev/guide/essentials/pluralization.html#custom-pluralization) for more info.
|
||||||
|
|
||||||
|
|
|
@ -117,6 +117,20 @@ const isNotifiedOnPost = $computed(() => !!relationship?.notifying)
|
||||||
<span v-else i-ri-notification-4-line block text-current />
|
<span v-else i-ri-notification-4-line block text-current />
|
||||||
</button>
|
</button>
|
||||||
</CommonTooltip>
|
</CommonTooltip>
|
||||||
|
<CommonTooltip :content="$t('list.modify_account')">
|
||||||
|
<VDropdown v-if="!isSelf && relationship?.following">
|
||||||
|
<button
|
||||||
|
:aria-label="$t('list.modify_account')"
|
||||||
|
rounded-full text-sm p2 border-1 transition-colors
|
||||||
|
border-base hover:text-primary
|
||||||
|
>
|
||||||
|
<span i-ri:play-list-add-fill block text-current />
|
||||||
|
</button>
|
||||||
|
<template #popper>
|
||||||
|
<ListLists :user-id="account.id" />
|
||||||
|
</template>
|
||||||
|
</VDropdown>
|
||||||
|
</CommonTooltip>
|
||||||
<AccountFollowButton :account="account" :command="command" />
|
<AccountFollowButton :account="account" :command="command" />
|
||||||
<!-- Edit profile -->
|
<!-- Edit profile -->
|
||||||
<NuxtLink
|
<NuxtLink
|
||||||
|
|
|
@ -8,13 +8,15 @@ const props = defineProps<{
|
||||||
}>()
|
}>()
|
||||||
|
|
||||||
const account = props.account || (props.handle ? useAccountByHandle(props.handle!) : undefined)
|
const account = props.account || (props.handle ? useAccountByHandle(props.handle!) : undefined)
|
||||||
|
const userSettings = useUserSettings()
|
||||||
|
|
||||||
defineOptions({
|
defineOptions({
|
||||||
inheritAttrs: false,
|
inheritAttrs: false,
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<VMenu v-if="!disabled && account" placement="bottom-start" :delay="{ show: 500, hide: 100 }" v-bind="$attrs" :close-on-content-click="false">
|
<VMenu v-if="!disabled && account && !getPreferences(userSettings, 'hideAccountHoverCard')" placement="bottom-start" :delay="{ show: 500, hide: 100 }" v-bind="$attrs" :close-on-content-click="false">
|
||||||
<slot />
|
<slot />
|
||||||
<template #popper>
|
<template #popper>
|
||||||
<AccountHoverCard v-if="account" :account="account" />
|
<AccountHoverCard v-if="account" :account="account" />
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
import type { CommonRouteTabOption } from '../common/CommonRouteTabs.vue'
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
|
|
||||||
const server = $(computedEager(() => route.params.server as string))
|
const server = $(computedEager(() => route.params.server as string))
|
||||||
const account = $(computedEager(() => route.params.account as string))
|
const account = $(computedEager(() => route.params.account as string))
|
||||||
|
|
||||||
const tabs = $computed(() => [
|
const tabs = $computed<CommonRouteTabOption[]>(() => [
|
||||||
{
|
{
|
||||||
name: 'account-index',
|
name: 'account-index',
|
||||||
to: {
|
to: {
|
||||||
|
@ -33,7 +35,7 @@ const tabs = $computed(() => [
|
||||||
display: t('tab.media'),
|
display: t('tab.media'),
|
||||||
icon: 'i-ri:camera-2-line',
|
icon: 'i-ri:camera-2-line',
|
||||||
},
|
},
|
||||||
] as const)
|
])
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
|
|
@ -11,6 +11,7 @@ const {
|
||||||
virtualScroller = false,
|
virtualScroller = false,
|
||||||
eventType = 'update',
|
eventType = 'update',
|
||||||
preprocess,
|
preprocess,
|
||||||
|
noEndMessage = false,
|
||||||
} = defineProps<{
|
} = defineProps<{
|
||||||
paginator: Paginator<T[], O>
|
paginator: Paginator<T[], O>
|
||||||
keyProp?: keyof T
|
keyProp?: keyof T
|
||||||
|
@ -18,6 +19,7 @@ const {
|
||||||
stream?: Promise<WsEvents>
|
stream?: Promise<WsEvents>
|
||||||
eventType?: 'notification' | 'update'
|
eventType?: 'notification' | 'update'
|
||||||
preprocess?: (items: (U | T)[]) => U[]
|
preprocess?: (items: (U | T)[]) => U[]
|
||||||
|
noEndMessage?: boolean
|
||||||
}>()
|
}>()
|
||||||
|
|
||||||
defineSlots<{
|
defineSlots<{
|
||||||
|
@ -84,7 +86,7 @@ const { items, prevItems, update, state, endAnchor, error } = usePaginator(pagin
|
||||||
<slot v-if="state === 'loading'" name="loading">
|
<slot v-if="state === 'loading'" name="loading">
|
||||||
<TimelineSkeleton />
|
<TimelineSkeleton />
|
||||||
</slot>
|
</slot>
|
||||||
<slot v-else-if="state === 'done'" name="done">
|
<slot v-else-if="state === 'done' && !noEndMessage" name="done">
|
||||||
<div p5 text-secondary italic text-center>
|
<div p5 text-secondary italic text-center>
|
||||||
{{ t('common.end_of_list') }}
|
{{ t('common.end_of_list') }}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,14 +1,15 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import type { RouteLocationRaw } from 'vue-router'
|
import type { RouteLocationRaw } from 'vue-router'
|
||||||
|
|
||||||
|
export interface CommonRouteTabOption {
|
||||||
|
to: RouteLocationRaw
|
||||||
|
display: string
|
||||||
|
disabled?: boolean
|
||||||
|
name?: string
|
||||||
|
icon?: string
|
||||||
|
}
|
||||||
const { options, command, replace, preventScrollTop = false } = $defineProps<{
|
const { options, command, replace, preventScrollTop = false } = $defineProps<{
|
||||||
options: {
|
options: CommonRouteTabOption[]
|
||||||
to: RouteLocationRaw
|
|
||||||
display: string
|
|
||||||
disabled?: boolean
|
|
||||||
name?: string
|
|
||||||
icon?: string
|
|
||||||
}[]
|
|
||||||
command?: boolean
|
command?: boolean
|
||||||
replace?: boolean
|
replace?: boolean
|
||||||
preventScrollTop?: boolean
|
preventScrollTop?: boolean
|
||||||
|
|
44
components/list/Account.vue
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
<script setup lang="ts">
|
||||||
|
import type { mastodon } from 'masto'
|
||||||
|
|
||||||
|
const { account, list } = defineProps<{
|
||||||
|
account: mastodon.v1.Account
|
||||||
|
hoverCard?: boolean
|
||||||
|
list: string
|
||||||
|
}>()
|
||||||
|
|
||||||
|
cacheAccount(account)
|
||||||
|
|
||||||
|
const client = useMastoClient()
|
||||||
|
|
||||||
|
const isRemoved = ref(false)
|
||||||
|
|
||||||
|
async function edit() {
|
||||||
|
try {
|
||||||
|
isRemoved.value
|
||||||
|
? await client.v1.lists.addAccount(list, { accountIds: [account.id] })
|
||||||
|
: await client.v1.lists.removeAccount(list, { accountIds: [account.id] })
|
||||||
|
isRemoved.value = !isRemoved.value
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div flex justify-between hover:bg-active transition-100 items-center>
|
||||||
|
<AccountInfo
|
||||||
|
:account="account" hover p1 as="router-link"
|
||||||
|
:hover-card="hoverCard"
|
||||||
|
shrink
|
||||||
|
overflow-hidden
|
||||||
|
:to="getAccountRoute(account)"
|
||||||
|
/>
|
||||||
|
<div>
|
||||||
|
<CommonTooltip :content="isRemoved ? $t('list.add_account') : $t('list.remove_account')" :hover="isRemoved ? 'text-green' : 'text-red'">
|
||||||
|
<button :class="isRemoved ? 'i-ri:user-add-line' : 'i-ri:user-unfollow-line'" text-xl @click="edit" />
|
||||||
|
</CommonTooltip>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
49
components/list/Lists.vue
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
<script lang="ts" setup>
|
||||||
|
const { userId } = defineProps<{
|
||||||
|
userId: string
|
||||||
|
}>()
|
||||||
|
|
||||||
|
const { client } = $(useMasto())
|
||||||
|
const paginator = client.v1.lists.list()
|
||||||
|
const listsWithUser = ref((await client.v1.accounts.listLists(userId)).map(list => list.id))
|
||||||
|
|
||||||
|
function indexOfUserInList(listId: string) {
|
||||||
|
return listsWithUser.value.indexOf(listId)
|
||||||
|
}
|
||||||
|
|
||||||
|
async function edit(listId: string) {
|
||||||
|
try {
|
||||||
|
const index = indexOfUserInList(listId)
|
||||||
|
if (index === -1) {
|
||||||
|
await client.v1.lists.addAccount(listId, { accountIds: [userId] })
|
||||||
|
listsWithUser.value.push(listId)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
await client.v1.lists.removeAccount(listId, { accountIds: [userId] })
|
||||||
|
listsWithUser.value = listsWithUser.value.filter(id => id !== listId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.error(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<CommonPaginator no-end-message :paginator="paginator">
|
||||||
|
<template #default="{ item }">
|
||||||
|
<div p4 hover:bg-active block w="100%" flex justify-between items-center gap-4>
|
||||||
|
<p>{{ item.title }}</p>
|
||||||
|
<CommonTooltip
|
||||||
|
:content="indexOfUserInList(item.id) === -1 ? $t('list.add_account') : $t('list.remove_account')"
|
||||||
|
:hover="indexOfUserInList(item.id) === -1 ? 'text-green' : 'text-red'"
|
||||||
|
>
|
||||||
|
<button
|
||||||
|
:class="indexOfUserInList(item.id) === -1 ? 'i-ri:user-add-line' : 'i-ri:user-unfollow-line'"
|
||||||
|
text-xl @click="() => edit(item.id)"
|
||||||
|
/>
|
||||||
|
</CommonTooltip>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</CommonPaginator>
|
||||||
|
</template>
|
|
@ -42,6 +42,7 @@ const wideLayout = computed(() => route.meta.wideLayout ?? false)
|
||||||
<slot name="header" />
|
<slot name="header" />
|
||||||
</div>
|
</div>
|
||||||
<div :class="{ 'xl:block': $route.name !== 'tag' }" hidden h-6 />
|
<div :class="{ 'xl:block': $route.name !== 'tag' }" hidden h-6 />
|
||||||
|
<PwaInstallPrompt lg:hidden />
|
||||||
<div :class="isHydrated && wideLayout ? 'xl:w-full sm:max-w-600px' : 'sm:max-w-600px md:shrink-0'" m-auto>
|
<div :class="isHydrated && wideLayout ? 'xl:w-full sm:max-w-600px' : 'sm:max-w-600px md:shrink-0'" m-auto>
|
||||||
<slot />
|
<slot />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -73,6 +73,12 @@ function toggleDark() {
|
||||||
<NuxtLink cursor-pointer hover:underline to="/settings/about">
|
<NuxtLink cursor-pointer hover:underline to="/settings/about">
|
||||||
{{ $t('settings.about.label') }}
|
{{ $t('settings.about.label') }}
|
||||||
</NuxtLink>
|
</NuxtLink>
|
||||||
|
<template v-if="$config.public.privacyPolicyUrl">
|
||||||
|
·
|
||||||
|
<NuxtLink cursor-pointer hover:underline :to="$config.public.privacyPolicyUrl">
|
||||||
|
{{ $t('nav.privacy') }}
|
||||||
|
</NuxtLink>
|
||||||
|
</template>
|
||||||
·
|
·
|
||||||
<NuxtLink href="/m.webtoo.ls/@elk" target="_blank">
|
<NuxtLink href="/m.webtoo.ls/@elk" target="_blank">
|
||||||
Mastodon
|
Mastodon
|
||||||
|
|
|
@ -32,6 +32,7 @@ const { notifications } = useNotifications()
|
||||||
<NavSideItem :text="$t('nav.explore')" :to="isHydrated ? `/${currentServer}/explore` : '/explore'" icon="i-ri:hashtag" :command="command" />
|
<NavSideItem :text="$t('nav.explore')" :to="isHydrated ? `/${currentServer}/explore` : '/explore'" icon="i-ri:hashtag" :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.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.federated')" :to="isHydrated ? `/${currentServer}/public` : '/public'" icon="i-ri:earth-line" :command="command" />
|
||||||
|
<NavSideItem :text="$t('nav.lists')" :to="`/${currentServer}/lists`" icon="i-ri:list-check" :command="command" />
|
||||||
|
|
||||||
<div shrink hidden sm:block mt-4 />
|
<div shrink hidden sm:block mt-4 />
|
||||||
<NavSideItem :text="$t('nav.settings')" to="/settings" icon="i-ri:settings-3-line" :command="command" />
|
<NavSideItem :text="$t('nav.settings')" to="/settings" icon="i-ri:settings-3-line" :command="command" />
|
||||||
|
|
|
@ -27,6 +27,10 @@ const groupId = (item: mastodon.v1.Notification): string => {
|
||||||
return JSON.stringify(id)
|
return JSON.stringify(id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function hasHeader(account: mastodon.v1.Account) {
|
||||||
|
return !account.header.endsWith('/original/missing.png')
|
||||||
|
}
|
||||||
|
|
||||||
function groupItems(items: mastodon.v1.Notification[]): NotificationSlot[] {
|
function groupItems(items: mastodon.v1.Notification[]): NotificationSlot[] {
|
||||||
const results: NotificationSlot[] = []
|
const results: NotificationSlot[] = []
|
||||||
|
|
||||||
|
@ -44,31 +48,31 @@ function groupItems(items: mastodon.v1.Notification[]): NotificationSlot[] {
|
||||||
// This normally happens when you transfer an account, if not, show
|
// This normally happens when you transfer an account, if not, show
|
||||||
// a big profile card for each follow
|
// a big profile card for each follow
|
||||||
if (group[0].type === 'follow') {
|
if (group[0].type === 'follow') {
|
||||||
let groups: mastodon.v1.Notification[] = []
|
// Order group by followers count
|
||||||
|
const processedGroup = [...group]
|
||||||
|
processedGroup.sort((a, b) => {
|
||||||
|
const aHasHeader = hasHeader(a.account)
|
||||||
|
const bHasHeader = hasHeader(b.account)
|
||||||
|
if (bHasHeader && !aHasHeader)
|
||||||
|
return 1
|
||||||
|
if (aHasHeader && !bHasHeader)
|
||||||
|
return -1
|
||||||
|
return b.account.followersCount - a.account.followersCount
|
||||||
|
})
|
||||||
|
|
||||||
function newGroup() {
|
if (processedGroup.length > 0 && hasHeader(processedGroup[0].account))
|
||||||
if (groups.length > 0) {
|
results.push(processedGroup.shift()!)
|
||||||
results.push({
|
|
||||||
id: `grouped-${id++}`,
|
if (processedGroup.length === 1 && hasHeader(processedGroup[0].account))
|
||||||
type: 'grouped-follow',
|
results.push(processedGroup.shift()!)
|
||||||
items: groups,
|
|
||||||
})
|
if (processedGroup.length > 0) {
|
||||||
groups = []
|
results.push({
|
||||||
}
|
id: `grouped-${id++}`,
|
||||||
|
type: 'grouped-follow',
|
||||||
|
items: processedGroup,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const item of group) {
|
|
||||||
const hasHeader = !item.account.header.endsWith('/original/missing.png')
|
|
||||||
if (hasHeader && (item.account.followersCount > 250 || (group.length === 1 && item.account.followersCount > 25))) {
|
|
||||||
newGroup()
|
|
||||||
results.push(item)
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
groups.push(item)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
newGroup()
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
22
components/pwa/PwaInstallPrompt.client.vue
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
<template>
|
||||||
|
<div
|
||||||
|
v-if="$pwa?.showInstallPrompt && !$pwa?.needRefresh"
|
||||||
|
m-2 p5 bg="primary-fade" relative
|
||||||
|
rounded-lg of-hidden
|
||||||
|
flex="~ col gap-3"
|
||||||
|
v-bind="$attrs"
|
||||||
|
>
|
||||||
|
<h2 flex="~ gap-2" items-center>
|
||||||
|
{{ $t('pwa.install_title') }}
|
||||||
|
</h2>
|
||||||
|
<div flex="~ gap-1">
|
||||||
|
<button type="button" btn-solid px-4 py-1 text-center text-sm @click="$pwa.install()">
|
||||||
|
{{ $t('pwa.install') }}
|
||||||
|
</button>
|
||||||
|
<button type="button" btn-text filter-saturate-0 px-4 py-1 text-center text-sm @click="$pwa.cancelInstall()">
|
||||||
|
{{ $t('pwa.dismiss') }}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div i-material-symbols:install-desktop-rounded absolute text-6em bottom--2 inset-ie--2 text-primary dark:text-white op10 class="-z-1 rtl-flip" />
|
||||||
|
</div>
|
||||||
|
</template>
|
|
@ -16,6 +16,6 @@
|
||||||
{{ $t('pwa.dismiss') }}
|
{{ $t('pwa.dismiss') }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div i-ri-arrow-down-circle-line absolute text-8em bottom--10 inset-ie--10 text-primary op10 class="-z-1" />
|
<div i-ri-arrow-down-circle-line absolute text-8em bottom--10 inset-ie--10 text-primary dark:text-white op10 class="-z-1" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -19,9 +19,9 @@ const totalTrend = $computed(() =>
|
||||||
<span>
|
<span>
|
||||||
{{ hashtag.name }}
|
{{ hashtag.name }}
|
||||||
</span>
|
</span>
|
||||||
<CommonTrending :history="hashtag.history" text-xs text-secondary truncate />
|
<CommonTrending v-if="hashtag.history" :history="hashtag.history" text-xs text-secondary truncate />
|
||||||
</div>
|
</div>
|
||||||
<div v-if="totalTrend" absolute left-15 right-0 top-0 bottom-4 op35 flex place-items-center place-content-center ml-auto>
|
<div v-if="totalTrend && hashtag.history" absolute left-15 right-0 top-0 bottom-4 op35 flex place-items-center place-content-center ml-auto>
|
||||||
<CommonTrendingCharts
|
<CommonTrendingCharts
|
||||||
:history="hashtag.history" :width="150" :height="20"
|
:history="hashtag.history" :width="150" :height="20"
|
||||||
text-xs text-secondary h-full w-full
|
text-xs text-secondary h-full w-full
|
||||||
|
|
|
@ -37,13 +37,13 @@ const reply = () => {
|
||||||
<div flex-1>
|
<div flex-1>
|
||||||
<StatusActionButton
|
<StatusActionButton
|
||||||
:content="$t('action.reply')"
|
:content="$t('action.reply')"
|
||||||
:text="status.repliesCount || ''"
|
:text="!getPreferences(userSettings, 'hideReplyCount') && status.repliesCount || ''"
|
||||||
color="text-blue" hover="text-blue" group-hover="bg-blue/10"
|
color="text-blue" hover="text-blue" group-hover="bg-blue/10"
|
||||||
icon="i-ri:chat-1-line"
|
icon="i-ri:chat-1-line"
|
||||||
:command="command"
|
:command="command"
|
||||||
@click="reply"
|
@click="reply"
|
||||||
>
|
>
|
||||||
<template v-if="status.repliesCount" #text>
|
<template v-if="status.repliesCount && !getPreferences(userSettings, 'hideReplyCount')" #text>
|
||||||
<CommonLocalizedNumber
|
<CommonLocalizedNumber
|
||||||
keypath="action.reply_count"
|
keypath="action.reply_count"
|
||||||
:count="status.repliesCount"
|
:count="status.repliesCount"
|
||||||
|
|
|
@ -114,9 +114,9 @@ const meta = $computed(() => {
|
||||||
<span text-secondary leading-tight>{{ meta.details }}</span>
|
<span text-secondary leading-tight>{{ meta.details }}</span>
|
||||||
</NuxtLink>
|
</NuxtLink>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div shrink-0 w-18 sm:w-30>
|
||||||
<NuxtLink :href="meta.titleUrl" target="_blank" external>
|
<NuxtLink :href="meta.titleUrl" target="_blank" external>
|
||||||
<img w-30 aspect-square width="20" height="20" rounded-2 :src="meta.avatar">
|
<img w-full aspect-square width="112" height="112" rounded-2 :src="meta.avatar">
|
||||||
</NuxtLink>
|
</NuxtLink>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -19,7 +19,7 @@ const toggleFollowTag = async () => {
|
||||||
tag.following = !tag.following
|
tag.following = !tag.following
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (tag.following)
|
if (previousFollowingState)
|
||||||
await client.v1.tags.unfollow(tag.name)
|
await client.v1.tags.unfollow(tag.name)
|
||||||
else
|
else
|
||||||
await client.v1.tags.follow(tag.name)
|
await client.v1.tags.follow(tag.name)
|
||||||
|
|
|
@ -42,9 +42,9 @@ function go(evt: MouseEvent | KeyboardEvent) {
|
||||||
<span>#</span>
|
<span>#</span>
|
||||||
<span hover:underline>{{ tag.name }}</span>
|
<span hover:underline>{{ tag.name }}</span>
|
||||||
</h4>
|
</h4>
|
||||||
<CommonTrending :history="tag.history" text-sm text-secondary line-clamp-1 ws-pre-wrap break-all />
|
<CommonTrending v-if="tag.history" :history="tag.history" text-sm text-secondary line-clamp-1 ws-pre-wrap break-all />
|
||||||
</div>
|
</div>
|
||||||
<div flex items-center>
|
<div v-if="tag.history" flex items-center>
|
||||||
<CommonTrendingCharts :history="tag.history" />
|
<CommonTrendingCharts :history="tag.history" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -42,6 +42,7 @@ const clickUser = (user: UserLogin) => {
|
||||||
is="button"
|
is="button"
|
||||||
:text="$t('user.add_existing')"
|
:text="$t('user.add_existing')"
|
||||||
icon="i-ri:user-add-line"
|
icon="i-ri:user-add-line"
|
||||||
|
w-full
|
||||||
@click="openSigninDialog"
|
@click="openSigninDialog"
|
||||||
/>
|
/>
|
||||||
<CommonDropdownItem
|
<CommonDropdownItem
|
||||||
|
@ -49,6 +50,7 @@ const clickUser = (user: UserLogin) => {
|
||||||
v-if="isHydrated && currentUser"
|
v-if="isHydrated && currentUser"
|
||||||
:text="$t('user.sign_out_account', [getFullHandle(currentUser.account)])"
|
:text="$t('user.sign_out_account', [getFullHandle(currentUser.account)])"
|
||||||
icon="i-ri:logout-box-line rtl-flip"
|
icon="i-ri:logout-box-line rtl-flip"
|
||||||
|
w-full
|
||||||
@click="signout"
|
@click="signout"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -33,7 +33,7 @@ export function getDefaultDraft(options: Partial<Mutable<mastodon.v1.CreateStatu
|
||||||
visibility: visibility || 'public',
|
visibility: visibility || 'public',
|
||||||
sensitive: sensitive ?? false,
|
sensitive: sensitive ?? false,
|
||||||
spoilerText: spoilerText || '',
|
spoilerText: spoilerText || '',
|
||||||
language: language || 'en',
|
language: language || getDefaultLanguage(),
|
||||||
},
|
},
|
||||||
mentions,
|
mentions,
|
||||||
lastUpdated: Date.now(),
|
lastUpdated: Date.now(),
|
||||||
|
@ -52,6 +52,16 @@ export async function getDraftFromStatus(status: mastodon.v1.Status): Promise<Dr
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getDefaultLanguage() {
|
||||||
|
const userSettings = useUserSettings()
|
||||||
|
const defaultLanguage = userSettings.value.language
|
||||||
|
|
||||||
|
if (defaultLanguage)
|
||||||
|
return defaultLanguage.split('-')[0]
|
||||||
|
|
||||||
|
return 'en'
|
||||||
|
}
|
||||||
|
|
||||||
function getAccountsToMention(status: mastodon.v1.Status) {
|
function getAccountsToMention(status: mastodon.v1.Status) {
|
||||||
const userId = currentUser.value?.account.id
|
const userId = currentUser.value?.account.id
|
||||||
const accountsToMention = new Set<string>()
|
const accountsToMention = new Set<string>()
|
||||||
|
|
|
@ -9,9 +9,11 @@ export type ColorMode = 'light' | 'dark' | 'system'
|
||||||
|
|
||||||
export interface PreferencesSettings {
|
export interface PreferencesSettings {
|
||||||
hideBoostCount: boolean
|
hideBoostCount: boolean
|
||||||
|
hideReplyCount: boolean
|
||||||
hideFavoriteCount: boolean
|
hideFavoriteCount: boolean
|
||||||
hideFollowerCount: boolean
|
hideFollowerCount: boolean
|
||||||
hideTranslation: boolean
|
hideTranslation: boolean
|
||||||
|
hideAccountHoverCard: boolean
|
||||||
grayscaleMode: boolean
|
grayscaleMode: boolean
|
||||||
enableAutoplay: boolean
|
enableAutoplay: boolean
|
||||||
experimentalVirtualScroller: boolean
|
experimentalVirtualScroller: boolean
|
||||||
|
@ -61,9 +63,11 @@ export function getDefaultUserSettings(locales: string[]): UserSettings {
|
||||||
|
|
||||||
export const DEFAULT__PREFERENCES_SETTINGS: PreferencesSettings = {
|
export const DEFAULT__PREFERENCES_SETTINGS: PreferencesSettings = {
|
||||||
hideBoostCount: false,
|
hideBoostCount: false,
|
||||||
|
hideReplyCount: false,
|
||||||
hideFavoriteCount: false,
|
hideFavoriteCount: false,
|
||||||
hideFollowerCount: false,
|
hideFollowerCount: false,
|
||||||
hideTranslation: false,
|
hideTranslation: false,
|
||||||
|
hideAccountHoverCard: false,
|
||||||
grayscaleMode: false,
|
grayscaleMode: false,
|
||||||
enableAutoplay: true,
|
enableAutoplay: true,
|
||||||
experimentalVirtualScroller: true,
|
experimentalVirtualScroller: true,
|
||||||
|
|
|
@ -17,10 +17,30 @@ export function setupPageHeader() {
|
||||||
dir: () => localeMap[locale.value] ?? 'auto',
|
dir: () => localeMap[locale.value] ?? 'auto',
|
||||||
},
|
},
|
||||||
titleTemplate: (title) => {
|
titleTemplate: (title) => {
|
||||||
let titleTemplate = title ? `${title} | ` : ''
|
let titleTemplate = title ?? ''
|
||||||
titleTemplate += t('app_name')
|
|
||||||
|
if (titleTemplate.match(/&[a-z0-9#]+;/gi)) {
|
||||||
|
titleTemplate = unescapeTitleTemplate(titleTemplate, [
|
||||||
|
['"', ['"', '"']],
|
||||||
|
['&', ['&', '&']],
|
||||||
|
['\'', [''', ''']],
|
||||||
|
['\u003C', ['<', '<']],
|
||||||
|
['\u003E', ['>', '>']],
|
||||||
|
])
|
||||||
|
if (titleTemplate.length > 60)
|
||||||
|
titleTemplate = `${titleTemplate.slice(0, 60)}...${titleTemplate.endsWith('"') ? '"' : ''}`
|
||||||
|
|
||||||
|
if (!titleTemplate.includes('"'))
|
||||||
|
titleTemplate = `"${titleTemplate}"`
|
||||||
|
}
|
||||||
|
else if (titleTemplate.length > 60) {
|
||||||
|
titleTemplate = `${titleTemplate.slice(0, 60)}...${titleTemplate.endsWith('"') ? '"' : ''}`
|
||||||
|
}
|
||||||
|
|
||||||
|
titleTemplate += ` | ${t('app_name')}`
|
||||||
if (buildInfo.env !== 'release')
|
if (buildInfo.env !== 'release')
|
||||||
titleTemplate += ` (${buildInfo.env})`
|
titleTemplate += ` (${buildInfo.env})`
|
||||||
|
|
||||||
return titleTemplate
|
return titleTemplate
|
||||||
},
|
},
|
||||||
link: process.client && useRuntimeConfig().public.pwaEnabled
|
link: process.client && useRuntimeConfig().public.pwaEnabled
|
||||||
|
@ -32,3 +52,12 @@ export function setupPageHeader() {
|
||||||
: [],
|
: [],
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function unescapeTitleTemplate(titleTemplate: string, replacements: [string, string[]][]) {
|
||||||
|
let result = titleTemplate
|
||||||
|
for (const [replacement, entities] of replacements) {
|
||||||
|
for (const e of entities)
|
||||||
|
result = result.replaceAll(e, replacement)
|
||||||
|
}
|
||||||
|
return result.trim()
|
||||||
|
}
|
||||||
|
|
113
config/i18n.ts
|
@ -9,6 +9,55 @@ interface LocaleObjectData extends LocaleObject {
|
||||||
pluralRule?: PluralizationRule
|
pluralRule?: PluralizationRule
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const countryLocaleVariants: Record<string, LocaleObjectData[]> = {
|
||||||
|
ar: [
|
||||||
|
// { code: 'ar-DZ', name: 'Arabic (Algeria)' },
|
||||||
|
// { code: 'ar-BH', name: 'Arabic (Bahrain)' },
|
||||||
|
{ code: 'ar-EG', name: 'العربية' },
|
||||||
|
// { code: 'ar-EG', name: 'Arabic (Egypt)' },
|
||||||
|
// { code: 'ar-IQ', name: 'Arabic (Iraq)' },
|
||||||
|
// { code: 'ar-JO', name: 'Arabic (Jordan)' },
|
||||||
|
// { code: 'ar-KW', name: 'Arabic (Kuwait)' },
|
||||||
|
// { code: 'ar-LB', name: 'Arabic (Lebanon)' },
|
||||||
|
// { code: 'ar-LY', name: 'Arabic (Libya)' },
|
||||||
|
// { code: 'ar-MA', name: 'Arabic (Morocco)' },
|
||||||
|
// { code: 'ar-OM', name: 'Arabic (Oman)' },
|
||||||
|
// { code: 'ar-QA', name: 'Arabic (Qatar)' },
|
||||||
|
// { code: 'ar-SA', name: 'Arabic (Saudi Arabia)' },
|
||||||
|
// { code: 'ar-SY', name: 'Arabic (Syria)' },
|
||||||
|
// { code: 'ar-TN', name: 'Arabic (Tunisia)' },
|
||||||
|
// { code: 'ar-AE', name: 'Arabic (U.A.E.)' },
|
||||||
|
// { code: 'ar-YE', name: 'Arabic (Yemen)' },
|
||||||
|
],
|
||||||
|
en: [
|
||||||
|
{ code: 'en-US', name: 'English (US)' },
|
||||||
|
{ code: 'en-GB', name: 'English (UK)' },
|
||||||
|
],
|
||||||
|
es: [
|
||||||
|
// { code: 'es-AR', name: 'Español (Argentina)' },
|
||||||
|
// { code: 'es-BO', name: 'Español (Bolivia)' },
|
||||||
|
// { code: 'es-CL', name: 'Español (Chile)' },
|
||||||
|
// { code: 'es-CO', name: 'Español (Colombia)' },
|
||||||
|
// { code: 'es-CR', name: 'Español (Costa Rica)' },
|
||||||
|
// { code: 'es-DO', name: 'Español (República Dominicana)' },
|
||||||
|
// { code: 'es-EC', name: 'Español (Ecuador)' },
|
||||||
|
{ code: 'es-ES', name: 'Español (España)' },
|
||||||
|
// TODO: Support es-419, if we include spanish country variants remove also fix on utils/language.ts module
|
||||||
|
{ code: 'es-419', name: 'Español (Latinoamérica)' },
|
||||||
|
// { code: 'es-GT', name: 'Español (Guatemala)' },
|
||||||
|
// { code: 'es-HN', name: 'Español (Honduras)' },
|
||||||
|
// { code: 'es-MX', name: 'Español (México)' },
|
||||||
|
// { code: 'es-NI', name: 'Español (Nicaragua)' },
|
||||||
|
// { code: 'es-PA', name: 'Español (Panamá)' },
|
||||||
|
// { code: 'es-PE', name: 'Español (Perú)' },
|
||||||
|
// { code: 'es-PR', name: 'Español (Puerto Rico)' },
|
||||||
|
// { code: 'es-SV', name: 'Español (El Salvador)' },
|
||||||
|
// { code: 'es-US', name: 'Español (Estados Unidos)' },
|
||||||
|
// { code: 'es-UY', name: 'Español (Uruguay)' },
|
||||||
|
// { code: 'es-VE', name: 'Español (Venezuela)' },
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
const locales: LocaleObjectData[] = [
|
const locales: LocaleObjectData[] = [
|
||||||
{
|
{
|
||||||
code: 'en',
|
code: 'en',
|
||||||
|
@ -60,6 +109,15 @@ const locales: LocaleObjectData[] = [
|
||||||
file: 'fr-FR.json',
|
file: 'fr-FR.json',
|
||||||
name: 'Français',
|
name: 'Français',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
code: 'ru-RU',
|
||||||
|
file: 'ru-RU.json',
|
||||||
|
name: 'Русский',
|
||||||
|
pluralRule: (choice: number) => {
|
||||||
|
const name = new Intl.PluralRules('ru-RU').select(choice)
|
||||||
|
return { zero: 2 /* not used */, one: 0, two: 1 /* not used */, few: 1, many: 2, other: 3 }[name]
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
code: 'uk-UA',
|
code: 'uk-UA',
|
||||||
file: 'uk-UA.json',
|
file: 'uk-UA.json',
|
||||||
|
@ -107,58 +165,15 @@ const locales: LocaleObjectData[] = [
|
||||||
{
|
{
|
||||||
code: 'fi-FI',
|
code: 'fi-FI',
|
||||||
file: 'fi-FI.json',
|
file: 'fi-FI.json',
|
||||||
name: 'Suomea',
|
name: 'suomeksi',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
code: 'gl-ES',
|
||||||
|
file: 'gl-ES.json',
|
||||||
|
name: 'Galego',
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
const countryLocaleVariants: Record<string, LocaleObjectData[]> = {
|
|
||||||
ar: [
|
|
||||||
// { code: 'ar-DZ', name: 'Arabic (Algeria)' },
|
|
||||||
// { code: 'ar-BH', name: 'Arabic (Bahrain)' },
|
|
||||||
{ code: 'ar-EG', name: 'العربية' },
|
|
||||||
// { code: 'ar-EG', name: 'Arabic (Egypt)' },
|
|
||||||
// { code: 'ar-IQ', name: 'Arabic (Iraq)' },
|
|
||||||
// { code: 'ar-JO', name: 'Arabic (Jordan)' },
|
|
||||||
// { code: 'ar-KW', name: 'Arabic (Kuwait)' },
|
|
||||||
// { code: 'ar-LB', name: 'Arabic (Lebanon)' },
|
|
||||||
// { code: 'ar-LY', name: 'Arabic (Libya)' },
|
|
||||||
// { code: 'ar-MA', name: 'Arabic (Morocco)' },
|
|
||||||
// { code: 'ar-OM', name: 'Arabic (Oman)' },
|
|
||||||
// { code: 'ar-QA', name: 'Arabic (Qatar)' },
|
|
||||||
// { code: 'ar-SA', name: 'Arabic (Saudi Arabia)' },
|
|
||||||
// { code: 'ar-SY', name: 'Arabic (Syria)' },
|
|
||||||
// { code: 'ar-TN', name: 'Arabic (Tunisia)' },
|
|
||||||
// { code: 'ar-AE', name: 'Arabic (U.A.E.)' },
|
|
||||||
// { code: 'ar-YE', name: 'Arabic (Yemen)' },
|
|
||||||
],
|
|
||||||
en: [
|
|
||||||
{ code: 'en-US', name: 'English (US)' },
|
|
||||||
{ code: 'en-GB', name: 'English (UK)' },
|
|
||||||
],
|
|
||||||
es: [
|
|
||||||
// { code: 'es-AR', name: 'Español (Argentina)' },
|
|
||||||
// { code: 'es-BO', name: 'Español (Bolivia)' },
|
|
||||||
// { code: 'es-CL', name: 'Español (Chile)' },
|
|
||||||
// { code: 'es-CO', name: 'Español (Colombia)' },
|
|
||||||
// { code: 'es-CR', name: 'Español (Costa Rica)' },
|
|
||||||
// { code: 'es-DO', name: 'Español (República Dominicana)' },
|
|
||||||
// { code: 'es-EC', name: 'Español (Ecuador)' },
|
|
||||||
{ code: 'es-ES', name: 'Español (España)' },
|
|
||||||
{ code: 'es-419', name: 'Español (Latinoamérica)' },
|
|
||||||
// { code: 'es-GT', name: 'Español (Guatemala)' },
|
|
||||||
// { code: 'es-HN', name: 'Español (Honduras)' },
|
|
||||||
// { code: 'es-MX', name: 'Español (México)' },
|
|
||||||
// { code: 'es-NI', name: 'Español (Nicaragua)' },
|
|
||||||
// { code: 'es-PA', name: 'Español (Panamá)' },
|
|
||||||
// { code: 'es-PE', name: 'Español (Perú)' },
|
|
||||||
// { code: 'es-PR', name: 'Español (Puerto Rico)' },
|
|
||||||
// { code: 'es-SV', name: 'Español (El Salvador)' },
|
|
||||||
// { code: 'es-US', name: 'Español (Estados Unidos)' },
|
|
||||||
// { code: 'es-UY', name: 'Español (Uruguay)' },
|
|
||||||
// { code: 'es-VE', name: 'Español (Venezuela)' },
|
|
||||||
],
|
|
||||||
}
|
|
||||||
|
|
||||||
const buildLocales = () => {
|
const buildLocales = () => {
|
||||||
const useLocales = Object.values(locales).reduce((acc, data) => {
|
const useLocales = Object.values(locales).reduce((acc, data) => {
|
||||||
const locales = countryLocaleVariants[data.code]
|
const locales = countryLocaleVariants[data.code]
|
||||||
|
|
|
@ -18,7 +18,6 @@ export const STORAGE_KEY_HIDE_EXPLORE_NEWS_TIPS = 'elk-hide-explore-news-tips'
|
||||||
export const STORAGE_KEY_HIDE_EXPLORE_TAGS_TIPS = 'elk-hide-explore-tags-tips'
|
export const STORAGE_KEY_HIDE_EXPLORE_TAGS_TIPS = 'elk-hide-explore-tags-tips'
|
||||||
export const STORAGE_KEY_NOTIFICATION = 'elk-notification'
|
export const STORAGE_KEY_NOTIFICATION = 'elk-notification'
|
||||||
export const STORAGE_KEY_NOTIFICATION_POLICY = 'elk-notification-policy'
|
export const STORAGE_KEY_NOTIFICATION_POLICY = 'elk-notification-policy'
|
||||||
|
export const STORAGE_KEY_PWA_HIDE_INSTALL = 'elk-pwa-hide-install'
|
||||||
export const COOKIE_MAX_AGE = 10 * 365 * 24 * 60 * 60 * 1000
|
|
||||||
|
|
||||||
export const HANDLED_MASTO_URLS = /^(https?:\/\/)?([\w\d-]+\.)+\w+\/(@[@\w\d-\.]+)(\/objects)?(\/\d+)?$/
|
export const HANDLED_MASTO_URLS = /^(https?:\/\/)?([\w\d-]+\.)+\w+\/(@[@\w\d-\.]+)(\/objects)?(\/\d+)?$/
|
||||||
|
|
|
@ -45,6 +45,7 @@ There are 5 environment variables to add.
|
||||||
| NUXT_CLOUDFLARE_NAMESPACE_ID | This is your CloudFlare KV Namespace ID. You can find it in "Workers > KV". |
|
| NUXT_CLOUDFLARE_NAMESPACE_ID | This is your CloudFlare KV Namespace ID. You can find it in "Workers > KV". |
|
||||||
| NUXT_STORAGE_DRIVER | Because we're using CloudFlare, we'll need to set this to `cloudflare`. |
|
| NUXT_STORAGE_DRIVER | Because we're using CloudFlare, we'll need to set this to `cloudflare`. |
|
||||||
| NUXT_PUBLIC_DEFAULT_SERVER | This is the address of the Mastodon instance that will show up when a user visits your Elk deployment and is not logged in. If you don't make that variable, it will point to `m.webtoo.ls` by default. |
|
| NUXT_PUBLIC_DEFAULT_SERVER | This is the address of the Mastodon instance that will show up when a user visits your Elk deployment and is not logged in. If you don't make that variable, it will point to `m.webtoo.ls` by default. |
|
||||||
|
| NUXT_PUBLIC_PRIVACY_POLICY_URL | This is the URL to a web page with information on your privacy policy. |
|
||||||
|
|
||||||
That's it! All that's left to do is...
|
That's it! All that's left to do is...
|
||||||
|
|
||||||
|
|
38
docs/content/privacy.md
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
# Privacy
|
||||||
|
|
||||||
|
> Last updated January 27, 2023
|
||||||
|
|
||||||
|
This privacy notice for Elk describes how we handle your information when you:
|
||||||
|
|
||||||
|
- Visit https://elk.zone, https://main.elk.zone or https://docs.elk.zone.
|
||||||
|
|
||||||
|
- Download and use our mobile or desktop application (Elk)
|
||||||
|
|
||||||
|
::alert{type=warning}
|
||||||
|
Elk is [open source](https://github.com/elk-zone/elk) and other websites that link to this privacy notice may not be affiliated with Elk or bound by this policy.
|
||||||
|
::
|
||||||
|
|
||||||
|
## Information
|
||||||
|
|
||||||
|
We do not collect or process your personal or sensitive information.
|
||||||
|
|
||||||
|
The only information retained by Elk when you use it is the host name of your Mastodon instance, which we need in order to log you in to that instance.
|
||||||
|
|
||||||
|
We use two third-party providers to provide server and content delivery network (CDN) capacity. They each have their own privacy policies which you can read: [Cloudflare](https://www.cloudflare.com/privacypolicy/) and [Netlify](https://www.netlify.com/privacy/).
|
||||||
|
|
||||||
|
We use aggregated information from these third-party providers to let us know about traffic and visits to Elk.
|
||||||
|
|
||||||
|
## Tracking
|
||||||
|
|
||||||
|
We do not use tracking technologies (for example, cookies). We store information about your user interface preferences in your local browser storage.
|
||||||
|
|
||||||
|
## Updates
|
||||||
|
|
||||||
|
We will update this notice as necessary to stay compliant with relevant laws.
|
||||||
|
|
||||||
|
When we update this privacy notice, the updated version will be indicated by a new 'Revised' date. The updated version will be effective as soon as it is accessible. If we make material changes to this privacy notice, we may notify you either by prominently posting a notice of such changes or by directly sending you a notification. We encourage you to review this privacy notice frequently to be informed of how we are protecting your information.
|
||||||
|
|
||||||
|
## Contact
|
||||||
|
|
||||||
|
If you have questions or comments about this notice, you may raise an issue at https://github.com/elk-zone/elk.
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
"preview": "nuxi preview"
|
"preview": "nuxi preview"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@nuxt-themes/docus": "^1.4.4",
|
"@nuxt-themes/docus": "^1.4.7",
|
||||||
"nuxt": "^3.0.0"
|
"nuxt": "^3.1.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -65,6 +65,7 @@ const isGrayscale = usePreferences('grayscaleMode')
|
||||||
<div flex-auto />
|
<div flex-auto />
|
||||||
|
|
||||||
<PwaPrompt />
|
<PwaPrompt />
|
||||||
|
<PwaInstallPrompt />
|
||||||
<LazyCommonPreviewPrompt v-if="info.env === 'preview'" />
|
<LazyCommonPreviewPrompt v-if="info.env === 'preview'" />
|
||||||
<NavFooter />
|
<NavFooter />
|
||||||
</slot>
|
</slot>
|
||||||
|
|
|
@ -1,18 +1 @@
|
||||||
{
|
{}
|
||||||
"account": {
|
|
||||||
"favourites": "Favorites"
|
|
||||||
},
|
|
||||||
"action": {
|
|
||||||
"favourite": "Favorite",
|
|
||||||
"favourited": "Favorited"
|
|
||||||
},
|
|
||||||
"nav": {
|
|
||||||
"favourites": "Favorites"
|
|
||||||
},
|
|
||||||
"notification": {
|
|
||||||
"favourited_post": "favorited your post"
|
|
||||||
},
|
|
||||||
"user": {
|
|
||||||
"sign_in_desc": "Sign in to follow profiles or hashtags, favorite, share and reply to posts, or interact from your account on a different server."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -174,6 +174,11 @@
|
||||||
"language": {
|
"language": {
|
||||||
"search": "Search"
|
"search": "Search"
|
||||||
},
|
},
|
||||||
|
"list": {
|
||||||
|
"add_account": "Add account to list",
|
||||||
|
"modify_account": "Modify lists with account",
|
||||||
|
"remove_account": "Remove account from list"
|
||||||
|
},
|
||||||
"menu": {
|
"menu": {
|
||||||
"block_account": "Block {0}",
|
"block_account": "Block {0}",
|
||||||
"block_domain": "Block domain {0}",
|
"block_domain": "Block domain {0}",
|
||||||
|
@ -216,9 +221,12 @@
|
||||||
"favourites": "Favorites",
|
"favourites": "Favorites",
|
||||||
"federated": "Federated",
|
"federated": "Federated",
|
||||||
"home": "Home",
|
"home": "Home",
|
||||||
|
"list": "List",
|
||||||
|
"lists": "Lists",
|
||||||
"local": "Local",
|
"local": "Local",
|
||||||
"muted_users": "Muted users",
|
"muted_users": "Muted users",
|
||||||
"notifications": "Notifications",
|
"notifications": "Notifications",
|
||||||
|
"privacy": "Privacy",
|
||||||
"profile": "Profile",
|
"profile": "Profile",
|
||||||
"search": "Search",
|
"search": "Search",
|
||||||
"select_feature_flags": "Toggle Feature Flags",
|
"select_feature_flags": "Toggle Feature Flags",
|
||||||
|
@ -248,6 +256,8 @@
|
||||||
},
|
},
|
||||||
"pwa": {
|
"pwa": {
|
||||||
"dismiss": "Dismiss",
|
"dismiss": "Dismiss",
|
||||||
|
"install": "Install",
|
||||||
|
"install_title": "Install Elk",
|
||||||
"title": "New Elk update available!",
|
"title": "New Elk update available!",
|
||||||
"update": "Update",
|
"update": "Update",
|
||||||
"update_available_short": "Update Elk",
|
"update_available_short": "Update Elk",
|
||||||
|
@ -362,9 +372,11 @@
|
||||||
"enable_autoplay": "Enable Autoplay",
|
"enable_autoplay": "Enable Autoplay",
|
||||||
"github_cards": "GitHub Cards",
|
"github_cards": "GitHub Cards",
|
||||||
"grayscale_mode": "Grayscale mode",
|
"grayscale_mode": "Grayscale mode",
|
||||||
|
"hide_account_hover_card": "Hide account hover card",
|
||||||
"hide_boost_count": "Hide boost count",
|
"hide_boost_count": "Hide boost count",
|
||||||
"hide_favorite_count": "Hide favorite count",
|
"hide_favorite_count": "Hide favorite count",
|
||||||
"hide_follower_count": "Hide follower count",
|
"hide_follower_count": "Hide follower count",
|
||||||
|
"hide_reply_count": "Hide reply count",
|
||||||
"hide_translation": "Hide translation",
|
"hide_translation": "Hide translation",
|
||||||
"label": "Preferences",
|
"label": "Preferences",
|
||||||
"title": "Experimental Features",
|
"title": "Experimental Features",
|
||||||
|
@ -440,8 +452,10 @@
|
||||||
"edited": "edited {0}"
|
"edited": "edited {0}"
|
||||||
},
|
},
|
||||||
"tab": {
|
"tab": {
|
||||||
|
"accounts": "Accounts",
|
||||||
"for_you": "For you",
|
"for_you": "For you",
|
||||||
"hashtags": "Hashtags",
|
"hashtags": "Hashtags",
|
||||||
|
"list": "List",
|
||||||
"media": "Media",
|
"media": "Media",
|
||||||
"news": "News",
|
"news": "News",
|
||||||
"notifications_all": "All",
|
"notifications_all": "All",
|
||||||
|
|
|
@ -28,6 +28,8 @@
|
||||||
"muted_users": "Usuarios silenciados",
|
"muted_users": "Usuarios silenciados",
|
||||||
"muting": "Silenciado",
|
"muting": "Silenciado",
|
||||||
"mutuals": "Mutuo",
|
"mutuals": "Mutuo",
|
||||||
|
"notifications_on_post_disable": "Parar notificaciones cuando {username} publique",
|
||||||
|
"notifications_on_post_enable": "Notificarme cuando {username} publique",
|
||||||
"pinned": "Publicaciones fijadas",
|
"pinned": "Publicaciones fijadas",
|
||||||
"posts": "Publicaciones",
|
"posts": "Publicaciones",
|
||||||
"posts_count": "{0} Publicaciones|{0} Publicación|{0} Publicaciones",
|
"posts_count": "{0} Publicaciones|{0} Publicación|{0} Publicaciones",
|
||||||
|
@ -35,7 +37,9 @@
|
||||||
"profile_unavailable": "Perfil no disponible",
|
"profile_unavailable": "Perfil no disponible",
|
||||||
"unblock": "Desbloquear",
|
"unblock": "Desbloquear",
|
||||||
"unfollow": "Dejar de seguir",
|
"unfollow": "Dejar de seguir",
|
||||||
"unmute": "Dejar de silenciar"
|
"unmute": "Dejar de silenciar",
|
||||||
|
"view_other_followers": "Puede que no se muestren los seguidores de otras instancias.",
|
||||||
|
"view_other_following": "Puede que no se muestren los seguidos de otras instancias."
|
||||||
},
|
},
|
||||||
"action": {
|
"action": {
|
||||||
"apply": "Aplicar",
|
"apply": "Aplicar",
|
||||||
|
@ -44,6 +48,7 @@
|
||||||
"boost": "Retootear",
|
"boost": "Retootear",
|
||||||
"boost_count": "{0}",
|
"boost_count": "{0}",
|
||||||
"boosted": "Retooteado",
|
"boosted": "Retooteado",
|
||||||
|
"clear_publish_failed": "Limpiar errores de publicación",
|
||||||
"clear_upload_failed": "Limpiar errores de subida de archivos",
|
"clear_upload_failed": "Limpiar errores de subida de archivos",
|
||||||
"close": "Cerrar",
|
"close": "Cerrar",
|
||||||
"compose": "Redactar",
|
"compose": "Redactar",
|
||||||
|
@ -97,20 +102,51 @@
|
||||||
"drafts": "Borradores ({v})"
|
"drafts": "Borradores ({v})"
|
||||||
},
|
},
|
||||||
"confirm": {
|
"confirm": {
|
||||||
|
"block_account": {
|
||||||
|
"cancel": "Cancelar",
|
||||||
|
"confirm": "Bloquear",
|
||||||
|
"title": "¿Estás seguro que quieres bloquear a {0}?"
|
||||||
|
},
|
||||||
|
"block_domain": {
|
||||||
|
"cancel": "Cancelar",
|
||||||
|
"confirm": "Bloquear",
|
||||||
|
"title": "¿Estás seguro que quieres bloquear a {0}?"
|
||||||
|
},
|
||||||
"common": {
|
"common": {
|
||||||
"cancel": "No",
|
"cancel": "No",
|
||||||
"confirm": "Si",
|
"confirm": "Si"
|
||||||
"title": "¿Estás seguro?"
|
|
||||||
},
|
},
|
||||||
"delete_posts": {
|
"delete_posts": {
|
||||||
"cancel": "Cancelar",
|
"cancel": "Cancelar",
|
||||||
"confirm": "Eliminar",
|
"confirm": "Eliminar",
|
||||||
"title": "¿Estás seguro que deseas eliminar esta publicación?"
|
"title": "¿Estás seguro que quieres eliminar esta publicación?"
|
||||||
|
},
|
||||||
|
"mute_account": {
|
||||||
|
"cancel": "Cancelar",
|
||||||
|
"confirm": "Silenciar",
|
||||||
|
"title": "¿Estás seguro que quieres silenciar a {0}?"
|
||||||
|
},
|
||||||
|
"show_reblogs": {
|
||||||
|
"cancel": "Cancelar",
|
||||||
|
"confirm": "Mostrar",
|
||||||
|
"title": "¿Estás seguro que quieres mostrar los retoots de {0}?"
|
||||||
|
},
|
||||||
|
"unfollow": {
|
||||||
|
"cancel": "Cancelar",
|
||||||
|
"confirm": "Dejar de seguir",
|
||||||
|
"title": "¿Estás seguro que quieres dejar de seguir?"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"conversation": {
|
"conversation": {
|
||||||
"with": "con"
|
"with": "con"
|
||||||
},
|
},
|
||||||
|
"custom_cards": {
|
||||||
|
"stackblitz": {
|
||||||
|
"lines": "Lineas {0}",
|
||||||
|
"open": "Abrir",
|
||||||
|
"snippet_from": "Porción de código de {0}"
|
||||||
|
}
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"account_not_found": "No se encontró la cuenta {0}",
|
"account_not_found": "No se encontró la cuenta {0}",
|
||||||
"explore-list-empty": "No hay tendencias en este momento. ¡Vuelve más tarde!",
|
"explore-list-empty": "No hay tendencias en este momento. ¡Vuelve más tarde!",
|
||||||
|
@ -120,6 +156,12 @@
|
||||||
"unsupported_file_format": "Tipo de archivo no soportado"
|
"unsupported_file_format": "Tipo de archivo no soportado"
|
||||||
},
|
},
|
||||||
"help": {
|
"help": {
|
||||||
|
"build_preview": {
|
||||||
|
"desc1": "Estás viendo actualmente una versión preliminar de Elk de la comunidad - {0}.",
|
||||||
|
"desc2": "Puede contener cambios no revisados o incluso maliciosos.",
|
||||||
|
"desc3": "No inicies sesión con tu cuenta real.",
|
||||||
|
"title": "Implementación de vista previa"
|
||||||
|
},
|
||||||
"desc_highlight": "Es normal encontrar algunos errores y características faltantes aquí y allá.",
|
"desc_highlight": "Es normal encontrar algunos errores y características faltantes aquí y allá.",
|
||||||
"desc_para1": "¡Gracias por el interés en probar Elk, nuestro cliente genérico en desarrollo para Mastodon!",
|
"desc_para1": "¡Gracias por el interés en probar Elk, nuestro cliente genérico en desarrollo para Mastodon!",
|
||||||
"desc_para2": "Estamos trabajando duro en el desarrollo y mejorándolo constantemente. ¡Y pronto te invitaremos a que te unas una vez que lo hagamos de código abierto!",
|
"desc_para2": "Estamos trabajando duro en el desarrollo y mejorándolo constantemente. ¡Y pronto te invitaremos a que te unas una vez que lo hagamos de código abierto!",
|
||||||
|
@ -132,10 +174,16 @@
|
||||||
"language": {
|
"language": {
|
||||||
"search": "Buscar"
|
"search": "Buscar"
|
||||||
},
|
},
|
||||||
|
"list": {
|
||||||
|
"add_account": "Agregar cuenta a la lista",
|
||||||
|
"modify_account": "Modificar listas con cuenta",
|
||||||
|
"remove_account": "Eliminar cuenta de la lista"
|
||||||
|
},
|
||||||
"menu": {
|
"menu": {
|
||||||
"block_account": "Bloquear a {0}",
|
"block_account": "Bloquear a {0}",
|
||||||
"block_domain": "Bloquear dominio {0}",
|
"block_domain": "Bloquear dominio {0}",
|
||||||
"copy_link_to_post": "Copiar enlace",
|
"copy_link_to_post": "Copiar enlace",
|
||||||
|
"copy_original_link_to_post": "Copiar enlace original a esta publicación",
|
||||||
"delete": "Borrar",
|
"delete": "Borrar",
|
||||||
"delete_and_redraft": "Borrar y volver a borrador",
|
"delete_and_redraft": "Borrar y volver a borrador",
|
||||||
"direct_message_account": "Mensaje directo a {0}",
|
"direct_message_account": "Mensaje directo a {0}",
|
||||||
|
@ -167,14 +215,18 @@
|
||||||
"blocked_users": "Usuarios bloqueados",
|
"blocked_users": "Usuarios bloqueados",
|
||||||
"bookmarks": "Marcadores",
|
"bookmarks": "Marcadores",
|
||||||
"built_at": "Compilado {0}",
|
"built_at": "Compilado {0}",
|
||||||
|
"compose": "Redactar",
|
||||||
"conversations": "Conversaciones",
|
"conversations": "Conversaciones",
|
||||||
"explore": "Explorar",
|
"explore": "Explorar",
|
||||||
"favourites": "Favoritas",
|
"favourites": "Favoritas",
|
||||||
"federated": "Federados",
|
"federated": "Federados",
|
||||||
"home": "Inicio",
|
"home": "Inicio",
|
||||||
|
"list": "Lista",
|
||||||
|
"lists": "Listas",
|
||||||
"local": "Local",
|
"local": "Local",
|
||||||
"muted_users": "Usuarios silenciados",
|
"muted_users": "Usuarios silenciados",
|
||||||
"notifications": "Notificaciones",
|
"notifications": "Notificaciones",
|
||||||
|
"privacy": "Privacidad",
|
||||||
"profile": "Perfil",
|
"profile": "Perfil",
|
||||||
"search": "Buscar",
|
"search": "Buscar",
|
||||||
"select_feature_flags": "Cambiar marcadores de funcionalidades",
|
"select_feature_flags": "Cambiar marcadores de funcionalidades",
|
||||||
|
@ -204,6 +256,8 @@
|
||||||
},
|
},
|
||||||
"pwa": {
|
"pwa": {
|
||||||
"dismiss": "Descartar",
|
"dismiss": "Descartar",
|
||||||
|
"install": "Instalar",
|
||||||
|
"install_title": "Instalar Elk",
|
||||||
"title": "Nueva versión de Elk disponible",
|
"title": "Nueva versión de Elk disponible",
|
||||||
"update": "Actualizar",
|
"update": "Actualizar",
|
||||||
"update_available_short": "Actualiza Elk",
|
"update_available_short": "Actualiza Elk",
|
||||||
|
@ -243,7 +297,8 @@
|
||||||
"sponsors": "Patrocinadores",
|
"sponsors": "Patrocinadores",
|
||||||
"sponsors_body_1": "Elk es posible gracias al generoso patrocinio y apoyo de:",
|
"sponsors_body_1": "Elk es posible gracias al generoso patrocinio y apoyo de:",
|
||||||
"sponsors_body_2": "Y todas las empresas y personas que patrocinan al equipo de Elk y sus miembros.",
|
"sponsors_body_2": "Y todas las empresas y personas que patrocinan al equipo de Elk y sus miembros.",
|
||||||
"sponsors_body_3": "Si estás disfrutando de la aplicación, considera patrocinarnos:"
|
"sponsors_body_3": "Si estás disfrutando de la aplicación, considera patrocinarnos:",
|
||||||
|
"version": "Versión"
|
||||||
},
|
},
|
||||||
"account_settings": {
|
"account_settings": {
|
||||||
"description": "Edita los ajustes de tu cuenta en la interfaz de Mastodon",
|
"description": "Edita los ajustes de tu cuenta en la interfaz de Mastodon",
|
||||||
|
@ -255,7 +310,9 @@
|
||||||
"default": " (por defecto)",
|
"default": " (por defecto)",
|
||||||
"font_size": "Tamaño de Letra",
|
"font_size": "Tamaño de Letra",
|
||||||
"label": "Interfaz",
|
"label": "Interfaz",
|
||||||
"light_mode": "Modo claro"
|
"light_mode": "Modo claro",
|
||||||
|
"system_mode": "Sistema",
|
||||||
|
"theme_color": "Color de tema"
|
||||||
},
|
},
|
||||||
"language": {
|
"language": {
|
||||||
"display_language": "Idioma de pantalla",
|
"display_language": "Idioma de pantalla",
|
||||||
|
@ -312,10 +369,15 @@
|
||||||
},
|
},
|
||||||
"notifications_settings": "Notificaciones",
|
"notifications_settings": "Notificaciones",
|
||||||
"preferences": {
|
"preferences": {
|
||||||
|
"enable_autoplay": "Habilitar auto-reproducción",
|
||||||
"github_cards": "Tarjetas GitHub",
|
"github_cards": "Tarjetas GitHub",
|
||||||
|
"grayscale_mode": "Modo escala de grises",
|
||||||
|
"hide_account_hover_card": "Ocultar tarjeta flotante de cuenta",
|
||||||
"hide_boost_count": "Ocultar contador de retoots",
|
"hide_boost_count": "Ocultar contador de retoots",
|
||||||
"hide_favorite_count": "Ocultar contador de favoritas",
|
"hide_favorite_count": "Ocultar contador de favoritas",
|
||||||
"hide_follower_count": "Ocultar contador de seguidores",
|
"hide_follower_count": "Ocultar contador de seguidores",
|
||||||
|
"hide_reply_count": "Ocultar contador de respuestas",
|
||||||
|
"hide_translation": "Ocultar traducción",
|
||||||
"label": "Preferencias",
|
"label": "Preferencias",
|
||||||
"title": "Funcionalidades experimentales",
|
"title": "Funcionalidades experimentales",
|
||||||
"user_picker": "Selector de usuarios",
|
"user_picker": "Selector de usuarios",
|
||||||
|
@ -332,8 +394,8 @@
|
||||||
"title": "Editar perfil"
|
"title": "Editar perfil"
|
||||||
},
|
},
|
||||||
"featured_tags": {
|
"featured_tags": {
|
||||||
"description": "Las personas pueden navegar por tus publicaciones públicas con estos hashtags.",
|
"description": "Las personas pueden navegar por tus publicaciones públicas con estas etiquetas.",
|
||||||
"label": "Hashtags destacados"
|
"label": "Etiquetas destacados"
|
||||||
},
|
},
|
||||||
"label": "Perfil"
|
"label": "Perfil"
|
||||||
},
|
},
|
||||||
|
@ -355,6 +417,7 @@
|
||||||
"edited": "(Editado)",
|
"edited": "(Editado)",
|
||||||
"editing": "Editando",
|
"editing": "Editando",
|
||||||
"loading": "Cargando...",
|
"loading": "Cargando...",
|
||||||
|
"publish_failed": "Fallo en la publicación",
|
||||||
"publishing": "Publicando",
|
"publishing": "Publicando",
|
||||||
"upload_failed": "Subida fallida",
|
"upload_failed": "Subida fallida",
|
||||||
"uploading": "Subiendo..."
|
"uploading": "Subiendo..."
|
||||||
|
@ -389,8 +452,10 @@
|
||||||
"edited": "editado el {0}"
|
"edited": "editado el {0}"
|
||||||
},
|
},
|
||||||
"tab": {
|
"tab": {
|
||||||
|
"accounts": "Cuentas",
|
||||||
"for_you": "Para ti",
|
"for_you": "Para ti",
|
||||||
"hashtags": "Hashtags",
|
"hashtags": "Etiquetas",
|
||||||
|
"list": "Lista",
|
||||||
"media": "Multimedia",
|
"media": "Multimedia",
|
||||||
"news": "Noticias",
|
"news": "Noticias",
|
||||||
"notifications_all": "Todas",
|
"notifications_all": "Todas",
|
||||||
|
@ -454,12 +519,13 @@
|
||||||
"explore_links_intro": "Estas noticias están siendo comentadas ahora mismo por los usuarios de este y otros servidores de la red descentralizada.",
|
"explore_links_intro": "Estas noticias están siendo comentadas ahora mismo por los usuarios de este y otros servidores de la red descentralizada.",
|
||||||
"explore_posts_intro": "Estos mensajes de este y otros servidores de la red descentralizada están siendo tendencia ahora mismo en este servidor.",
|
"explore_posts_intro": "Estos mensajes de este y otros servidores de la red descentralizada están siendo tendencia ahora mismo en este servidor.",
|
||||||
"explore_tags_intro": "Estas etiquetas están siendo tendencia ahora mismo entre los usuarios de este y otros servidores de la red descentralizada.",
|
"explore_tags_intro": "Estas etiquetas están siendo tendencia ahora mismo entre los usuarios de este y otros servidores de la red descentralizada.",
|
||||||
|
"publish_failed": "Cierra los mensajes fallidos en la parte superior del editor para volver a publicar",
|
||||||
"toggle_code_block": "Cambiar a bloque de código"
|
"toggle_code_block": "Cambiar a bloque de código"
|
||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"add_existing": "Agregar una cuenta existente",
|
"add_existing": "Agregar una cuenta existente",
|
||||||
"server_address_label": "Dirección de Servidor de Mastodon",
|
"server_address_label": "Dirección de Servidor de Mastodon",
|
||||||
"sign_in_desc": "Inicia sesión para seguir perfiles o hashtags, marcar cómo favorita, compartir y responder a publicaciones, o interactuar con un servidor diferente con tu usuario.",
|
"sign_in_desc": "Inicia sesión para seguir perfiles o etiquetas, marcar cómo favorita, compartir y responder a publicaciones, o interactuar con un servidor diferente con tu usuario.",
|
||||||
"sign_in_notice_title": "Viendo información pública de {0}",
|
"sign_in_notice_title": "Viendo información pública de {0}",
|
||||||
"sign_out_account": "Cerrar sesión {0}",
|
"sign_out_account": "Cerrar sesión {0}",
|
||||||
"tip_no_account": "Si aún no tienes una cuenta Mastodon, {0}.",
|
"tip_no_account": "Si aún no tienes una cuenta Mastodon, {0}.",
|
||||||
|
|
|
@ -1,57 +1,57 @@
|
||||||
{
|
{
|
||||||
"a11y": {
|
"a11y": {
|
||||||
"loading_page": "Ladataan sivu, odottakaa",
|
"loading_page": "Lataan, odota hetki",
|
||||||
"loading_titled_page": "Ladataan sivu {0}, odottakaa",
|
"loading_titled_page": "Lataan sivua {0}, odota hetki",
|
||||||
"locale_changed": "Kieli vaihtoi kieleksi {0}",
|
"locale_changed": "Vaihdettu kieleksi {0}",
|
||||||
"locale_changing": "Kielen vaihto, odottakaa",
|
"locale_changing": "Vaihdan kieltä, odota hetki",
|
||||||
"route_loaded": "Sivu {0} ladattu"
|
"route_loaded": "Sivu {0} ladattu"
|
||||||
},
|
},
|
||||||
"account": {
|
"account": {
|
||||||
"avatar_description": "{0}:n avatar",
|
"avatar_description": "{0}:n avatar",
|
||||||
"blocked_by": "Olet estetty tämän käyttäjän toimesta.",
|
"blocked_by": "Käyttäjä on estänyt sinut.",
|
||||||
"blocked_domains": "Estetyt domeenit",
|
"blocked_domains": "Estetyt domainit",
|
||||||
"blocked_users": "Estetyt käyttäjät",
|
"blocked_users": "Estetyt käyttäjät",
|
||||||
"blocking": "Estetty",
|
"blocking": "Estetty",
|
||||||
"bot": "BOT",
|
"bot": "BOT",
|
||||||
"favourites": "Favorites",
|
"favourites": "Suosikit",
|
||||||
"follow": "Seuraa",
|
"follow": "Seuraa",
|
||||||
"follow_back": "Seuraa takaisin",
|
"follow_back": "Seuraa takaisin",
|
||||||
"follow_requested": "Pyydetty",
|
"follow_requested": "Pyydetty",
|
||||||
"followers": "Seuraajat",
|
"followers": "Seuraajat",
|
||||||
"followers_count": "{0} Seuraajaa|{0} Seuraaja|{0} Seuraajaa",
|
"followers_count": "{0} seuraajaa|{0} seuraaja|{0} seuraajaa",
|
||||||
"following": "Seuraamassa",
|
"following": "Seuraamassa",
|
||||||
"following_count": "{0} Seuraamassa",
|
"following_count": "{0} seuraa",
|
||||||
"follows_you": "Seuraa sinua",
|
"follows_you": "Seuraa sinua",
|
||||||
"go_to_profile": "Mene profiiliin",
|
"go_to_profile": "Mene profiiliin",
|
||||||
"joined": "Liittyi",
|
"joined": "Liittyi",
|
||||||
"moved_title": "on kertonut, että uusi tilinsä on nyt:",
|
"moved_title": "on siirtynyt käyttämään tiliä:",
|
||||||
"muted_users": "Hiljennetyt käyttäjät",
|
"muted_users": "Hiljennetyt käyttäjät",
|
||||||
"muting": "Hiljennetty",
|
"muting": "Hiljennetty",
|
||||||
"mutuals": "Molemminsuuntaiset",
|
"mutuals": "Molemminsuuntaiset",
|
||||||
"notifications_on_post_disable": "Älä enää ilmoita, kun {username} julkaisee",
|
"notifications_on_post_disable": "Älä enää ilmoita, kun {username} julkaisee",
|
||||||
"notifications_on_post_enable": "Ilmoita, kun {username} julkaisee",
|
"notifications_on_post_enable": "Ilmoita, kun {username} julkaisee",
|
||||||
"pinned": "Kiinnitetty",
|
"pinned": "Kiinnitetty",
|
||||||
"posts": "Julkaisut",
|
"posts": "Viestit",
|
||||||
"posts_count": "{0} Julkaisua|{0} Julkaisu|{0} Julkaisua",
|
"posts_count": "{0} viestiä|{0} viestiä|{0} viestiä",
|
||||||
"profile_description": "{0}:n profiilin otsikko",
|
"profile_description": "{0}:n profiilin otsikko",
|
||||||
"profile_unavailable": "Profiilia ei ole",
|
"profile_unavailable": "Profiilia ei löydy",
|
||||||
"unblock": "Poista esto",
|
"unblock": "Poista esto",
|
||||||
"unfollow": "Lopeta seuraamista",
|
"unfollow": "Lopeta seuraaminen",
|
||||||
"unmute": "Poista hiljennys",
|
"unmute": "Poista hiljennys",
|
||||||
"view_other_followers": "Muiden ilmentymien seuraajat eivät välttämättä näy.",
|
"view_other_followers": "Seuraajat muilta palvelimilta eivät välttämättä näy.",
|
||||||
"view_other_following": "Muiden ilmentymien seurattavat eivät välttämättä näy."
|
"view_other_following": "Seuratut muilla palvelimilla eivät välttämättä näy."
|
||||||
},
|
},
|
||||||
"action": {
|
"action": {
|
||||||
"apply": "Sovella",
|
"apply": "Aseta",
|
||||||
"bookmark": "Kirjanmerkki",
|
"bookmark": "Kirjanmerkki",
|
||||||
"bookmarked": "Kirjanmerkitty",
|
"bookmarked": "Kirjanmerkitty",
|
||||||
"boost": "Jaa",
|
"boost": "Jaa edelleen",
|
||||||
"boost_count": "{0}",
|
"boost_count": "{0}",
|
||||||
"boosted": "Jaettu",
|
"boosted": "Jaettu",
|
||||||
"clear_publish_failed": "Siivoa julkaisuvirheet",
|
"clear_publish_failed": "Tyhjennä julkaisuvirheet",
|
||||||
"clear_upload_failed": "Siivoa tiedoston latausvirheet",
|
"clear_upload_failed": "Tyhjennä lähetysvirheet",
|
||||||
"close": "Sulje",
|
"close": "Sulje",
|
||||||
"compose": "Muodosta",
|
"compose": "Kirjoita",
|
||||||
"confirm": "Vahvista",
|
"confirm": "Vahvista",
|
||||||
"edit": "Muokkaa",
|
"edit": "Muokkaa",
|
||||||
"enter_app": "Avaa App",
|
"enter_app": "Avaa App",
|
||||||
|
@ -64,15 +64,15 @@
|
||||||
"publish": "Julkaise",
|
"publish": "Julkaise",
|
||||||
"reply": "Vastaa",
|
"reply": "Vastaa",
|
||||||
"reply_count": "{0}",
|
"reply_count": "{0}",
|
||||||
"reset": "Resetoi",
|
"reset": "Palauta",
|
||||||
"save": "Tallenna",
|
"save": "Tallenna",
|
||||||
"save_changes": "Tallenna muutokset",
|
"save_changes": "Tallenna muutokset",
|
||||||
"sign_in": "Kirjoittaudu sisään",
|
"sign_in": "Kirjoittaudu sisään",
|
||||||
"switch_account": "Vaihda tili",
|
"switch_account": "Vaihda tiliä",
|
||||||
"vote": "Äänestä"
|
"vote": "Äänestä"
|
||||||
},
|
},
|
||||||
"app_desc_short": "Ketterä Mastodonin web-klientti",
|
"app_desc_short": "Ketterä web-sovellus Mastodonille",
|
||||||
"app_logo": "Elk Logo",
|
"app_logo": "Elk logo",
|
||||||
"app_name": "Elk",
|
"app_name": "Elk",
|
||||||
"attachment": {
|
"attachment": {
|
||||||
"edit_title": "Kuvaus",
|
"edit_title": "Kuvaus",
|
||||||
|
@ -81,21 +81,21 @@
|
||||||
"command": {
|
"command": {
|
||||||
"activate": "Aktivoi",
|
"activate": "Aktivoi",
|
||||||
"complete": "Täydellinen",
|
"complete": "Täydellinen",
|
||||||
"compose_desc": "Kirjoita uusi julkaisu",
|
"compose_desc": "Kirjoita uusi viesti",
|
||||||
"n-people-in-the-past-n-days": "{0} ihmistä viime {1} päivän aikana",
|
"n-people-in-the-past-n-days": "{0} ihmistä viime {1} päivän aikana",
|
||||||
"select_lang": "Valitse kieli",
|
"select_lang": "Valitse kieli",
|
||||||
"sign_in_desc": "Lisää olemassa oleva tili",
|
"sign_in_desc": "Kirjaudu tilille",
|
||||||
"switch_account": "Vaihda tiliin {0}",
|
"switch_account": "Katso tiliä {0}",
|
||||||
"switch_account_desc": "Vaihda toiseen tiliin",
|
"switch_account_desc": "Vaihda toiseen tiliin",
|
||||||
"toggle_dark_mode": "Vaihda väriskeema",
|
"toggle_dark_mode": "Vaihda tumma/vaalea",
|
||||||
"toggle_zen_mode": "Vaihda zen-tila"
|
"toggle_zen_mode": "Vaihda zen-tilaan"
|
||||||
},
|
},
|
||||||
"common": {
|
"common": {
|
||||||
"end_of_list": "Listan loppu",
|
"end_of_list": "Listan lopussa",
|
||||||
"error": "VIRHE",
|
"error": "VIRHE",
|
||||||
"in": "in",
|
"in": "in",
|
||||||
"not_found": "404 Ei löydy",
|
"not_found": "404 ei löydy",
|
||||||
"offline_desc": "Näyttää siltä, että olet offline-tilassa. Tarkista verkkoyhteytesi."
|
"offline_desc": "Yhteyttä verkkoon ei ole."
|
||||||
},
|
},
|
||||||
"compose": {
|
"compose": {
|
||||||
"draft_title": "Luonnos {0}",
|
"draft_title": "Luonnos {0}",
|
||||||
|
@ -103,42 +103,42 @@
|
||||||
},
|
},
|
||||||
"confirm": {
|
"confirm": {
|
||||||
"block_account": {
|
"block_account": {
|
||||||
"cancel": "Peruuta",
|
"cancel": "Peru",
|
||||||
"confirm": "Estä",
|
"confirm": "Estä",
|
||||||
"title": "Oletko varma, että haluat estää {0}?"
|
"title": "Oletko varma, että haluat estää {0}?"
|
||||||
},
|
},
|
||||||
"block_domain": {
|
"block_domain": {
|
||||||
"cancel": "Peruuta",
|
"cancel": "Peru",
|
||||||
"confirm": "Estä",
|
"confirm": "Estä",
|
||||||
"title": "Oletko varma, että haluat estää {0}?"
|
"title": "Oletko varma, että haluat estää {0}?"
|
||||||
},
|
},
|
||||||
"common": {
|
"common": {
|
||||||
"cancel": "Peruuta",
|
"cancel": "Peru",
|
||||||
"confirm": "OK"
|
"confirm": "OK"
|
||||||
},
|
},
|
||||||
"delete_posts": {
|
"delete_posts": {
|
||||||
"cancel": "Peruuta",
|
"cancel": "Peru",
|
||||||
"confirm": "Poista",
|
"confirm": "Poista",
|
||||||
"title": "Oletko varma, että haluat poistaa tämä julkaisu?"
|
"title": "Oletko varma, että haluat poistaa tämän viestin?"
|
||||||
},
|
},
|
||||||
"mute_account": {
|
"mute_account": {
|
||||||
"cancel": "Peruuta",
|
"cancel": "Peru",
|
||||||
"confirm": "Hiljennä",
|
"confirm": "Hiljennä",
|
||||||
"title": "Oletko varma, että hasluat hiljentää {0}?"
|
"title": "Oletko varma, että haluat hiljentää {0}?"
|
||||||
},
|
},
|
||||||
"show_reblogs": {
|
"show_reblogs": {
|
||||||
"cancel": "Peruuta",
|
"cancel": "Peru",
|
||||||
"confirm": "Näytä",
|
"confirm": "Näytä",
|
||||||
"title": "Oletko varma, että haluat jakaa {0}:n julkaisuja?"
|
"title": "Oletko varma, että haluat nähdä {0}:n edelleenjaot?"
|
||||||
},
|
},
|
||||||
"unfollow": {
|
"unfollow": {
|
||||||
"cancel": "Peruuta",
|
"cancel": "Peru",
|
||||||
"confirm": "Lopeta seuraamista",
|
"confirm": "Älä seuraa",
|
||||||
"title": "Oletko varma, että haluat lopettaa seuraamista?"
|
"title": "Oletko varma, että haluat lopettaa seuraamisen?"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"conversation": {
|
"conversation": {
|
||||||
"with": "with"
|
"with": "ja"
|
||||||
},
|
},
|
||||||
"custom_cards": {
|
"custom_cards": {
|
||||||
"stackblitz": {
|
"stackblitz": {
|
||||||
|
@ -148,150 +148,152 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"account_not_found": "Tili {0} ei löydy",
|
"account_not_found": "Tiliä {0} ei löydy",
|
||||||
"explore-list-empty": "Mitään ei trendaa juuri nyt. Katso uudelleen myöhemmin!",
|
"explore-list-empty": "Nyt ei löydy mitään nousevaa sisältöä. Tarkista uudelleen myöhemmin!",
|
||||||
"file_size_cannot_exceed_n_mb": "Tiedosto ei saa olla suurempi kuin {0}MB",
|
"file_size_cannot_exceed_n_mb": "Tiedosto ei saa olla suurempi kuin {0}MB",
|
||||||
"sign_in_error": "Yhteyden muodostus palvelimeen ei onnistu.",
|
"sign_in_error": "Yhteyden muodostus palvelimeen ei onnistu.",
|
||||||
"status_not_found": "Julkaisu ei löydy",
|
"status_not_found": "Viestiä ei löydy",
|
||||||
"unsupported_file_format": "Ei-tuettu tiedostoformaatti"
|
"unsupported_file_format": "Tiedostomuoto ei ole tuettu"
|
||||||
},
|
},
|
||||||
"help": {
|
"help": {
|
||||||
"desc_highlight": "Odota paikoitellen joitakin bugeja ja puuttuvia ominaisuuksia.",
|
"desc_highlight": "Saatat löytää bugeja ja puuttuvia ominaisuuksia.",
|
||||||
"desc_para1": "Kiitos, että haluat kokeilla Elkiä, vielä keskeneräinen Mastodonin web-klientti!",
|
"desc_para1": "Kiitos, että kokeilet Elkiä, työn alla olevaa web-sovellustamme Mastodonille!",
|
||||||
"desc_para2": "teemme kovasti työtä sen jatkuvaksi kehittämiseksi ja parantamiseksi.",
|
"desc_para2": "teemme kovasti työtä sen sitä kehittäessämme ja parantaessamme.",
|
||||||
"desc_para3": "Kehitystyön auttamiseksi voit tukea Tiimiä GitHub Sponsorsin kautta. Toivomme, että nautit Elkin käytöstä!",
|
"desc_para3": "Voit auttaa kehitystyötä tukemalla tiimiä GitHub Sponsorina. Toivomme, että nautit Elkin käytöstä!",
|
||||||
"desc_para4": "Elk on avoimen lähdekoodin ohjelmisto. Jos haluat auttaa sen testauksella, palautteen antamisella tai antamalla koodia,",
|
"desc_para4": "Elk on avointa lähdekoodia. Jos haluat auttaa testaamalla, palautteella tai koodia lahjoittaen,",
|
||||||
"desc_para5": "ota meihin yhteyttä GitHubilla",
|
"desc_para5": "ota meihin yhteyttä GitHubissa",
|
||||||
"desc_para6": "ja aktivoidu.",
|
"desc_para6": "ja liity joukkoon.",
|
||||||
"title": "Elk on esikokeiluvaiheessä!"
|
"title": "Elk on ennakkokäytössä ennen julkaisua!"
|
||||||
},
|
},
|
||||||
"language": {
|
"language": {
|
||||||
"search": "Haku"
|
"search": "Hae"
|
||||||
},
|
},
|
||||||
"menu": {
|
"menu": {
|
||||||
"block_account": "Estä {0}",
|
"block_account": "Estä {0}",
|
||||||
"block_domain": "Estä domeeni {0}",
|
"block_domain": "Estä domain {0}",
|
||||||
"copy_link_to_post": "Kopioi linkki tähän julkaisuun",
|
"copy_link_to_post": "Kopioi linkki tähän viestiin",
|
||||||
"delete": "Poista",
|
"delete": "Poista",
|
||||||
"delete_and_redraft": "Poista & kirjoita uudelleen",
|
"delete_and_redraft": "Poista & kirjoita uudelleen",
|
||||||
"direct_message_account": "Suora viesti {0}",
|
"direct_message_account": "Lähetä viesti {0}:lle",
|
||||||
"edit": "Muokkaa",
|
"edit": "Muokkaa",
|
||||||
"hide_reblogs": "Piilota jaot {0}:lta",
|
"hide_reblogs": "Piilota jaot {0}:lta",
|
||||||
"mention_account": "Mainitse {0}",
|
"mention_account": "Mainitse {0} viestissä",
|
||||||
"mute_account": "Hiljennä {0}",
|
"mute_account": "Hiljennä {0}",
|
||||||
"mute_conversation": "Hiljennä tämä julkaisu",
|
"mute_conversation": "Hiljennä tämä keskustelu",
|
||||||
"open_in_original_site": "Avaa alkuperäispalvelimella",
|
"open_in_original_site": "Avaa alkulähteellä",
|
||||||
"pin_on_profile": "Kiinnitä profiiliin",
|
"pin_on_profile": "Kiinnitä profiiliisi",
|
||||||
"share_post": "Jaa tämä julkaisu",
|
"share_post": "Jaa edelleen",
|
||||||
"show_favourited_and_boosted_by": "Näytä, kuka tykkäsi ja jakoi",
|
"show_favourited_and_boosted_by": "Näytä, kuka tykkäsi ja jakoi",
|
||||||
"show_reblogs": "Näytä {0}:n jaot",
|
"show_reblogs": "Näytä {0}:n edelleenjaot",
|
||||||
"show_untranslated": "Näytä ilman käännöstä",
|
"show_untranslated": "Piilota käännös",
|
||||||
"toggle_theme": {
|
"toggle_theme": {
|
||||||
"dark": "Vaihda tummaan väriskeemaan",
|
"dark": "Vaihda tummaan väriskeemaan",
|
||||||
"light": "Vaihda vaaleaan väriskeemaan"
|
"light": "Vaihda vaaleaan väriskeemaan"
|
||||||
},
|
},
|
||||||
"translate_post": "Käännä julkaisu",
|
"translate_post": "Käännä viesti",
|
||||||
"unblock_account": "Poista tilin {0} esto",
|
"unblock_account": "Poista tilin {0} esto",
|
||||||
"unblock_domain": "Poista domeenin {0} esto",
|
"unblock_domain": "Poista esto domainilta {0}",
|
||||||
"unmute_account": "Poista tilin {0} hiljennys",
|
"unmute_account": "Älä hiljennä {0}",
|
||||||
"unmute_conversation": "Poista tämän julkaisun hiljennys",
|
"unmute_conversation": "Älä hiljennä tätä keskustelua",
|
||||||
"unpin_on_profile": "Irroita profiilista"
|
"unpin_on_profile": "Irrota profiilistasi"
|
||||||
},
|
},
|
||||||
"nav": {
|
"nav": {
|
||||||
"back": "Go back",
|
"back": "Go back",
|
||||||
"blocked_domains": "Estetyt domeenit",
|
"blocked_domains": "Estetyt domainit",
|
||||||
"blocked_users": "Estetyt käyttäjät",
|
"blocked_users": "Estetyt käyttäjät",
|
||||||
"bookmarks": "Kirjanmerkit",
|
"bookmarks": "Kirjanmerkkisi",
|
||||||
"built_at": "Viime build: {0}",
|
"built_at": "Versio tehty {0}",
|
||||||
"compose": "Muodosta",
|
"compose": "Muodosta",
|
||||||
"conversations": "Keskustelut",
|
"conversations": "Keskustelut",
|
||||||
"explore": "Tutki",
|
"explore": "Löydä uutta",
|
||||||
"favourites": "Tykkäykset",
|
"favourites": "Tykkäyksesi",
|
||||||
"federated": "Federoitu",
|
"federated": "Federoitu",
|
||||||
"home": "Koti",
|
"home": "Koti",
|
||||||
"local": "Paikallinen",
|
"list": "Lista",
|
||||||
|
"lists": "Listat",
|
||||||
|
"local": "Paikalliset",
|
||||||
"muted_users": "Hiljennetyt käyttäjät",
|
"muted_users": "Hiljennetyt käyttäjät",
|
||||||
"notifications": "Ilmoitukset",
|
"notifications": "Ilmoitukset",
|
||||||
"profile": "Profiili",
|
"profile": "Profiili",
|
||||||
"search": "Haku",
|
"search": "Haku",
|
||||||
"select_feature_flags": "Aktivoi Ominaisuusliput",
|
"select_feature_flags": "Aktivoi Ominaisuusliput",
|
||||||
"select_font_size": "Fonttikoko",
|
"select_font_size": "Kirjasinkoko",
|
||||||
"select_language": "Näytön kieli",
|
"select_language": "Sovelluksen kieli",
|
||||||
"settings": "Asetukset",
|
"settings": "Asetukset",
|
||||||
"show_intro": "Näytä intro",
|
"show_intro": "Näytä intro",
|
||||||
"toggle_theme": "Vaihda väriskeema",
|
"toggle_theme": "Vaihda tumma/vaalea",
|
||||||
"zen_mode": "Zen-moodi"
|
"zen_mode": "Zen-tila"
|
||||||
},
|
},
|
||||||
"notification": {
|
"notification": {
|
||||||
"favourited_post": "tykkäsi julkaisustasi",
|
"favourited_post": "tykkäsi viestistäsi",
|
||||||
"followed_you": "seurasi sinua",
|
"followed_you": "seurasi sinua",
|
||||||
"followed_you_count": "{0} ihmistä seurasi sinua|{0} henkilö seurasi sinua|{0} ihmistä seurasi sinua",
|
"followed_you_count": "{0} ihmistä seurasi sinua|{0} henkilö seurasi sinua|{0} ihmistä seurasi sinua",
|
||||||
"missing_type": "MISSING notification.type:",
|
"missing_type": "MISSING notification.type:",
|
||||||
"reblogged_post": "jakoi julkaisusi",
|
"reblogged_post": "jakoi viestisi",
|
||||||
"request_to_follow": "pyysi saada seurata sinua",
|
"request_to_follow": "pyysi saada seurata sinua",
|
||||||
"signed_up": "on kirjautunut",
|
"signed_up": "liittyi",
|
||||||
"update_status": "päivitti julkaisunsa"
|
"update_status": "päivitti viestiään"
|
||||||
},
|
},
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"content_warning": "Kirjoita varoituksesi tähän",
|
"content_warning": "Kirjoita aiheesi",
|
||||||
"default_1": "Mitä tuumaat?",
|
"default_1": "Mitä tuumaat?",
|
||||||
"reply_to_account": "Vastaus {0}:lle",
|
"reply_to_account": "Vastaus {0}:lle",
|
||||||
"replying": "Vastaaminen",
|
"replying": "Vastauksesi",
|
||||||
"the_thread": "ketju"
|
"the_thread": "säie"
|
||||||
},
|
},
|
||||||
"pwa": {
|
"pwa": {
|
||||||
"dismiss": "Dismiss",
|
"dismiss": "Hylkää",
|
||||||
"title": "New Elk update available!",
|
"title": "Uusi versio käytettävissä!",
|
||||||
"update": "Update",
|
"update": "Päivitä",
|
||||||
"update_available_short": "Update Elk",
|
"update_available_short": "Päivitä Elk",
|
||||||
"webmanifest": {
|
"webmanifest": {
|
||||||
"canary": {
|
"canary": {
|
||||||
"description": "Ketterä Mastodonin web-klientti (canary)",
|
"description": "Ketterä web-sovellus Mastodonille (testiversio)",
|
||||||
"name": "Elk (canary)",
|
"name": "Elk (canary)",
|
||||||
"short_name": "Elk (canary)"
|
"short_name": "Elk (canary)"
|
||||||
},
|
},
|
||||||
"dev": {
|
"dev": {
|
||||||
"description": "Ketterä Mastodonin web-klientti (dev)",
|
"description": "Ketterä web-sovellus Mastodonille (kehitysversio)",
|
||||||
"name": "Elk (dev)",
|
"name": "Elk (dev)",
|
||||||
"short_name": "Elk (dev)"
|
"short_name": "Elk (dev)"
|
||||||
},
|
},
|
||||||
"preview": {
|
"preview": {
|
||||||
"description": "Ketterä Mastodonin web-klientti (preview)",
|
"description": "Ketterä web-sovellus Mastodonille (esijulkaisu)",
|
||||||
"name": "Elk (preview)",
|
"name": "Elk (preview)",
|
||||||
"short_name": "Elk (preview)"
|
"short_name": "Elk (preview)"
|
||||||
},
|
},
|
||||||
"release": {
|
"release": {
|
||||||
"description": "Ketterä Mastodonin web-klientti",
|
"description": "Ketterä web-sovellus Mastodonille",
|
||||||
"name": "Elk",
|
"name": "Elk",
|
||||||
"short_name": "Elk"
|
"short_name": "Elk"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search_desc": "Etsi ihmisiä & hashtags",
|
"search_desc": "Etsi ihmisiä & aihetunnisteita",
|
||||||
"search_empty": "Nämä hakutermit eivät tuota tulosta"
|
"search_empty": "Tällä haulla ei löytynyt mitään"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"about": {
|
"about": {
|
||||||
"label": "Elk:stä",
|
"label": "Tietoja",
|
||||||
"meet_the_team": "Tapaa tiimi",
|
"meet_the_team": "Tapaa tiimi",
|
||||||
"sponsor_action": "Tue meitä rahallisesti",
|
"sponsor_action": "Tue kehitystä",
|
||||||
"sponsor_action_desc": "Elkin kehitystiimin tukemiseksi",
|
"sponsor_action_desc": "Elkin kehitystiimin tukemiseksi",
|
||||||
"sponsors": "Tukijat",
|
"sponsors": "Tukijat",
|
||||||
"sponsors_body_1": "Elk on mahdollista kiitos seuraavien avokätistä tukea ja apua:",
|
"sponsors_body_1": "Kehityksen mahdollistaa avokätinen tuki ja apu seuraavilta:",
|
||||||
"sponsors_body_2": "Ja kaikki yritykset ja yksilöt, jotka tukevat Elk-tiimiä ja sen jäseniä.",
|
"sponsors_body_2": "Sekä kaikki yritykset ja yksilöt, jotka tukevat Elk-tiimiä ja sen jäseniä.",
|
||||||
"sponsors_body_3": "Jos pidät appista, harkitse tukemista:"
|
"sponsors_body_3": "Jos pidät sovelluksesta, harkitse tukemista:"
|
||||||
},
|
},
|
||||||
"account_settings": {
|
"account_settings": {
|
||||||
"description": "Muokkaa tiliasetuksesi Mastodonin käyttöliittymässä",
|
"description": "Muokkaa tiliasetuksiasi koti-Mastodonissasi",
|
||||||
"label": "Tiliasetukset"
|
"label": "Tiliasetukset"
|
||||||
},
|
},
|
||||||
"interface": {
|
"interface": {
|
||||||
"color_mode": "Väriskeema",
|
"color_mode": "Pohjaväri",
|
||||||
"dark_mode": "Tumma",
|
"dark_mode": "Tumma",
|
||||||
"default": " (oletus)",
|
"default": " (oletus)",
|
||||||
"font_size": "Fonttikoko",
|
"font_size": "Kirjasinkoko",
|
||||||
"label": "Liitäntä",
|
"label": "Käyttöliittymä",
|
||||||
"light_mode": "Vaalea",
|
"light_mode": "Vaalea",
|
||||||
"size_label": {
|
"size_label": {
|
||||||
"lg": "Suuri",
|
"lg": "Suuri",
|
||||||
|
@ -300,11 +302,11 @@
|
||||||
"xl": "Ekstra-suuri",
|
"xl": "Ekstra-suuri",
|
||||||
"xs": "Ekstra-pieni"
|
"xs": "Ekstra-pieni"
|
||||||
},
|
},
|
||||||
"system_mode": "System",
|
"system_mode": "Laitteen asetus",
|
||||||
"theme_color": "Theme Color"
|
"theme_color": "Korostusväri"
|
||||||
},
|
},
|
||||||
"language": {
|
"language": {
|
||||||
"display_language": "Näytön kieli",
|
"display_language": "Sovelluksen kieli",
|
||||||
"label": "Kieli"
|
"label": "Kieli"
|
||||||
},
|
},
|
||||||
"notifications": {
|
"notifications": {
|
||||||
|
@ -318,10 +320,10 @@
|
||||||
"follow": "Uudet seuraajat",
|
"follow": "Uudet seuraajat",
|
||||||
"mention": "Maininnat",
|
"mention": "Maininnat",
|
||||||
"poll": "Äänestykset",
|
"poll": "Äänestykset",
|
||||||
"reblog": "Jaa julkaisusi",
|
"reblog": "Edelleenjaot",
|
||||||
"title": "Mitkä ilmoitukset vastaanotettava?"
|
"title": "Mitkä ilmoitukset vastaanotettava?"
|
||||||
},
|
},
|
||||||
"description": "Ota vastaan ilmoitukset, myös kun et ole käyttämässä Elkiä.",
|
"description": "Vastaanota ilmoituksia taustalla.",
|
||||||
"instructions": "Muista tallentaa muutokset @:settings.notifications.push_notifications.save_settings -painikkeella!",
|
"instructions": "Muista tallentaa muutokset @:settings.notifications.push_notifications.save_settings -painikkeella!",
|
||||||
"label": "Push-ilmoitusten asetukset",
|
"label": "Push-ilmoitusten asetukset",
|
||||||
"policy": {
|
"policy": {
|
||||||
|
@ -331,38 +333,42 @@
|
||||||
"none": "Ei keneltäkään",
|
"none": "Ei keneltäkään",
|
||||||
"title": "Keneltä voin saada ilmoituksia?"
|
"title": "Keneltä voin saada ilmoituksia?"
|
||||||
},
|
},
|
||||||
"save_settings": "Tallenna asetukset",
|
"save_settings": "Vahvista asetukset",
|
||||||
"subscription_error": {
|
"subscription_error": {
|
||||||
"clear_error": "Siivoa virhe",
|
"clear_error": "Siivoa virhe",
|
||||||
"permission_denied": "Lupa evätty: aktivoi ilmoitukset selaimessasi.",
|
"permission_denied": "Lupa evätty: aktivoi ilmoitukset selaimessasi.",
|
||||||
"request_error": "Virhe tapahtui, kun haettiin tilaus, yritä uudestaan ja jos virhe toistuu, ole hyvä ja raportoi asiasta Elkin koodivarannolle.",
|
"request_error": "Ilmoitusten tilaamisessa tapahtui virhe. Yritä uudestaan ja jos virhe toistuu, ole hyvä ja raportoi asiasta Elkin kehitystiimille.",
|
||||||
"title": "Ei voitu tilata push-ilmoituksia",
|
"title": "Push-ilmoitusten tilaaminen ei onnistunut",
|
||||||
"too_many_registrations": "Selaimen rajoitusten seurauksena Elk ei pysty käyttämään push-ilmoituspalvelua useilla tileilla eri palvelimilla. Deaktivoi toisen tilin push-ilmoitukset ja yritä uudelleen."
|
"too_many_registrations": "Selaimen rajoituksista johtuen Elk ei pysty tilaamaan push-ilmoituksia monilta tileiltä eri palvelimilla. Poista ilmoitukset käytöstä toisella tililläsi ja yritä uudelleen."
|
||||||
},
|
},
|
||||||
"title": "Push-ilmoitusten asetukset",
|
"title": "Push-ilmoitusten asetukset",
|
||||||
"undo_settings": "Peruuta muutokset",
|
"undo_settings": "Peru muutokset",
|
||||||
"unsubscribe": "Poista push-imoitukset käytöstä",
|
"unsubscribe": "Poista push-imoitukset käytöstä",
|
||||||
"unsupported": "Selaimesi ei tue push-ilmoituksia.",
|
"unsupported": "Selaimesi ei tue push-ilmoituksia.",
|
||||||
"warning": {
|
"warning": {
|
||||||
"enable_close": "Sulje",
|
"enable_close": "Sulje",
|
||||||
"enable_description": "Saadaksesi ilmoituksia, kun Elk ei ole auki, aktivoi push-ilmoituksia. Voit hallita tarkasti, millaiset vuorovaikutukset tuottavat push-ilmoituksia käyttämällä \"@:settings.notifications.show_btn{'\"'} -painiketta ylhäällä, kun se on aktivoitu.",
|
"enable_description": "Saadaksesi ilmoituksia, kun Elk ei ole auki, tilaa push-ilmoituksia. Tilattuasi ilmoitukset voit valita tarkemmin, millaiset vuorovaikutukset tuottavat ilmoituksia \"@:settings.notifications.show_btn{'\"'} -painikeella.",
|
||||||
"enable_description_desktop": "Saadaksesi ilmoituksia, kun Elk ei ole auki, aktivoi push-ilmoitukset. Voit hallita tarkasti, millaiset vuorovaikutukset tuottavat push-ilmoituksia käyttämällä \"Asetukset > Ilmoitukset > Push-ilmoitusten asetukset\", kun se on aktivoitu.",
|
"enable_description_desktop": "Saadaksesi ilmoituksia, kun Elk ei ole auki, tilaa push-ilmoituksia. Tilattuasi ilmoitukset voit valita tarkemmin, millaiset vuorovaikutukset tuottavat ilmoituksia käyttämällä \"Asetukset > Ilmoitukset > Push-ilmoitusten asetukset\".",
|
||||||
"enable_description_mobile": "Voit myös päästä asetuksiin käyttämällä navigointivalikkoa \"Asetukset > Ilmoitukset > Push-ilmoitusten asetukset\".",
|
"enable_description_mobile": "Voit säätää asetuksia myös valikosta \"Asetukset > Ilmoitukset > Push-ilmoitusten asetukset\".",
|
||||||
"enable_description_settings": "Ilmoitusten vastaanottamiseksi kun Elk ei ole auki, aktivoi push-ilmoitukset. Voit hallita tarkasti, millaiset vuorovaikutukset tuottavat push-ilmoituksia tähän samaan näyttöön, kunhan aktivoit ne.",
|
"enable_description_settings": "Saadaksesi ilmoituksia, kun Elk ei ole auki, tilaa push-ilmoituksia. Tilattuasi ilmoitukset voit valita tarkemmin, millaiset vuorovaikutukset tuottavat ilmoituksia.",
|
||||||
"enable_desktop": "Kytke push-ilmoitukset päälle",
|
"enable_desktop": "Tilaa push-ilmoituksia",
|
||||||
"enable_title": "Älä anna ilmoitukset livahtaa ohitse",
|
"enable_title": "Älä anna tapahtumien livahtaa ohitse",
|
||||||
"re_auth": "Ilmeisesti palvelimesi ei tue push-ilmoituksia. Yritä kirjautua ulos ja kirjautua uudelleen sisään, jos sämä viesti tulee uudelleen, ota yhteys palvelimen admin:iin."
|
"re_auth": "Palvelimesi ei ilmeisesti tue push-ilmoituksia. Voit yrittää uudelleen kirjautumalla ulos ja takaisin sisään. Jos tämä virhe toistuu, ota yhteyttä palvelimesi ylläpitoon."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"show_btn": "Ilmoitusasetuksiin"
|
"show_btn": "Ilmoitusasetuksiin"
|
||||||
},
|
},
|
||||||
"notifications_settings": "Ilmoitukset",
|
"notifications_settings": "Ilmoitukset",
|
||||||
"preferences": {
|
"preferences": {
|
||||||
"github_cards": "GitHub Cards",
|
"enable_autoplay": "Toista automaattisesti",
|
||||||
"grayscale_mode": "Grayscale mode",
|
"github_cards": "GitHub -kortit",
|
||||||
|
"grayscale_mode": "Näytä harmaasävyissä",
|
||||||
|
"hide_account_hover_card": "Piilota tilin nostokortti",
|
||||||
"hide_boost_count": "Piilota jakojen lukumäärä",
|
"hide_boost_count": "Piilota jakojen lukumäärä",
|
||||||
"hide_favorite_count": "Piilota tykkäysten lukumäärä",
|
"hide_favorite_count": "Piilota tykkäysten lukumäärä",
|
||||||
"hide_follower_count": "Piilota seuraajien lukumäärä",
|
"hide_follower_count": "Piilota seuraajien lukumäärä",
|
||||||
|
"hide_reply_count": "Piilota vastausten lukumäärä",
|
||||||
|
"hide_translation": "Älä käytä käännöksiä",
|
||||||
"label": "Valinnat",
|
"label": "Valinnat",
|
||||||
"title": "Kokeellisia ominaisuuksia",
|
"title": "Kokeellisia ominaisuuksia",
|
||||||
"user_picker": "Käyttäjävalitsin",
|
"user_picker": "Käyttäjävalitsin",
|
||||||
|
@ -371,49 +377,49 @@
|
||||||
"profile": {
|
"profile": {
|
||||||
"appearance": {
|
"appearance": {
|
||||||
"bio": "Bio",
|
"bio": "Bio",
|
||||||
"description": "Muokkaa avatar, käyttäjänimi, profiili, jne.",
|
"description": "Muokkaa kuvaasi, nimeäsi ja muita tietojasi",
|
||||||
"display_name": "Kuvaruutunimi",
|
"display_name": "Näkyvä nimesi",
|
||||||
"label": "Visuaalinen ilme",
|
"label": "Visuaalinen ilme",
|
||||||
"profile_metadata": "Profiilin metatiedot",
|
"profile_metadata": "Profiilisi metatiedot",
|
||||||
"profile_metadata_desc": "Saa olla korkeintaan {0} kohdetta taulukkona profiilissa",
|
"profile_metadata_desc": "Voit liittää profiiliisi korkeintaan {0} lisätietoa tai linkkiä",
|
||||||
"title": "Muokkaa profiili"
|
"title": "Muokkaa tietojasi"
|
||||||
},
|
},
|
||||||
"featured_tags": {
|
"featured_tags": {
|
||||||
"description": "Ihmiset voivat katsella julkiset kirjoituksesi näillä hashtageillä.",
|
"description": "Ihmiset voivat katsella julkiset kirjoituksesi näillä hashtageillä.",
|
||||||
"label": "Esillä olevat hashtagit"
|
"label": "Esillä olevat aiheet"
|
||||||
},
|
},
|
||||||
"label": "Profiili"
|
"label": "Profiili"
|
||||||
},
|
},
|
||||||
"select_a_settings": "Valitse asetus",
|
"select_a_settings": "Valitse asetus",
|
||||||
"users": {
|
"users": {
|
||||||
"export": "Käyttäjätokenien vienti",
|
"export": "Kirjaantumistietojen vienti",
|
||||||
"import": "Käyttäjätokenien tuonti",
|
"import": "Kirjaantumistietojen tuonti",
|
||||||
"label": "Kirjoittautujia käyttäjiä"
|
"label": "Kirjaantuneet tilit"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"share-target": {
|
"share-target": {
|
||||||
"description": "Elk voidaan konfiguroida niin, että voit jakaa sisältöä muilta sovelluksilta, yksinkertaisesti installoi Elk laitteeseesi tai tietokoneesi ja ilmoittaudu.",
|
"description": "Voit jakaa sisältöä muilta sovelluksilta asentamalla Elkin laitteeseesi tai tietokoneellesi ja kirjaantumalla sisään.",
|
||||||
"hint": "Jos kaluat jakaa sisältöä Elkin kanssa, Elk on oltava installoituna ja sinun on oltava kirjoittautuna sisään.",
|
"hint": "Jos haluat jakaa sisältöä Elkillä, sovelluksen on oltava asennettu ja sisään kirjautunut.",
|
||||||
"title": "Share with Elk"
|
"title": "Jaa Elkillä"
|
||||||
},
|
},
|
||||||
"state": {
|
"state": {
|
||||||
"attachments_exceed_server_limit": "Liitteiden lukumäärä per julkaisu enemmän kuin sallittu.",
|
"attachments_exceed_server_limit": "Viestissä on liian monta liitettä.",
|
||||||
"attachments_limit_error": "Enemmän kuin sallittu per julkaisu",
|
"attachments_limit_error": "Viestissä on liian monta liitettä",
|
||||||
"edited": "(Muokattu)",
|
"edited": "(Muokattu)",
|
||||||
"editing": "Muokkaa",
|
"editing": "Muokkaa",
|
||||||
"loading": "Lataa...",
|
"loading": "Lataa...",
|
||||||
"publish_failed": "Julkaiseminen epäonnistui",
|
"publish_failed": "Julkaisu epäonnistui",
|
||||||
"publishing": "Julkaisee",
|
"publishing": "Julkaisee",
|
||||||
"upload_failed": "Lataaminen epäonnistui",
|
"upload_failed": "Lähetys epäonnistui",
|
||||||
"uploading": "Lataa..."
|
"uploading": "Lähetetään..."
|
||||||
},
|
},
|
||||||
"status": {
|
"status": {
|
||||||
"boosted_by": "Jakaminen teki",
|
"boosted_by": "Jakanut",
|
||||||
"edited": "Viimein muokattu {0}",
|
"edited": "Muokattu {0}",
|
||||||
"favourited_by": "Tykkääminen teki",
|
"favourited_by": "Tykännyt",
|
||||||
"filter_hidden_phrase": "Piilotus suotimella teki",
|
"filter_hidden_phrase": "Suodatettu",
|
||||||
"filter_removed_phrase": "Poisto suotimella teki",
|
"filter_removed_phrase": "Suodattimen poistama",
|
||||||
"filter_show_anyway": "Näytä kuitenkin",
|
"filter_show_anyway": "Näytä suodatetut",
|
||||||
"img_alt": {
|
"img_alt": {
|
||||||
"desc": "Kuvaus",
|
"desc": "Kuvaus",
|
||||||
"dismiss": "Sulje"
|
"dismiss": "Sulje"
|
||||||
|
@ -425,12 +431,12 @@
|
||||||
},
|
},
|
||||||
"reblogged": "{0} jakoi",
|
"reblogged": "{0} jakoi",
|
||||||
"replying_to": "Vastaa {0}:lle",
|
"replying_to": "Vastaa {0}:lle",
|
||||||
"show_full_thread": "Näytä koko ketju",
|
"show_full_thread": "Näytä koko säie",
|
||||||
"someone": "joku",
|
"someone": "joku",
|
||||||
"spoiler_show_less": "Näytä vähemmän",
|
"spoiler_show_less": "Näytä vähemmän",
|
||||||
"spoiler_show_more": "Näytä enemmän",
|
"spoiler_show_more": "Näytä enemmän",
|
||||||
"thread": "Ketju",
|
"thread": "Säie",
|
||||||
"try_original_site": "Kokeile alkuperäisserveri"
|
"try_original_site": "Katso alkulähteellä"
|
||||||
},
|
},
|
||||||
"status_history": {
|
"status_history": {
|
||||||
"created": "luotu {0}",
|
"created": "luotu {0}",
|
||||||
|
@ -438,90 +444,90 @@
|
||||||
},
|
},
|
||||||
"tab": {
|
"tab": {
|
||||||
"for_you": "Sinulle",
|
"for_you": "Sinulle",
|
||||||
"hashtags": "Hashtagit",
|
"hashtags": "Aiheet",
|
||||||
"media": "Media",
|
"media": "Kuvat",
|
||||||
"news": "Uutiset",
|
"news": "Uutisia",
|
||||||
"notifications_all": "Kaikki",
|
"notifications_all": "Kaikki",
|
||||||
"notifications_mention": "Maininnat",
|
"notifications_mention": "Maininnat",
|
||||||
"posts": "Julkaisut",
|
"posts": "Viestit",
|
||||||
"posts_with_replies": "Julkaisut & Vastaukset"
|
"posts_with_replies": "Viestit & vastaukset"
|
||||||
},
|
},
|
||||||
"tag": {
|
"tag": {
|
||||||
"follow": "Seuraa",
|
"follow": "Seuraa",
|
||||||
"follow_label": "Seuraa {0}-tägi",
|
"follow_label": "Seuraa aihetta {0}",
|
||||||
"unfollow": "Lopeta seuraamista",
|
"unfollow": "Lopeta seuraaminen",
|
||||||
"unfollow_label": "Lopeta {0}-tägin seuraamista"
|
"unfollow_label": "Lopeta aiheen {0} seuraaminen"
|
||||||
},
|
},
|
||||||
"time_ago_options": {
|
"time_ago_options": {
|
||||||
"day_future": "0 päivässä|huomenna|{n} päivässä",
|
"day_future": "tänään|huomenna|{n} päivässä",
|
||||||
"day_past": "0 päivää sitten|eilen|{n} päivää sitten",
|
"day_past": "tänään|eilen|{n} päivää sitten",
|
||||||
"hour_future": "in 0 hours|in 1 hour|in {n} hours",
|
"hour_future": "tällä tunnilla|tunnin kuluttua|{n} tunnin kuluttua",
|
||||||
"hour_past": "0 hours ago|1 hour ago|{n} hours ago",
|
"hour_past": "tällä tunnilla|tunti sitten|{n} tuntia sitten",
|
||||||
"just_now": "juuri nyt",
|
"just_now": "juuri nyt",
|
||||||
"minute_future": "0 minuutissa|1 minuutissa|in {n} minuutissa",
|
"minute_future": "tällä minuutilla|1 minuutissa|in {n} minuutissa",
|
||||||
"minute_past": "0 minuuttia sitten|1 minuutti sitten|{n} minuuttia sitten",
|
"minute_past": "tällä minuutilla|1 minuutti sitten|{n} minuuttia sitten",
|
||||||
"month_future": "0 kuukaudessa|ensi kuussa|{n} kuukaudessa",
|
"month_future": "tässä kuussa|ensi kuussa|{n} kuukaudessa",
|
||||||
"month_past": "0 kuukautta sitten|viime kuussa|{n} kuukautta sitten",
|
"month_past": "tässä kuussa|viime kuussa|{n} kuukautta sitten",
|
||||||
"second_future": "juuri nyt|{n} sekunnissa|{n} sekunnissa",
|
"second_future": "juuri nyt|{n} sekunnissa|{n} sekunnissa",
|
||||||
"second_past": "juuri nyt|{n} sekunti sitten|{n} sekuntia sitten",
|
"second_past": "juuri nyt|{n} sekunti sitten|{n} sekuntia sitten",
|
||||||
"short_day_future": "{n}pv:ssä",
|
"short_day_future": "{n}pv:ssä",
|
||||||
"short_day_past": "{n}pv",
|
"short_day_past": "{n}pv",
|
||||||
"short_hour_future": "{n}t:ssä",
|
"short_hour_future": "{n}t:ssa",
|
||||||
"short_hour_past": "{n}t",
|
"short_hour_past": "{n}t",
|
||||||
"short_minute_future": "{n}min:ssa",
|
"short_minute_future": "{n}min:ssa",
|
||||||
"short_minute_past": "{n}min",
|
"short_minute_past": "{n}min",
|
||||||
"short_month_future": "{n}kk:ssa",
|
"short_month_future": "{n}kk:ssa",
|
||||||
"short_month_past": "{n}kk",
|
"short_month_past": "{n}kk",
|
||||||
"short_second_future": "{n}sek:ssa",
|
"short_second_future": "{n}s:ssa",
|
||||||
"short_second_past": "{n}s",
|
"short_second_past": "{n}s",
|
||||||
"short_week_future": "{n}vk:ssa",
|
"short_week_future": "{n}vk:ssa",
|
||||||
"short_week_past": "{n}vk",
|
"short_week_past": "{n}vk",
|
||||||
"short_year_future": "{n} v:ssa",
|
"short_year_future": "{n}v:ssa",
|
||||||
"short_year_past": "{n}v",
|
"short_year_past": "{n}v",
|
||||||
"week_future": "0 viikossa|ensi viikkona|{n} viikossa",
|
"week_future": "tällä viikolla|ensi viikkona|{n} viikossa",
|
||||||
"week_past": "0 viikkoa sitten|viime viikkona|{n} viikkoa sitten",
|
"week_past": "tällä viikolla|viime viikkona|{n} viikkoa sitten",
|
||||||
"year_future": "0 vuodessa|ensi vuonna|{n} vuodessa",
|
"year_future": "tänä vuonna|ensi vuonna|{n} vuodessa",
|
||||||
"year_past": "0 vuotta sitten|viime vuonna|{n} vuotta sitten"
|
"year_past": "tänä vuonna|viime vuonna|{n} vuotta sitten"
|
||||||
},
|
},
|
||||||
"timeline": {
|
"timeline": {
|
||||||
"show_new_items": "Näytä {v} uutta kohtaa|Näytä {v} uusi kohta|Näytä {v} uutta kohtaa",
|
"show_new_items": "Näytä {v} uutta viestiä|Näytä {v} uusi viesti|Näytä {v} uutta viestiä",
|
||||||
"view_older_posts": "Muiden ilmentymien vanhemmat julkaisut eivät välttämättä näy."
|
"view_older_posts": "Vanhemmat viestit muilta palvelimilta eivät välttämättä näy."
|
||||||
},
|
},
|
||||||
"title": {
|
"title": {
|
||||||
"federated_timeline": "Federoitu aikajana",
|
"federated_timeline": "Federoitu aikajana",
|
||||||
"local_timeline": "Paikallinen akajana"
|
"local_timeline": "Paikallinen aikajana"
|
||||||
},
|
},
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"add_content_warning": "Lisää sisältövaroitus",
|
"add_content_warning": "Lisää aihevaroitus",
|
||||||
"add_emojis": "Lisää emojit",
|
"add_emojis": "Lisää emojeita",
|
||||||
"add_media": "Lisää kuvia, video- tai äänitiedosto",
|
"add_media": "Lisää kuvia, video- tai äänitiedosto",
|
||||||
"add_publishable_content": "Lisää sisältöä julkaistavaksi",
|
"add_publishable_content": "Liitä sisältöä viestiin",
|
||||||
"change_content_visibility": "Muuta sisällön näkyvyys",
|
"change_content_visibility": "Muuta sisällön näkyvyyttä",
|
||||||
"change_language": "Vaihda kieli",
|
"change_language": "Vaihda kieli",
|
||||||
"emoji": "Emoji",
|
"emoji": "Emoji",
|
||||||
"explore_links_intro": "Näistä uutistarinoista puhutaan tässä ja muissa hajoitetun verkon palvelimissa juuri nyt.",
|
"explore_links_intro": "Näistä uutisista puhutaan tällä ja muilla hajautetun verkon palvelimilla juuri nyt.",
|
||||||
"explore_posts_intro": "Nämä julkaisut tässä ja muissa hajoitetun verkon palvelimissa saavat lisää huomiota tämän palvelimen ihmisten kesken juuri nyt.",
|
"explore_posts_intro": "Nämä viestit saavat huomiota tämän palvelimen keskusteluissa juuri nyt.",
|
||||||
"explore_tags_intro": "Nämä hashtagit saavat enemmän huomiota tämän ja muiden hajautetun verkon palvelimien ihmisten kesken juuri nyt.",
|
"explore_tags_intro": "Nämä aiheet saavat huomiota tällä ja muilla hajautetun verkon palvelimilla juuri nyt.",
|
||||||
"publish_failed": "Sulje epäonnistunut viestit editorin ylälaidalla ennen julkaisujen uudelleenjlkaisemista",
|
"publish_failed": "Sulje epäonnistuneet viestit editorin yltä voidaksesi uudelleenjulkaista",
|
||||||
"toggle_code_block": "Vaihda koodilohko"
|
"toggle_code_block": "Kirjoita koodilohkona"
|
||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"add_existing": "Lisää olemassa oleva tili",
|
"add_existing": "Kirjaudu lisätilille",
|
||||||
"server_address_label": "Mastodonin palvelinosoite",
|
"server_address_label": "Mastodon-palvelimesi osoite",
|
||||||
"sign_in_desc": "Kirjaudu sisään seurataakseen profiilit tai hashtagit, tykätäkseen, jakaakseen ja vastatakseen julkaisuihin, tai olla vuorovaikutuksessa tililtäsi toisella palvelimella.",
|
"sign_in_desc": "Kirjaudu sisään voidaksesi seurata muita ihmisiä ja aiheita, sekä keskustellaksesi ja jakaaksesi viestejä.",
|
||||||
"sign_in_notice_title": "{0}:n julkisten tietojen katselu",
|
"sign_in_notice_title": "{0}:n julkisten tietojen katselu",
|
||||||
"sign_out_account": "Kirjaudu ulos {0}",
|
"sign_out_account": "Kirjaa {0} ulos",
|
||||||
"tip_no_account": "Jos sinulla ei ole vielä Mastodon-tili, {0}.",
|
"tip_no_account": "Jos sinulla ei ole vielä tiliä, {0}.",
|
||||||
"tip_register_account": "valitse palvelimesi ja ilmoittaudu eli luo tili"
|
"tip_register_account": "valitse palvelimesi ja luo tili"
|
||||||
},
|
},
|
||||||
"visibility": {
|
"visibility": {
|
||||||
"direct": "Vain mainitut tilit",
|
"direct": "Suoraviesti",
|
||||||
"direct_desc": "Nähtävissä vain mainituille tilille",
|
"direct_desc": "Nähtävissä vain mainituille tilille",
|
||||||
"private": "Vain seuraajat",
|
"private": "Vain seuraajille",
|
||||||
"private_desc": "Nähtävissä vain seuraajille",
|
"private_desc": "Nähtävissä vain seuraajille",
|
||||||
"public": "Julkinen",
|
"public": "Julkinen",
|
||||||
"public_desc": "Nähtävissä kaikille",
|
"public_desc": "Nähtävissä kaikille",
|
||||||
"unlisted": "Ei-luetteloitu",
|
"unlisted": "Listaamaton",
|
||||||
"unlisted_desc": "Kaikille nähtävissä, mutta ilman tunnustusominaisuuksia"
|
"unlisted_desc": "Julkisesti nähtävissä, mutta ei julkaistu hakuihin"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -253,6 +253,8 @@
|
||||||
},
|
},
|
||||||
"pwa": {
|
"pwa": {
|
||||||
"dismiss": "Fermer",
|
"dismiss": "Fermer",
|
||||||
|
"install": "Installer",
|
||||||
|
"install_title": "Installer Elk",
|
||||||
"title": "Nouvelle mise à jour Elk disponible !",
|
"title": "Nouvelle mise à jour Elk disponible !",
|
||||||
"update": "Mettre à jour",
|
"update": "Mettre à jour",
|
||||||
"update_available_short": "Mettre à jour Elk",
|
"update_available_short": "Mettre à jour Elk",
|
||||||
|
|
531
locales/gl-ES.json
Normal file
|
@ -0,0 +1,531 @@
|
||||||
|
{
|
||||||
|
"a11y": {
|
||||||
|
"loading_page": "Cargando páxina, agarda",
|
||||||
|
"loading_titled_page": "Cargando páxina {0}, agarda",
|
||||||
|
"locale_changed": "Idioma mudado a {0}",
|
||||||
|
"locale_changing": "Cambiando o idioma, agarda",
|
||||||
|
"route_loaded": "Cargouse a páxina {0}"
|
||||||
|
},
|
||||||
|
"account": {
|
||||||
|
"avatar_description": "Avatar de {0}",
|
||||||
|
"blocked_by": "Esta usuaria bloqueoute.",
|
||||||
|
"blocked_domains": "Dominios bloqueados",
|
||||||
|
"blocked_users": "Usuarias bloqueadas",
|
||||||
|
"blocking": "Bloqueada",
|
||||||
|
"bot": "BOT",
|
||||||
|
"favourites": "Favoritas",
|
||||||
|
"follow": "Seguir",
|
||||||
|
"follow_back": "Seguir tamén",
|
||||||
|
"follow_requested": "Solicitado",
|
||||||
|
"followers": "Seguidoras",
|
||||||
|
"followers_count": "{0} Seguidoras|{0} Seguidora|{0} Seguidoras",
|
||||||
|
"following": "Seguimentos",
|
||||||
|
"following_count": "Seguindo a {0}",
|
||||||
|
"follows_you": "Séguete",
|
||||||
|
"go_to_profile": "Ir ao perfil",
|
||||||
|
"joined": "Uníuse",
|
||||||
|
"moved_title": "informou de que agora a súa conta é:",
|
||||||
|
"muted_users": "Usuarias acaladas",
|
||||||
|
"muting": "Acalada",
|
||||||
|
"mutuals": "Seguimento recíproco",
|
||||||
|
"notifications_on_post_disable": "Deixar de notificarme as publicacións de {username}",
|
||||||
|
"notifications_on_post_enable": "Recibir notificación cando {username} publique",
|
||||||
|
"pinned": "Fixada",
|
||||||
|
"posts": "Publicacións",
|
||||||
|
"posts_count": "{0} Publicacións|{0} Publicación|{0} Publicacións",
|
||||||
|
"profile_description": "Cabeceira do perfil de{0}",
|
||||||
|
"profile_unavailable": "Perfil non dispoñible",
|
||||||
|
"unblock": "Desbloquear",
|
||||||
|
"unfollow": "Retirar seguimento",
|
||||||
|
"unmute": "Reactivar",
|
||||||
|
"view_other_followers": "É posible que non se mostren as seguidoras desde outras instancias.",
|
||||||
|
"view_other_following": "É posible que non se mostren os seguimentos noutras instancias."
|
||||||
|
},
|
||||||
|
"action": {
|
||||||
|
"apply": "Aplicar",
|
||||||
|
"bookmark": "Marcar",
|
||||||
|
"bookmarked": "Marcada",
|
||||||
|
"boost": "Promover",
|
||||||
|
"boost_count": "{0}",
|
||||||
|
"boosted": "Promovida",
|
||||||
|
"clear_publish_failed": "Limpar erros de publicación",
|
||||||
|
"clear_upload_failed": "Limpar o ficheiro de erros de subida",
|
||||||
|
"close": "Pechar",
|
||||||
|
"compose": "Escribir",
|
||||||
|
"confirm": "Confirmar",
|
||||||
|
"edit": "Editar",
|
||||||
|
"enter_app": "Entrar na App",
|
||||||
|
"favourite": "Favorita",
|
||||||
|
"favourite_count": "{0}",
|
||||||
|
"favourited": "Favorecida",
|
||||||
|
"more": "Máis",
|
||||||
|
"next": "Seg",
|
||||||
|
"prev": "Ant",
|
||||||
|
"publish": "Publicar",
|
||||||
|
"reply": "Responder",
|
||||||
|
"reply_count": "{0}",
|
||||||
|
"reset": "Restablecer",
|
||||||
|
"save": "Gardar",
|
||||||
|
"save_changes": "Gardar cambios",
|
||||||
|
"sign_in": "Acceder",
|
||||||
|
"switch_account": "Cambiar de conta",
|
||||||
|
"vote": "Votar"
|
||||||
|
},
|
||||||
|
"app_desc_short": "Un cliente web áxil para Mastodon",
|
||||||
|
"app_logo": "Logo de Elk",
|
||||||
|
"app_name": "Elk",
|
||||||
|
"attachment": {
|
||||||
|
"edit_title": "Descrición",
|
||||||
|
"remove_label": "Quitar o anexo"
|
||||||
|
},
|
||||||
|
"command": {
|
||||||
|
"activate": "Activar",
|
||||||
|
"complete": "Completar",
|
||||||
|
"compose_desc": "Escribir nova publicación",
|
||||||
|
"n-people-in-the-past-n-days": "{0} persoas nos últimos {1} días",
|
||||||
|
"select_lang": "Elixe idioma",
|
||||||
|
"sign_in_desc": "Engadir unha conta existente",
|
||||||
|
"switch_account": "Cambiar a {0}",
|
||||||
|
"switch_account_desc": "Utilizar outra conta",
|
||||||
|
"toggle_dark_mode": "Activar modo escuro",
|
||||||
|
"toggle_zen_mode": "Activar modo cen"
|
||||||
|
},
|
||||||
|
"common": {
|
||||||
|
"end_of_list": "Fin da lista",
|
||||||
|
"error": "ERRO",
|
||||||
|
"in": "en",
|
||||||
|
"not_found": "404 Non Atopado",
|
||||||
|
"offline_desc": "Semella que non tes conexión. Comproba a conexión á rede."
|
||||||
|
},
|
||||||
|
"compose": {
|
||||||
|
"draft_title": "Borrador {0}",
|
||||||
|
"drafts": "Borradores ({v})"
|
||||||
|
},
|
||||||
|
"confirm": {
|
||||||
|
"block_account": {
|
||||||
|
"cancel": "Cancelar",
|
||||||
|
"confirm": "Bloquear",
|
||||||
|
"title": "Tes certeza de querer bloquear a {0}?"
|
||||||
|
},
|
||||||
|
"block_domain": {
|
||||||
|
"cancel": "Cancelar",
|
||||||
|
"confirm": "Bloquear",
|
||||||
|
"title": "Tes certeza de querer bloquear {0}?"
|
||||||
|
},
|
||||||
|
"common": {
|
||||||
|
"cancel": "Non",
|
||||||
|
"confirm": "Si"
|
||||||
|
},
|
||||||
|
"delete_posts": {
|
||||||
|
"cancel": "Cancelar",
|
||||||
|
"confirm": "Eliminar",
|
||||||
|
"title": "Tes certeza de querer eliminar esta publicación?"
|
||||||
|
},
|
||||||
|
"mute_account": {
|
||||||
|
"cancel": "Cancelar",
|
||||||
|
"confirm": "Acalar",
|
||||||
|
"title": "Tes certeza de querer acalar a {0}?"
|
||||||
|
},
|
||||||
|
"show_reblogs": {
|
||||||
|
"cancel": "Cancelar",
|
||||||
|
"confirm": "Mostrar",
|
||||||
|
"title": "Tes certeza de querer mostrar as promocións de {0}?"
|
||||||
|
},
|
||||||
|
"unfollow": {
|
||||||
|
"cancel": "Cancelar",
|
||||||
|
"confirm": "Retirar",
|
||||||
|
"title": "Tes certeza de querer retirar o seguimento?"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"conversation": {
|
||||||
|
"with": "con"
|
||||||
|
},
|
||||||
|
"custom_cards": {
|
||||||
|
"stackblitz": {
|
||||||
|
"lines": "Liñas {0}",
|
||||||
|
"open": "Abrir",
|
||||||
|
"snippet_from": "Fragmento de {0}"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"account_not_found": "Non se atopa a conta {0}",
|
||||||
|
"explore-list-empty": "Non hai tendencias agora. Mira máis tarde!",
|
||||||
|
"file_size_cannot_exceed_n_mb": "O ficheiro non pode superar os {0}MB",
|
||||||
|
"sign_in_error": "Non se conectou co servidor.",
|
||||||
|
"status_not_found": "Non se atopa a publicación",
|
||||||
|
"unsupported_file_format": "Non se admite este tipo de ficheiro"
|
||||||
|
},
|
||||||
|
"help": {
|
||||||
|
"build_preview": {
|
||||||
|
"desc1": "Estás vendo unha versión non oficial de Elk creada pola comunidade - {0}.",
|
||||||
|
"desc2": "Podería conter cambios non revisados e incluso malintencionados.",
|
||||||
|
"desc3": "Non accedas usando unha conta real.",
|
||||||
|
"title": "Instalar versión"
|
||||||
|
},
|
||||||
|
"desc_highlight": "É de agardar que haxa fallos e falten cousas por aquí e por alá.",
|
||||||
|
"desc_para1": "Grazas polo teu interese en probar Elk, o cliente web para Mastodon que estamos creando!",
|
||||||
|
"desc_para2": "traballamos arreo para desenvolvelo e melloralo.",
|
||||||
|
"desc_para3": "Podes acelerar o desenvolvemento patrocinando ao Equipo en GitHub Sponsors. Agardamos que desfrutes de Elk!",
|
||||||
|
"desc_para4": "Elk é Código Aberto. Se queres axudar probándoo, aportando a túa opinión, ou colaborando,",
|
||||||
|
"desc_para5": "contacta con nós en GitHub",
|
||||||
|
"desc_para6": "e involúcrate.",
|
||||||
|
"title": "Elk está de pre-estrea!"
|
||||||
|
},
|
||||||
|
"language": {
|
||||||
|
"search": "Buscar"
|
||||||
|
},
|
||||||
|
"menu": {
|
||||||
|
"block_account": "Bloquear {0}",
|
||||||
|
"block_domain": "Bloquear o dominio {0}",
|
||||||
|
"copy_link_to_post": "Copiar ligazón á publicación",
|
||||||
|
"copy_original_link_to_post": "Copiar ligazón orixinal á publicación",
|
||||||
|
"delete": "Eliminar",
|
||||||
|
"delete_and_redraft": "Eliminar e volver a escribir",
|
||||||
|
"direct_message_account": "Mensaxe directa {0}",
|
||||||
|
"edit": "Editar",
|
||||||
|
"hide_reblogs": "Agochar promocións de {0}",
|
||||||
|
"mention_account": "Mencionar a {0}",
|
||||||
|
"mute_account": "Acalar a {0}",
|
||||||
|
"mute_conversation": "Acalar esta publicación",
|
||||||
|
"open_in_original_site": "Abrir no sitio web orixinal",
|
||||||
|
"pin_on_profile": "Fixar no perfil",
|
||||||
|
"share_post": "Compartir esta publicación",
|
||||||
|
"show_favourited_and_boosted_by": "Mostrar quen favoreceu e promoveu",
|
||||||
|
"show_reblogs": "Mostrar promocións desde {0}",
|
||||||
|
"show_untranslated": "Mostrar sen traducir",
|
||||||
|
"toggle_theme": {
|
||||||
|
"dark": "Activar modo escuro",
|
||||||
|
"light": "Activar modo claro"
|
||||||
|
},
|
||||||
|
"translate_post": "Traducir publicación",
|
||||||
|
"unblock_account": "Desbloquear a {0}",
|
||||||
|
"unblock_domain": "Desbloquear o dominio {0}",
|
||||||
|
"unmute_account": "Reactivar {0}",
|
||||||
|
"unmute_conversation": "Reactivar esta publicación",
|
||||||
|
"unpin_on_profile": "Desafixar do perfil"
|
||||||
|
},
|
||||||
|
"nav": {
|
||||||
|
"back": "Atrás",
|
||||||
|
"blocked_domains": "Dominios bloqueados",
|
||||||
|
"blocked_users": "Usuarias bloqueadas",
|
||||||
|
"bookmarks": "Marcadores",
|
||||||
|
"built_at": "Versión {0}",
|
||||||
|
"compose": "Redactar",
|
||||||
|
"conversations": "Conversas",
|
||||||
|
"explore": "Explorar",
|
||||||
|
"favourites": "Favoritas",
|
||||||
|
"federated": "Federada",
|
||||||
|
"home": "Inicio",
|
||||||
|
"local": "Local",
|
||||||
|
"muted_users": "Usuarias acaladas",
|
||||||
|
"notifications": "Notificacións",
|
||||||
|
"profile": "Perfil",
|
||||||
|
"search": "Buscar",
|
||||||
|
"select_feature_flags": "Toggle Feature Flags",
|
||||||
|
"select_font_size": "Tamaño do texto",
|
||||||
|
"select_language": "Idioma da interface",
|
||||||
|
"settings": "Axustes",
|
||||||
|
"show_intro": "Mostrar intro",
|
||||||
|
"toggle_theme": "Mudar decorado",
|
||||||
|
"zen_mode": "Modo Cen"
|
||||||
|
},
|
||||||
|
"notification": {
|
||||||
|
"favourited_post": "favoreceu a túa publicación",
|
||||||
|
"followed_you": "seguiute",
|
||||||
|
"followed_you_count": "{0} persoas seguíronte|{0} persoa seguiute|{0} persoas seguíronte",
|
||||||
|
"missing_type": "FALTA o notification.type:",
|
||||||
|
"reblogged_post": "promoveu a túa publicación",
|
||||||
|
"request_to_follow": "solicitou seguirte",
|
||||||
|
"signed_up": "creou a conta",
|
||||||
|
"update_status": "actualizou a publicación"
|
||||||
|
},
|
||||||
|
"placeholder": {
|
||||||
|
"content_warning": "Escribe aquí o aviso",
|
||||||
|
"default_1": "En que estás a pensar?",
|
||||||
|
"reply_to_account": "Responder a {0}",
|
||||||
|
"replying": "Respondendo",
|
||||||
|
"the_thread": "a conversa"
|
||||||
|
},
|
||||||
|
"pwa": {
|
||||||
|
"dismiss": "Desbotar",
|
||||||
|
"title": "Dispoñible nova versión de Elk!",
|
||||||
|
"update": "Actualizar",
|
||||||
|
"update_available_short": "Actualizar Elk",
|
||||||
|
"webmanifest": {
|
||||||
|
"canary": {
|
||||||
|
"description": "Un cliente áxil para Mastodon (canary)",
|
||||||
|
"name": "Elk (canary)",
|
||||||
|
"short_name": "Elk (canary)"
|
||||||
|
},
|
||||||
|
"dev": {
|
||||||
|
"description": "Un cliente áxil para Mastodon (dev)",
|
||||||
|
"name": "Elk (dev)",
|
||||||
|
"short_name": "Elk (dev)"
|
||||||
|
},
|
||||||
|
"preview": {
|
||||||
|
"description": "Un cliente áxil para Mastodon (preview)",
|
||||||
|
"name": "Elk (preview)",
|
||||||
|
"short_name": "Elk (preview)"
|
||||||
|
},
|
||||||
|
"release": {
|
||||||
|
"description": "Un cliente áxil para Mastodon",
|
||||||
|
"name": "Elk",
|
||||||
|
"short_name": "Elk"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"search": {
|
||||||
|
"search_desc": "Buscar persoas e cancelos",
|
||||||
|
"search_empty": "Non atopamos nada con eses termos de busca"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"about": {
|
||||||
|
"label": "Acerca de",
|
||||||
|
"meet_the_team": "Coñece ao equipo",
|
||||||
|
"sponsor_action": "Patrocínanos",
|
||||||
|
"sponsor_action_desc": "Para axudar ao equipo que desenvolve Elk",
|
||||||
|
"sponsors": "Patrocinios",
|
||||||
|
"sponsors_body_1": "Elk é posible grazas ao xeneroso patrocinio e axuda de:",
|
||||||
|
"sponsors_body_2": "Todas as empresas e persoas que patrocinan a Team Elk e colaboradoras.",
|
||||||
|
"sponsors_body_3": "Se estás desfrutando da app, considera patrocinarnos:",
|
||||||
|
"version": "Versión"
|
||||||
|
},
|
||||||
|
"account_settings": {
|
||||||
|
"description": "Edita a configuración da túa conta na interface de Mastodon",
|
||||||
|
"label": "Axustes da conta"
|
||||||
|
},
|
||||||
|
"interface": {
|
||||||
|
"color_mode": "Modo de cor",
|
||||||
|
"dark_mode": "Escuro",
|
||||||
|
"default": " (por defecto)",
|
||||||
|
"font_size": "Tamaño da letra",
|
||||||
|
"label": "Interface",
|
||||||
|
"light_mode": "Claro",
|
||||||
|
"system_mode": "Escuro",
|
||||||
|
"theme_color": "Cor do decorado"
|
||||||
|
},
|
||||||
|
"language": {
|
||||||
|
"display_language": "Idioma da interface",
|
||||||
|
"label": "Idioma"
|
||||||
|
},
|
||||||
|
"notifications": {
|
||||||
|
"label": "Notificacións",
|
||||||
|
"notifications": {
|
||||||
|
"label": "Axuste da notificacións"
|
||||||
|
},
|
||||||
|
"push_notifications": {
|
||||||
|
"alerts": {
|
||||||
|
"favourite": "Favoritas",
|
||||||
|
"follow": "Novas seguidoras",
|
||||||
|
"mention": "Mencións",
|
||||||
|
"poll": "Enquisas",
|
||||||
|
"reblog": "Promoción recibida",
|
||||||
|
"title": "Que notificacións queres recibir?"
|
||||||
|
},
|
||||||
|
"description": "Recibe notificacións incluso cando non usas Elk.",
|
||||||
|
"instructions": "Non esquezas gardar os cambios usando o botón @:settings.notifications.push_notifications.save_settings",
|
||||||
|
"label": "Axustes de notificacións Push",
|
||||||
|
"policy": {
|
||||||
|
"all": "De calquera",
|
||||||
|
"followed": "De persoas que sigo",
|
||||||
|
"follower": "De persoas que me siguen",
|
||||||
|
"none": "De ninguén",
|
||||||
|
"title": "De quen podo recibir notificacións?"
|
||||||
|
},
|
||||||
|
"save_settings": "Gardar axustes",
|
||||||
|
"subscription_error": {
|
||||||
|
"clear_error": "Limpar erro",
|
||||||
|
"permission_denied": "Permiso non concedido: activa as notificacións no navegador.",
|
||||||
|
"request_error": "Algo fallou ao solicitar a subscrición, inténtao outra vez e se o erro continúa, informa do problema no repositorio de Elk.",
|
||||||
|
"title": "Non se puido activar a subscrición a notificacións push",
|
||||||
|
"too_many_registrations": "Debido a limitacións do navegador, Elk non pode usar o servizo de notificacións push para múltiples contas en diferentes servidores. Podes subscribirte ás notificacións push con outra conta e intentalo outra vez."
|
||||||
|
},
|
||||||
|
"title": "Axustes das Notificacións Push",
|
||||||
|
"undo_settings": "Desfacer cambios",
|
||||||
|
"unsubscribe": "Desactivar notificacións Push",
|
||||||
|
"unsupported": "O teu navegador non ten soporte para notificacións Push.",
|
||||||
|
"warning": {
|
||||||
|
"enable_close": "Pechar",
|
||||||
|
"enable_description": "Para recibir notificacións cando Elk non está aberta, activa as notificacións Push. Podes controlar de xeito preciso o tipo de interaccións que crearán notificacións push a través do botón \"@:settings.notifications.show_btn{'\"'} unha vez activadas.",
|
||||||
|
"enable_description_desktop": "Para recibir notificacións cando Elk non está aberta, activa as notificacións Push. Cando as actives poderás controlar de xeito preciso o tipo de interaccións que crearán notificación Push en \"Axustes > Notificacións > Axustes Notificacións Push\".",
|
||||||
|
"enable_description_mobile": "Tamén podes acceder aos axustes usando o menú de navegación \"Axustes > Notificacións > Axustes notificación Push\".",
|
||||||
|
"enable_description_settings": "Para recibir notificacións cando Elk non está aberta, activa as notificacións Push. Cando as actives, e nesta mesma panalla, poderás controlar de xeito preciso o tipo de interacción que creará unha notificación Push.",
|
||||||
|
"enable_desktop": "Activar notificacións Push",
|
||||||
|
"enable_title": "Non perdas nada",
|
||||||
|
"re_auth": "Semella que o teu servidor non ten soporte para notificacións Push. Inténtao pechando a sesión e volvendo a acceder, se esta mensaxe continúa aparecendo contacta coa administración do teu servidor."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"show_btn": "Ir aos axustes de notificacións"
|
||||||
|
},
|
||||||
|
"notifications_settings": "Notificacións",
|
||||||
|
"preferences": {
|
||||||
|
"enable_autoplay": "Activa reprodución auto.",
|
||||||
|
"github_cards": "GitHub Cards",
|
||||||
|
"grayscale_mode": "Modo en escala de grises",
|
||||||
|
"hide_account_hover_card": "Non mostrar tarxetas emerxentes",
|
||||||
|
"hide_boost_count": "Agochar conta de promocións",
|
||||||
|
"hide_favorite_count": "Agochar conta de favoritos",
|
||||||
|
"hide_follower_count": "Agochar conta de seguimentos",
|
||||||
|
"hide_translation": "Agochar tradución",
|
||||||
|
"label": "Preferencias",
|
||||||
|
"title": "Características experimentais",
|
||||||
|
"user_picker": "Selector de usuarias",
|
||||||
|
"virtual_scroll": "Desprazamento virtual"
|
||||||
|
},
|
||||||
|
"profile": {
|
||||||
|
"appearance": {
|
||||||
|
"bio": "Bio",
|
||||||
|
"description": "Editar avatar, nome de usuaria, perfil, etc.",
|
||||||
|
"display_name": "Nome público",
|
||||||
|
"label": "Aspecto",
|
||||||
|
"profile_metadata": "Metadatos do perfil",
|
||||||
|
"profile_metadata_desc": "Podes mostrar {0} elementos nunha táboa no teu perfil",
|
||||||
|
"title": "Editar perfil"
|
||||||
|
},
|
||||||
|
"featured_tags": {
|
||||||
|
"description": "Será posible buscar as túas publicacións públicas con estos cancelos.",
|
||||||
|
"label": "Cancelos destacados"
|
||||||
|
},
|
||||||
|
"label": "Perfil"
|
||||||
|
},
|
||||||
|
"select_a_settings": "Elixe un axuste",
|
||||||
|
"users": {
|
||||||
|
"export": "Exportar User Tokens",
|
||||||
|
"import": "Importar User Tokens",
|
||||||
|
"label": "Contas conectadas"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"share-target": {
|
||||||
|
"description": "Podes configurar Elk para compartir contido desde outras aplicacións, simplemente instala Elk no teu dispositivo ou computadora e inicia sesión.",
|
||||||
|
"hint": "Para poder compartir usando Elk, debes instalar Elk e iniciar sesión.",
|
||||||
|
"title": "Compartir con Elk"
|
||||||
|
},
|
||||||
|
"state": {
|
||||||
|
"attachments_exceed_server_limit": "O número de anexo excede o límite por publicación.",
|
||||||
|
"attachments_limit_error": "Límite por publicación superado",
|
||||||
|
"edited": "(Editado)",
|
||||||
|
"editing": "Editando",
|
||||||
|
"loading": "Cargando...",
|
||||||
|
"publish_failed": "Fallou a publicación",
|
||||||
|
"publishing": "Publicando",
|
||||||
|
"upload_failed": "Fallou a subida",
|
||||||
|
"uploading": "Subindo..."
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"boosted_by": "Promovida por",
|
||||||
|
"edited": "Editada por {0}",
|
||||||
|
"favourited_by": "Favorecida por",
|
||||||
|
"filter_hidden_phrase": "Filtrada por",
|
||||||
|
"filter_removed_phrase": "Eliminada polo filtro",
|
||||||
|
"filter_show_anyway": "Mostrar igualmente",
|
||||||
|
"img_alt": {
|
||||||
|
"desc": "Descrición",
|
||||||
|
"dismiss": "Desbotar"
|
||||||
|
},
|
||||||
|
"poll": {
|
||||||
|
"count": "{0} votos|{0} voto|{0} votos",
|
||||||
|
"ends": "remata en {0}",
|
||||||
|
"finished": "rematou o {0}"
|
||||||
|
},
|
||||||
|
"reblogged": "Promovida por {0}",
|
||||||
|
"replying_to": "En resposta a {0}",
|
||||||
|
"show_full_thread": "Mostrar conversa completa",
|
||||||
|
"someone": "alguén",
|
||||||
|
"spoiler_show_less": "Mostrar menos",
|
||||||
|
"spoiler_show_more": "Mostrar máis",
|
||||||
|
"thread": "Fío",
|
||||||
|
"try_original_site": "Ver no sitio orixinal"
|
||||||
|
},
|
||||||
|
"status_history": {
|
||||||
|
"created": "escrita o {0}",
|
||||||
|
"edited": "editada o {0}"
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"for_you": "Para ti",
|
||||||
|
"hashtags": "Cancelos",
|
||||||
|
"media": "Multimedia",
|
||||||
|
"news": "Novas",
|
||||||
|
"notifications_all": "Todo",
|
||||||
|
"notifications_mention": "Mención",
|
||||||
|
"posts": "Publicacións",
|
||||||
|
"posts_with_replies": "Publicacións & Respostas"
|
||||||
|
},
|
||||||
|
"tag": {
|
||||||
|
"follow": "Seguir",
|
||||||
|
"follow_label": "Seguir etiqueta {0}",
|
||||||
|
"unfollow": "Deixar de seguir",
|
||||||
|
"unfollow_label": "Retirar seguimento de {0}"
|
||||||
|
},
|
||||||
|
"time_ago_options": {
|
||||||
|
"day_future": "en 0 días|mañán|en {n} días",
|
||||||
|
"day_past": "fai 0 días|onte|fai {n} días",
|
||||||
|
"hour_future": "en 0 horas|nunha hora|en {n} horas",
|
||||||
|
"hour_past": "fai 0 horas|fai 1 hora|fai {n} horas",
|
||||||
|
"just_now": "agora",
|
||||||
|
"minute_future": "en 0 minutos|nun minuto|en {n} minutos",
|
||||||
|
"minute_past": "fai 0 minutos|fai un minuto|fai{n} minutos",
|
||||||
|
"month_future": "en 0 meses|o próximo mes|en {n} meses",
|
||||||
|
"month_past": "fai 0 meses|o último mes|fai {n} meses",
|
||||||
|
"second_future": "agora|en {n} segundo|en {n} segundos",
|
||||||
|
"second_past": "agora|fai {n} segundo|fai {n} segundos",
|
||||||
|
"short_day_future": "en {n}d",
|
||||||
|
"short_day_past": "{n}d",
|
||||||
|
"short_hour_future": "en {n}h",
|
||||||
|
"short_hour_past": "{n}h",
|
||||||
|
"short_minute_future": "en {n}min",
|
||||||
|
"short_minute_past": "{n}min",
|
||||||
|
"short_month_future": "en {n}m",
|
||||||
|
"short_month_past": "{n}m",
|
||||||
|
"short_second_future": "en {n}s",
|
||||||
|
"short_second_past": "{n}s",
|
||||||
|
"short_week_future": "en {n}se",
|
||||||
|
"short_week_past": "{n}se",
|
||||||
|
"short_year_future": "in {n}a",
|
||||||
|
"short_year_past": "{n}a",
|
||||||
|
"week_future": "en 0 semanas|próxima semana|en {n} semanas",
|
||||||
|
"week_past": "fai 0 semanas|última semana|fai {n} semanas",
|
||||||
|
"year_future": "en 0 anos|próximo ano|en {n} anos",
|
||||||
|
"year_past": "fai 0 anos|último ano|fai {n} anos"
|
||||||
|
},
|
||||||
|
"timeline": {
|
||||||
|
"show_new_items": "Mostrar {v} novos elementos|Mostrar {v} novo elemento|Mostrar {v} novos elementos",
|
||||||
|
"view_older_posts": "Non se mostrarán publicacións antigas desde outras instancias."
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"federated_timeline": "Cronoloxía Federada",
|
||||||
|
"local_timeline": "Cronoloxía Local"
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"add_content_warning": "Engadir aviso sobre o contido",
|
||||||
|
"add_emojis": "Engadir emojis",
|
||||||
|
"add_media": "Engade unha imaxe, vídeo ou ficheiro de audio",
|
||||||
|
"add_publishable_content": "Engade contido a publicar",
|
||||||
|
"change_content_visibility": "Cambia a visibilidade do contido",
|
||||||
|
"change_language": "Cambia o idioma",
|
||||||
|
"emoji": "Emoji",
|
||||||
|
"explore_links_intro": "Estes son os temas sobre os que están a conversar agora mesmo as persoas deste servidor e as dos outros servidores da rede descentralizada.",
|
||||||
|
"explore_posts_intro": "Estas publicacións deste e outros servidores da rede descentralizada están aumentando a súa popularidade.",
|
||||||
|
"explore_tags_intro": "Está aumentando a popularidade destes cancelos entre as persoas deste e outros servidores da rede descentralizada.",
|
||||||
|
"publish_failed": "Close failed messages at the top of editor to republish posts",
|
||||||
|
"toggle_code_block": "Activar bloque de código"
|
||||||
|
},
|
||||||
|
"user": {
|
||||||
|
"add_existing": "Engadir unha conta existente.",
|
||||||
|
"server_address_label": "Enderezo do Servidor Mastodon",
|
||||||
|
"sign_in_desc": "Inicia sesión para seguir perfís e cancelos, favorecer, compartir ou responder a mensaxes, ou interactuar coa túa conta noutro servidor.",
|
||||||
|
"sign_in_notice_title": "Vendo {0} datos públicos",
|
||||||
|
"sign_out_account": "Pechar sesión {0}",
|
||||||
|
"tip_no_account": "Se aínda non tes unha conta Mastodon, {0}.",
|
||||||
|
"tip_register_account": "elixe un servidor para crear unha"
|
||||||
|
},
|
||||||
|
"visibility": {
|
||||||
|
"direct": "Directa",
|
||||||
|
"direct_desc": "Visible só polas usuarias mencionadas",
|
||||||
|
"private": "Só seguidoras",
|
||||||
|
"private_desc": "Visible só polas seguidoras",
|
||||||
|
"public": "Pública",
|
||||||
|
"public_desc": "Visible por todas",
|
||||||
|
"unlisted": "Non listada",
|
||||||
|
"unlisted_desc": "Visible por todas, pero non aparece en seccións Descubrir"
|
||||||
|
}
|
||||||
|
}
|
|
@ -174,6 +174,11 @@
|
||||||
"language": {
|
"language": {
|
||||||
"search": "検索"
|
"search": "検索"
|
||||||
},
|
},
|
||||||
|
"list": {
|
||||||
|
"add_account": "アカウントをリストに追加",
|
||||||
|
"modify_account": "このアカウントでリストを編集",
|
||||||
|
"remove_account": "アカウントをリストから削除"
|
||||||
|
},
|
||||||
"menu": {
|
"menu": {
|
||||||
"block_account": "{0}さんをブロック",
|
"block_account": "{0}さんをブロック",
|
||||||
"block_domain": "{0}をドメインブロック",
|
"block_domain": "{0}をドメインブロック",
|
||||||
|
@ -216,9 +221,12 @@
|
||||||
"favourites": "お気に入り",
|
"favourites": "お気に入り",
|
||||||
"federated": "連合",
|
"federated": "連合",
|
||||||
"home": "ホーム",
|
"home": "ホーム",
|
||||||
|
"list": "リスト",
|
||||||
|
"lists": "リスト",
|
||||||
"local": "ローカル",
|
"local": "ローカル",
|
||||||
"muted_users": "ミュートしたユーザー",
|
"muted_users": "ミュートしたユーザー",
|
||||||
"notifications": "通知",
|
"notifications": "通知",
|
||||||
|
"privacy": "プライバシー",
|
||||||
"profile": "プロフィール",
|
"profile": "プロフィール",
|
||||||
"search": "検索",
|
"search": "検索",
|
||||||
"select_feature_flags": "実験的機能を切り替え",
|
"select_feature_flags": "実験的機能を切り替え",
|
||||||
|
@ -248,6 +256,8 @@
|
||||||
},
|
},
|
||||||
"pwa": {
|
"pwa": {
|
||||||
"dismiss": "閉じる",
|
"dismiss": "閉じる",
|
||||||
|
"install": "インストール",
|
||||||
|
"install_title": "Elkをインストール",
|
||||||
"title": "新しいElkのアップデートが利用できます!",
|
"title": "新しいElkのアップデートが利用できます!",
|
||||||
"update": "アップデート",
|
"update": "アップデート",
|
||||||
"update_available_short": "Elkをアップデート",
|
"update_available_short": "Elkをアップデート",
|
||||||
|
@ -362,9 +372,12 @@
|
||||||
"enable_autoplay": "自動再生を有効化",
|
"enable_autoplay": "自動再生を有効化",
|
||||||
"github_cards": "GitHubカード",
|
"github_cards": "GitHubカード",
|
||||||
"grayscale_mode": "グレースケールモード",
|
"grayscale_mode": "グレースケールモード",
|
||||||
|
"hide_account_hover_card": "アカウントのホバーカードを隠す",
|
||||||
"hide_boost_count": "ブーストの数を隠す",
|
"hide_boost_count": "ブーストの数を隠す",
|
||||||
"hide_favorite_count": "お気に入りの数を隠す",
|
"hide_favorite_count": "お気に入りの数を隠す",
|
||||||
"hide_follower_count": "フォロワーの数を隠す",
|
"hide_follower_count": "フォロワーの数を隠す",
|
||||||
|
"hide_reply_count": "リプライの数を隠す",
|
||||||
|
"hide_translation": "翻訳を隠す",
|
||||||
"label": "環境設定",
|
"label": "環境設定",
|
||||||
"title": "実験的機能",
|
"title": "実験的機能",
|
||||||
"user_picker": "ユーザーピッカー",
|
"user_picker": "ユーザーピッカー",
|
||||||
|
@ -432,15 +445,17 @@
|
||||||
"spoiler_show_less": "隠す",
|
"spoiler_show_less": "隠す",
|
||||||
"spoiler_show_more": "表示する",
|
"spoiler_show_more": "表示する",
|
||||||
"thread": "スレッド",
|
"thread": "スレッド",
|
||||||
"try_original_site": "元ののサイトを試す"
|
"try_original_site": "元のサイトを試す"
|
||||||
},
|
},
|
||||||
"status_history": {
|
"status_history": {
|
||||||
"created": "{0}に投稿",
|
"created": "{0}に投稿",
|
||||||
"edited": "{0}に編集"
|
"edited": "{0}に編集"
|
||||||
},
|
},
|
||||||
"tab": {
|
"tab": {
|
||||||
|
"accounts": "アカウント",
|
||||||
"for_you": "For you",
|
"for_you": "For you",
|
||||||
"hashtags": "ハッシュタグ",
|
"hashtags": "ハッシュタグ",
|
||||||
|
"list": "リスト",
|
||||||
"media": "メディア",
|
"media": "メディア",
|
||||||
"news": "ニュース",
|
"news": "ニュース",
|
||||||
"notifications_all": "すべて",
|
"notifications_all": "すべて",
|
||||||
|
|
|
@ -167,6 +167,11 @@
|
||||||
"language": {
|
"language": {
|
||||||
"search": "Szukaj"
|
"search": "Szukaj"
|
||||||
},
|
},
|
||||||
|
"list": {
|
||||||
|
"add_account": "Dodaj konto do listy",
|
||||||
|
"modify_account": "Modyfikacja listy",
|
||||||
|
"remove_account": "Usuń konto z listy"
|
||||||
|
},
|
||||||
"menu": {
|
"menu": {
|
||||||
"block_account": "Zablokuj {0}",
|
"block_account": "Zablokuj {0}",
|
||||||
"block_domain": "Zablokuj domenę {0}",
|
"block_domain": "Zablokuj domenę {0}",
|
||||||
|
@ -208,10 +213,13 @@
|
||||||
"explore": "Odkrywaj",
|
"explore": "Odkrywaj",
|
||||||
"favourites": "Ulubione",
|
"favourites": "Ulubione",
|
||||||
"federated": "Globalna",
|
"federated": "Globalna",
|
||||||
"home": "Strona główna",
|
"home": "Główny widok",
|
||||||
|
"list": "Lista",
|
||||||
|
"lists": "Listy",
|
||||||
"local": "Lokalna",
|
"local": "Lokalna",
|
||||||
"muted_users": "Wyciszeni użytkownicy",
|
"muted_users": "Wyciszeni użytkownicy",
|
||||||
"notifications": "Powiadomienia",
|
"notifications": "Powiadomienia",
|
||||||
|
"privacy": "Prywatność",
|
||||||
"profile": "Profil",
|
"profile": "Profil",
|
||||||
"search": "Szukaj",
|
"search": "Szukaj",
|
||||||
"select_feature_flags": "Włączanie funkcji",
|
"select_feature_flags": "Włączanie funkcji",
|
||||||
|
@ -241,6 +249,8 @@
|
||||||
},
|
},
|
||||||
"pwa": {
|
"pwa": {
|
||||||
"dismiss": "Odrzuć",
|
"dismiss": "Odrzuć",
|
||||||
|
"install": "Zainstaluj",
|
||||||
|
"install_title": "Instalacja Elk",
|
||||||
"title": "Dostępna nowa aktualizacja Elk!",
|
"title": "Dostępna nowa aktualizacja Elk!",
|
||||||
"update": "Aktualizacja",
|
"update": "Aktualizacja",
|
||||||
"update_available_short": "Zaktualizuj Elk",
|
"update_available_short": "Zaktualizuj Elk",
|
||||||
|
@ -288,24 +298,17 @@
|
||||||
"label": "Ustawienia konta"
|
"label": "Ustawienia konta"
|
||||||
},
|
},
|
||||||
"interface": {
|
"interface": {
|
||||||
"color_mode": "Tryb koloru",
|
"color_mode": "Motyw",
|
||||||
"dark_mode": "Ciemny",
|
"dark_mode": "Ciemny",
|
||||||
"default": " (domyślna)",
|
"default": " (domyślna)",
|
||||||
"font_size": "Rozmiar czcionki",
|
"font_size": "Rozmiar czcionki",
|
||||||
"label": "Wygląd",
|
"label": "Wygląd",
|
||||||
"light_mode": "Jasny",
|
"light_mode": "Jasny",
|
||||||
"size_label": {
|
|
||||||
"lg": "Duża",
|
|
||||||
"md": "Średnia",
|
|
||||||
"sm": "Mała",
|
|
||||||
"xl": "Bardzo duża",
|
|
||||||
"xs": "Bardzo mała"
|
|
||||||
},
|
|
||||||
"system_mode": "Systemowy",
|
"system_mode": "Systemowy",
|
||||||
"theme_color": "Kolor motywu"
|
"theme_color": "Kolor motywu"
|
||||||
},
|
},
|
||||||
"language": {
|
"language": {
|
||||||
"display_language": "Wyświetl język",
|
"display_language": "Język aplikacji",
|
||||||
"label": "Język"
|
"label": "Język"
|
||||||
},
|
},
|
||||||
"notifications": {
|
"notifications": {
|
||||||
|
@ -316,21 +319,21 @@
|
||||||
"push_notifications": {
|
"push_notifications": {
|
||||||
"alerts": {
|
"alerts": {
|
||||||
"favourite": "Ulubione",
|
"favourite": "Ulubione",
|
||||||
"follow": "Nowi obserwujący",
|
"follow": "Nowy obserwujący",
|
||||||
"mention": "Wzmianki",
|
"mention": "Wzmianki",
|
||||||
"poll": "Ankiety",
|
"poll": "Ankiety",
|
||||||
"reblog": "Udostępnione moje wpisy",
|
"reblog": "Udostępniono Twój wpis",
|
||||||
"title": "Jakie powiadomienia otrzymywać?"
|
"title": "Jakie powiadomienia chcesz otrzymywać?"
|
||||||
},
|
},
|
||||||
"description": "Otrzymuj powiadomienia nawet wtedy, gdy nie korzystasz z Elk.",
|
"description": "Otrzymuj powiadomienia nawet wtedy, gdy nie korzystasz z Elk.",
|
||||||
"instructions": "Nie zapomnij zapisać zmian za pomocą przycisku @:settings.notifications.push_notifications.save_settings!",
|
"instructions": "Nie zapomnij zapisać zmian za pomocą przycisku \"Zapisz ustawienia\"",
|
||||||
"label": "Ustawienia powiadomień push",
|
"label": "Ustawienia powiadomień push",
|
||||||
"policy": {
|
"policy": {
|
||||||
"all": "Od kogokolwiek",
|
"all": "Od kogokolwiek",
|
||||||
"followed": "Od tych, których obserwuję",
|
"followed": "Od tych, których obserwuję",
|
||||||
"follower": "Od tych, którzy mnie obserwują",
|
"follower": "Od tych, którzy mnie obserwują",
|
||||||
"none": "Od nikogo",
|
"none": "Od nikogo",
|
||||||
"title": "Od kogo mogę otrzymywać powiadomienia?"
|
"title": "Od kogo możesz otrzymywać powiadomienia?"
|
||||||
},
|
},
|
||||||
"save_settings": "Zapisz ustawienia",
|
"save_settings": "Zapisz ustawienia",
|
||||||
"subscription_error": {
|
"subscription_error": {
|
||||||
|
@ -362,9 +365,12 @@
|
||||||
"enable_autoplay": "Włącz autoodtwarzanie",
|
"enable_autoplay": "Włącz autoodtwarzanie",
|
||||||
"github_cards": "GitHub Cards",
|
"github_cards": "GitHub Cards",
|
||||||
"grayscale_mode": "Tryb skali szarości",
|
"grayscale_mode": "Tryb skali szarości",
|
||||||
|
"hide_account_hover_card": "Ukryj wizytówkę konta",
|
||||||
"hide_boost_count": "Ukryj liczbę podbić",
|
"hide_boost_count": "Ukryj liczbę podbić",
|
||||||
"hide_favorite_count": "Ukryj liczbę polubień",
|
"hide_favorite_count": "Ukryj liczbę polubień",
|
||||||
"hide_follower_count": "Ukryj liczbę obserwujących",
|
"hide_follower_count": "Ukryj liczbę obserwujących",
|
||||||
|
"hide_reply_count": "Ukryj liczbę odpowiedzi",
|
||||||
|
"hide_translation": "Ukryj funkcję tłumaczenia",
|
||||||
"label": "Preferencje",
|
"label": "Preferencje",
|
||||||
"title": "Funkcje eksperymentalne",
|
"title": "Funkcje eksperymentalne",
|
||||||
"user_picker": "User Picker",
|
"user_picker": "User Picker",
|
||||||
|
@ -377,11 +383,11 @@
|
||||||
"display_name": "Wyświetlana nazwa",
|
"display_name": "Wyświetlana nazwa",
|
||||||
"label": "Wygląd",
|
"label": "Wygląd",
|
||||||
"profile_metadata": "Metadane profilu",
|
"profile_metadata": "Metadane profilu",
|
||||||
"profile_metadata_desc": "Możesz mieć maksymalnie {0} elementów wyświetlanych jako tabela w swoim profilu",
|
"profile_metadata_desc": "Możesz mieć maksymalnie {0} elementy wyświetlane jako tabela w swoim profilu",
|
||||||
"title": "Edytuj profil"
|
"title": "Edytuj profil"
|
||||||
},
|
},
|
||||||
"featured_tags": {
|
"featured_tags": {
|
||||||
"description": "Ludzie mogą przeglądać Twoje publiczne posty pod tymi hasztagami.",
|
"description": "Ludzie mogą przeglądać Twoje publiczne wpisy pod tymi hasztagami.",
|
||||||
"label": "Polecane hasztagi"
|
"label": "Polecane hasztagi"
|
||||||
},
|
},
|
||||||
"label": "Profil"
|
"label": "Profil"
|
||||||
|
@ -439,8 +445,10 @@
|
||||||
"edited": "edytowano {0}"
|
"edited": "edytowano {0}"
|
||||||
},
|
},
|
||||||
"tab": {
|
"tab": {
|
||||||
|
"accounts": "Konta",
|
||||||
"for_you": "Dla Ciebie",
|
"for_you": "Dla Ciebie",
|
||||||
"hashtags": "Hasztagi",
|
"hashtags": "Hasztagi",
|
||||||
|
"list": "Lista",
|
||||||
"media": "Media",
|
"media": "Media",
|
||||||
"news": "Aktualności",
|
"news": "Aktualności",
|
||||||
"notifications_all": "Wszystko",
|
"notifications_all": "Wszystko",
|
||||||
|
@ -459,7 +467,7 @@
|
||||||
"day_past": "0 dni temu|wczoraj|{n} dni temu",
|
"day_past": "0 dni temu|wczoraj|{n} dni temu",
|
||||||
"hour_future": "za 0 godzin|za 1 godzinę|za {n} godziny|za {n} godzin",
|
"hour_future": "za 0 godzin|za 1 godzinę|za {n} godziny|za {n} godzin",
|
||||||
"hour_past": "0 godzin temu|1 godzinę temu|{n} godziny temu|{n} godzin temu",
|
"hour_past": "0 godzin temu|1 godzinę temu|{n} godziny temu|{n} godzin temu",
|
||||||
"just_now": "właśnie teraz",
|
"just_now": "teraz",
|
||||||
"minute_future": "za 0 minut|za 1 minutę|za {n} minuty|za {n} minut",
|
"minute_future": "za 0 minut|za 1 minutę|za {n} minuty|za {n} minut",
|
||||||
"minute_past": "0 minut temu|1 minutę temu|{n} minuty temu|{n} minut temu",
|
"minute_past": "0 minut temu|1 minutę temu|{n} minuty temu|{n} minut temu",
|
||||||
"month_future": "za 0 miesięcy|za miesiąc|za {n} miesiące|za {n} miesięcy",
|
"month_future": "za 0 miesięcy|za miesiąc|za {n} miesiące|za {n} miesięcy",
|
||||||
|
|
|
@ -174,6 +174,11 @@
|
||||||
"language": {
|
"language": {
|
||||||
"search": "Procurar"
|
"search": "Procurar"
|
||||||
},
|
},
|
||||||
|
"list": {
|
||||||
|
"add_account": "Adicionar conta à lista",
|
||||||
|
"modify_account": "Modificar listas com a conta",
|
||||||
|
"remove_account": "Remover conta da lista"
|
||||||
|
},
|
||||||
"menu": {
|
"menu": {
|
||||||
"block_account": "Bloquear {0}",
|
"block_account": "Bloquear {0}",
|
||||||
"block_domain": "Bloquear domínio {0}",
|
"block_domain": "Bloquear domínio {0}",
|
||||||
|
@ -216,9 +221,12 @@
|
||||||
"favourites": "Favoritos",
|
"favourites": "Favoritos",
|
||||||
"federated": "Federada",
|
"federated": "Federada",
|
||||||
"home": "Início",
|
"home": "Início",
|
||||||
|
"list": "Lista",
|
||||||
|
"lists": "Listas",
|
||||||
"local": "Local",
|
"local": "Local",
|
||||||
"muted_users": "Utilizadores silenciados",
|
"muted_users": "Utilizadores silenciados",
|
||||||
"notifications": "Notificações",
|
"notifications": "Notificações",
|
||||||
|
"privacy": "Privacidade",
|
||||||
"profile": "Perfil",
|
"profile": "Perfil",
|
||||||
"search": "Procurar",
|
"search": "Procurar",
|
||||||
"select_feature_flags": "Alternar Funcionalidades",
|
"select_feature_flags": "Alternar Funcionalidades",
|
||||||
|
@ -248,6 +256,8 @@
|
||||||
},
|
},
|
||||||
"pwa": {
|
"pwa": {
|
||||||
"dismiss": "Dispensar",
|
"dismiss": "Dispensar",
|
||||||
|
"install": "Instalar",
|
||||||
|
"install_title": "Instalar Elk",
|
||||||
"title": "Nova atualização do Elk disponível!",
|
"title": "Nova atualização do Elk disponível!",
|
||||||
"update": "Atualizar",
|
"update": "Atualizar",
|
||||||
"update_available_short": "Atualizar Elk",
|
"update_available_short": "Atualizar Elk",
|
||||||
|
@ -362,9 +372,12 @@
|
||||||
"enable_autoplay": "Habilitar Reprodução Automática",
|
"enable_autoplay": "Habilitar Reprodução Automática",
|
||||||
"github_cards": "Cartões do GitHub",
|
"github_cards": "Cartões do GitHub",
|
||||||
"grayscale_mode": "Modo tons de cinza",
|
"grayscale_mode": "Modo tons de cinza",
|
||||||
|
"hide_account_hover_card": "Esconder cartão flutuante de conta",
|
||||||
"hide_boost_count": "Esconder contagem de partilhas",
|
"hide_boost_count": "Esconder contagem de partilhas",
|
||||||
"hide_favorite_count": "Esconder contagem de favoritos",
|
"hide_favorite_count": "Esconder contagem de favoritos",
|
||||||
"hide_follower_count": "Esconder contagem de seguidores",
|
"hide_follower_count": "Esconder contagem de seguidores",
|
||||||
|
"hide_reply_count": "Esconder contagem de respostas",
|
||||||
|
"hide_translation": "Esconder botão de tradução",
|
||||||
"label": "Preferências",
|
"label": "Preferências",
|
||||||
"title": "Funcionalidades Experimentais",
|
"title": "Funcionalidades Experimentais",
|
||||||
"user_picker": "Selecionador de Utilizador",
|
"user_picker": "Selecionador de Utilizador",
|
||||||
|
@ -375,7 +388,7 @@
|
||||||
"bio": "Bio",
|
"bio": "Bio",
|
||||||
"description": "Editar imagem de perfil, nome, perfil, etc.",
|
"description": "Editar imagem de perfil, nome, perfil, etc.",
|
||||||
"display_name": "Nome de apresentação",
|
"display_name": "Nome de apresentação",
|
||||||
"label": "Aspecto",
|
"label": "Aspeto",
|
||||||
"profile_metadata": "Metadados de perfil",
|
"profile_metadata": "Metadados de perfil",
|
||||||
"profile_metadata_desc": "Pode ter até {0} itens expostos, em forma de tabela, no seu perfil",
|
"profile_metadata_desc": "Pode ter até {0} itens expostos, em forma de tabela, no seu perfil",
|
||||||
"title": "Editar perfil"
|
"title": "Editar perfil"
|
||||||
|
@ -439,8 +452,10 @@
|
||||||
"edited": "editada {0}"
|
"edited": "editada {0}"
|
||||||
},
|
},
|
||||||
"tab": {
|
"tab": {
|
||||||
|
"accounts": "Contas",
|
||||||
"for_you": "Para si",
|
"for_you": "Para si",
|
||||||
"hashtags": "Hashtags",
|
"hashtags": "Hashtags",
|
||||||
|
"list": "Lista",
|
||||||
"media": "Media",
|
"media": "Media",
|
||||||
"news": "Notícias",
|
"news": "Notícias",
|
||||||
"notifications_all": "Todas",
|
"notifications_all": "Todas",
|
||||||
|
|
529
locales/ru-RU.json
Normal file
|
@ -0,0 +1,529 @@
|
||||||
|
{
|
||||||
|
"a11y": {
|
||||||
|
"loading_page": "Загрузка страницы, пожалуйста, подождите",
|
||||||
|
"loading_titled_page": "Загрузка страницы {0}, пожалуйста, подождите",
|
||||||
|
"locale_changed": "Язык изменен на {0}",
|
||||||
|
"locale_changing": "Изменение языка, пожалуйста, подождите",
|
||||||
|
"route_loaded": "Страница {0} загружена"
|
||||||
|
},
|
||||||
|
"account": {
|
||||||
|
"avatar_description": "Аватар {0}",
|
||||||
|
"blocked_by": "Вы заблокированы этим пользователем.",
|
||||||
|
"blocked_domains": "Заблокированные домены",
|
||||||
|
"blocked_users": "Заблокированные пользователи",
|
||||||
|
"blocking": "Заблокирован",
|
||||||
|
"bot": "БОТ",
|
||||||
|
"favourites": "Избранное",
|
||||||
|
"follow": "Читать",
|
||||||
|
"follow_back": "Читать",
|
||||||
|
"follow_requested": "В ожидании",
|
||||||
|
"followers": "Читатели",
|
||||||
|
"followers_count": "{0} Читатель|{0} Читателя|{0} Читателей|{0} Читателей",
|
||||||
|
"following": "Читаю",
|
||||||
|
"following_count": "{0} в читаемых",
|
||||||
|
"follows_you": "Читает вас",
|
||||||
|
"go_to_profile": "Перейти к профилю",
|
||||||
|
"joined": "Регистрация",
|
||||||
|
"moved_title": "теперь использует другую учетную запись:",
|
||||||
|
"muted_users": "Игнорируемые пользователи",
|
||||||
|
"muting": "Вы игнорируете",
|
||||||
|
"mutuals": "Взаимно читаю",
|
||||||
|
"notifications_on_post_disable": "Не уведомлять о постах {username}",
|
||||||
|
"notifications_on_post_enable": "Уведомлять о постах {username}",
|
||||||
|
"pinned": "Закрепленные посты",
|
||||||
|
"posts": "Посты",
|
||||||
|
"posts_count": "{0} Пост|{0} Поста|{0} Постов|{0} Постов",
|
||||||
|
"profile_description": "Заголовок профиля {0}",
|
||||||
|
"profile_unavailable": "Профиль недоступен",
|
||||||
|
"unblock": "Перестать блокировать",
|
||||||
|
"unfollow": "Перестать читать",
|
||||||
|
"unmute": "Перестать игнорировать"
|
||||||
|
},
|
||||||
|
"action": {
|
||||||
|
"apply": "Применить",
|
||||||
|
"bookmark": "Добавить в закладки",
|
||||||
|
"bookmarked": "Добавлен в закладки",
|
||||||
|
"boost": "Сделать репост",
|
||||||
|
"boost_count": "{0}",
|
||||||
|
"boosted": "Репост сделан",
|
||||||
|
"clear_publish_failed": "Закрыть сообщение об ошибке публикации",
|
||||||
|
"clear_upload_failed": "Закрыть сообщение об ошибке загрузки файлов",
|
||||||
|
"close": "Закрыть",
|
||||||
|
"compose": "Написать",
|
||||||
|
"confirm": "Да",
|
||||||
|
"edit": "Редактировать",
|
||||||
|
"enter_app": "Перейти к приложению",
|
||||||
|
"favourite": "Добавить в избранное",
|
||||||
|
"favourite_count": "{0}",
|
||||||
|
"favourited": "Добавлено в избранное",
|
||||||
|
"more": "Больше",
|
||||||
|
"next": "Следующее",
|
||||||
|
"prev": "Предыдущее",
|
||||||
|
"previous": "Предыдущее",
|
||||||
|
"publish": "Опубликовать",
|
||||||
|
"reply": "Ответить",
|
||||||
|
"reply_count": "{0}",
|
||||||
|
"reset": "Отменить изменения",
|
||||||
|
"save": "Сохранить",
|
||||||
|
"save_changes": "Сохранить изменения",
|
||||||
|
"sign_in": "Войти",
|
||||||
|
"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": "Переключить режим дзен"
|
||||||
|
},
|
||||||
|
"common": {
|
||||||
|
"confirm_dialog": {
|
||||||
|
"cancel": "Нет",
|
||||||
|
"confirm": "Да",
|
||||||
|
"title": "Вы уверены?"
|
||||||
|
},
|
||||||
|
"end_of_list": "Конец списка",
|
||||||
|
"error": "ОШИБКА",
|
||||||
|
"in": "в",
|
||||||
|
"not_found": "404 - Не Найдено",
|
||||||
|
"offline_desc": "Похоже, вы находитесь в автономном режиме. Пожалуйста, проверьте ваше сетевое подключение."
|
||||||
|
},
|
||||||
|
"compose": {
|
||||||
|
"draft_title": "Черновик {0}",
|
||||||
|
"drafts": "Черновики ({v})"
|
||||||
|
},
|
||||||
|
"confirm": {
|
||||||
|
"block_account": {
|
||||||
|
"cancel": "Отмена",
|
||||||
|
"confirm": "Заблокировать",
|
||||||
|
"title": "Вы уверены, что хотите заблокировать {0}?"
|
||||||
|
},
|
||||||
|
"block_domain": {
|
||||||
|
"cancel": "Отмена",
|
||||||
|
"confirm": "Заблокировать",
|
||||||
|
"title": "Вы уверены, что хотите заблокировать {0}?"
|
||||||
|
},
|
||||||
|
"common": {
|
||||||
|
"cancel": "Нет",
|
||||||
|
"confirm": "Да"
|
||||||
|
},
|
||||||
|
"delete_posts": {
|
||||||
|
"cancel": "Отмена",
|
||||||
|
"confirm": "Удалить",
|
||||||
|
"title": "Вы уверены, что хотите удалить этот пост?"
|
||||||
|
},
|
||||||
|
"mute_account": {
|
||||||
|
"cancel": "Отмена",
|
||||||
|
"confirm": "Скрыть",
|
||||||
|
"title": "Вы уверены, что хотите скрыть {0}?"
|
||||||
|
},
|
||||||
|
"show_reblogs": {
|
||||||
|
"cancel": "Нет",
|
||||||
|
"confirm": "Да",
|
||||||
|
"title": "Вы уверены, что хотите снова видеть репосты от {0}?"
|
||||||
|
},
|
||||||
|
"unfollow": {
|
||||||
|
"cancel": "Нет",
|
||||||
|
"confirm": "Да",
|
||||||
|
"title": "Вы уверены, что хотите перестать читать этого пользователя?"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"conversation": {
|
||||||
|
"with": "Переписка с"
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"account_not_found": "Учетная запись {0} не найдена",
|
||||||
|
"explore-list-empty": "Сейчас тренды пусты. Загляните попозже!",
|
||||||
|
"file_size_cannot_exceed_n_mb": "Размер файла не может превышать {0} Мбайт",
|
||||||
|
"sign_in_error": "Не удается подключиться к серверу.",
|
||||||
|
"status_not_found": "Пост не найден",
|
||||||
|
"unsupported_file_format": "Неподдерживаемый формат файла"
|
||||||
|
},
|
||||||
|
"help": {
|
||||||
|
"desc_highlight": "В приложении может недоставать некоторых функций, зато могут попадаться баги.",
|
||||||
|
"desc_para1": "Спасибо за участие в тестировании Elk, открытого веб-клиента для Mastodon!",
|
||||||
|
"desc_para2": "Мы усердно работаем над развитием приложения и постоянно его улучшаем.",
|
||||||
|
"desc_para3": "А еще вы можете поддержать разработку, став спонсором нашей команды на GitHub Sponsors. Мы надеемся, что вам понравится Elk!",
|
||||||
|
"desc_para4": "Elk является проектом с открытым исходным кодом. Если вы хотите помочь с тестированием, обратной связью или разработкой,",
|
||||||
|
"desc_para5": "приходите к нам на GitHub",
|
||||||
|
"desc_para6": "и примите участие.",
|
||||||
|
"title": "Elk находится в превью!"
|
||||||
|
},
|
||||||
|
"language": {
|
||||||
|
"search": "Поиск"
|
||||||
|
},
|
||||||
|
"menu": {
|
||||||
|
"block_account": "Заблокировать {0}",
|
||||||
|
"block_domain": "Заблокировать домен {0}",
|
||||||
|
"copy_link_to_post": "Скопировать ссылку на этот пост",
|
||||||
|
"delete": "Удалить",
|
||||||
|
"delete_and_redraft": "Удалить и переписать",
|
||||||
|
"delete_confirm": {
|
||||||
|
"cancel": "Отменить",
|
||||||
|
"confirm": "Удалить",
|
||||||
|
"title": "Вы уверены, что хотите удалить этот пост?"
|
||||||
|
},
|
||||||
|
"direct_message_account": "Отправьте личное сообщение {0}",
|
||||||
|
"edit": "Редактировать",
|
||||||
|
"hide_reblogs": "Скрыть репосты от {0}",
|
||||||
|
"mention_account": "Упомянуть {0}",
|
||||||
|
"mute_account": "Игнорировать {0}",
|
||||||
|
"mute_conversation": "Игнорировать пост",
|
||||||
|
"open_in_original_site": "Открыть на исходном сайте",
|
||||||
|
"pin_on_profile": "Закрепить в профиле",
|
||||||
|
"share_post": "Поделиться этим постом",
|
||||||
|
"show_favourited_and_boosted_by": "Кто добавил в избранное и сделал репост",
|
||||||
|
"show_reblogs": "Показывать репосты от {0}",
|
||||||
|
"show_untranslated": "Показать оригинал",
|
||||||
|
"toggle_theme": {
|
||||||
|
"dark": "Включить темную тему",
|
||||||
|
"light": "Включить светлую тему"
|
||||||
|
},
|
||||||
|
"translate_post": "Перевести пост",
|
||||||
|
"unblock_account": "Разблокировать {0}",
|
||||||
|
"unblock_domain": "Разблокировать домен {0}",
|
||||||
|
"unmute_account": "Не игнорировать {0}",
|
||||||
|
"unmute_conversation": "Не игнорировать этот пост",
|
||||||
|
"unpin_on_profile": "Открепить от профиля"
|
||||||
|
},
|
||||||
|
"nav": {
|
||||||
|
"back": "Назад",
|
||||||
|
"blocked_domains": "Заблокированные домены",
|
||||||
|
"blocked_users": "Заблокированные пользователи",
|
||||||
|
"bookmarks": "Закладки",
|
||||||
|
"built_at": "Билд собран {0}",
|
||||||
|
"compose": "Написать",
|
||||||
|
"conversations": "Сообщения",
|
||||||
|
"explore": "Обзор",
|
||||||
|
"favourites": "Избранное",
|
||||||
|
"federated": "Все сервера",
|
||||||
|
"home": "Главная",
|
||||||
|
"local": "Этот сервер",
|
||||||
|
"muted_users": "Скрытые пользователи",
|
||||||
|
"notifications": "Уведомления",
|
||||||
|
"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} читателей|{0} читателей",
|
||||||
|
"missing_type": "ОТСУТСТВУЕТ notification.type:",
|
||||||
|
"reblogged_post": "сделали реблог вашего поста",
|
||||||
|
"request_to_follow": "запрос на чтение",
|
||||||
|
"signed_up": "зарегистрировались",
|
||||||
|
"update_status": "обновили свой пост"
|
||||||
|
},
|
||||||
|
"placeholder": {
|
||||||
|
"content_warning": "Напишите ваше предупреждение...",
|
||||||
|
"default_1": "Что у вас нового?",
|
||||||
|
"reply_to_account": "Ответить {0}",
|
||||||
|
"replying": "Написать в ответ",
|
||||||
|
"the_thread": "тред"
|
||||||
|
},
|
||||||
|
"pwa": {
|
||||||
|
"dismiss": "Отклонить",
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"search": {
|
||||||
|
"search_desc": "Поиск людей и хэштегов",
|
||||||
|
"search_empty": "Не удалось найти ничего по этому поисковому запросу"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"about": {
|
||||||
|
"label": "О Elk",
|
||||||
|
"meet_the_team": "Наша команда",
|
||||||
|
"sponsor_action": "Станьте спонсором",
|
||||||
|
"sponsor_action_desc": "Чтобы поддержать команду, разрабатывающую Elk",
|
||||||
|
"sponsors": "Спонсоры",
|
||||||
|
"sponsors_body_1": "Elk стал возможен благодаря спонсированию и помощи:",
|
||||||
|
"sponsors_body_2": "А также всех компаний и частных лиц, спонсирующих команду Elk и ее членов.",
|
||||||
|
"sponsors_body_3": "Если вам нравится приложение, возможно вы захотите стать нашим спонсором:"
|
||||||
|
},
|
||||||
|
"account_settings": {
|
||||||
|
"description": "Вы можете изменить параметры своей учетной записи в пользовательском интерфейсе Mastodon",
|
||||||
|
"label": "Настройки учетной записи"
|
||||||
|
},
|
||||||
|
"interface": {
|
||||||
|
"color_mode": "Тема",
|
||||||
|
"dark_mode": "Темная",
|
||||||
|
"default": " (по умолчанию)",
|
||||||
|
"font_size": "Размер текста",
|
||||||
|
"label": "Интерфейс",
|
||||||
|
"light_mode": "Светлая",
|
||||||
|
"size_label": {
|
||||||
|
"lg": "Большой",
|
||||||
|
"md": "Средний",
|
||||||
|
"sm": "Маленький",
|
||||||
|
"xl": "Очень большой",
|
||||||
|
"xs": "Очень маленький"
|
||||||
|
},
|
||||||
|
"system_mode": "Системная",
|
||||||
|
"theme_color": "Цвет"
|
||||||
|
},
|
||||||
|
"language": {
|
||||||
|
"display_language": "Язык отображения",
|
||||||
|
"label": "Язык"
|
||||||
|
},
|
||||||
|
"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": "Очистить ошибки",
|
||||||
|
"permission_denied": "Ошибка: включите уведомления в вашем браузере.",
|
||||||
|
"request_error": "При запросе подписки произошла ошибка, попробуйте еще раз, и если ошибка повторится, пожалуйста, сообщите о проблеме в Github репозиторий Elk.",
|
||||||
|
"title": "Не удалось подписаться на push-уведомления",
|
||||||
|
"too_many_registrations": "Из-за ограничений браузера, Elk не может использовать службу push-уведомлений для нескольких учетных записей на разных серверах. Вам необходимо отказаться от подписки на push-уведомления в других аккаунтах и повторить попытку."
|
||||||
|
},
|
||||||
|
"title": "Настройки push-уведомлений",
|
||||||
|
"undo_settings": "Отменить изменения",
|
||||||
|
"unsubscribe": "Отключить push-уведомления",
|
||||||
|
"unsupported": "Ваш браузер не поддерживает push-уведомления.",
|
||||||
|
"warning": {
|
||||||
|
"enable_close": "Закрыть",
|
||||||
|
"enable_description": "Чтобы получать уведомления, даже когда Elk закрыт, включите push-уведомления. После включения, с помощью кнопки \"@:settings.notifications.show_btn{'\"'} выше, вы сможете настроить какие именно действия генерируют push-уведомления.",
|
||||||
|
"enable_description_desktop": "Чтобы получать уведомления, даже когда Elk закрыт, включите push-уведомления. После включения, в меню \"Настройки > Уведомления > Настройки Push-уведомлений\" появится возможность настроить какие именно действия генерируют push-уведомления.",
|
||||||
|
"enable_description_mobile": "Вы также можете получить доступ к настройкам в меню \"Настройки > Уведомления > Настройки Push-уведомлений\".",
|
||||||
|
"enable_description_settings": "Чтобы получать уведомления, даже когда Elk закрыт, включите push-уведомления. После включения, на этом экране появится возможность настроить какие именно действия генерируют push-уведомления.",
|
||||||
|
"enable_desktop": "Включить push-уведомления",
|
||||||
|
"enable_title": "Оставайтесь в курсе событий",
|
||||||
|
"re_auth": "Похоже, что ваш сервер не поддерживает push-уведомления. Попробуйте выйти и снова войти в систему, если это сообщение все еще появляется, обратитесь к администратору вашего сервера."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"show_btn": "Перейдите в настройки уведомлений"
|
||||||
|
},
|
||||||
|
"notifications_settings": "Уведомления",
|
||||||
|
"preferences": {
|
||||||
|
"github_cards": "GitHub карточки",
|
||||||
|
"grayscale_mode": "Режим серого цвета",
|
||||||
|
"hide_boost_count": "Скрыть счетчик репостов",
|
||||||
|
"hide_favorite_count": "Скрыть счетчик избранного",
|
||||||
|
"hide_follower_count": "Скрыть счетчик читателей",
|
||||||
|
"label": "Настройки",
|
||||||
|
"title": "Экспериментальные функции",
|
||||||
|
"user_picker": "Переключатель учетных записей",
|
||||||
|
"virtual_scroll": "Виртуальный скролл"
|
||||||
|
},
|
||||||
|
"profile": {
|
||||||
|
"appearance": {
|
||||||
|
"bio": "О себе",
|
||||||
|
"description": "Измените аватар, обложку, имя пользователя и т.д.",
|
||||||
|
"display_name": "Имя",
|
||||||
|
"label": "Публичный профиль",
|
||||||
|
"profile_metadata": "Метаданные профиля",
|
||||||
|
"profile_metadata_desc": "В вашем профиле может отображаться до {0} элементов в виде таблицы",
|
||||||
|
"title": "Настройки профиля пользователя"
|
||||||
|
},
|
||||||
|
"featured_tags": {
|
||||||
|
"description": "Люди могут просматривать ваши публичные посты под этими хэштегами.",
|
||||||
|
"label": "Рекомендуемые хэштеги"
|
||||||
|
},
|
||||||
|
"label": "Профиль"
|
||||||
|
},
|
||||||
|
"select_a_settings": "Выберите настройку",
|
||||||
|
"users": {
|
||||||
|
"export": "Экспорт пользовательских токенов",
|
||||||
|
"import": "Импорт пользовательских токенов",
|
||||||
|
"label": "Авторизованные пользователи"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"share-target": {
|
||||||
|
"description": "Elk можно настроить таким образом, чтобы вы могли делиться контентом из других приложений, просто установите Elk на свое устройство или компьютер и войдите в систему.",
|
||||||
|
"hint": "Чтобы поделиться контентом с помощью Elk, вы должны установить Elk и войти в систему.",
|
||||||
|
"title": "Поделиться с помощью Elk"
|
||||||
|
},
|
||||||
|
"state": {
|
||||||
|
"attachments_exceed_server_limit": "Количество вложенных файлов превысило лимит на одно сообщение.",
|
||||||
|
"attachments_limit_error": "Превышен лимит вложенных файлов на одно сообщение",
|
||||||
|
"edited": "(Отредактированно)",
|
||||||
|
"editing": "Редактирование",
|
||||||
|
"loading": "Погрузка...",
|
||||||
|
"publish_failed": "Ошибка публикации",
|
||||||
|
"publishing": "Публикация...",
|
||||||
|
"upload_failed": "Ошибка загрузки файлов",
|
||||||
|
"uploading": "Загрузка..."
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"boosted_by": "Сделали репост",
|
||||||
|
"edited": "Отредактировано {0}",
|
||||||
|
"favourited_by": "Добавили в избранное",
|
||||||
|
"filter_hidden_phrase": "Отфильтровано по",
|
||||||
|
"filter_removed_phrase": "Удалено фильтром",
|
||||||
|
"filter_show_anyway": "Показать все равно",
|
||||||
|
"img_alt": {
|
||||||
|
"desc": "Описание",
|
||||||
|
"dismiss": "Закрыть"
|
||||||
|
},
|
||||||
|
"poll": {
|
||||||
|
"count": "{0} голос|{0} голоса|{0} голосов|{0} голосов",
|
||||||
|
"ends": "Завершается {0}",
|
||||||
|
"finished": "Завершен {0}"
|
||||||
|
},
|
||||||
|
"reblogged": "{0} сделали репост",
|
||||||
|
"replying_to": "Ответ на пост {0}",
|
||||||
|
"show_full_thread": "Показать весь тред",
|
||||||
|
"someone": "кого-то",
|
||||||
|
"spoiler_show_less": "Скрыть",
|
||||||
|
"spoiler_show_more": "Показать",
|
||||||
|
"thread": "Тред",
|
||||||
|
"try_original_site": "Посмотреть на оригинальном сайте"
|
||||||
|
},
|
||||||
|
"status_history": {
|
||||||
|
"created": "созданно {0}",
|
||||||
|
"edited": "отредактировано {0}"
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"for_you": "Для вас",
|
||||||
|
"hashtags": "Хэштеги",
|
||||||
|
"media": "Медиа",
|
||||||
|
"news": "Новости",
|
||||||
|
"notifications_all": "Все",
|
||||||
|
"notifications_mention": "Упоминания",
|
||||||
|
"posts": "Посты",
|
||||||
|
"posts_with_replies": "Посты и Ответы"
|
||||||
|
},
|
||||||
|
"tag": {
|
||||||
|
"follow": "Подписаться",
|
||||||
|
"follow_label": "Подписаться на хэштег {0}",
|
||||||
|
"unfollow": "Отписаться",
|
||||||
|
"unfollow_label": "Отписаться от хэштега {0}"
|
||||||
|
},
|
||||||
|
"time_ago_options": {
|
||||||
|
"day_future": "через {n} день|через {n} дня|через {n} дней|через {n} дней",
|
||||||
|
"day_past": "{n} день назад|{n} дня назад|{n} дней назад|{n} дней назад",
|
||||||
|
"hour_future": "через {n} час|через {n} часа|через {n} часов|через {n} часов",
|
||||||
|
"hour_past": "{n} час назад|{n} часа назад|{n} часов назад|{n} часов назад",
|
||||||
|
"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} секунд|через {n} секунд",
|
||||||
|
"second_past": "{n} секунду назад|{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} новых элементов",
|
||||||
|
"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": "Здесь отображаются хэштеги, которые набирают популярность среди пользователей этого и других серверов децентрализованной сети.",
|
||||||
|
"publish_failed": "Не удалось опубликовать",
|
||||||
|
"toggle_code_block": "Кодовый блок"
|
||||||
|
},
|
||||||
|
"user": {
|
||||||
|
"add_existing": "Добавить существующую учетную запись",
|
||||||
|
"server_address_label": "Адрес сервера Mastodon",
|
||||||
|
"sign_in_desc": "Войдите, чтобы подписываться на профили и хэштеги, добавлять в избранное, делиться постами и отвечать на них, или использовать свою учетную запись с другого сервера",
|
||||||
|
"sign_in_notice_title": "Просмотр публичных данных {0}",
|
||||||
|
"sign_out_account": "Выйти из учетной записи {0}",
|
||||||
|
"tip_no_account": "Если у вас еще нет учетной записи Mastodon, {0}.",
|
||||||
|
"tip_register_account": "выберите сервер и зарегистрируйтесь на нем"
|
||||||
|
},
|
||||||
|
"visibility": {
|
||||||
|
"direct": "Только упомянутые пользователи",
|
||||||
|
"direct_desc": "Виден только упомянутым пользователям",
|
||||||
|
"private": "Только ваши читатели",
|
||||||
|
"private_desc": "Виден только вашим читателям",
|
||||||
|
"public": "Все",
|
||||||
|
"public_desc": "Виден всем",
|
||||||
|
"unlisted": "Скрытый",
|
||||||
|
"unlisted_desc": "Виден всем, но не будет показан в публичных лентах"
|
||||||
|
}
|
||||||
|
}
|
|
@ -28,6 +28,8 @@
|
||||||
"muted_users": "已屏蔽的用户",
|
"muted_users": "已屏蔽的用户",
|
||||||
"muting": "已屏蔽",
|
"muting": "已屏蔽",
|
||||||
"mutuals": "互相关注",
|
"mutuals": "互相关注",
|
||||||
|
"notifications_on_post_disable": "当 {username} 发布时停止通知我",
|
||||||
|
"notifications_on_post_enable": "当 {username} 发布时通知我",
|
||||||
"pinned": "置顶的帖文",
|
"pinned": "置顶的帖文",
|
||||||
"posts": "帖文",
|
"posts": "帖文",
|
||||||
"posts_count": "{0} 条帖文",
|
"posts_count": "{0} 条帖文",
|
||||||
|
@ -44,6 +46,7 @@
|
||||||
"bookmark": "收藏",
|
"bookmark": "收藏",
|
||||||
"bookmarked": "已收藏",
|
"bookmarked": "已收藏",
|
||||||
"boost": "转发",
|
"boost": "转发",
|
||||||
|
"boost_count": "{0}",
|
||||||
"boosted": "已转发",
|
"boosted": "已转发",
|
||||||
"clear_publish_failed": "清除发布失败信息",
|
"clear_publish_failed": "清除发布失败信息",
|
||||||
"clear_upload_failed": "清除上传失败信息",
|
"clear_upload_failed": "清除上传失败信息",
|
||||||
|
@ -53,12 +56,14 @@
|
||||||
"edit": "编辑",
|
"edit": "编辑",
|
||||||
"enter_app": "进入应用",
|
"enter_app": "进入应用",
|
||||||
"favourite": "喜欢",
|
"favourite": "喜欢",
|
||||||
|
"favourite_count": "{0}",
|
||||||
"favourited": "已喜欢",
|
"favourited": "已喜欢",
|
||||||
"more": "更多",
|
"more": "更多",
|
||||||
"next": "下一个",
|
"next": "下一个",
|
||||||
"prev": "上一个",
|
"prev": "上一个",
|
||||||
"publish": "发布",
|
"publish": "发布",
|
||||||
"reply": "回复",
|
"reply": "回复",
|
||||||
|
"reply_count": "{0}",
|
||||||
"reset": "重置",
|
"reset": "重置",
|
||||||
"save": "保存",
|
"save": "保存",
|
||||||
"save_changes": "保存更改",
|
"save_changes": "保存更改",
|
||||||
|
@ -135,6 +140,13 @@
|
||||||
"conversation": {
|
"conversation": {
|
||||||
"with": "与"
|
"with": "与"
|
||||||
},
|
},
|
||||||
|
"custom_cards": {
|
||||||
|
"stackblitz": {
|
||||||
|
"lines": "行 {0}",
|
||||||
|
"open": "打开",
|
||||||
|
"snippet_from": "来自 {0} 的片段"
|
||||||
|
}
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"account_not_found": "未找到用户 {0}",
|
"account_not_found": "未找到用户 {0}",
|
||||||
"explore-list-empty": "目前没有热门话题,稍后再来看看吧!",
|
"explore-list-empty": "目前没有热门话题,稍后再来看看吧!",
|
||||||
|
@ -144,6 +156,12 @@
|
||||||
"unsupported_file_format": "不支持的文件格式"
|
"unsupported_file_format": "不支持的文件格式"
|
||||||
},
|
},
|
||||||
"help": {
|
"help": {
|
||||||
|
"build_preview": {
|
||||||
|
"desc1": "您当前正在查看来自社区的鹿鸣预览版 - {0}。",
|
||||||
|
"desc2": "可能包含未经审查甚至恶意的更改。",
|
||||||
|
"desc3": "请不要使用真实账号登录",
|
||||||
|
"title": "预览部署"
|
||||||
|
},
|
||||||
"desc_highlight": "可能会在某些地方出现一些 bug 或缺失的功能。",
|
"desc_highlight": "可能会在某些地方出现一些 bug 或缺失的功能。",
|
||||||
"desc_para1": "感谢你有兴趣尝试鹿鸣,一个我们正在积极开发的通用 Mastodon 客户端。",
|
"desc_para1": "感谢你有兴趣尝试鹿鸣,一个我们正在积极开发的通用 Mastodon 客户端。",
|
||||||
"desc_para2": "我们正在努力开发中,并随着时间的推移不断完善。",
|
"desc_para2": "我们正在努力开发中,并随着时间的推移不断完善。",
|
||||||
|
@ -160,6 +178,7 @@
|
||||||
"block_account": "拉黑 {0}",
|
"block_account": "拉黑 {0}",
|
||||||
"block_domain": "拉黑域名 {0}",
|
"block_domain": "拉黑域名 {0}",
|
||||||
"copy_link_to_post": "复制这篇帖文的链接",
|
"copy_link_to_post": "复制这篇帖文的链接",
|
||||||
|
"copy_original_link_to_post": "复制这篇贴文的原始链接",
|
||||||
"delete": "删除",
|
"delete": "删除",
|
||||||
"delete_and_redraft": "删除并重新编辑",
|
"delete_and_redraft": "删除并重新编辑",
|
||||||
"direct_message_account": "私信 {0}",
|
"direct_message_account": "私信 {0}",
|
||||||
|
@ -274,7 +293,15 @@
|
||||||
"font_size": "字号",
|
"font_size": "字号",
|
||||||
"label": "外观",
|
"label": "外观",
|
||||||
"light_mode": "浅色",
|
"light_mode": "浅色",
|
||||||
"system_mode": "跟随系统"
|
"size_label": {
|
||||||
|
"lg": "大",
|
||||||
|
"md": "中",
|
||||||
|
"sm": "小",
|
||||||
|
"xl": "特大",
|
||||||
|
"xs": "特小"
|
||||||
|
},
|
||||||
|
"system_mode": "跟随系统",
|
||||||
|
"theme_color": "主题颜色"
|
||||||
},
|
},
|
||||||
"language": {
|
"language": {
|
||||||
"display_language": "首选语言",
|
"display_language": "首选语言",
|
||||||
|
@ -309,7 +336,8 @@
|
||||||
"clear_error": "清除错误",
|
"clear_error": "清除错误",
|
||||||
"permission_denied": "权限不足:请在你的浏览器中打开通知权限。",
|
"permission_denied": "权限不足:请在你的浏览器中打开通知权限。",
|
||||||
"request_error": "请求订阅时发生了一个错误,请再次尝试。如错误仍然存在,请到鹿鸣代码仓库中报告这一问题。",
|
"request_error": "请求订阅时发生了一个错误,请再次尝试。如错误仍然存在,请到鹿鸣代码仓库中报告这一问题。",
|
||||||
"title": "无法订阅推送通知。"
|
"title": "无法订阅推送通知。",
|
||||||
|
"too_many_registrations": "由于浏览器限制,鹿鸣无法为不同服务器上的多个帐户使用推送通知服务。请取消订阅另一个帐户的推送通知,然后重试。"
|
||||||
},
|
},
|
||||||
"title": "推送通知设置",
|
"title": "推送通知设置",
|
||||||
"undo_settings": "撤销设置改动",
|
"undo_settings": "撤销设置改动",
|
||||||
|
@ -330,10 +358,13 @@
|
||||||
},
|
},
|
||||||
"notifications_settings": "通知",
|
"notifications_settings": "通知",
|
||||||
"preferences": {
|
"preferences": {
|
||||||
|
"enable_autoplay": "开启自动播放",
|
||||||
"github_cards": "GitHub 卡片",
|
"github_cards": "GitHub 卡片",
|
||||||
|
"grayscale_mode": "灰色模式",
|
||||||
"hide_boost_count": "隐藏转发数",
|
"hide_boost_count": "隐藏转发数",
|
||||||
"hide_favorite_count": "隐藏收藏数",
|
"hide_favorite_count": "隐藏收藏数",
|
||||||
"hide_follower_count": "隐藏关注者数",
|
"hide_follower_count": "隐藏关注者数",
|
||||||
|
"hide_translation": "隐藏翻译",
|
||||||
"label": "首选项",
|
"label": "首选项",
|
||||||
"title": "实验功能",
|
"title": "实验功能",
|
||||||
"user_picker": "用户选择器",
|
"user_picker": "用户选择器",
|
||||||
|
|
|
@ -8,20 +8,20 @@
|
||||||
},
|
},
|
||||||
"account": {
|
"account": {
|
||||||
"avatar_description": "{0} 的大頭貼",
|
"avatar_description": "{0} 的大頭貼",
|
||||||
"blocked_by": "您已被此使用者列入黑名單",
|
"blocked_by": "您已被該使用者封鎖",
|
||||||
"blocked_domains": "已列入黑名單的域名",
|
"blocked_domains": "已封鎖的域名",
|
||||||
"blocked_users": "已列入黑名單的使用者",
|
"blocked_users": "已封鎖的使用者",
|
||||||
"blocking": "已列入黑名單",
|
"blocking": "已封鎖",
|
||||||
"bot": "機器人",
|
"bot": "機器人",
|
||||||
"favourites": "喜歡的貼文",
|
"favourites": "喜歡的貼文",
|
||||||
"follow": "關注",
|
"follow": "追蹤",
|
||||||
"follow_back": "回關",
|
"follow_back": "回追",
|
||||||
"follow_requested": "已申請關注",
|
"follow_requested": "已要求追蹤",
|
||||||
"followers": "關注者",
|
"followers": "粉絲",
|
||||||
"followers_count": "被 {0} 人關注",
|
"followers_count": " {0} 位粉絲",
|
||||||
"following": "正在關注",
|
"following": "正在追蹤",
|
||||||
"following_count": "正在關注 {0} 人",
|
"following_count": "正在追蹤 {0} 人",
|
||||||
"follows_you": "已關注你",
|
"follows_you": "已追蹤你",
|
||||||
"go_to_profile": "轉到個人資料",
|
"go_to_profile": "轉到個人資料",
|
||||||
"joined": "已加入",
|
"joined": "已加入",
|
||||||
"moved_title": "的新帳號是:",
|
"moved_title": "的新帳號是:",
|
||||||
|
@ -34,11 +34,11 @@
|
||||||
"posts_count": "{0} 則貼文",
|
"posts_count": "{0} 則貼文",
|
||||||
"profile_description": "{0} 的個人資料封面",
|
"profile_description": "{0} 的個人資料封面",
|
||||||
"profile_unavailable": "個人資料不可見",
|
"profile_unavailable": "個人資料不可見",
|
||||||
"unblock": "取消黑名單",
|
"unblock": "取消封鎖",
|
||||||
"unfollow": "取消關注",
|
"unfollow": "取消追蹤",
|
||||||
"unmute": "取消靜音",
|
"unmute": "取消靜音",
|
||||||
"view_other_followers": "其他站點上的關注者可能不會在這裡顯示。",
|
"view_other_followers": "其他站點上的粉絲可能不會在這裡顯示。",
|
||||||
"view_other_following": "其他站點上正在關注的人可能不會在這裡顯示。"
|
"view_other_following": "其他站點上正在追蹤的人可能不會在這裡顯示。"
|
||||||
},
|
},
|
||||||
"action": {
|
"action": {
|
||||||
"apply": "套用",
|
"apply": "套用",
|
||||||
|
@ -52,7 +52,7 @@
|
||||||
"compose": "撰寫",
|
"compose": "撰寫",
|
||||||
"confirm": "確認",
|
"confirm": "確認",
|
||||||
"edit": "編輯",
|
"edit": "編輯",
|
||||||
"enter_app": "進入應用",
|
"enter_app": "進入應用程式",
|
||||||
"favourite": "喜歡",
|
"favourite": "喜歡",
|
||||||
"favourite_count": "{0}",
|
"favourite_count": "{0}",
|
||||||
"favourited": "已喜歡",
|
"favourited": "已喜歡",
|
||||||
|
@ -69,7 +69,7 @@
|
||||||
"switch_account": "切換帳號",
|
"switch_account": "切換帳號",
|
||||||
"vote": "投票"
|
"vote": "投票"
|
||||||
},
|
},
|
||||||
"app_desc_short": "用 🧡 製作的 Mastodon 用戶端",
|
"app_desc_short": "一個靈巧的 Mastodon 用戶端",
|
||||||
"app_logo": "鹿鳴 Logo",
|
"app_logo": "鹿鳴 Logo",
|
||||||
"app_name": "鹿鳴",
|
"app_name": "鹿鳴",
|
||||||
"attachment": {
|
"attachment": {
|
||||||
|
@ -82,9 +82,9 @@
|
||||||
"compose_desc": "寫一條新貼文",
|
"compose_desc": "寫一條新貼文",
|
||||||
"n-people-in-the-past-n-days": "{0} 人在過去 {1} 天",
|
"n-people-in-the-past-n-days": "{0} 人在過去 {1} 天",
|
||||||
"select_lang": "選擇語言",
|
"select_lang": "選擇語言",
|
||||||
"sign_in_desc": "加入現有帳戶",
|
"sign_in_desc": "加入現有帳號",
|
||||||
"switch_account": "切換到 {0}",
|
"switch_account": "切換到 {0}",
|
||||||
"switch_account_desc": "切換到另一個帳戶",
|
"switch_account_desc": "切換到另一個帳號",
|
||||||
"toggle_dark_mode": "切換深色模式",
|
"toggle_dark_mode": "切換深色模式",
|
||||||
"toggle_zen_mode": "切換禪模式"
|
"toggle_zen_mode": "切換禪模式"
|
||||||
},
|
},
|
||||||
|
@ -102,13 +102,13 @@
|
||||||
"confirm": {
|
"confirm": {
|
||||||
"block_account": {
|
"block_account": {
|
||||||
"cancel": "取消",
|
"cancel": "取消",
|
||||||
"confirm": "拉黑",
|
"confirm": "封鎖",
|
||||||
"title": "你确定將 {0} 加入黑名單吗?"
|
"title": "你確定要封鎖 {0} 嗎?"
|
||||||
},
|
},
|
||||||
"block_domain": {
|
"block_domain": {
|
||||||
"cancel": "取消",
|
"cancel": "取消",
|
||||||
"confirm": "拉黑",
|
"confirm": "封鎖",
|
||||||
"title": "你确定將 {0} 加入域名黑名單吗?"
|
"title": "你確定要封鎖 {0} 域名嗎?"
|
||||||
},
|
},
|
||||||
"common": {
|
"common": {
|
||||||
"cancel": "否",
|
"cancel": "否",
|
||||||
|
@ -122,17 +122,17 @@
|
||||||
"mute_account": {
|
"mute_account": {
|
||||||
"cancel": "取消",
|
"cancel": "取消",
|
||||||
"confirm": "靜音",
|
"confirm": "靜音",
|
||||||
"title": "你确定要靜音 {0}吗?"
|
"title": "你確定要靜音 {0}嗎?"
|
||||||
},
|
},
|
||||||
"show_reblogs": {
|
"show_reblogs": {
|
||||||
"cancel": "取消",
|
"cancel": "取消",
|
||||||
"confirm": "顯示",
|
"confirm": "顯示",
|
||||||
"title": "你确定要顯示來自 {0} 的轉發吗?"
|
"title": "你確定要顯示來自 {0} 的轉發嗎?"
|
||||||
},
|
},
|
||||||
"unfollow": {
|
"unfollow": {
|
||||||
"cancel": "取消",
|
"cancel": "取消",
|
||||||
"confirm": "取消關注",
|
"confirm": "取消追蹤",
|
||||||
"title": "你確定要取消關注嗎?"
|
"title": "你確定要取消追蹤嗎?"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"conversation": {
|
"conversation": {
|
||||||
|
@ -160,8 +160,8 @@
|
||||||
"search": "搜尋"
|
"search": "搜尋"
|
||||||
},
|
},
|
||||||
"menu": {
|
"menu": {
|
||||||
"block_account": "黑名單 {0}",
|
"block_account": "封鎖 {0}",
|
||||||
"block_domain": "黑名單域名 {0}",
|
"block_domain": "封鎖的域名 {0}",
|
||||||
"copy_link_to_post": "複製這篇貼文的連結",
|
"copy_link_to_post": "複製這篇貼文的連結",
|
||||||
"delete": "刪除",
|
"delete": "刪除",
|
||||||
"delete_and_redraft": "刪除並重新編輯",
|
"delete_and_redraft": "刪除並重新編輯",
|
||||||
|
@ -171,7 +171,7 @@
|
||||||
"mention_account": "提及 {0}",
|
"mention_account": "提及 {0}",
|
||||||
"mute_account": "靜音 {0}",
|
"mute_account": "靜音 {0}",
|
||||||
"mute_conversation": "靜音貼文",
|
"mute_conversation": "靜音貼文",
|
||||||
"open_in_original_site": "從源站打開",
|
"open_in_original_site": "在原網站上開啟",
|
||||||
"pin_on_profile": "置頂在個人資料上",
|
"pin_on_profile": "置頂在個人資料上",
|
||||||
"share_post": "分享這則貼文",
|
"share_post": "分享這則貼文",
|
||||||
"show_favourited_and_boosted_by": "顯示誰喜歡和轉發了",
|
"show_favourited_and_boosted_by": "顯示誰喜歡和轉發了",
|
||||||
|
@ -182,16 +182,16 @@
|
||||||
"light": "切換淺色模式"
|
"light": "切換淺色模式"
|
||||||
},
|
},
|
||||||
"translate_post": "翻譯貼文",
|
"translate_post": "翻譯貼文",
|
||||||
"unblock_account": "解除黑名單 {0}",
|
"unblock_account": "解除封鎖 {0}",
|
||||||
"unblock_domain": "解除黑名單域名 {0}",
|
"unblock_domain": "解除封鎖域名 {0}",
|
||||||
"unmute_account": "解除靜音 {0}",
|
"unmute_account": "解除靜音 {0}",
|
||||||
"unmute_conversation": "取消靜音貼文",
|
"unmute_conversation": "取消靜音貼文",
|
||||||
"unpin_on_profile": "取消置頂"
|
"unpin_on_profile": "取消置頂"
|
||||||
},
|
},
|
||||||
"nav": {
|
"nav": {
|
||||||
"back": "回上一頁",
|
"back": "回上一頁",
|
||||||
"blocked_domains": "已黑名單的域名",
|
"blocked_domains": "已封鎖的域名",
|
||||||
"blocked_users": "已黑名單的使用者",
|
"blocked_users": "已封鎖的使用者",
|
||||||
"bookmarks": "書籤",
|
"bookmarks": "書籤",
|
||||||
"built_at": "於 {0}更新",
|
"built_at": "於 {0}更新",
|
||||||
"compose": "撰寫",
|
"compose": "撰寫",
|
||||||
|
@ -200,7 +200,7 @@
|
||||||
"favourites": "喜歡",
|
"favourites": "喜歡",
|
||||||
"federated": "聯邦",
|
"federated": "聯邦",
|
||||||
"home": "首頁",
|
"home": "首頁",
|
||||||
"local": "本地",
|
"local": "本站",
|
||||||
"muted_users": "已靜音的使用者",
|
"muted_users": "已靜音的使用者",
|
||||||
"notifications": "通知",
|
"notifications": "通知",
|
||||||
"profile": "個人資料",
|
"profile": "個人資料",
|
||||||
|
@ -215,11 +215,11 @@
|
||||||
},
|
},
|
||||||
"notification": {
|
"notification": {
|
||||||
"favourited_post": "點讚了你的貼文",
|
"favourited_post": "點讚了你的貼文",
|
||||||
"followed_you": "關注了你",
|
"followed_you": "追蹤了你",
|
||||||
"followed_you_count": "{n} 人關注了你",
|
"followed_you_count": "{n} 人追蹤了你",
|
||||||
"missing_type": "未知的通知類型:",
|
"missing_type": "未知的通知類型:",
|
||||||
"reblogged_post": "轉發了你的貼文",
|
"reblogged_post": "轉發了你的貼文",
|
||||||
"request_to_follow": "請求關注你",
|
"request_to_follow": "請求追蹤你",
|
||||||
"signed_up": "註冊了",
|
"signed_up": "註冊了",
|
||||||
"update_status": "更新了他們的狀態"
|
"update_status": "更新了他們的狀態"
|
||||||
},
|
},
|
||||||
|
@ -299,7 +299,7 @@
|
||||||
"push_notifications": {
|
"push_notifications": {
|
||||||
"alerts": {
|
"alerts": {
|
||||||
"favourite": "喜歡的",
|
"favourite": "喜歡的",
|
||||||
"follow": "新的關注者",
|
"follow": "新的粉絲",
|
||||||
"mention": "提及",
|
"mention": "提及",
|
||||||
"poll": "投票",
|
"poll": "投票",
|
||||||
"reblog": "轉發了你的貼文",
|
"reblog": "轉發了你的貼文",
|
||||||
|
@ -310,8 +310,8 @@
|
||||||
"label": "推播通知設定",
|
"label": "推播通知設定",
|
||||||
"policy": {
|
"policy": {
|
||||||
"all": "任何人",
|
"all": "任何人",
|
||||||
"followed": "我關注的人",
|
"followed": "我追蹤的人",
|
||||||
"follower": "關注我的人",
|
"follower": "粉絲",
|
||||||
"none": "無人",
|
"none": "無人",
|
||||||
"title": "我可以從誰那裡接收通知?"
|
"title": "我可以從誰那裡接收通知?"
|
||||||
},
|
},
|
||||||
|
@ -319,20 +319,20 @@
|
||||||
"subscription_error": {
|
"subscription_error": {
|
||||||
"clear_error": "清除錯誤",
|
"clear_error": "清除錯誤",
|
||||||
"permission_denied": "權限不足:請在你的瀏覽器中打開通知權限。",
|
"permission_denied": "權限不足:請在你的瀏覽器中打開通知權限。",
|
||||||
"request_error": "請求訂閱時發生了一個錯誤,請再次嘗試。如錯誤仍然存在,請到鹿鳴代碼倉庫中報告這一問題。",
|
"request_error": "請求訂閱時發生了一個錯誤,請再次嘗試。如錯誤仍然存在,請到鹿鳴儲存庫中報告這一問題。",
|
||||||
"title": "無法訂閱推播通知。",
|
"title": "無法訂閱推播通知。",
|
||||||
"too_many_registrations": "由於瀏覽器限制,鹿鳴無法為不同伺服器上的多個帳戶使用推播通知服務。 你應該取消訂閱其他帳戶的推送通知,然後重試。"
|
"too_many_registrations": "由於瀏覽器限制,鹿鳴無法為不同伺服器上的多個帳號使用推播通知服務。 你應該取消訂閱其他帳號的推送通知,然後重試。"
|
||||||
},
|
},
|
||||||
"title": "推播通知設定",
|
"title": "推播通知設定",
|
||||||
"undo_settings": "撤銷設定變更",
|
"undo_settings": "撤銷設定變更",
|
||||||
"unsubscribe": "禁用桌面通知",
|
"unsubscribe": "停用推播功能",
|
||||||
"unsupported": "你的瀏覽器不支援桌面通知",
|
"unsupported": "你的瀏覽器不支援推播功能",
|
||||||
"warning": {
|
"warning": {
|
||||||
"enable_close": "關閉",
|
"enable_close": "關閉",
|
||||||
"enable_description": "若想在鹿鳴未開啟時接收通知,請啟用推播通知功能。啟用後,你可以通過上面的 「前往通知設定」 按鈕來 精確控制哪種類型的互動可以產生桌面通知。",
|
"enable_description": "若想在鹿鳴未開啟時接收通知,請啟用推播通知功能。啟用後,你可以通過上面的 「前往通知設定」 按鈕來 精確控制哪種類型的互動可以產生桌面通知。",
|
||||||
"enable_description_desktop": "若想在鹿鳴未開啟時接收通知,請啟用推播通知功能。啟用後,你可以通过 「設定」 > 「通知」 > 「推送通知設定」 来精确控制哪种类型的互动可以产生桌面通知。",
|
"enable_description_desktop": "若想在鹿鳴未開啟時接收通知,請啟用推播通知功能。啟用後,你可以在 「設定」 > 「通知」 > 「推播通知設定」 裡面選擇哪些互動你會接收到通知。",
|
||||||
"enable_description_mobile": "你也可以使用導覽列 「設定」 > 「通知」 > 「推送通知設定」 進入設定頁面。",
|
"enable_description_mobile": "你也可以使用導覽列 「設定」 > 「通知」 > 「推播通知設定」 進入設定頁面。",
|
||||||
"enable_description_settings": "若想在鹿鳴未開啟時接收通知,請啟用推播通知功能。 啟用後,你將能夠精確控制哪些類型的互動會在螢幕上推播通知。",
|
"enable_description_settings": "若想在鹿鳴未開啟時接收通知,請啟用推播通知功能。 啟用後,你將能夠選擇哪些互動你會接收到通知。",
|
||||||
"enable_desktop": "啟用推播功能",
|
"enable_desktop": "啟用推播功能",
|
||||||
"enable_title": "不錯過任何事",
|
"enable_title": "不錯過任何事",
|
||||||
"re_auth": "您的伺服器似乎不支援推播通知。嘗試退出使用者並重新登入。如果此消息仍然出現,請聯繫您伺服器的管理員。"
|
"re_auth": "您的伺服器似乎不支援推播通知。嘗試退出使用者並重新登入。如果此消息仍然出現,請聯繫您伺服器的管理員。"
|
||||||
|
@ -345,8 +345,8 @@
|
||||||
"github_cards": "GitHub 卡片",
|
"github_cards": "GitHub 卡片",
|
||||||
"hide_boost_count": "隱藏轉發數",
|
"hide_boost_count": "隱藏轉發數",
|
||||||
"hide_favorite_count": "隱藏收藏數",
|
"hide_favorite_count": "隱藏收藏數",
|
||||||
"hide_follower_count": "隱藏關注者數",
|
"hide_follower_count": "隱藏粉絲數",
|
||||||
"label": "喜好設定",
|
"label": "偏好設定",
|
||||||
"title": "實驗功能",
|
"title": "實驗功能",
|
||||||
"user_picker": "使用者選擇器",
|
"user_picker": "使用者選擇器",
|
||||||
"virtual_scroll": "虛擬滾動"
|
"virtual_scroll": "虛擬滾動"
|
||||||
|
@ -418,7 +418,7 @@
|
||||||
"edited": "在 {0} 編輯了"
|
"edited": "在 {0} 編輯了"
|
||||||
},
|
},
|
||||||
"tab": {
|
"tab": {
|
||||||
"for_you": "推薦關注",
|
"for_you": "推薦追蹤",
|
||||||
"hashtags": "話題標籤",
|
"hashtags": "話題標籤",
|
||||||
"media": "媒體",
|
"media": "媒體",
|
||||||
"news": "最新消息",
|
"news": "最新消息",
|
||||||
|
@ -428,10 +428,10 @@
|
||||||
"posts_with_replies": "貼文與留言"
|
"posts_with_replies": "貼文與留言"
|
||||||
},
|
},
|
||||||
"tag": {
|
"tag": {
|
||||||
"follow": "關注",
|
"follow": "追蹤",
|
||||||
"follow_label": "關注 {0} 標籤",
|
"follow_label": "追蹤 {0} 標籤",
|
||||||
"unfollow": "取消關注",
|
"unfollow": "取消追蹤",
|
||||||
"unfollow_label": "取消關注 {0} 標籤"
|
"unfollow_label": "取消追蹤 {0} 標籤"
|
||||||
},
|
},
|
||||||
"time_ago_options": {
|
"time_ago_options": {
|
||||||
"day_future": "現在|明天|{n} 天後",
|
"day_future": "現在|明天|{n} 天後",
|
||||||
|
@ -469,39 +469,39 @@
|
||||||
"view_older_posts": "其他站點上更舊的貼文可能不會在這裡顯示。"
|
"view_older_posts": "其他站點上更舊的貼文可能不會在這裡顯示。"
|
||||||
},
|
},
|
||||||
"title": {
|
"title": {
|
||||||
"federated_timeline": "跨站時間線",
|
"federated_timeline": "跨站時間軸",
|
||||||
"local_timeline": "本地時間線"
|
"local_timeline": "本站時間軸"
|
||||||
},
|
},
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"add_content_warning": "加入內容警告標識",
|
"add_content_warning": "加入貼文警告標識",
|
||||||
"add_emojis": "加入表情符號",
|
"add_emojis": "加入表情符號",
|
||||||
"add_media": "加入圖片、影片或音訊",
|
"add_media": "加入圖片、影片或音訊",
|
||||||
"add_publishable_content": "加入要發布的內容",
|
"add_publishable_content": "加入要發布的貼文",
|
||||||
"change_content_visibility": "修改內容是否可見",
|
"change_content_visibility": "修改貼文隱私狀態",
|
||||||
"change_language": "切換語言",
|
"change_language": "切換語言",
|
||||||
"emoji": "表情符號",
|
"emoji": "表情符號",
|
||||||
"explore_links_intro": "這些新聞故事正被本站和分佈式網路上其他站點的使用者談論。",
|
"explore_links_intro": "這些新聞故事正被本站和分散式網路上其他站點的使用者談論。",
|
||||||
"explore_posts_intro": "來自本站和分佈式網路上其他站點的這些嘟文正在本站引起關注。",
|
"explore_posts_intro": "來自本站和分散式網路上其他站點的這些嘟文正在本站引起關注。",
|
||||||
"explore_tags_intro": "這些標籤正在本站和分佈式網路上其他站點的使用者中引起關注。",
|
"explore_tags_intro": "這些標籤正在本站和分散式網路上其他站點的使用者中引起關注。",
|
||||||
"toggle_code_block": "切換程式碼區塊"
|
"toggle_code_block": "切換程式碼區塊"
|
||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"add_existing": "加入現有帳戶",
|
"add_existing": "加入現有帳號",
|
||||||
"server_address_label": "Mastodon 伺服器位置",
|
"server_address_label": "Mastodon 伺服器位置",
|
||||||
"sign_in_desc": "登入後可關注其他人或標籤、點讚、分享和回覆貼文,或與不同伺服器上的帳號互動。",
|
"sign_in_desc": "登入後可追蹤其他人或標籤、點讚、分享和回覆貼文,或與不同伺服器上的帳號互動。",
|
||||||
"sign_in_notice_title": "正在查看 {0} 的公共數據",
|
"sign_in_notice_title": "正在查看 {0} 的公共數據",
|
||||||
"sign_out_account": "登出 {0}",
|
"sign_out_account": "登出 {0}",
|
||||||
"tip_no_account": "如果您還沒有 Mastodon 賬戶,{0}。",
|
"tip_no_account": "如果您還沒有 Mastodon 帳號,{0}。",
|
||||||
"tip_register_account": "選擇您的伺服器並註冊一個"
|
"tip_register_account": "選擇您的伺服器並註冊一個"
|
||||||
},
|
},
|
||||||
"visibility": {
|
"visibility": {
|
||||||
"direct": "私訊",
|
"direct": "私訊",
|
||||||
"direct_desc": "僅對提及的使用者可見",
|
"direct_desc": "僅對提及的使用者可見",
|
||||||
"private": "僅限關注者",
|
"private": "僅限粉絲",
|
||||||
"private_desc": "僅關注者可見",
|
"private_desc": "僅粉絲可見",
|
||||||
"public": "公開",
|
"public": "公開",
|
||||||
"public_desc": "所有人可見",
|
"public_desc": "對所有人可見",
|
||||||
"unlisted": "不列出",
|
"unlisted": "不公開",
|
||||||
"unlisted_desc": "對所有人可見,但不出現在公共時間線上"
|
"unlisted_desc": "對所有人可見,但不出現在探索頁面裡面"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -92,6 +92,12 @@ export const createI18n = async (): Promise<LocalizedWebManifest> => {
|
||||||
sizes: '512x512',
|
sizes: '512x512',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
src: 'maskable-icon.png',
|
||||||
|
sizes: '512x512',
|
||||||
|
type: 'image/png',
|
||||||
|
purpose: 'any maskable',
|
||||||
|
},
|
||||||
],
|
],
|
||||||
share_target: {
|
share_target: {
|
||||||
action: '/web-share-target',
|
action: '/web-share-target',
|
||||||
|
@ -132,6 +138,12 @@ export const createI18n = async (): Promise<LocalizedWebManifest> => {
|
||||||
sizes: '512x512',
|
sizes: '512x512',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
src: 'maskable-icon.png',
|
||||||
|
sizes: '512x512',
|
||||||
|
type: 'image/png',
|
||||||
|
purpose: 'any maskable',
|
||||||
|
},
|
||||||
],
|
],
|
||||||
share_target: {
|
share_target: {
|
||||||
action: '/web-share-target',
|
action: '/web-share-target',
|
||||||
|
|
|
@ -4,6 +4,7 @@ import {
|
||||||
defineLazyEventHandler,
|
defineLazyEventHandler,
|
||||||
toNodeListener,
|
toNodeListener,
|
||||||
} from 'h3'
|
} from 'h3'
|
||||||
|
import type { FetchResponse } from 'ofetch'
|
||||||
import { createFetch } from 'ofetch'
|
import { createFetch } from 'ofetch'
|
||||||
import {
|
import {
|
||||||
createCall,
|
createCall,
|
||||||
|
@ -64,7 +65,7 @@ export default defineNuxtPlugin(async () => {
|
||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
if (route.path.startsWith('/api')) {
|
if (route.path.startsWith('/api')) {
|
||||||
const result = await $fetch.raw(route.fullPath)
|
const result = (await ($fetch.raw as any)(route.fullPath)) as FetchResponse<unknown>
|
||||||
if (result.headers.get('location'))
|
if (result.headers.get('location'))
|
||||||
location.href = result.headers.get('location')!
|
location.href = result.headers.get('location')!
|
||||||
}
|
}
|
||||||
|
|
|
@ -93,6 +93,7 @@ export default defineNuxtConfig({
|
||||||
apiToken: '',
|
apiToken: '',
|
||||||
},
|
},
|
||||||
public: {
|
public: {
|
||||||
|
privacyPolicyUrl: '',
|
||||||
env: '', // set in build-env module
|
env: '', // set in build-env module
|
||||||
buildInfo: {} as BuildInfo, // set in build-env module
|
buildInfo: {} as BuildInfo, // set in build-env module
|
||||||
pwaEnabled: !isDevelopment || process.env.VITE_DEV_PWA === 'true',
|
pwaEnabled: !isDevelopment || process.env.VITE_DEV_PWA === 'true',
|
||||||
|
@ -115,6 +116,11 @@ export default defineNuxtConfig({
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
nitro: {
|
nitro: {
|
||||||
|
esbuild: {
|
||||||
|
options: {
|
||||||
|
target: 'esnext',
|
||||||
|
},
|
||||||
|
},
|
||||||
prerender: {
|
prerender: {
|
||||||
crawlLinks: true,
|
crawlLinks: true,
|
||||||
routes: ['/'],
|
routes: ['/'],
|
||||||
|
|
54
package.json
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "0.6.1",
|
"version": "0.6.2",
|
||||||
"private": true,
|
"private": true,
|
||||||
"packageManager": "pnpm@7.9.0",
|
"packageManager": "pnpm@7.9.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
@ -20,7 +20,7 @@
|
||||||
"generate": "nuxi generate",
|
"generate": "nuxi generate",
|
||||||
"test:unit": "stale-dep && vitest",
|
"test:unit": "stale-dep && vitest",
|
||||||
"test:typecheck": "stale-dep && vue-tsc --noEmit && vue-tsc --noEmit --project service-worker/tsconfig.json",
|
"test:typecheck": "stale-dep && vue-tsc --noEmit && vue-tsc --noEmit --project service-worker/tsconfig.json",
|
||||||
"test": "stale-dep && nr test:unit",
|
"test": "nr test:unit",
|
||||||
"update:team:avatars": "esno scripts/avatars.ts",
|
"update:team:avatars": "esno scripts/avatars.ts",
|
||||||
"postinstall": "stale-dep -u && simple-git-hooks && nuxi prepare",
|
"postinstall": "stale-dep -u && simple-git-hooks && nuxi prepare",
|
||||||
"release": "stale-dep && bumpp && esno scripts/release.ts"
|
"release": "stale-dep && bumpp && esno scripts/release.ts"
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@fnando/sparkline": "^0.3.10",
|
"@fnando/sparkline": "^0.3.10",
|
||||||
"@iconify-emoji/twemoji": "^1.0.2",
|
"@iconify-emoji/twemoji": "^1.0.2",
|
||||||
"@iconify/utils": "^2.0.11",
|
"@iconify/utils": "^2.0.12",
|
||||||
"@tiptap/extension-character-count": "2.0.0-beta.204",
|
"@tiptap/extension-character-count": "2.0.0-beta.204",
|
||||||
"@tiptap/extension-code-block": "2.0.0-beta.204",
|
"@tiptap/extension-code-block": "2.0.0-beta.204",
|
||||||
"@tiptap/extension-history": "2.0.0-beta.204",
|
"@tiptap/extension-history": "2.0.0-beta.204",
|
||||||
|
@ -39,12 +39,12 @@
|
||||||
"@tiptap/starter-kit": "2.0.0-beta.204",
|
"@tiptap/starter-kit": "2.0.0-beta.204",
|
||||||
"@tiptap/suggestion": "2.0.0-beta.204",
|
"@tiptap/suggestion": "2.0.0-beta.204",
|
||||||
"@tiptap/vue-3": "2.0.0-beta.204",
|
"@tiptap/vue-3": "2.0.0-beta.204",
|
||||||
"@vueuse/core": "^9.10.0",
|
"@vueuse/core": "^9.11.1",
|
||||||
"@vueuse/gesture": "2.0.0-beta.1",
|
"@vueuse/gesture": "2.0.0-beta.1",
|
||||||
"@vueuse/integrations": "^9.10.0",
|
"@vueuse/integrations": "^9.11.1",
|
||||||
"@vueuse/motion": "2.0.0-beta.12",
|
"@vueuse/motion": "2.0.0-beta.12",
|
||||||
"blurhash": "^2.0.4",
|
"blurhash": "^2.0.4",
|
||||||
"browser-fs-access": "^0.31.1",
|
"browser-fs-access": "^0.31.2",
|
||||||
"floating-vue": "2.0.0-beta.20",
|
"floating-vue": "2.0.0-beta.20",
|
||||||
"focus-trap": "^7.2.0",
|
"focus-trap": "^7.2.0",
|
||||||
"form-data": "^4.0.0",
|
"form-data": "^4.0.0",
|
||||||
|
@ -53,8 +53,8 @@
|
||||||
"iso-639-1": "^2.1.15",
|
"iso-639-1": "^2.1.15",
|
||||||
"js-yaml": "^4.1.0",
|
"js-yaml": "^4.1.0",
|
||||||
"lru-cache": "^7.14.1",
|
"lru-cache": "^7.14.1",
|
||||||
"masto": "^5.5.0",
|
"masto": "^5.6.1",
|
||||||
"pinia": "^2.0.28",
|
"pinia": "^2.0.29",
|
||||||
"shiki": "^0.12.1",
|
"shiki": "^0.12.1",
|
||||||
"shiki-es": "^0.1.2",
|
"shiki-es": "^0.1.2",
|
||||||
"slimeform": "^0.9.0",
|
"slimeform": "^0.9.0",
|
||||||
|
@ -65,49 +65,48 @@
|
||||||
"tippy.js": "^6.3.7",
|
"tippy.js": "^6.3.7",
|
||||||
"ufo": "^1.0.1",
|
"ufo": "^1.0.1",
|
||||||
"ultrahtml": "^1.2.0",
|
"ultrahtml": "^1.2.0",
|
||||||
"vue-advanced-cropper": "^2.8.6",
|
"vue-advanced-cropper": "^2.8.8",
|
||||||
"vue-virtual-scroller": "2.0.0-beta.7"
|
"vue-virtual-scroller": "2.0.0-beta.7"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@antfu/eslint-config": "^0.34.1",
|
"@antfu/eslint-config": "^0.34.1",
|
||||||
"@antfu/ni": "^0.18.8",
|
"@antfu/ni": "^0.19.0",
|
||||||
"@emoji-mart/data": "^1.1.1",
|
"@emoji-mart/data": "^1.1.2",
|
||||||
"@iconify-json/carbon": "^1.1.13",
|
"@iconify-json/carbon": "^1.1.14",
|
||||||
"@iconify-json/logos": "^1.1.22",
|
"@iconify-json/logos": "^1.1.22",
|
||||||
"@iconify-json/material-symbols": "^1.1.26",
|
"@iconify-json/material-symbols": "^1.1.26",
|
||||||
"@iconify-json/ph": "^1.1.3",
|
"@iconify-json/ph": "^1.1.3",
|
||||||
"@iconify-json/ri": "^1.1.4",
|
"@iconify-json/ri": "^1.1.4",
|
||||||
"@iconify-json/twemoji": "^1.1.10",
|
"@iconify-json/twemoji": "^1.1.10",
|
||||||
"@nuxtjs/color-mode": "^3.2.0",
|
"@nuxtjs/color-mode": "^3.2.0",
|
||||||
"@nuxtjs/i18n": "^8.0.0-beta.8",
|
"@nuxtjs/i18n": "8.0.0-beta.9",
|
||||||
"@pinia/nuxt": "^0.4.6",
|
"@pinia/nuxt": "^0.4.6",
|
||||||
"@types/chroma-js": "^2.1.4",
|
"@types/chroma-js": "^2.1.4",
|
||||||
"@types/file-saver": "^2.0.5",
|
"@types/file-saver": "^2.0.5",
|
||||||
"@types/fnando__sparkline": "^0.3.4",
|
"@types/fnando__sparkline": "^0.3.4",
|
||||||
"@types/fs-extra": "^11.0.0",
|
"@types/fs-extra": "^11.0.1",
|
||||||
"@types/js-yaml": "^4.0.5",
|
"@types/js-yaml": "^4.0.5",
|
||||||
"@types/prettier": "^2.7.2",
|
"@types/prettier": "^2.7.2",
|
||||||
"@types/wicg-file-system-access": "^2020.9.5",
|
"@types/wicg-file-system-access": "^2020.9.5",
|
||||||
"@unocss/nuxt": "^0.48.3",
|
"@unocss/nuxt": "^0.48.5",
|
||||||
"@vitejs/plugin-vue": "^3.2.0",
|
"@vue-macros/nuxt": "^0.3.3",
|
||||||
"@vue-macros/nuxt": "^0.2.10",
|
"@vueuse/math": "^9.11.1",
|
||||||
"@vueuse/math": "^9.10.0",
|
"@vueuse/nuxt": "^9.11.1",
|
||||||
"@vueuse/nuxt": "^9.10.0",
|
|
||||||
"bumpp": "^8.2.1",
|
"bumpp": "^8.2.1",
|
||||||
"chroma-js": "^2.4.2",
|
"chroma-js": "^2.4.2",
|
||||||
"emoji-mart": "^5.4.0",
|
"emoji-mart": "^5.5.2",
|
||||||
"eslint": "^8.31.0",
|
"eslint": "^8.32.0",
|
||||||
"esno": "^0.16.3",
|
"esno": "^0.16.3",
|
||||||
"file-saver": "^2.0.5",
|
"file-saver": "^2.0.5",
|
||||||
"fs-extra": "^11.1.0",
|
"fs-extra": "^11.1.0",
|
||||||
"jsdom": "^21.0.0",
|
"jsdom": "^21.1.0",
|
||||||
"lint-staged": "^13.1.0",
|
"lint-staged": "^13.1.0",
|
||||||
"nuxt": "^3.0.0",
|
"nuxt": "3.0.0",
|
||||||
"nuxt-security": "^0.10.0",
|
"nuxt-security": "^0.10.1",
|
||||||
"postcss-nested": "^6.0.0",
|
"postcss-nested": "^6.0.0",
|
||||||
"prettier": "^2.8.2",
|
"prettier": "^2.8.3",
|
||||||
"rollup-plugin-node-polyfills": "^0.2.1",
|
"rollup-plugin-node-polyfills": "^0.2.1",
|
||||||
"simple-git": "^3.15.1",
|
"simple-git": "^3.16.0",
|
||||||
"simple-git-hooks": "^2.8.1",
|
"simple-git-hooks": "^2.8.1",
|
||||||
"stale-dep": "^0.3.1",
|
"stale-dep": "^0.3.1",
|
||||||
"std-env": "^3.3.1",
|
"std-env": "^3.3.1",
|
||||||
|
@ -124,9 +123,6 @@
|
||||||
"workbox-window": "^6.5.4"
|
"workbox-window": "^6.5.4"
|
||||||
},
|
},
|
||||||
"pnpm": {
|
"pnpm": {
|
||||||
"patchedDependencies": {
|
|
||||||
"nitropack@1.0.0": "patches/nitropack@1.0.0.patch"
|
|
||||||
},
|
|
||||||
"overrides": {
|
"overrides": {
|
||||||
"mlly": "1.1.0",
|
"mlly": "1.1.0",
|
||||||
"@tiptap/extension-bubble-menu": "2.0.0-beta.204",
|
"@tiptap/extension-bubble-menu": "2.0.0-beta.204",
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
import type { CommonRouteTabOption } from '~/components/common/CommonRouteTabs.vue'
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
|
||||||
const tabs = $computed(() => [
|
const tabs = $computed<CommonRouteTabOption[]>(() => [
|
||||||
{
|
{
|
||||||
to: isHydrated.value ? `/${currentServer.value}/explore` : '/explore',
|
to: isHydrated.value ? `/${currentServer.value}/explore` : '/explore',
|
||||||
display: isHydrated.value ? t('tab.posts') : '',
|
display: isHydrated.value ? t('tab.posts') : '',
|
||||||
|
@ -20,7 +22,7 @@ const tabs = $computed(() => [
|
||||||
display: isHydrated.value ? t('tab.for_you') : '',
|
display: isHydrated.value ? t('tab.for_you') : '',
|
||||||
disabled: !isHydrated.value || !currentUser.value,
|
disabled: !isHydrated.value || !currentUser.value,
|
||||||
},
|
},
|
||||||
] as const)
|
])
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
|
55
pages/[[server]]/list.vue
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
<script setup lang="ts">
|
||||||
|
import type { CommonRouteTabOption } from '~/components/common/CommonRouteTabs.vue'
|
||||||
|
|
||||||
|
const list = $computed(() => useRoute().params.list as string)
|
||||||
|
const server = $computed(() => useRoute().params.server as string)
|
||||||
|
|
||||||
|
const { t } = useI18n()
|
||||||
|
|
||||||
|
const tabs = $computed<CommonRouteTabOption[]>(() => [
|
||||||
|
{
|
||||||
|
to: {
|
||||||
|
name: 'list',
|
||||||
|
params: { server, list },
|
||||||
|
},
|
||||||
|
display: t('tab.list'),
|
||||||
|
icon: 'i-ri:list-unordered',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
to: {
|
||||||
|
name: 'list-accounts',
|
||||||
|
params: { server, list },
|
||||||
|
},
|
||||||
|
display: t('tab.accounts'),
|
||||||
|
icon: 'i-ri:user-line',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
const { client } = $(useMasto())
|
||||||
|
const { data: listInfo, refresh } = $(await useAsyncData(() => client.v1.lists.fetch(list), { default: () => shallowRef() }))
|
||||||
|
|
||||||
|
if (listInfo) {
|
||||||
|
useHeadFixed({
|
||||||
|
title: () => `${listInfo.title}`,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
onReactivated(() => {
|
||||||
|
// Silently update data when reentering the page
|
||||||
|
// The user will see the previous content first, and any changes will be updated to the UI when the request is completed
|
||||||
|
refresh()
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<MainContent back>
|
||||||
|
<template #title>
|
||||||
|
<span text-lg font-bold>{{ listInfo ? listInfo.title : t('nav.list') }}</span>
|
||||||
|
</template>
|
||||||
|
<template #header>
|
||||||
|
<CommonRouteTabs replace :options="tabs" />
|
||||||
|
</template>
|
||||||
|
<NuxtPage v-if="isHydrated" />
|
||||||
|
</MainContent>
|
||||||
|
</template>
|
35
pages/[[server]]/list/[list].vue
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
<script setup lang="ts">
|
||||||
|
definePageMeta({
|
||||||
|
name: 'list',
|
||||||
|
})
|
||||||
|
|
||||||
|
const params = useRoute().params
|
||||||
|
const listId = $(computedEager(() => params.list as string))
|
||||||
|
|
||||||
|
const { client } = $(useMasto())
|
||||||
|
const { data: listInfo, refresh } = $(await useAsyncData(() => client.v1.lists.fetch(listId), { default: () => shallowRef() }))
|
||||||
|
|
||||||
|
const paginator = client.v1.timelines.listList(listId)
|
||||||
|
const stream = useStreaming(client => client.v1.stream.streamListTimeline(listId))
|
||||||
|
|
||||||
|
if (listInfo) {
|
||||||
|
useHeadFixed({
|
||||||
|
title: () => `${listInfo.title}`,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
onReactivated(() => {
|
||||||
|
// Silently update data when reentering the page
|
||||||
|
// The user will see the previous content first, and any changes will be updated to the UI when the request is completed
|
||||||
|
refresh()
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<MainContent back>
|
||||||
|
<template #title>
|
||||||
|
<span text-lg font-bold>{{ listInfo ? listInfo.title : $t('nav.list') }}</span>
|
||||||
|
</template>
|
||||||
|
<TimelinePaginator v-bind="{ paginator, stream }" :preprocess="reorderedTimeline" context="home" />
|
||||||
|
</MainContent>
|
||||||
|
</template>
|
23
pages/[[server]]/list/[list]/accounts.vue
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
<script setup lang="ts">
|
||||||
|
definePageMeta({
|
||||||
|
name: 'list-accounts',
|
||||||
|
})
|
||||||
|
|
||||||
|
const params = useRoute().params
|
||||||
|
const listId = $(computedEager(() => params.list as string))
|
||||||
|
|
||||||
|
const paginator = useMastoClient().v1.lists.listAccounts(listId)
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<CommonPaginator :paginator="paginator">
|
||||||
|
<template #default="{ item }">
|
||||||
|
<ListAccount
|
||||||
|
:account="item"
|
||||||
|
:list="listId"
|
||||||
|
hover-card
|
||||||
|
border="b base" py2 px4
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</CommonPaginator>
|
||||||
|
</template>
|
17
pages/[[server]]/list/[list]/index.vue
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
<script setup lang="ts">
|
||||||
|
definePageMeta({
|
||||||
|
name: 'list',
|
||||||
|
})
|
||||||
|
|
||||||
|
const params = useRoute().params
|
||||||
|
const listId = $(computedEager(() => params.list as string))
|
||||||
|
|
||||||
|
const { client } = $(useMasto())
|
||||||
|
|
||||||
|
const paginator = client.v1.timelines.listList(listId)
|
||||||
|
const stream = useStreaming(client => client.v1.stream.streamListTimeline(listId))
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<TimelinePaginator v-bind="{ paginator, stream }" :preprocess="reorderedTimeline" context="home" />
|
||||||
|
</template>
|
30
pages/[[server]]/lists.vue
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
<script lang="ts" setup>
|
||||||
|
const { t } = useI18n()
|
||||||
|
|
||||||
|
const { client } = $(useMasto())
|
||||||
|
const paginator = client.v1.lists.list()
|
||||||
|
|
||||||
|
useHeadFixed({
|
||||||
|
title: () => t('nav.lists'),
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<MainContent>
|
||||||
|
<template #title>
|
||||||
|
<NuxtLink to="/lists" timeline-title-style flex items-center gap-2 @click="$scrollToTop">
|
||||||
|
<div i-ri:list-check />
|
||||||
|
<span text-lg font-bold>{{ t('nav.lists') }}</span>
|
||||||
|
</NuxtLink>
|
||||||
|
</template>
|
||||||
|
<slot>
|
||||||
|
<CommonPaginator :paginator="paginator">
|
||||||
|
<template #default="{ item }">
|
||||||
|
<NuxtLink :to="`list/${item.id}`" block p4 hover:bg-active flex justify-between>
|
||||||
|
{{ item.title }}
|
||||||
|
</NuxtLink>
|
||||||
|
</template>
|
||||||
|
</CommonPaginator>
|
||||||
|
</slot>
|
||||||
|
</MainContent>
|
||||||
|
</template>
|
|
@ -1,4 +1,6 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
import type { CommonRouteTabOption } from '~/components/common/CommonRouteTabs.vue'
|
||||||
|
|
||||||
definePageMeta({
|
definePageMeta({
|
||||||
middleware: 'auth',
|
middleware: 'auth',
|
||||||
})
|
})
|
||||||
|
@ -6,7 +8,7 @@ definePageMeta({
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
const pwaEnabled = useRuntimeConfig().public.pwaEnabled
|
const pwaEnabled = useRuntimeConfig().public.pwaEnabled
|
||||||
|
|
||||||
const tabs = $computed(() => [
|
const tabs = $computed<CommonRouteTabOption[]>(() => [
|
||||||
{
|
{
|
||||||
name: 'all',
|
name: 'all',
|
||||||
to: '/notifications',
|
to: '/notifications',
|
||||||
|
@ -17,7 +19,7 @@ const tabs = $computed(() => [
|
||||||
to: '/notifications/mention',
|
to: '/notifications/mention',
|
||||||
display: isHydrated.value ? t('tab.notifications_mention') : '',
|
display: isHydrated.value ? t('tab.notifications_mention') : '',
|
||||||
},
|
},
|
||||||
] as const)
|
])
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
|
|
@ -27,6 +27,12 @@ const userSettings = useUserSettings()
|
||||||
>
|
>
|
||||||
{{ $t('settings.preferences.hide_favorite_count') }}
|
{{ $t('settings.preferences.hide_favorite_count') }}
|
||||||
</SettingsToggleItem>
|
</SettingsToggleItem>
|
||||||
|
<SettingsToggleItem
|
||||||
|
:checked="getPreferences(userSettings, 'hideReplyCount')"
|
||||||
|
@click="togglePreferences('hideReplyCount')"
|
||||||
|
>
|
||||||
|
{{ $t('settings.preferences.hide_reply_count') }}
|
||||||
|
</SettingsToggleItem>
|
||||||
<SettingsToggleItem
|
<SettingsToggleItem
|
||||||
:checked="getPreferences(userSettings, 'hideFollowerCount')"
|
:checked="getPreferences(userSettings, 'hideFollowerCount')"
|
||||||
@click="togglePreferences('hideFollowerCount')"
|
@click="togglePreferences('hideFollowerCount')"
|
||||||
|
@ -39,6 +45,12 @@ const userSettings = useUserSettings()
|
||||||
>
|
>
|
||||||
{{ $t('settings.preferences.hide_translation') }}
|
{{ $t('settings.preferences.hide_translation') }}
|
||||||
</SettingsToggleItem>
|
</SettingsToggleItem>
|
||||||
|
<SettingsToggleItem
|
||||||
|
:checked="getPreferences(userSettings, 'hideAccountHoverCard')"
|
||||||
|
@click="togglePreferences('hideAccountHoverCard')"
|
||||||
|
>
|
||||||
|
{{ $t('settings.preferences.hide_account_hover_card') }}
|
||||||
|
</SettingsToggleItem>
|
||||||
<SettingsToggleItem
|
<SettingsToggleItem
|
||||||
:checked="getPreferences(userSettings, 'grayscaleMode')"
|
:checked="getPreferences(userSettings, 'grayscaleMode')"
|
||||||
@click="togglePreferences('grayscaleMode')"
|
@click="togglePreferences('grayscaleMode')"
|
||||||
|
|
0
patches/.gitkeep
Normal file
|
@ -1,13 +0,0 @@
|
||||||
diff --git a/dist/shared/nitro.c8278d90.mjs b/dist/shared/nitro.c8278d90.mjs
|
|
||||||
index 9ba312fc248da3731720ee7e3b38ba2a85537657..5ec9f06ccf60259820586715d73d41466daa8cff 100644
|
|
||||||
--- a/dist/shared/nitro.c8278d90.mjs
|
|
||||||
+++ b/dist/shared/nitro.c8278d90.mjs
|
|
||||||
@@ -1296,7 +1296,7 @@ async function copyPublicAssets(nitro) {
|
|
||||||
if (nitro.options.noPublicDir) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
- for (const asset of nitro.options.publicAssets) {
|
|
||||||
+ for (const asset of [...nitro.options.publicAssets].reverse()) {
|
|
||||||
if (await isDirectory(asset.dir)) {
|
|
||||||
await fse.copy(asset.dir, join(nitro.options.output.publicDir, asset.baseURL));
|
|
||||||
}
|
|
|
@ -1,9 +1,12 @@
|
||||||
import { useRegisterSW } from 'virtual:pwa-register/vue'
|
import { useRegisterSW } from 'virtual:pwa-register/vue'
|
||||||
|
import { STORAGE_KEY_PWA_HIDE_INSTALL } from '~/constants'
|
||||||
|
|
||||||
export default defineNuxtPlugin(() => {
|
export default defineNuxtPlugin(() => {
|
||||||
const online = useOnline()
|
const online = useOnline()
|
||||||
const registrationError = ref(false)
|
const registrationError = ref(false)
|
||||||
const swActivated = ref(false)
|
const swActivated = ref(false)
|
||||||
|
const showInstallPrompt = ref(false)
|
||||||
|
const hideInstall = useLocalStorage(STORAGE_KEY_PWA_HIDE_INSTALL, false)
|
||||||
|
|
||||||
// https://thomashunter.name/posts/2021-12-11-detecting-if-pwa-twa-is-installed
|
// https://thomashunter.name/posts/2021-12-11-detecting-if-pwa-twa-is-installed
|
||||||
const ua = navigator.userAgent
|
const ua = navigator.userAgent
|
||||||
|
@ -57,10 +60,55 @@ export default defineNuxtPlugin(() => {
|
||||||
needRefresh.value = false
|
needRefresh.value = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let install: () => Promise<void> = () => Promise.resolve()
|
||||||
|
let cancelInstall: () => void = noop
|
||||||
|
|
||||||
|
if (!hideInstall.value) {
|
||||||
|
type InstallPromptEvent = Event & {
|
||||||
|
prompt: () => void
|
||||||
|
userChoice: Promise<{ outcome: 'dismissed' | 'accepted' }>
|
||||||
|
}
|
||||||
|
|
||||||
|
let deferredPrompt: InstallPromptEvent | undefined
|
||||||
|
|
||||||
|
const beforeInstallPrompt = (e: Event) => {
|
||||||
|
e.preventDefault()
|
||||||
|
deferredPrompt = e as InstallPromptEvent
|
||||||
|
showInstallPrompt.value = true
|
||||||
|
}
|
||||||
|
window.addEventListener('beforeinstallprompt', beforeInstallPrompt)
|
||||||
|
window.addEventListener('appinstalled', () => {
|
||||||
|
deferredPrompt = undefined
|
||||||
|
showInstallPrompt.value = false
|
||||||
|
})
|
||||||
|
|
||||||
|
cancelInstall = () => {
|
||||||
|
deferredPrompt = undefined
|
||||||
|
showInstallPrompt.value = false
|
||||||
|
window.removeEventListener('beforeinstallprompt', beforeInstallPrompt)
|
||||||
|
hideInstall.value = true
|
||||||
|
}
|
||||||
|
|
||||||
|
install = async () => {
|
||||||
|
if (!showInstallPrompt.value || !deferredPrompt) {
|
||||||
|
showInstallPrompt.value = false
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
showInstallPrompt.value = false
|
||||||
|
await nextTick()
|
||||||
|
deferredPrompt.prompt()
|
||||||
|
await deferredPrompt.userChoice
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
provide: {
|
provide: {
|
||||||
pwa: reactive({
|
pwa: reactive({
|
||||||
isInstalled,
|
isInstalled,
|
||||||
|
showInstallPrompt,
|
||||||
|
cancelInstall,
|
||||||
|
install,
|
||||||
swActivated,
|
swActivated,
|
||||||
registrationError,
|
registrationError,
|
||||||
needRefresh,
|
needRefresh,
|
||||||
|
|
3220
pnpm-lock.yaml
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 2 KiB |
BIN
public-dev/maskable-icon.png
Normal file
After Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 7.7 KiB |
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 3 KiB |
BIN
public-staging/maskable-icon.png
Normal file
After Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 7.8 KiB |
Before Width: | Height: | Size: 6 KiB After Width: | Height: | Size: 2.9 KiB |
BIN
public/maskable-icon.png
Normal file
After Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 7.8 KiB |
|
@ -21,7 +21,7 @@ export const onShareTarget = (event: FetchEvent) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function handleSharedTarget(event: FetchEvent) {
|
async function handleSharedTarget(event: FetchEvent) {
|
||||||
event.respondWith(Response.redirect('/home?share-target=true'))
|
event.respondWith(Response.redirect('/home?share-target=true', 303))
|
||||||
await waitForClientToGetReady(event.resultingClientId)
|
await waitForClientToGetReady(event.resultingClientId)
|
||||||
|
|
||||||
const [client, formData] = await getClientAndFormData(event)
|
const [client, formData] = await getClientAndFormData(event)
|
||||||
|
|
|
@ -270,7 +270,8 @@ async function render(content: string, options?: ContentParseOptions) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// mocks
|
// mocks
|
||||||
vi.mock('vue-router', () => {
|
vi.mock('vue-router', async () => {
|
||||||
|
const { defineComponent, h } = await import('vue')
|
||||||
return {
|
return {
|
||||||
RouterLink: defineComponent((attrs) => {
|
RouterLink: defineComponent((attrs) => {
|
||||||
return () => h('a', attrs)
|
return () => h('a', attrs)
|
||||||
|
@ -286,7 +287,8 @@ vi.mock('shiki-es', async (importOriginal) => {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
vi.mock('~/components/content/ContentMentionGroup.vue', () => {
|
vi.mock('~/components/content/ContentMentionGroup.vue', async () => {
|
||||||
|
const { defineComponent, h } = await import('vue')
|
||||||
return {
|
return {
|
||||||
default: defineComponent({
|
default: defineComponent({
|
||||||
setup(props, { slots }) {
|
setup(props, { slots }) {
|
||||||
|
@ -296,7 +298,8 @@ vi.mock('~/components/content/ContentMentionGroup.vue', () => {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
vi.mock('~/components/account/AccountHoverWrapper.vue', () => {
|
vi.mock('~/components/account/AccountHoverWrapper.vue', async () => {
|
||||||
|
const { defineComponent } = await import('vue')
|
||||||
return {
|
return {
|
||||||
default: defineComponent({
|
default: defineComponent({
|
||||||
props: ['handle', 'class'],
|
props: ['handle', 'class'],
|
||||||
|
|
|
@ -1,6 +1,13 @@
|
||||||
export function matchLanguages(languages: string[], acceptLanguages: readonly string[]): string | null {
|
export function matchLanguages(languages: string[], acceptLanguages: readonly string[]): string | null {
|
||||||
{
|
{
|
||||||
const lang = acceptLanguages.map(userLang => languages.find(lang => lang.startsWith(userLang))).filter(v => !!v)[0]
|
// const lang = acceptLanguages.map(userLang => languages.find(lang => lang.startsWith(userLang))).filter(v => !!v)[0]
|
||||||
|
// TODO: Support es-419, remove this code if we include spanish country variants
|
||||||
|
const lang = acceptLanguages.map(userLang => languages.find((lang) => {
|
||||||
|
if (userLang.startsWith('es-') && userLang !== 'es-ES')
|
||||||
|
return lang === 'es-419'
|
||||||
|
|
||||||
|
return lang.startsWith(userLang)
|
||||||
|
})).filter(v => !!v)[0]
|
||||||
if (lang)
|
if (lang)
|
||||||
return lang
|
return lang
|
||||||
}
|
}
|
||||||
|
|