Compare commits

...

95 commits

Author SHA1 Message Date
teutat3s 3354bdd606
feat: add fly.toml 2024-09-26 11:59:24 +02:00
patak-dev 1335bbfcd5 chore: release v0.15.1 2024-09-26 09:13:34 +02:00
Joaquín Sánchez 44074ff1a3
fix: change page reload and account switch logic (#2975) 2024-09-25 15:55:32 +00:00
Joaquín Sánchez 54344acf4b
fix: prevent reloading page (#2973) 2024-09-23 16:08:02 +00:00
Daniel Roe fe58a2b522
chore: release v0.15.0 2024-09-23 15:02:26 +01:00
Joaquín Sánchez 4d95c17e86
fix: add new service worker (#2971) 2024-09-23 12:45:46 +00:00
renovate[bot] 2f4ee35561
chore(deps): update dependency vitest to v2.1.1 (#2960)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-23 11:29:55 +00:00
Joaquín Sánchez 10076be909
fix: top level await (chrome 129) (#2970) 2024-09-23 10:53:10 +00:00
renovate[bot] 7ab2f16f35
chore(deps): update dependency eslint to ^9.11.0 (#2968)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-23 09:27:38 +00:00
renovate[bot] 7a1ed8f9a2
chore(deps): update pnpm to v9.11.0 (#2969)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-23 09:27:34 +00:00
TAKAHASHI Shuuji 744c1784c3
fix: fix invalid permissions-policy value for fullscreen (#2941) 2024-09-19 12:00:39 +00:00
renovate[bot] 7aabe17860
fix(deps): update dependency prosemirror-highlight to ^0.9.0 (#2961)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-19 11:59:36 +00:00
renovate[bot] bc324ec8ae
chore(deps): update dependency nuxt-component-meta to v0.8.2 (#2958)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-19 11:59:01 +00:00
renovate[bot] ff9c025126
chore(deps): update devdependencies (#2959)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-19 11:58:15 +00:00
Joaquín Sánchez 662a8aec69
chore: cleanup ModalContainer.vue (#2956) 2024-09-14 03:56:25 +00:00
Joaquín Sánchez 01ffb1a3e1
fix(ui): composer dialog layout broken (#2955) 2024-09-12 09:36:43 +00:00
Joaquín Sánchez 4061075dde
fix(ui): generate only one thread composer in PublishWidgetList and provide it to each widget (#2953) 2024-09-11 20:37:14 +00:00
Joaquín Sánchez dbf743afd9
fix(ui): bind attributes to PublishWidgetList list (#2952) 2024-09-11 15:43:30 +00:00
renovate[bot] dd6fab86ee
chore(deps): update dependency nuxt to ^3.13.1 (#2946)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Roe <daniel@roe.dev>
2024-09-11 14:37:59 +00:00
renovate[bot] 344ec56da0
chore(deps): update all non-major dependencies (#2949)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-11 11:29:26 +00:00
Daniel Roe 672e8a9a24
fix: bump unstorage and address type issues (#2951) 2024-09-11 11:20:26 +00:00
renovate[bot] 201ab3b13a
chore(deps): update dependency eslint to ^9.10.0 (#2948)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-09 11:24:14 +00:00
renovate[bot] 6fd288dcc1
fix(deps): update dependency @vueuse/motion to v2.2.5 (#2947)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-09 11:23:00 +00:00
Joaquín Sánchez 41eb84416a
fix(ui): add loading indicator (#2769) 2024-09-07 09:37:01 +00:00
Shinigami e477cd8ee2
chore: use script setup lang=ts everywhere (#2944) 2024-09-07 09:30:43 +00:00
Shinigami 4caa63e84f
perf: reduce timeline limit on slow connection (#2945) 2024-09-07 09:27:01 +00:00
Shinigami 3054667050
chore: unify script setup lang order (#2943) 2024-09-07 07:38:18 +00:00
renovate[bot] b2102732cf
chore(deps): update devdependencies (#2939)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-02 06:56:23 +00:00
renovate[bot] 7141a75544
chore(deps): update pnpm to v9.9.0 (#2940)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-02 06:55:39 +00:00
Sho Sakuma 926f7769c2
fix(i18n): Fix redundant Japanese translation (#2938) 2024-09-02 06:54:39 +00:00
Duy 538fadc908
feat(i18n): Update vi-VN.json (#2937) 2024-08-31 13:53:17 +00:00
renovate[bot] f605d96836
chore(deps): update devdependencies (#2931)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-27 03:20:57 +00:00
renovate[bot] 0c1dd1cb7b
chore(deps): update lint (#2932)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-27 02:56:38 +00:00
Ao Ito 53f3d44f21
refactor: remove redundant imports (#2927) 2024-08-24 12:16:10 +00:00
renovate[bot] faae7e32f4
fix(deps): update dependencies (major) (#2921)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-22 10:28:35 +00:00
renovate[bot] b8efd67e83
fix(deps): update vueuse to v11 (major) (#2922)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: TAKAHASHI Shuuji <shuuji3@gmail.com>
2024-08-20 15:51:05 +00:00
renovate[bot] 7de45d154e
chore(deps): update all non-major dependencies (#2920)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-19 02:54:17 +00:00
renovate[bot] 1353f62ebb
chore(deps): update dependency prettier to ^3.3.3 (#2919)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-19 02:51:09 +00:00
renovate[bot] e22555b581
fix(deps): update dependencies (major) (#2559)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Roe <daniel@roe.dev>
2024-08-16 15:49:14 +00:00
renovate[bot] 55372aa530
chore(deps): update devdependencies (#2782)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Roe <daniel@roe.dev>
2024-08-16 15:20:49 +00:00
renovate[bot] efa8a89f92
chore(deps): update dependency eslint to v9 (#2785)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-16 14:58:14 +00:00
renovate[bot] 0fba07e6e5
chore(deps): update dependency @antfu/eslint-config to ^2.19.0 (#2726)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: TAKAHASHI Shuuji <shuuji3@gmail.com>
Co-authored-by: Daniel Roe <daniel@roe.dev>
2024-08-16 14:52:08 +00:00
renovate[bot] 23f82d3296
fix(deps): update dependencies (#2526)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Roe <daniel@roe.dev>
2024-08-16 14:35:44 +00:00
Ao Ito bd7fd961d0
feat: add custom metadata type for PageMeta (#2907) 2024-08-16 14:33:39 +00:00
renovate[bot] 1a8d365779
chore(deps): update dependency vitest to v2.0.5 (#2911)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-16 14:29:39 +00:00
Daniel Roe 335ae78a67
chore: bump and patch dependencies to augment vue (#2918) 2024-08-16 13:31:43 +00:00
renovate[bot] bdf5a18b4d
chore(deps): update pnpm to v9.7.0 (#2917)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-13 15:52:58 +00:00
Chris​‌​‮ ‬Hayes‌​​​ 71369c4c78
fix(ui): profile name gets cut off by roles (#2915) 2024-08-13 15:45:09 +00:00
TAKAHASHI Shuuji 1d62c2640e
fix(ui): adjust z-index of Embedded Media Player and sticky header (#2848) 2024-08-10 14:55:05 +00:00
TAKAHASHI Shuuji d79add2ddb
fix(ui): fix z-index of horizontal line between statuses (#2778) 2024-08-10 14:54:01 +00:00
KaKi87 f15c8a18d0
feat(i18n): Update French translations (#1839)
Co-authored-by: Anthony Fu <anthonyfu117@hotmail.com>
Co-authored-by: TAKAHASHI Shuuji <shuuji3@gmail.com>
2024-08-09 06:06:09 +00:00
TAKAHASHI Shuuji 879f0d8648
feat(ui): overlap multiple account icons in notification (#2869) 2024-08-09 06:00:19 +00:00
Lixou 20ac0d5066
fix(ui): change apple app status bar style (#2903)
Co-authored-by: Joaquín Sánchez <userquin@gmail.com>
2024-08-09 05:58:49 +00:00
Chris​‌​‮ ‬Hayes‌​​​ fb7f2b5a8e
docs(contributing): update node and pnpm version (#2913) 2024-08-09 05:57:18 +00:00
renovate[bot] 4a3218dae3
chore(deps): update dependency vitest to v2.0.4 (#2909)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-29 02:19:26 +00:00
renovate[bot] 21f7a029fa
chore(deps): update pnpm to v9.6.0 (#2908)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-22 06:38:20 +00:00
renovate[bot] f8b4f700e7
chore(deps): update dependency vitest to v2 (#2906)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-16 04:06:56 +00:00
renovate[bot] d2aee8fc37
chore(deps): update pnpm to v9.5.0 (#2905)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-08 07:31:58 +00:00
renovate[bot] 2144f2484b
chore(deps): update amannn/action-semantic-pull-request action to v5.5.3 (#2898)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-01 02:43:41 +00:00
Ediz Baha 83de5da08a
fix(i18n): Update tr-TR.json (#2894) 2024-06-25 00:24:54 +00:00
renovate[bot] 108db77a9d
chore(deps): update all non-major dependencies (#2783)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-24 03:11:24 +00:00
renovate[bot] 385f218e7b
fix(deps): update dependency @vueuse/motion to v2.2.3 (#2881)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-24 03:05:38 +00:00
renovate[bot] f224acb4e2
chore(deps): update docker/build-push-action action to v6 (#2892)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-24 03:00:20 +00:00
Sebastian Di Luzio 0d84257ac0
docs: add crab.bumscode.com to list of community elk deployments (#2887) 2024-06-17 17:34:59 +00:00
renovate[bot] b4886fa135
chore(deps): update dependency vitest to v1.6.0 (#2822)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-14 08:19:42 +00:00
Daniel Roe 16a09cd959
fix: use correct meta attribute for twitter info 2024-06-10 22:20:54 +01:00
TAKAHASHI Shuuji 97ce2fc819
feat: keyboard status navigation with j/k (#2739) 2024-05-31 10:35:04 +00:00
Lixou 9a864e8bcb
chore(deps): Update masto.js (#2876) 2024-05-30 19:40:17 +00:00
Francesco ca34d3df70
feat(i18n): Update it-IT locale (#2879) 2024-05-30 01:16:21 +00:00
Joaquín Sánchez 2c889a39b8
chore: fix invalid html markup in SettingsToggleItem (#2810) 2024-05-29 03:42:58 +00:00
Joaquín Sánchez 7047968cfc
feat(a11y): add semantic markup to language settings (#2812) 2024-05-29 03:42:54 +00:00
Shinigami 0b207c3bb5
chore: set package-manager-strict to false (#2873) 2024-05-28 14:23:45 +02:00
Shinigami 6f7efc9f32
fix(i18n): update de-DE (#2874) 2024-05-28 00:21:00 +00:00
renovate[bot] a88d51b60b
chore(deps): update pnpm to v9 (#2841)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-27 23:27:17 +00:00
Lefteris T 65557fab5e
feat(i18n): added greek translation (#2831)
Co-authored-by: TAKAHASHI Shuuji <shuuji3@gmail.com>
2024-05-11 15:26:21 +00:00
Valtteri Laitinen 09b5dd6ac9
feat(i18n): update Finnish localization (#2867) 2024-05-09 10:15:01 +00:00
Alex a1b5cbc12e
feat(i18n): update zh-CN translations (#2868) 2024-05-08 11:34:34 +00:00
Xabi bd950af9cf
feat(i18n): update eu-ES.json (#2866) 2024-05-07 23:58:56 +00:00
lazzzis 04befd6138
feat(i18n): update zh-CN.json (#2865) 2024-05-05 18:25:29 +00:00
Kevin Pliester 0b53dfc89f
feat(i18n): update German translations (#2861) 2024-05-03 20:32:24 +00:00
lzh c39b60d448
feat(i18n): update zh-CN.json (#2858) 2024-05-02 19:50:19 +00:00
lzh 50481af19e
docs(i18n): Update dev path in the contribution guide (#2857) 2024-05-02 13:40:15 +00:00
Dohány Tamás 6c2e5849ef
feat(i18n): update hu-HU.json (#2856) 2024-05-02 13:40:08 +00:00
pt 9496ffc3e6
feat(i18n): update uk-UA.json (#2854) 2024-04-28 08:18:37 +00:00
pt ab92fd696c
feat(i18n): update uk-UA.json (#2852) 2024-04-26 04:39:42 +00:00
Francesco 7d4b84fda8
feat(i18n): Update it-IT locale (#2851) 2024-04-25 03:27:21 +00:00
Xabi a67b3efde2
feat(i18n): update eu-ES.json (#2840) 2024-04-24 03:17:03 +00:00
Duy e546e665d8
feat(i18n): Update vi-VN.json (#2838) 2024-04-24 03:17:00 +00:00
Emanuel Pina d1ae45de14
feat(i18n): update pt-PT translation (#2850) 2024-04-24 03:16:55 +00:00
Joaquín Sánchez 8ad05dfd47
feat(i18n): add open image preview dialog spanish translation (#2839) 2024-04-22 15:38:06 +00:00
TAKAHASHI Shuuji 09cae9f924
fix(ui): fix publish dialog layout (#2842) 2024-04-22 12:54:20 +00:00
TAKAHASHI Shuuji bd8cfc7b57
fix(i18n,a11y): fix missing or incorrect translations in aria-label strings (#2837) 2024-04-21 10:26:35 +00:00
Joaquín Sánchez 77f0e2c2f8
feat(a11y): add semantic markup to preference settings (#2811) 2024-04-21 07:14:12 +00:00
lazzzis 57ff04853b
fix(ui): show custom emoji in spoiler text (#2836) 2024-04-21 05:25:40 +00:00
Joaquín Sánchez 1eaaa6ce9a
feat(i18n): add manage lists spanish translation (#2832) 2024-04-18 19:39:08 +00:00
141 changed files with 15465 additions and 11326 deletions

View file

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

View file

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

View file

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

1
.npmrc
View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

18
fly.toml Normal file
View file

@ -0,0 +1,18 @@
# fly.toml app configuration file generated for elk on 2023-07-15T00:09:39+02:00
#
# See https://fly.io/docs/reference/configuration/ for information about how to use this file.
#
app = "elk"
primary_region = "ams"
[http_service]
internal_port = 5314
force_https = true
auto_stop_machines = true
auto_start_machines = true
min_machines_running = 0
[mounts]
source="elkdata"
destination="/elk/data"

View file

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

View file

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

746
locales/el-GR.json Normal file
View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

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