Compare commits

...

155 Commits

Author SHA1 Message Date
Ed Poe 7874635f99 Merge branch 'AkkomaGang-stable' into stable
Had to do a manual merge because of changes to the translation files.
2024-03-08 16:55:14 +00:00
Ed Poe a09d3289a8 Merge branch 'stable' of https://akkoma.dev/AkkomaGang/akkoma-fe into AkkomaGang-stable 2024-03-08 16:53:44 +00:00
FloatingGhost 7cc6c35654 Merge branch 'develop' into stable 2024-02-24 13:55:57 +00:00
FloatingGhost 228679e49e 2024.02 release 2024-02-24 13:55:10 +00:00
Weblate d610a46c32 Merge branch 'origin/develop' into Weblate. 2024-02-20 16:24:40 +00:00
floatingghost ed0b403c33 Merge pull request 'Auto-approve followbacks (frontend part)' (#365) from Oneric/akkoma-fe:followbacks-fe into develop
Reviewed-on: AkkomaGang/akkoma-fe#365
2024-02-20 16:24:37 +00:00
Weblate 0925763267 Merge branch 'origin/develop' into Weblate. 2024-02-20 16:20:18 +00:00
floatingghost 0f842b300b Merge pull request 'Display profile background of other users' (#371) from Oneric/akkoma-fe:profile-backgrounds into develop
Reviewed-on: AkkomaGang/akkoma-fe#371
2024-02-20 16:20:14 +00:00
Weblate e292af4211 Merge branch 'origin/develop' into Weblate. 2024-02-19 14:04:37 +00:00
floatingghost 865cb6f96a Merge pull request 'Add Indonesian translation' (#366) from leap123/akkoma-fe:leap123-patch-1 into develop
Reviewed-on: AkkomaGang/akkoma-fe#366
2024-02-19 14:04:34 +00:00
fedward 513e444a11 Merge pull request 'Merge with 2023.08 stable' (#11) from AkkomaGang/akkoma-fe:stable into stable
Reviewed-on: #11
2024-02-15 22:26:58 +00:00
Weblate 4e7d5d3a08 Translated using Weblate (Vietnamese)
Currently translated at 92.2% (965 of 1046 strings)

Translated using Weblate (Vietnamese)

Currently translated at 92.2% (965 of 1046 strings)

Translated using Weblate (Vietnamese)

Currently translated at 84.3% (882 of 1046 strings)

Translated using Weblate (Vietnamese)

Currently translated at 84.3% (882 of 1046 strings)

Translated using Weblate (Vietnamese)

Currently translated at 79.8% (835 of 1046 strings)

Translated using Weblate (Vietnamese)

Currently translated at 79.8% (835 of 1046 strings)

Co-authored-by: Nguyễn Gia Phong <cnx@loang.net>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: xarvos <huyngo@disroot.org>
Translate-URL: http://translate.akkoma.dev/projects/akkoma/pleroma-fe/vi/
Translation: Pleroma fe/pleroma-fe
2024-02-15 17:32:33 +00:00
Weblate f2d0c4c7d5 Translated using Weblate (Japanese)
Currently translated at 0.2% (3 of 1046 strings)

Added translation using Weblate (Japanese)

Co-authored-by: Nakaya <s_fpfb_sub-second@yahoo.co.jp>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: http://translate.akkoma.dev/projects/akkoma/pleroma-fe/ja/
Translation: Pleroma fe/pleroma-fe
2024-02-15 17:32:33 +00:00
Weblate 02a6591f20 Translated using Weblate (Greek)
Currently translated at 15.9% (167 of 1046 strings)

Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: getimiskon <getimiskon@disroot.org>
Translate-URL: http://translate.akkoma.dev/projects/akkoma/pleroma-fe/el/
Translation: Pleroma fe/pleroma-fe
2024-02-15 17:32:33 +00:00
Weblate 94c70f8914 Merge branch 'origin/develop' into Weblate.
Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1046 of 1046 strings)

Co-authored-by: Poesty Li <poesty7450@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: http://translate.akkoma.dev/projects/akkoma/pleroma-fe/zh_Hans/
Translation: Pleroma fe/pleroma-fe
2024-02-15 17:32:33 +00:00
Weblate 3ba8c90e1e Translated using Weblate (Russian)
Currently translated at 68.7% (719 of 1046 strings)

Co-authored-by: Mel <hi@mel.gg>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: http://translate.akkoma.dev/projects/akkoma/pleroma-fe/ru/
Translation: Pleroma fe/pleroma-fe
2024-02-15 17:32:33 +00:00
Weblate 83db80f88c Translated using Weblate (Polish)
Currently translated at 100.0% (1046 of 1046 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (1046 of 1046 strings)

Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: subtype <subtype@hollow.capital>
Translate-URL: http://translate.akkoma.dev/projects/akkoma/pleroma-fe/pl/
Translation: Pleroma fe/pleroma-fe
2024-02-15 17:32:32 +00:00
Weblate 1489d92997 Translated using Weblate (Japanese (ja_EASY))
Currently translated at 72.3% (757 of 1046 strings)

Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: kazari <6c577a54-aac9-482a-955e-745c858445e3@simplelogin.com>
Translate-URL: http://translate.akkoma.dev/projects/akkoma/pleroma-fe/ja_EASY/
Translation: Pleroma fe/pleroma-fe
2024-02-15 17:32:32 +00:00
Weblate db5c9572dc Translated using Weblate (Italian)
Currently translated at 80.4% (841 of 1045 strings)

Translated using Weblate (Italian)

Currently translated at 65.3% (683 of 1045 strings)

Co-authored-by: Cuche <cuche@mailbox.org>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: http://translate.akkoma.dev/projects/akkoma/pleroma-fe/it/
Translation: Pleroma fe/pleroma-fe
2024-02-15 17:32:32 +00:00
Weblate 5bb53c8b0d Translated using Weblate (Spanish)
Currently translated at 93.9% (983 of 1046 strings)

Translated using Weblate (Spanish)

Currently translated at 92.5% (967 of 1045 strings)

Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: taretka <info@tarteka.net>
Translate-URL: http://translate.akkoma.dev/projects/akkoma/pleroma-fe/es/
Translation: Pleroma fe/pleroma-fe
2024-02-15 17:32:32 +00:00
Weblate 665f88f5c7 Translated using Weblate (Indonesian)
Currently translated at 71.9% (753 of 1046 strings)

Co-authored-by: Aldiantoro Nugroho <kriwil@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: http://translate.akkoma.dev/projects/akkoma/pleroma-fe/id/
Translation: Pleroma fe/pleroma-fe
2024-02-15 17:32:32 +00:00
Oneric 050c7df2e6 Display profile background of other users
And add a new frontend setting to hide other people's background.
2024-02-14 18:44:57 +01:00
Oneric a77a9e04d9 Expose new server-side permit_followback setting
Added to backend in AkkomaGang/akkoma#674
2024-02-04 22:19:14 +01:00
leap123 a57334991e Add Indonesian translation
The Indonesian translation is technically almost complete, just not added to messages.js
2024-01-19 04:27:26 +00:00
floatingghost 8dce31d0ad Merge pull request 'Improve UX of subject / Content Warning field' (#362) from hazelnoot/akkoma-fe:develop into develop
Reviewed-on: AkkomaGang/akkoma-fe#362
2023-12-20 18:49:40 +00:00
Hazel Koehler ea9ad4d600 fix "always show content warning" setting 2023-12-20 12:39:31 -05:00
Hazel Koehler 34e2800f59 add button to toggle the spoiler / CW field 2023-12-16 14:44:26 -05:00
Hazel Koehler 3d65eccf04 use main emoji button for spoiler / CW field 2023-12-16 13:37:59 -05:00
floatingghost d304be654f Merge pull request 'Update build setup instructions' (#343) from norm/pleroma-fe:update-build-setup into develop
Reviewed-on: AkkomaGang/akkoma-fe#343
2023-12-15 12:24:33 +00:00
floatingghost aee97fa948 Merge pull request 'Re-added extension checking for still-image' (#346) from Mergan/pleroma-fe:still-image-ultimate into develop
Reviewed-on: AkkomaGang/akkoma-fe#346
2023-12-15 12:24:07 +00:00
floatingghost 7da1687f31 Merge pull request 'Use relative font size and set appropriate overflow behavior' (#355) from xarvos/pleroma-fe:update-css into develop
Reviewed-on: AkkomaGang/akkoma-fe#355
2023-12-15 12:12:28 +00:00
floatingghost a8f193d4bd Merge pull request 'Stop constant movement of notifications due to changing timestamps' (#353) from Oneric/akkoma-fe:notification-writhing into develop
Reviewed-on: AkkomaGang/akkoma-fe#353
2023-12-15 11:57:47 +00:00
floatingghost 81c82e11bc Merge pull request 'Explicitly set SameSite attribute for cookies' (#352) from Oneric/akkoma-fe:cookie-samesite into develop
Reviewed-on: AkkomaGang/akkoma-fe#352
2023-12-15 11:54:15 +00:00
floatingghost 00cadce5b4 Merge pull request 'Format dates, times with window.navigator.language instead of UI i18n locale' (#354) from smitten/akkoma-fe:date-locale-fix-cherrypick into develop
Reviewed-on: AkkomaGang/akkoma-fe#354
2023-12-15 11:52:59 +00:00
floatingghost 40a08f279b Merge pull request 'Drop broken "@ symbol as icon" setting' (#359) from Oneric/akkoma-fe:at-icon into develop
Reviewed-on: AkkomaGang/akkoma-fe#359
2023-11-16 10:41:17 +00:00
Oneric c524a47e6f Drop broken "@ symbol as icon" setting
It was merged into pleroma-fe on 2022-02-03 in
76547fe66d and imported
into akkoma-fe on 2022-06-08 with the merge commit
f6cf509a04.

However, something went wrong in the merge and while the setting
and its infrastructure exist, it is never used anywhere and @ is
always displayed as text.

Given it existed in this broken state for nearly one and a half years,
never worked on akkoma-fe and no bugs were filed about this, it appears
nobody cares, so let’s just remove it.
2023-11-15 23:36:19 +01:00
Ngô Ngọc Đức Huy 235c734d37
Use overflow: auto for description
Previously it sets overflow: scroll, so there's an unnecessary
horizontal scroll.
overflow: auto only shows scrollbar when it overflows
2023-11-05 09:32:19 +07:00
Ngô Ngọc Đức Huy deaef1d0b9
Use relative unit for font size 2023-11-05 09:21:01 +07:00
smitten 1b28ec3b72
Match UI i18n configuration to browser locales 2023-11-01 23:10:57 -04:00
smitten c9dc8f00f9
Use window.navigator.language before interface i18n language 2023-10-30 23:56:53 -04:00
Oneric beee99e733 Stop notifications boxes from change size over time
Notifications about favourites and follows use .notification-right,
notifications about replies instead use .heading-right.

Previously only the former set a min-width, however the
chosen value of 3em was too small to fit the worst case.
As a consequence, when the timestamp text changes over time,
its element width changes, which may result in neighbouring text
(no longer) needing to wrap to a new line in turn changing the size
of the whole notification box pushing older notification boxes down/up.

These constant movements at the side of the screen can be quite
annoying and confusing when the cause cannot be immediately discerned.

Avoid this, by reserving enough space for any timestamp.

For English, the worst case is the five-character 'XXmin', since the
short identifier for minutes is the longest with three letters.
With two exceptions, all other current localisation also do not exceed
three letters in any short unit identifier up to days.
However, some localisations (e.g. Polish) additionally insert a space
between numerical value and unit. This matches SI recommendations
pushing the worst case to 6 characters.

6 characters will be sufficient for timestamps up to 3 weeks in all
languages (minus prev exceptions), which seems reasonable enough
as beyond this timestamps rarely change anyway.

The aforementioned exceptions being Vietnamese and Occitan,
but in the current localisation all or the relevant short unit
identifiers are identical to the long forms indicating this is
just due to incomplete translation.
Indeed, Vietnamese Wikipedia (read through machine translation) suggests
“ph” is commonly used as unit identifiers for minutes, but the current
localisation fully spells it out as “phút”.
2023-10-25 00:37:09 +02:00
Oneric ccb0ffdc8a Don't show direction in notification timestamps
Currently all notifications except follow-related once include
and explicit direction text. (It missing in follow notifs is due to an
omission in 804ba0cdb6b353e0c959c68f44c6a1316c0d6b10 which only added
the newly introduced with-direction to status-related notifs. Before,
presumably all notifs included direction text.)

But in the notification tray horizontal space is scarce
and notifs can already be assumed to only come from the past.
While it might not be too bad for the English localisation’s 4-letter
' ago' suffix, e.g. the Indonesian localisation’s ' yang lalu' needs
10 letters.

Thus instead of fixing the omission for follow-related notifs,
drop direction text from all notification timestamps.
2023-10-24 23:28:45 +02:00
Oneric ab250c2f3a Explicitly set SameSite attribute for cookies
Modern browsers start to tighten down on third-party access to cookies.
E.g. in current Firefox, a warning about the userLanguage cookie was
shown since it did not yet explicitly set the SameSite attribute and the
default is about to change.

The cookie name being referred to as BACKEND_LANGUAGE_COOKIE_NAME
suggests it should be readable by the actual Akkoma backend, which can
live at a different domain than akkoma-fe. Thus explicitly enable
sharing with third-party sites.

No warnings were shown for other cookies, so I assume
this was the only one not yet setting SameSite.
2023-10-19 01:05:59 +02:00
Norm 1de62fffcd
Update config.example.json link and example domain 2023-10-06 04:52:04 -04:00
Norm 306cea04a1
Use corepack in build instructions 2023-10-06 04:51:59 -04:00
Mergan d9e1bc4d99 Re-added extension checking for still-image
- Bonus refactoring
2023-10-02 15:29:54 -07:00
FloatingGhost 52b0b6f008 add VI to messages.js 2023-10-02 13:28:23 +01:00
floatingghost 8afbe5e3bc Merge pull request 'Making still-image better' (#341) from Mergan/pleroma-fe:still-image-ultimate into develop
Reviewed-on: AkkomaGang/akkoma-fe#341
2023-09-25 13:29:29 +00:00
floatingghost 58be48d164 Merge pull request 'Do not copy all emojis in recentEmoji getter' (#340) from sn0w/akkoma-fe:feature/optimize-recent-emojis into develop
Reviewed-on: AkkomaGang/akkoma-fe#340
2023-09-25 13:24:12 +00:00
Mergan 1056b89fd1 Disabled aggressive matching for reduced motion (we search for gif now) 2023-09-12 04:32:01 -07:00
Mergan 3e64d78d05 An oopsie 2023-09-12 04:17:28 -07:00
Mergan 3947aafeba Aligning canvas to image 2023-09-12 04:08:47 -07:00
Mergan 345934c2f3 Make label visible on avatar 2023-09-12 03:37:05 -07:00
Mergan 42a13b0f1b Modify label 2023-09-12 03:35:58 -07:00
Mergan e13c4b6b85 Revamped still-image 2023-09-12 02:48:53 -07:00
sn0w 6a1409e09b
Do not copy all emojis in recentEmoji getter 2023-09-03 16:19:06 +02:00
FloatingGhost e7a558a533 Merge branch 'develop' into stable 2023-08-05 14:17:53 +01:00
FloatingGhost 174f98b1cb don't die on my arm box please 2023-08-05 14:17:42 +01:00
FloatingGhost 5106fcedd6 Merge branch 'develop' into stable 2023-08-05 13:29:55 +01:00
FloatingGhost ab146b67ec version 2023-08-05 13:29:44 +01:00
FloatingGhost 1db322bae6 Merge branch 'develop' into stable 2023-08-05 13:29:26 +01:00
FloatingGhost 3b4208ea41 debounce emoji searching 2023-08-04 16:48:13 +01:00
floatingghost 856324fa26 Merge pull request 'Make favicon next to post username use Still-Image functionality' (#327) from Mergan/pleroma-fe:still-image-instance-favicon into develop
Reviewed-on: AkkomaGang/akkoma-fe#327
2023-08-04 15:09:56 +00:00
floatingghost 5a9322d2c7 Merge pull request 'StillImage: Improved animated image detection' (#335) from yukijoou/akkoma-fe:still-image-better-gif-detection into develop
Reviewed-on: AkkomaGang/akkoma-fe#335
2023-08-04 15:09:32 +00:00
Weblate b52bfbcba0 Merge branch 'origin/develop' into Weblate. 2023-08-04 14:56:22 +00:00
floatingghost 2b05a738c9 Merge pull request 'Add replying info for redraft' (#332) from xarvos/pleroma-fe:fix-reply-redraft into develop
Reviewed-on: AkkomaGang/akkoma-fe#332
2023-08-04 14:56:20 +00:00
Weblate fa5d31b793 Merge branch 'origin/develop' into Weblate. 2023-08-04 14:54:38 +00:00
tusooa 29cfdcbbcd Add load more to blocks/mutes 2023-08-04 15:54:04 +01:00
Weblate 5174b95918 Translated using Weblate (Greek)
Currently translated at 15.4% (162 of 1046 strings)

Added translation using Weblate (Greek)

Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: getimiskon <getimiskon@disroot.org>
Translate-URL: http://translate.akkoma.dev/projects/akkoma/pleroma-fe/el/
Translation: Pleroma fe/pleroma-fe
2023-08-04 13:34:26 +00:00
Weblate 56528206b8 Translated using Weblate (Portuguese)
Currently translated at 62.7% (656 of 1046 strings)

Co-authored-by: Jonathan Soares <jontix@murena.io>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: http://translate.akkoma.dev/projects/akkoma/pleroma-fe/pt/
Translation: Pleroma fe/pleroma-fe
2023-08-04 13:34:26 +00:00
Weblate 590380c084 Translated using Weblate (Thai)
Currently translated at 1.7% (18 of 1046 strings)

Added translation using Weblate (Thai)

Co-authored-by: Chanakan Mungtin <chanakan5591@chanakancloud.net>
Co-authored-by: Pongsatorn Paewsoongnern <akkoma@miraiverse.me>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: http://translate.akkoma.dev/projects/akkoma/pleroma-fe/th/
Translation: Pleroma fe/pleroma-fe
2023-08-04 13:34:26 +00:00
Weblate dfcbb3c1ec Translated using Weblate (Ukrainian)
Currently translated at 100.0% (1046 of 1046 strings)

Co-authored-by: Denys Nykula <vegan@libre.net.ua>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: http://translate.akkoma.dev/projects/akkoma/pleroma-fe/uk/
Translation: Pleroma fe/pleroma-fe
2023-08-04 13:34:26 +00:00
Weblate 9b01c31283 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (1046 of 1046 strings)

Co-authored-by: Poesty Li <poesty7450@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: http://translate.akkoma.dev/projects/akkoma/pleroma-fe/zh_Hans/
Translation: Pleroma fe/pleroma-fe
2023-08-04 13:34:26 +00:00
Weblate 6be003b2f8 Translated using Weblate (French)
Currently translated at 98.3% (1029 of 1046 strings)

Co-authored-by: Thomate <thomas@burdick.fr>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: http://translate.akkoma.dev/projects/akkoma/pleroma-fe/fr/
Translation: Pleroma fe/pleroma-fe
2023-08-04 13:34:26 +00:00
Weblate cc302fb0e2 Translated using Weblate (Japanese (ja_EASY))
Currently translated at 72.3% (757 of 1046 strings)

Translated using Weblate (Japanese (ja_EASY))

Currently translated at 71.9% (753 of 1046 strings)

Co-authored-by: Hikaru Shinagawa <hikali.47041@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: kazari <6c577a54-aac9-482a-955e-745c858445e3@simplelogin.com>
Translate-URL: http://translate.akkoma.dev/projects/akkoma/pleroma-fe/ja_EASY/
Translation: Pleroma fe/pleroma-fe
2023-08-04 13:34:26 +00:00
Weblate c4e768f977 Translated using Weblate (Indonesian)
Currently translated at 67.8% (710 of 1046 strings)

Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: Yonle <yonle@lecturify.net>
Translate-URL: http://translate.akkoma.dev/projects/akkoma/pleroma-fe/id/
Translation: Pleroma fe/pleroma-fe
2023-08-04 13:34:26 +00:00
Weblate d8a7217335 Translated using Weblate (Turkish)
Currently translated at 9.7% (102 of 1046 strings)

Co-authored-by: Hasan Yıldız <hasanyildiz0@yaani.com>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: http://translate.akkoma.dev/projects/akkoma/pleroma-fe/tr/
Translation: Pleroma fe/pleroma-fe
2023-08-04 13:34:26 +00:00
floatingghost 35d10ab9ff Merge pull request 'components: Honour 'prefers reduced motion' setting in many components' (#333) from yukijoou/akkoma-fe:fix-reduced-motion into develop
Reviewed-on: AkkomaGang/akkoma-fe#333
2023-08-04 13:34:23 +00:00
Yuki Joou 43d0a24547 StillImage: Improved animated image detection
This patch makes StillImage's animation detection return early in cases
where we can't detect the mimetype of the image. It also sets the image
as animated in those cases if the user agent wants reduced motion.

As reduced motion is an accessibility setting, I think it's best to use
a "better safe than sorry" approach, it's better to accidentally mark
something as animated that isn't than to have unblocked animations.
2023-08-03 16:34:28 +02:00
Yuki Joou 51ebe643d5 components: Honour 'prefers reduced motion' setting in many components
This helps accessibility for motion-sensitive people such as myself, and
can improve battery life in "battery saving" mode on most devices
2023-08-03 14:45:02 +02:00
Ngô Ngọc Đức Huy 7c14e1a5bd
Add replying info for redraft 2023-08-02 08:40:19 +07:00
David 0da0e2c814 Make favicon next to post username use Still-Image functionality 2023-07-24 01:08:11 -07:00
floatingghost af97dd7484 Merge pull request 'docs: Update Pleroma references to Akkoma' (#318) from norm/pleroma-fe:update-docs into develop
Reviewed-on: AkkomaGang/akkoma-fe#318
2023-07-21 19:44:25 +00:00
floatingghost 28bf597443 Merge pull request '[workaround] fix: emoji picker not scrollable on ios' (#323) from SukinoVerse/akkoma-fe:fix/emoji-picker-not-scrollable-ios into develop
Reviewed-on: AkkomaGang/akkoma-fe#323
2023-07-21 19:43:14 +00:00
floatingghost a249baea8c Merge pull request 'Make emoji reactions use Still-Image functionality' (#326) from Mergan/pleroma-fe:still-image-emoji-reactions into develop
Reviewed-on: AkkomaGang/akkoma-fe#326
2023-07-21 19:42:41 +00:00
floatingghost a4e82f7886 Merge pull request '[feat] Support prefers-reduced-motion disabling auto-play of animated images (#324)' (#325) from Mergan/pleroma-fe:support-prefers-reduced-motion into develop
Reviewed-on: AkkomaGang/akkoma-fe#325
2023-07-21 19:37:43 +00:00
David 32dc55b07c Make emoji reactions use Still-Image functionality 2023-07-20 17:20:54 -07:00
David 91eab22d77 Simplified and fixed and/or oopsie 2023-07-20 17:18:59 -07:00
David e2125c57d6 Turn on by default 2023-07-20 16:26:52 -07:00
David e0a6418e91 Add prefers-reduced-motion support 2023-07-20 16:14:36 -07:00
SukinoVERSΞ 14ed359c33 fix: emoji picker not scrollable on ios 2023-07-11 22:16:37 +07:00
fedward 88586a700f Merge pull request 'merge 2023.05 stable' (#10) from AkkomaGang/akkoma-fe:stable into stable
Reviewed-on: #10
2023-05-30 19:35:24 +00:00
Norm 2d387e2eb4
update more images 2023-05-26 23:02:38 -04:00
Norm 57f70371a9
use better example emoji 2023-05-26 22:59:55 -04:00
Norm 8feffbcdf6
docs: Update Pleroma references to Akkoma 2023-05-26 22:49:29 -04:00
FloatingGhost e530c2b462 Merge branch 'develop' into stable 2023-05-23 14:10:31 +01:00
FloatingGhost 42ffce97d6 Merge remote-tracking branch 'origin/translations' into dm-privacy 2023-05-23 13:47:14 +01:00
FloatingGhost 2f479c670f Add DM settings 2023-05-23 13:46:59 +01:00
Weblate ee6e7026ab Merge branch 'origin/develop' into Weblate. 2023-05-23 11:38:58 +00:00
floatingghost 17c05a5ca2 Merge pull request 'paper theme: more contrast and fix setting tab hover' (#314) from denys/akkoma-fe:cool-paper-theme into develop
Reviewed-on: AkkomaGang/akkoma-fe#314
2023-05-23 11:38:57 +00:00
Weblate 42896c2abf Merge branch 'origin/develop' into Weblate. 2023-05-23 11:38:30 +00:00
floatingghost ecb6be2152 Merge pull request 'fix unfinished post being sent when scrolling' (#312) from denys/akkoma-fe:accidental-mobile-posts into develop
Reviewed-on: AkkomaGang/akkoma-fe#312
2023-05-23 11:38:28 +00:00
Weblate 6c92983af6 Merge branch 'origin/develop' into Weblate. 2023-05-23 11:37:26 +00:00
floatingghost 9e4985e225 Merge pull request 'fix apply theme button without page refresh' (#309) from denys/akkoma-fe:fix-apply-theme into develop
Reviewed-on: AkkomaGang/akkoma-fe#309
2023-05-23 11:37:24 +00:00
Weblate 60ff715aff Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (1042 of 1042 strings)

Co-authored-by: Poesty Li <poesty7450@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: http://translate.akkoma.dev/projects/akkoma/pleroma-fe/zh_Hans/
Translation: Pleroma fe/pleroma-fe
2023-05-21 20:58:06 +00:00
Weblate 04bcf7d804 Translated using Weblate (Polish)
Currently translated at 66.1% (689 of 1042 strings)

Co-authored-by: Jeder <jeder@jeder.pl>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: http://translate.akkoma.dev/projects/akkoma/pleroma-fe/pl/
Translation: Pleroma fe/pleroma-fe
2023-05-21 20:58:06 +00:00
Weblate 5fa305c58c Translated using Weblate (Japanese (ja_EASY))
Currently translated at 72.0% (751 of 1042 strings)

Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: kazari <6c577a54-aac9-482a-955e-745c858445e3@simplelogin.com>
Translate-URL: http://translate.akkoma.dev/projects/akkoma/pleroma-fe/ja_EASY/
Translation: Pleroma fe/pleroma-fe
2023-05-21 20:58:06 +00:00
Weblate a2ceb89d5e Translated using Weblate (Turkish)
Currently translated at 4.0% (42 of 1042 strings)

Added translation using Weblate (Turkish)

Co-authored-by: Hasan Yıldız <hasanyildiz0@yaani.com>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: http://translate.akkoma.dev/projects/akkoma/pleroma-fe/tr/
Translation: Pleroma fe/pleroma-fe
2023-05-21 20:58:06 +00:00
Denys Nykula 6b3b55455d paper theme: more contrast and fix setting tab hover 2023-05-18 23:05:19 +03:00
Denys Nykula 8c6ccc321d fix unfinished post being sent when scrolling 2023-05-15 03:11:07 +03:00
floatingghost 596ae7e377 Merge pull request 'fix dropdown-item-icon and form controls using missing variables' (#307) from denys/akkoma-fe:missing-sass-vars into develop
Reviewed-on: AkkomaGang/akkoma-fe#307
2023-05-08 15:29:58 +00:00
floatingghost 0d22a22a10 Merge pull request 'order bubble after public in sidebar like in other two menus' (#306) from denys/akkoma-fe:consistent-bubble-order into develop
Reviewed-on: AkkomaGang/akkoma-fe#306
2023-05-08 15:28:54 +00:00
Denys Nykula 2a76be56e7 fix apply theme button without page refresh 2023-05-01 20:54:18 +03:00
Denys Nykula 661a98d38d order bubble after public in sidebar like in other two menus 2023-05-01 20:53:29 +03:00
Denys Nykula 94d640f9f1 fix dropdown-item-icon and form controls using missing variables 2023-05-01 20:50:31 +03:00
fedward 5709c9e187 Remove previous private fix now that the visibility issue is fixed upstream 2023-04-17 17:37:06 +00:00
fedward 9e8f6ad3cc Merge pull request 'Merge 2023.04 stable release' (#9) from AkkomaGang/akkoma-fe:stable into stable
Reviewed-on: fedward/pleroma-fe#9
2023-04-17 13:57:13 +00:00
fedward e03a806269 Sync changes with upstream to remove merge conflict. 2023-04-17 13:56:44 +00:00
FloatingGhost 9aa64d82c9 Merge branch 'develop' into stable 2023-04-14 18:10:41 +01:00
Weblate 1f943ce8a5 Merge branch 'origin/develop' into Weblate. 2023-04-14 16:43:42 +00:00
FloatingGhost c540764408 ensure we only fetch reports when we're an admin
Ref #288
2023-04-14 17:43:05 +01:00
Weblate a4dfdc0853 Merge branch 'origin/develop' into Weblate. 2023-04-14 16:30:56 +00:00
floatingghost ddea499a36 Merge pull request 'Fix edits and redrafts being erased by drafts' (#297) from solidsanek/pleroma-fe:drafts-edit-redraft-fix into develop
Reviewed-on: AkkomaGang/akkoma-fe#297
2023-04-14 16:30:55 +00:00
solidsanek db33fe8ee2 Drafts: Fix drafts erasing edits and redrafts 2023-04-09 11:02:13 +02:00
Weblate f1bf22436d Translated using Weblate (Portuguese)
Currently translated at 62.8% (655 of 1042 strings)

Co-authored-by: cel <8cbv6di5@duck.com>
Translate-URL: http://translate.akkoma.dev/projects/akkoma/pleroma-fe/pt/
Translation: Pleroma fe/pleroma-fe
2023-04-05 18:57:45 +00:00
Weblate 459c73ec02 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (1041 of 1041 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 99.9% (1040 of 1041 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 99.9% (1040 of 1041 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 99.9% (1039 of 1040 strings)

Co-authored-by: Poesty Li <poesty7450@gmail.com>
Co-authored-by: SevicheCC <sevicheee@outlook.com>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: http://translate.akkoma.dev/projects/akkoma/pleroma-fe/zh_Hans/
Translation: Pleroma fe/pleroma-fe
2023-04-05 18:57:45 +00:00
Weblate 2acf1e5c59 Translated using Weblate (Ukrainian)
Currently translated at 87.2% (908 of 1041 strings)

Co-authored-by: Denys Nykula <vegan@libre.net.ua>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: http://translate.akkoma.dev/projects/akkoma/pleroma-fe/uk/
Translation: Pleroma fe/pleroma-fe
2023-04-05 18:57:45 +00:00
Weblate 33c4459744 Translated using Weblate (French)
Currently translated at 98.5% (1027 of 1042 strings)

Translated using Weblate (French)

Currently translated at 98.3% (1024 of 1041 strings)

Translated using Weblate (French)

Currently translated at 96.9% (1002 of 1033 strings)

Co-authored-by: Thomate <thomas@burdick.fr>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: http://translate.akkoma.dev/projects/akkoma/pleroma-fe/fr/
Translation: Pleroma fe/pleroma-fe
2023-04-05 18:57:45 +00:00
Weblate b00487e51f Translated using Weblate (Japanese (ja_EASY))
Currently translated at 71.6% (747 of 1042 strings)

Translated using Weblate (Japanese (ja_EASY))

Currently translated at 71.6% (747 of 1042 strings)

Translated using Weblate (Japanese (ja_EASY))

Currently translated at 54.1% (564 of 1042 strings)

Co-authored-by: Hikaru Shinagawa <hikali.47041@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: kazari <6c577a54-aac9-482a-955e-745c858445e3@simplelogin.com>
Translate-URL: http://translate.akkoma.dev/projects/akkoma/pleroma-fe/ja_EASY/
Translation: Pleroma fe/pleroma-fe
2023-04-05 18:57:45 +00:00
Weblate 1e1cab643c Translated using Weblate (Dutch)
Currently translated at 99.7% (1038 of 1041 strings)

Co-authored-by: Fristi <fristi@subcon.town>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: http://translate.akkoma.dev/projects/akkoma/pleroma-fe/nl/
Translation: Pleroma fe/pleroma-fe
2023-04-05 18:57:45 +00:00
Weblate 8d3219a6d2 Translated using Weblate (Indonesian)
Currently translated at 65.4% (676 of 1033 strings)

Translated using Weblate (Indonesian)

Currently translated at 65.4% (676 of 1033 strings)

Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: t1 <taaa@fedora.email>
Translate-URL: http://translate.akkoma.dev/projects/akkoma/pleroma-fe/id/
Translation: Pleroma fe/pleroma-fe
2023-04-05 18:57:45 +00:00
Weblate ec9753758f Translated using Weblate (Spanish)
Currently translated at 90.8% (938 of 1033 strings)

Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: taretka <info@tarteka.net>
Translate-URL: http://translate.akkoma.dev/projects/akkoma/pleroma-fe/es/
Translation: Pleroma fe/pleroma-fe
2023-04-05 18:57:45 +00:00
Weblate 97ff4a7241 Translated using Weblate (German)
Currently translated at 99.5% (1036 of 1041 strings)

Co-authored-by: Johann <johann@qwertqwefsday.eu>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: http://translate.akkoma.dev/projects/akkoma/pleroma-fe/de/
Translation: Pleroma fe/pleroma-fe
2023-04-05 18:57:45 +00:00
FloatingGhost 14cedc5ed1 don't crash if `class` isn't a list 2023-04-01 07:55:47 +01:00
floatingghost 5911777aa2 Merge pull request 'Fix floating point error for poll expiry' (#294) from xarvos/pleroma-fe:fix-poll-expire into develop
Reviewed-on: AkkomaGang/akkoma-fe#294
2023-03-30 09:49:38 +00:00
Ngô Ngọc Đức Huy 47fc082fb9
Fix floating point error for poll expiry
Previous code multiply with 0.001 before multiplication which leads to a
floating point error.  By changing it to division by 1000 after
multiplication this is avoided.
2023-03-24 20:48:02 +07:00
FloatingGhost 7e1b1e79f4 simplify timeline vibility checks 2023-03-18 20:22:47 +00:00
FloatingGhost b92b2f74a4 add timeline visibility setting parsing 2023-03-18 20:01:05 +00:00
FloatingGhost 7361f4e77e Add checks for currentUser on sidebar 2023-03-16 16:41:37 +00:00
FloatingGhost 9f7f9e2798 Remove unused bits and bobs 2023-03-15 23:00:31 +00:00
FloatingGhost 42ab3eada4 Remove links from navs if we can't see the timeline 2023-03-15 22:20:54 +00:00
fedward b0c636d57c Merge pull request 'Merge stable 2023.03' (#8) from AkkomaGang/akkoma-fe:stable into stable
Reviewed-on: fedward/pleroma-fe#8
2023-03-11 18:38:43 +00:00
FloatingGhost 85abc62213 Merge branch 'develop' into stable 2023-03-11 17:27:22 +00:00
flisk 6fdef479d0 add recently used emojis panel to emoji picker (#283)
~~(not intended for merging yet, just submitting this for preliminary review and discussion)~~

this patch adds a tab with recently used emojis to the emoji picker: https://akko.lain.gay/notice/ASoGCtyoiXbYPJjqpk

there's a couple of things i'm ~~still trying to work out~~ not totally happy with and i'd appreciate any feedback on them:

* the recentEmojis getter is called very frequently and has to do a possibly somewhat expensive lookup of emoji objects by their `displayName` each time, which i'm not sure is ideal
* ~~emoji reactions on posts added through the picker are picked up by the recentEmojis module, but clicks on existing emoji reactions are not, because `addReaction` in `react_button.js` only currently receives the replacement and not the full emoji object (if there even is one wherever that method is called from)~~ this works now and does the same stupid full search of all emojis by their name which i guess is less bad because this only happens when you hit a reaction emoji button that already existed

Reviewed-on: AkkomaGang/akkoma-fe#283
Co-authored-by: flisk <akkomadev.mvch71fq@flisk.xyz>
Co-committed-by: flisk <akkomadev.mvch71fq@flisk.xyz>
2023-03-10 19:10:42 +00:00
floatingghost fe08691f05 Merge pull request 'support Misskey's oblong reactions' (#284) from yheuhtozr/pleroma-fe:oblong-reactions into develop
Reviewed-on: AkkomaGang/akkoma-fe#284
2023-03-10 18:57:38 +00:00
floatingghost 6a9764951f Merge pull request 'fix realtime updates in 'following' replies filter' (#285) from flisk/akkoma-fe:fix-realtime-reply-filter into develop
Reviewed-on: AkkomaGang/akkoma-fe#285
2023-03-10 18:56:31 +00:00
floatingghost 0f33b1cd79 Merge pull request 'Post drafting' (#282) from solidsanek/pleroma-fe:drafts into develop
Reviewed-on: AkkomaGang/akkoma-fe#282
2023-03-10 18:55:03 +00:00
flisk 999c38594e fix realtime updates in 'following' replies filter
i'm not sure how this code was supposed to work, but the way it was
written would only add statuses to the timeline if they were in reply to
someone the user is following and erroneously filter out posts that
aren't replies.
2023-02-24 00:23:53 +01:00
Yhëhtozr 626c880038 oblong emoji in status 2023-02-22 10:20:25 +09:00
Yhëhtozr 6d7761c7e5 perhaps more graceful cqw 2023-02-20 23:27:41 +09:00
Yhëhtozr 996ce3dde3 support oblong reactions 2023-02-20 23:18:04 +09:00
solidsanek 2c007f06e3 Post: remove debug logs 2023-02-19 18:58:53 +01:00
solidsanek 00704bd88c Post: Add drafting feature 2023-02-17 13:56:01 +01:00
fedward 5a13fcc9cd Merge pull request 'Import local-config change to default new post text' (#7) from local-config into stable
Reviewed-on: fedward/pleroma-fe#7
2023-02-12 21:56:10 +00:00
fedward edab201b6f Change default text for new posts 2023-02-12 21:44:39 +00:00
103 changed files with 4274 additions and 1023 deletions

View File

@ -1,3 +1,4 @@
platform: linux/amd64
pipeline:
lint:
when:

View File

@ -1,4 +1,4 @@
# Akkoma-FE
# Akkoma-FE
![English OK](https://img.shields.io/badge/English-OK-blueviolet) ![日本語OK](https://img.shields.io/badge/%E6%97%A5%E6%9C%AC%E8%AA%9E-OK-blueviolet)
@ -8,7 +8,7 @@ This is a fork of Akkoma-FE from the Pleroma project, with support for new Akkom
# For Translators
The [Weblate UI](https://translate.akkoma.dev/projects/akkoma/pleroma-fe/) is recommended for adding or modifying translations for Akkoma-FE.
The [Weblate UI](https://translate.akkoma.dev/projects/akkoma/pleroma-fe/) is recommended for adding or modifying translations for Akkoma-FE.
Alternatively, edit/create `src/i18n/$LANGUAGE_CODE.json` (where `$LANGUAGE_CODE` is the [ISO 639-1 code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) for your language), then add your language to [src/i18n/messages.js](https://akkoma.dev/AkkomaGang/pleroma-fe/src/branch/develop/src/i18n/messages.js) if it doesn't already exist there.
@ -22,7 +22,7 @@ To use Akkoma-FE in Akkoma, use the [frontend](https://docs.akkoma.dev/stable/ad
``` bash
# install dependencies
npm install -g yarn
corepack enable
yarn
# serve with hot reload at localhost:8080
@ -37,7 +37,7 @@ npm run unit
# For Contributors:
You can create file `/config/local.json` (see [example](https://git.pleroma.social/pleroma/pleroma-fe/blob/develop/config/local.example.json)) to enable some convenience dev options:
You can create file `/config/local.json` (see [example](https://akkoma.dev/AkkomaGang/akkoma-fe/src/branch/develop/config/local.example.json)) to enable some convenience dev options:
* `target`: makes local dev server redirect to some existing instance's BE instead of local BE, useful for testing things in near-production environment and searching for real-life use-cases.
* `staticConfigPreference`: makes FE's `/static/config.json` take preference of BE-served `/api/statusnet/config.json`. Only works in dev mode.
@ -52,4 +52,4 @@ Edit config.json for configuration.
### Login methods
```loginMethod``` can be set to either ```password``` (the default) or ```token```, which will use the full oauth redirection flow, which is useful for SSO situations.
```loginMethod``` can be set to either ```password``` (the default) or ```token```, which will use the full oauth redirection flow, which is useful for SSO situations.

View File

@ -1,4 +1,4 @@
{
"target": "https://pleroma.soykaf.com/",
"target": "https://otp.akkoma.dev/",
"staticConfigPreference": false
}

View File

@ -1,15 +1,15 @@
# Pleroma-FE configuration and customization for instance administrators
# Akkoma-FE configuration and customization for instance administrators
* *For user configuration, see [Pleroma-FE user guide](../user_guide)*
* *For user configuration, see [Akkoma-FE user guide](../user_guide)*
* *For local development server configuration, see [Hacking, tweaking, contributing](HACKING.md)*
## Where configuration is stored
PleromaFE gets its configuration from several sources, in order of preference (the one above overrides ones below it)
Akkoma-FE gets its configuration from several sources, in order of preference (the one above overrides ones below it)
1. `/api/statusnet/config.json` - this is generated on Backend and contains multiple things including instance name, char limit etc. It also contains FE/Client-specific data, PleromaFE uses `pleromafe` field of it. For more info on changing config on BE, look [here](https://docs.akkoma.dev/stable/configuration/cheatsheet.md#frontend_configurations)
2. `/static/config.json` - this is a static FE-provided file, containing only FE specific configuration. This file is completely optional and could be removed but is useful as a fallback if some configuration JSON property isn't present in BE-provided config. It's also a reference point to check what default configuration are and what JSON properties even exist. In local dev mode it could be used to override BE configuration, more about that in HACKING.md. File is located [here](https://akkoma.dev/AkkomaGang/pleroma-fe/src/branch/develop/static/config.json).
3. Built-in defaults. Those are hard-coded defaults that are used when `/static/config.json` is not available and BE-provided configuration JSON is missing some JSON properties. ( [Code](https://akkoma.dev/AkkomaGang/pleroma-fe/src/branch/develop/src/modules/instance.js) )
1. `/api/statusnet/config.json` - this is generated on Backend and contains multiple things including instance name, char limit etc. It also contains FE/Client-specific data, Akkoma-FE uses `pleromafe` field of it. For more info on changing config on BE, look [here](https://docs.akkoma.dev/stable/configuration/cheatsheet.md#frontend_configurations)
2. `/static/config.json` - this is a static FE-provided file, containing only FE specific configuration. This file is completely optional and could be removed but is useful as a fallback if some configuration JSON property isn't present in BE-provided config. It's also a reference point to check what default configuration are and what JSON properties even exist. In local dev mode it could be used to override BE configuration, more about that in HACKING.md. File is located [here](https://akkoma.dev/AkkomaGang/akkoma-fe/src/branch/develop/static/config.json).
3. Built-in defaults. Those are hard-coded defaults that are used when `/static/config.json` is not available and BE-provided configuration JSON is missing some JSON properties. ( [Code](https://akkoma.dev/AkkomaGang/akkoma-fe/src/branch/develop/src/modules/instance.js) )
## Instance-defaults
@ -59,7 +59,7 @@ Instance `logo`, could be any image, including svg. By default it assumes logo u
`logoMargin` allows you to adjust vertical margins between logo boundary and navbar borders. The idea is that to have logo's image without any extra margins and instead adjust them to your need in layout.
### `minimalScopesMode`
Limit scope selection to *Direct*, *User default* and *Scope of post replying to*. This also makes it impossible to reply to a DM with a non-DM post from PleromaFE.
Limit scope selection to *Direct*, *User default* and *Scope of post replying to*. This also makes it impossible to reply to a DM with a non-DM post from Akkoma-FE.
### `nsfwCensorImage`
Use custom image for NSFW'd images
@ -77,7 +77,7 @@ Change alignment of sidebar and panels to the right. Defaults to `false`.
Show panel showcasing instance features/settings to logged-out visitors
### `showInstanceSpecificPanel`
This allows you to include arbitrary HTML content in a panel below navigation menu. PleromaFE looks for an html page `instance/panel.html`, by default it's not provided in FE, but BE bundles some [default one](https://git.pleroma.social/pleroma/pleroma/blob/develop/priv/static/instance/panel.html). De-facto instance-defaults, since user can hide instance-specific panel.
This allows you to include arbitrary HTML content in a panel below navigation menu. Akkoma-FE looks for an html page `instance/panel.html`, by default it's not provided in FE, but BE bundles some [default one](https://git.pleroma.social/pleroma/pleroma/blob/develop/priv/static/instance/panel.html). De-facto instance-defaults, since user can hide instance-specific panel.
### `subjectLineBehavior`
How to handle subject line (CW) when replying to a post.

View File

@ -1,8 +1,8 @@
# Hacking, tweaking, contributing
## What PleromaFE even is, how it works
## What Akkoma-FE even is, how it works
PleromaFE is an SPA (Single-Page Application) backed by [Vue](https://vuejs.org/) framework. It means that it's just a nearly-empty HTML page with bunch of JavaScript that actually generates and controls DOM (i.e. html elements) in Runtime. Currently, there's no way around it - you have to have Javascript enabled in the browser to make it work, there is a theoretical possibility to generate some HTML server-side but it's not implemented yet.
Akkoma-FE is an SPA (Single-Page Application) backed by [Vue](https://vuejs.org/) framework. It means that it's just a nearly-empty HTML page with bunch of JavaScript that actually generates and controls DOM (i.e. html elements) in Runtime. Currently, there's no way around it - you have to have Javascript enabled in the browser to make it work, there is a theoretical possibility to generate some HTML server-side but it's not implemented yet.
You can serve static html page and everything from any HTTP(S) server but currently it will try to access /api/ path at same domain it's running on, meaning that as of right now you cannot put it on one domain and access the other without proxying requests.
@ -67,19 +67,19 @@ server {
### API, Data, Operations
In 99% cases PleromaFE uses [MastoAPI](https://docs.joinmastodon.org/api/) with [Pleroma Extensions](https://docs.akkoma.dev/stable/differences_in_mastoapi_responses.md) to fetch the data. The rest is either QvitterAPI leftovers or pleroma-exclusive APIs. QvitterAPI doesn't exactly have documentation and uses different JSON structure and sometimes different parameters and workflows, [this](https://twitter-api.readthedocs.io/en/latest/index.html) could be a good reference though. Some pleroma-exclusive API may still be using QvitterAPI JSON structure.
In 99% cases Akkoma-FE uses [MastoAPI](https://docs.joinmastodon.org/api/) with [Pleroma Extensions](https://docs.akkoma.dev/stable/differences_in_mastoapi_responses.md) to fetch the data. The rest is either QvitterAPI leftovers or pleroma-exclusive APIs. QvitterAPI doesn't exactly have documentation and uses different JSON structure and sometimes different parameters and workflows, [this](https://twitter-api.readthedocs.io/en/latest/index.html) could be a good reference though. Some pleroma-exclusive API may still be using QvitterAPI JSON structure.
PleromaFE supports both formats by transforming them into internal format which is basically QvitterAPI one with some additions and renaming. All data is passed trough [Entity Normalizer](https://git.pleroma.social/pleroma/pleroma-fe/-/blob/develop/src/services/entity_normalizer/entity_normalizer.service.js) which can serve as a reference of API and what's actually used, it's also a host for all the hacks and data transformation.
Akkoma-FE supports both formats by transforming them into internal format which is basically QvitterAPI one with some additions and renaming. All data is passed trough [Entity Normalizer](https://akkoma.dev/AkkomaGang/akkoma-fe/src/branch/develop/src/services/entity_normalizer/entity_normalizer.service.js) which can serve as a reference of API and what's actually used, it's also a host for all the hacks and data transformation.
For most part, PleromaFE tries to store all the info it can get in global vuex store - every user and post are passed trough updating mechanism where data is either added or merged with existing data, reactively updating the information throughout UI, so if in newest request user's post counter increased, it will be instantly updated in open user profile cards. This is also used to find users, posts and sometimes to build timelines and/or request parameters.
For most part, Akkoma-FE tries to store all the info it can get in global vuex store - every user and post are passed trough updating mechanism where data is either added or merged with existing data, reactively updating the information throughout UI, so if in newest request user's post counter increased, it will be instantly updated in open user profile cards. This is also used to find users, posts and sometimes to build timelines and/or request parameters.
PleromaFE also tries to persist this store, however only stable data is stored, such as user authentication and preferences, user highlights. Persistence is performed by saving and loading chunk of vuex store in browser's LocalStorage/IndexedDB.
Akkoma-FE also tries to persist this store, however only stable data is stored, such as user authentication and preferences, user highlights. Persistence is performed by saving and loading chunk of vuex store in browser's LocalStorage/IndexedDB.
TODO: Refactor API code and document it here
### Themes
PleromaFE uses custom theme "framework" which is pretty much just a style tag rendered by vue which only contains CSS3 variables. Every color used in UI should be derived from theme. Theme is stored in a JSON object containing color, opacity, shadow and font information, with most of it being optional.
Akkoma-FE uses custom theme "framework" which is pretty much just a style tag rendered by vue which only contains CSS3 variables. Every color used in UI should be derived from theme. Theme is stored in a JSON object containing color, opacity, shadow and font information, with most of it being optional.
The most basic theme can consist of 4 to 8 "basic colors", which is also what previous version of themes allowed, with all other colors being derived from those basic colors, i.e. "light background" will be "background" color lightened/darkened, "panel header" will be same as "foreground". The idea is that you can specify just basic color palette and everything else will be generated automatically, but if you really need to tweak some specific color - you can.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 491 B

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 362.83 362.83">
<defs>
<style>
.cls-1, .cls-2 {
fill: #fff;
}
.cls-2 {
stroke: #fff;
stroke-miterlimit: 10;
}
</style>
</defs>
<g id="Layer_6" data-name="Layer 6">
<path class="cls-1" d="M115.2,131.89c6.26-6.54,20.19-20.63,42.39-26.14,15.79-3.92,28.51-1.28,33.51,0,83.72,21.41,116.03,201.78,77.79,226.32-10.28,6.6-26.86,2.7-36.77-3.3-32.63-19.78-29.3-72.87-44.44-73.73-5.11-.29-7.15,5.8-20.91,24.94-19.63,27.3-31.49,43.44-49.21,50.87-2.53,1.06-26.91,12.07-41.84,1.23-38.55-28-2.96-155.84,39.49-200.18Zm56.31,10.45c-27.39-.52-46.38,38.21-37.98,54.55,10.09,19.62,65.5,18.26,74.77-3.3,7.21-16.78-11.38-50.77-36.79-51.24Z"/>
</g>
<g id="Layer_4" data-name="Layer 4">
<path class="cls-1" d="M68.93,86.51c-6.55,27.74,252.45,113.97,267.56,89.66,9.24-14.87-64.9-83.62-163.53-97.57-39.06-5.52-100.95-5.14-104.03,7.91Z"/>
</g>
<g id="Layer_5" data-name="Layer 5">
<path class="cls-2" d="M138.96,93.76c.41-5.25,6.51-5.74,28.85-19.42,26.97-16.51,28.85-22.38,56.86-40.83,30.07-19.81,48.46-31.94,54.82-26.61,9.72,8.15-25.18,43.33-21.31,99.35,.87,12.61,3.12,17.79-.86,23.01-18.25,23.95-120.07-13.68-118.35-35.5Z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 530 B

View File

@ -1,92 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="svg4485"
width="512"
height="512"
viewBox="0 0 512 512"
sodipodi:docname="pleroma_logo_vector_nobg.svg"
inkscape:version="0.92.1 r15371">
<metadata
id="metadata4491">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs4489" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1680"
inkscape:window-height="997"
id="namedview4487"
showgrid="false"
inkscape:zoom="0.70710678"
inkscape:cx="26.131594"
inkscape:cy="235.37499"
inkscape:window-x="1912"
inkscape:window-y="22"
inkscape:window-maximized="1"
inkscape:current-layer="svg4485" />
<g
id="g4612">
<path
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0"
id="path4495"
d="M 235,89 V 423 H 152 V 115 l 26,-26 z"
style="opacity:1;fill:#fba457;fill-opacity:1;stroke:#009bff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.17587938" />
<circle
r="26"
cx="178"
cy="115"
id="path4497"
style="opacity:1;fill:#fba457;fill-opacity:1;stroke:#009bff;stroke-width:0;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.17587938" />
<circle
r="26"
cx="335"
cy="230"
id="path4497-0"
style="opacity:1;fill:#fba457;fill-opacity:1;stroke:#009bff;stroke-width:0;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.17587938" />
<path
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0"
id="path4516"
d="M 277,256 V 89 l 84,3e-6 L 361.00002,230 335,256 Z"
style="fill:#fba457;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<circle
r="26"
cx="335"
cy="397"
id="path4497-0-6"
style="opacity:1;fill:#fba457;fill-opacity:1;stroke:#009bff;stroke-width:0;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.17587938" />
<path
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0"
id="path4516-5"
d="m 277,423 v -83 h 84 l 2e-5,57 L 335,423 Z"
style="opacity:1;fill:#fba457;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.3 KiB

View File

@ -1,8 +1,8 @@
# Introduction to Pleroma-FE
## What is Pleroma-FE?
# Introduction to Akkoma-FE
## What is Akkoma-FE?
Pleroma-FE is the default user-facing frontend for Pleroma. It's user interface is modeled after Qvitter which is modeled after an older Twitter design. It provides a simple 2-column interface for microblogging. While being simple by default it also provides many powerful customization options.
Akkoma-FE is the default user-facing frontend for Pleroma. It's user interface is modeled after Qvitter which is modeled after an older Twitter design. It provides a simple 2-column interface for microblogging. While being simple by default it also provides many powerful customization options.
## How can I use it?
If your instance uses Pleroma-FE, you can acces it by going to your instance (e.g. <https://pleroma.soykaf.com>). You can read more about it's basic functionality in the [Pleroma-FE User Guide](./user_guide/). We also have [a guide for administrators](./CONFIGURATION.md) and for [hackers/contributors](./HACKING.md).
If your instance uses Akkoma-FE, you can acces it by going to your instance (e.g. <https://pleroma.soykaf.com>). You can read more about it's basic functionality in the [Akkoma-FE User Guide](./user_guide/). We also have [a guide for administrators](./CONFIGURATION.md) and for [hackers/contributors](./HACKING.md).

View File

@ -1,13 +1,13 @@
# Adding stickers
Pleroma-fe supports stickers, which are essentially little images stored server-side
Akkoma-FE supports stickers, which are essentially little images stored server-side
which can be selected by a user to automatically attach them to a post.
There's no explicit setting for these, they just rely on the existence of certain files.
## Initialising the sticker config file
You're probably serving pleroma-fe from your instance's `instance/static/` directory -
You're probably serving Akkoma-FE from your instance's `instance/static/` directory -
this directy can also override files served at a given path.
The first thing we need to do is set up our `stickers.json` file. At `instance/static/static/stickers.json`,
@ -50,4 +50,4 @@ The `tabIcon` will appear on the sticker picker itself as a representative of th
You can add as many stickers as you like. They should all be in the same directory as your `pack.json`.
Now you should find that there's a sticky note icon on the emoji picker on pleroma-fe that allows you to attach stickers.
Now you should find that there's a sticky note icon on the emoji picker on Akkoma-FE that allows you to attach stickers.

View File

@ -8,13 +8,13 @@
>
> --Catbag
Pleroma-FE is the default user-facing frontend for Pleroma. If your instance uses Pleroma-FE, you can access it by going to your instance (e.g. <https://pleroma.soykaf.com>). After logging in you will have two columns in front of you. Here we're going to keep it to the default behaviour, but some instances swap the left and right columns. If you're on such an instance what we refer to as the left column will be on your right and vice versa.
Akkoma-FE is the default user-facing frontend for Pleroma. If your instance uses Akkoma-FE, you can access it by going to your instance (e.g. <https://pleroma.soykaf.com>). After logging in you will have two columns in front of you. Here we're going to keep it to the default behaviour, but some instances swap the left and right columns. If you're on such an instance what we refer to as the left column will be on your right and vice versa.
### Left column
- first block: This section is dedicated to [posting](posting_reading_basic_functions.md)
- second block: Here you can switch between the different views for the right column.
- Optional third block: This is the Instance panel that can be activated, but is deactivated by default. It's fully customisable by instance admins and by default has links to the Pleroma-FE and Mastodon-FE.
- Optional third block: This is the Instance panel that can be activated, but is deactivated by default. It's fully customisable by instance admins and by default has links to the Akkoma-FE and Mastodon-FE.
- fourth block: This is the Notifications block, here you will get notified whenever somebody mentions you, follows you, repeats or favorites one of your statuses
### Right column

View File

@ -15,13 +15,13 @@ Posts will contain the text you are posting, but some content will be modified:
Let's clear up some basic stuff. When you post something it's called a **post** or it could be called a **status** or even a **toot** or a **prööt** depending on whom you ask. Post has body/content but it also has some other stuff in it - from attachments, visibility scope, subject line...
**Emoji** are small images embedded in text, there are two major types of emoji: [unicode emoji](https://en.wikipedia.org/wiki/Emoji) and custom emoji. While unicode emoji are universal and standardized, they can appear differently depending on where you are using them or may not appear at all on older systems. Custom emoji are a more *fun* kind - instance administrator can define many images as *custom emoji* for their users. This works very simple - custom emoji is defined by its *shortcode* and an image, so that any shortcode enclosed in colons get replaced with image if such shortcode exist.
Let's say there's a `:pleroma:` emoji defined on an instance. That means
> First time using :pleroma: pleroma!
Let's say there's a `:akkoma:` emoji defined on an instance. That means
> First time using :akkoma: akkoma!
will become
> First time using ![pleroma](../assets/example_emoji.png) pleroma!
will become
> First time using ![akkoma](../assets/example_emoji.png) akkoma!
Note that you can only use emoji defined on your instance, you cannot "copy" someone else's emoji, and will have to ask your administrator to copy emoji from other instance to yours.
Note that you can only use emoji defined on your instance, you cannot "copy" someone else's emoji, and will have to ask your administrator to copy emoji from other instance to yours.
Lastly, there's two convenience options for emoji: an emoji picker (smiley face to the right of "submit" button) and autocomplete suggestions - when you start typing :shortcode: it will automatically try to suggest you emoji and complete the shortcode for you if you select one. If emoji doesn't show up in suggestions nor in emoji picker it means there's no such emoji on your instance, if shortcode doesn't match any defined emoji it will appear as text.
**Attachments** are fairly simple - you can attach any file to a post as long as the file is within maximum size limits. If you're uploading explicit material you can mark all of your attachments as sensitive (or add the `#nsfw` tag) - it will hide the images and videos behind a warning so that it won't be displayed instantly.
@ -42,7 +42,7 @@ A few things to consider about the security and usage of these scopes:
- Changing scopes during a thread or adding people to a direct message will not retroactively make them see the whole conversation. If you add someone to a direct message conversation, they will not see the post that happened before they were mentioned.
* **Reply-to** if you are replying to someone, your post will also contain a note that your post is referring to the post you're replying to. Person you're replying to will receive a notification *even* if you remove them from mentioned people. You won't receive notifications when replying to your own posts, but it's useful to reply to your own posts to provide people some context if it's a follow-up to a previous post. There's a small "Reply to ..." label under post author's name which you can hover on to see what post it's referring to.
Sometimes you may encounter posts that seem different than what they are supposed to. For example, you might see a direct message without any mentions in the text. This can happen because internally, the Fediverse has a different addressing mechanism similar to email, with `to` and `cc` fields. While these are not directly accessible in PleromaFE, other software in the Fediverse might generate those posts. Do not worry in these cases, these are normal and not a bug.
Sometimes you may encounter posts that seem different than what they are supposed to. For example, you might see a direct message without any mentions in the text. This can happen because internally, the Fediverse has a different addressing mechanism similar to email, with `to` and `cc` fields. While these are not directly accessible in Akkoma-FE, other software in the Fediverse might generate those posts. Do not worry in these cases, these are normal and not a bug.
## Rich text
@ -51,7 +51,7 @@ By default new posts you make are plaintext, meaning you can't make text **bold*
Here is a small example of some text in markdown.
```
This is an example of markdown text using **bold** and *cursive* text.
This is an example of markdown text using **bold** and *cursive* text.
To get a newline we add two spaces at the end of the previous line.
Let's also add a list
@ -67,7 +67,7 @@ If you set the input-method to Markdown, and post this, it will look something l
## Misskey markdown
The akkoma version of pleroma-fe includes support for writing and rendering
Akkoma-FE includes support for writing and rendering
misskey markdown (MFM). To write this you will need to select "MFM" from
the content type dropdown (if supported), and then you can format text
[in MFM](https://akkoma.dev/sfr/marked-mfm/src/branch/master/docs/syntax.md).

View File

@ -83,7 +83,7 @@ Here you can change your password, revoke access tokens, configure 2-factor auth
## Theme
Here you can change the look and feel of Pleroma-FE. You can choose from several instance-provided presets and you can load one from file and save current theme to file. Before you apply new theme you can see what it will look like approximately in preview section.
Here you can change the look and feel of Akkoma-FE. You can choose from several instance-provided presets and you can load one from file and save current theme to file. Before you apply new theme you can see what it will look like approximately in preview section.
The themes engine was made to be easy to use while giving an option for powerful in-depth customization - you can just tweak colors on "Common" tab and leave everything else as is.

View File

@ -4,7 +4,7 @@ When you see someone, you can click on their user picture to view their profile,
**Following** is self-explanatory, it adds them to your Home Timeline, lists you as a follower and gives you access to follower-only posts if they have any.
**Muting** collapses posts and notifications made by them, giving you an option to see the post if you're curious. Clients other than PleromaFE may completely remove their posts.
**Muting** collapses posts and notifications made by them, giving you an option to see the post if you're curious. Clients other than Akkoma-FE may completely remove their posts.
**Blocking** a user removes them from your timeline and notifications and prevents them from following you (automatically unfollows them from you).

View File

@ -1,11 +1,11 @@
site_name: Pleroma-FE Documentation
site_name: Akkoma-FE Documentation
theme:
favicon: 'images/pleroma_logo_vector_bg_32.png'
favicon: 'images/akkoma_logo_vector_bg_32.png'
name: 'material'
custom_dir: 'theme'
# Disable google fonts
font: false
logo: 'images/pleroma_logo_vector_nobg.svg'
logo: 'images/akkoma_logo_vector_nobg.svg'
features:
- tabs
palette:
@ -14,8 +14,8 @@ theme:
extra_css:
- css/extra.css
repo_name: 'AkkomaGang/pleroma-fe'
repo_url: 'https://akkoma.dev/AkkomaGang/pleroma-fe'
repo_name: 'AkkomaGang/akkoma-fe'
repo_url: 'https://akkoma.dev/AkkomaGang/akkoma-fe'
extra:
repo_icon: gitea

View File

@ -38,11 +38,11 @@
{% endif %}
{% if page and page.url.startswith('backend') %}
{% set repo_url = "https://git.pleroma.social/pleroma/pleroma" %}
{% set repo_name = "pleroma/pleroma" %}
{% set repo_url = "https://akkoma.dev/AkkomaGang/akkoma" %}
{% set repo_name = "AkkomaGang/akkoma" %}
{% elif page and page.url.startswith('frontend') %}
{% set repo_url = "https://git.pleroma.social/pleroma/pleroma-fe" %}
{% set repo_name = "pleroma/pleroma-fe" %}
{% set repo_url = "https://akkoma.dev/AkkomaGang/akkoma-fe" %}
{% set repo_name = "AkkomaGang/akkoma-fe" %}
{% else %}
{% set repo_url = config.repo_url %}
{% set repo_name = config.repo_name %}

View File

@ -4,8 +4,6 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,user-scalable=no">
<title>Akkoma</title>
<link rel="stylesheet" href="/static/font/css/fontello.css">
<link rel="stylesheet" href="/static/font/css/animation.css">
<link rel="stylesheet" href="/static/font/tiresias.css">
<link rel="stylesheet" href="/static/font/css/lato.css">
<link rel="stylesheet" href="/static/mfm.css">

View File

@ -1,6 +1,6 @@
{
"name": "pleroma_fe",
"version": "3.5.0",
"version": "3.11.0",
"description": "A frontend for Akkoma instances",
"author": "Roger Braun <roger@rogerbraun.net>",
"private": true,

View File

@ -64,6 +64,11 @@ export default {
'-' + this.layoutType
]
},
pageBackground () {
return this.mergedConfig.displayPageBackgrounds
? this.$store.state.users.displayBackground
: null
},
currentUser () { return this.$store.state.users.currentUser },
userBackground () { return this.currentUser.background_image },
instanceBackground () {
@ -71,7 +76,7 @@ export default {
? null
: this.$store.state.instance.background
},
background () { return this.userBackground || this.instanceBackground },
background () { return this.pageBackground || this.userBackground || this.instanceBackground },
bgStyle () {
if (this.background) {
return {

View File

@ -8,7 +8,7 @@
}
html {
font-size: 14px;
font-size: 0.875rem;
// overflow-x: clip causes my browser's tab to crash with SIGILL lul
}
@ -469,7 +469,7 @@ textarea,
color: $fallback--lightText;
color: var(--inputText, $fallback--lightText);
font-family: sans-serif;
font-family: var(--inputFont, sans-serif);
font-family: var(--interfaceFont, sans-serif);
font-size: 1em;
margin: 0;
box-sizing: border-box;

View File

@ -322,6 +322,9 @@ const getNodeInfo = async ({ store }) => {
: federation.enabled
})
store.dispatch('setInstanceOption', { name: 'publicTimelineVisibility', value: metadata.publicTimelineVisibility })
store.dispatch('setInstanceOption', { name: 'federatedTimelineAvailable', value: metadata.federatedTimelineAvailable })
const accountActivationRequired = metadata.accountActivationRequired
store.dispatch('setInstanceOption', { name: 'accountActivationRequired', value: accountActivationRequired })
@ -396,9 +399,6 @@ const afterStoreSetup = async ({ store, i18n }) => {
])
// Start fetching things that don't need to block the UI
store.dispatch('fetchMutes')
store.dispatch('startFetchingAnnouncements')
store.dispatch('startFetchingReports')
getTOS({ store })
getStickers({ store })

View File

@ -37,7 +37,7 @@
white-space: pre-line;
word-break: break-word;
text-overflow: ellipsis;
overflow: scroll;
overflow: auto;
}
&.-static {

View File

@ -1,6 +1,11 @@
import SearchBar from 'components/search_bar/search_bar.vue'
import ConfirmModal from '../confirm_modal/confirm_modal.vue'
import { library } from '@fortawesome/fontawesome-svg-core'
import {
publicTimelineVisible,
federatedTimelineVisible,
bubbleTimelineVisible,
} from '../../lib/timeline_visibility'
import {
faSignInAlt,
faSignOutAlt,
@ -19,6 +24,7 @@ import {
faInfoCircle,
faUserTie
} from '@fortawesome/free-solid-svg-icons'
import { mapState } from 'vuex'
library.add(
faSignInAlt,
@ -103,7 +109,12 @@ export default {
},
showBubbleTimeline () {
return this.$store.state.instance.localBubbleInstances.length > 0
}
},
...mapState({
publicTimelineVisible,
federatedTimelineVisible,
bubbleTimelineVisible,
})
},
methods: {
scrollToTop () {

View File

@ -46,6 +46,7 @@
<router-link
:to="{ name: 'public-timeline' }"
class="nav-icon"
v-if="publicTimelineVisible"
>
<FAIcon
fixed-width
@ -55,7 +56,7 @@
/>
</router-link>
<router-link
v-if="currentUser && showBubbleTimeline"
v-if="bubbleTimelineVisible"
:to="{ name: 'bubble-timeline' }"
class="nav-icon"
>
@ -67,9 +68,9 @@
/>
</router-link>
<router-link
v-if="showPublicExternalTimeline"
:to="{ name: 'public-external-timeline' }"
class="nav-icon"
v-if="federatedTimelineVisible"
>
<FAIcon
fixed-width

View File

@ -7,7 +7,7 @@ import {
faStickyNote,
faSmileBeam
} from '@fortawesome/free-solid-svg-icons'
import { trim, escapeRegExp, startCase } from 'lodash'
import { trim, escapeRegExp, startCase, debounce } from 'lodash'
library.add(
faBoxOpen,
@ -42,6 +42,9 @@ const EmojiPicker = {
EmojiGrid
},
methods: {
debouncedSearch: debounce(function (e) {
this.keyword = e.target.value
}, 500),
onStickerUploaded (e) {
this.$emit('sticker-uploaded', e)
},
@ -51,6 +54,7 @@ const EmojiPicker = {
onEmoji (emoji) {
const value = emoji.imageUrl ? `:${emoji.displayText}:` : emoji.replacement
this.$emit('emoji', { insertion: value, keepOpen: this.keepOpen })
this.$store.commit('emojiUsed', emoji)
},
onWheel (e) {
e.preventDefault()
@ -84,18 +88,8 @@ const EmojiPicker = {
activeGroupView () {
return this.showingStickers ? '' : this.activeGroup
},
stickersAvailable () {
if (this.$store.state.instance.stickers) {
return this.$store.state.instance.stickers.length > 0
}
return 0
},
filteredEmoji () {
return this.filterByKeyword(
this.$store.state.instance.customEmoji || []
)
},
emojis () {
const recentEmojis = this.$store.getters.recentEmojis
const standardEmojis = this.$store.state.instance.emoji || []
const customEmojis = this.sortedEmoji
const emojiPacks = []
@ -108,6 +102,15 @@ const EmojiPicker = {
})
})
return [
{
id: 'recent',
text: this.$t('emoji.recent'),
first: {
imageUrl: '',
replacement: '🕒',
},
emojis: this.filterByKeyword(recentEmojis)
},
{
id: 'standard',
text: this.$t('emoji.unicode'),

View File

@ -44,11 +44,10 @@
>
<div class="emoji-search">
<input
v-model="keyword"
type="text"
class="form-control"
:placeholder="$t('emoji.search_emoji')"
@input="$event.target.composing = false"
@input="debouncedSearch"
>
</div>
<EmojiGrid

View File

@ -1,13 +1,20 @@
import UserAvatar from '../user_avatar/user_avatar.vue'
import UserListPopover from '../user_list_popover/user_list_popover.vue'
import StillImage from '../still-image/still-image.vue'
const EMOJI_REACTION_COUNT_CUTOFF = 12
const findEmojiByReplacement = (state, replacement) => {
const allEmojis = state.instance.emoji.concat(state.instance.customEmoji)
return allEmojis.find(emoji => emoji.replacement === replacement)
}
const EmojiReactions = {
name: 'EmojiReactions',
components: {
UserAvatar,
UserListPopover
UserListPopover,
StillImage
},
props: ['status'],
data: () => ({
@ -54,6 +61,8 @@ const EmojiReactions = {
},
reactWith (emoji) {
this.$store.dispatch('reactWithEmoji', { id: this.status.id, emoji })
const emojiObject = findEmojiByReplacement(this.$store.state, emoji)
this.$store.commit('emojiUsed', emojiObject)
},
unreact (emoji) {
this.$store.dispatch('unreactWithEmoji', { id: this.status.id, emoji })

View File

@ -14,13 +14,13 @@
<span
v-if="reaction.url !== null"
>
<img
<StillImage
:src="reaction.url"
:title="reaction.name"
:alt="reaction.name"
class="reaction-emoji"
width="2.55em"
height="2.55em"
>
/>
{{ reaction.count }}
</span>
<span v-else>
@ -50,6 +50,7 @@
display: flex;
margin-top: 0.25em;
flex-wrap: wrap;
container-type: inline-size;
}
.unicode-emoji {
@ -65,7 +66,8 @@
justify-content: center;
box-sizing: border-box;
.reaction-emoji {
width: 2.55em !important;
width: auto;
max-width: 96cqw;
height: 2.55em !important;
margin-right: 0.25em;
}

View File

@ -15,6 +15,7 @@ import {
faBookmark as faBookmarkReg,
faFlag
} from '@fortawesome/free-regular-svg-icons'
import { mapState } from 'vuex'
library.add(
faEllipsisH,
@ -135,18 +136,26 @@ const ExtraButtons = {
},
doRedraftStatus () {
this.$store.dispatch('fetchStatusSource', { id: this.status.id })
.then(data => this.$store.dispatch('openPostStatusModal', {
isRedraft: true,
statusId: this.status.id,
subject: data.spoiler_text,
statusText: data.text,
statusIsSensitive: this.status.nsfw,
statusPoll: this.status.poll,
statusFiles: [...this.status.attachments],
statusScope: this.status.visibility,
statusLanguage: this.status.language,
statusContentType: data.content_type
}))
.then(data => {
let repliedUserId = this.status.in_reply_to_user_id;
let repliedUser = this.status.attentions.filter(user =>
user.id === repliedUserId);
this.$store.dispatch('openPostStatusModal', {
isRedraft: true,
attentions: this.status.attentions,
statusId: this.status.id,
subject: data.spoiler_text,
statusText: data.text,
statusIsSensitive: this.status.nsfw,
statusPoll: this.status.poll,
statusFiles: [...this.status.attachments],
statusScope: this.status.visibility,
statusLanguage: this.status.language,
statusContentType: data.content_type,
replyTo: this.status.in_reply_to_status_id,
repliedUser: repliedUser
})
})
this.doDeleteStatus()
},
showRedraftStatusConfirmDialog () {
@ -191,7 +200,7 @@ const ExtraButtons = {
isEdited () {
return this.status.edited_at !== null
},
editingAvailable () { return this.$store.state.instance.editingAvailable }
editingAvailable () { return this.$store.state.instance.editingAvailable },
}
}

View File

@ -55,6 +55,9 @@
.interactive {
.svg-inline--fa {
@media (prefers-reduced-motion: reduce) {
animation: unset;
}
animation-duration: 0.6s;
}

View File

@ -1,9 +1,13 @@
<template>
<div class="list">
<div
class="list"
role="list"
>
<div
v-for="item in items"
:key="getKey(item)"
class="list-item"
role="listitem"
>
<slot
name="item"

View File

@ -93,9 +93,6 @@ const MentionLink = {
this.highlightType
]
},
useAtIcon () {
return this.mergedConfig.useAtIcon
},
isRemote () {
return this.userName !== this.userNameFull
},

View File

@ -157,6 +157,9 @@
box-shadow: var(--panelShadow);
transition-property: transform;
transition-duration: 0.25s;
@media (prefers-reduced-motion: reduce) {
transition: unset;
}
transform: translateX(0);
z-index: 1001;
-webkit-overflow-scrolling: touch;

View File

@ -50,7 +50,7 @@ const NavPanel = {
...mapState({
currentUser: state => state.users.currentUser,
privateMode: state => state.instance.private,
federating: state => state.instance.federating
federating: state => state.instance.federating,
}),
...mapGetters(['unreadAnnouncementCount']),
followRequestCount () {

View File

@ -151,7 +151,6 @@
>
<Timeago
:time="notification.created_at"
:with-direction="true"
:auto-update="240"
/>
</router-link>

View File

@ -105,9 +105,12 @@
flex: 1;
padding-left: 0.8em;
min-width: 0;
}
.heading-right, .notification-right {
.timeago {
min-width: 3em;
display: inline-block;
min-width: 6em;
text-align: right;
}
}

View File

@ -103,9 +103,9 @@ export default {
convertExpiryFromUnit (unit, amount) {
// Note: we want seconds and not milliseconds
switch (unit) {
case 'minutes': return 0.001 * amount * DateUtils.MINUTE
case 'hours': return 0.001 * amount * DateUtils.HOUR
case 'days': return 0.001 * amount * DateUtils.DAY
case 'minutes': return amount * DateUtils.MINUTE / 1000
case 'hours': return amount * DateUtils.HOUR / 1000
case 'days': return amount * DateUtils.DAY / 1000
}
},
expiryAmountChange () {

View File

@ -114,7 +114,7 @@
svg {
width: 22px;
margin-right: 0.75rem;
color: var(--menuPopoverIcon, $fallback--icon)
color: var(--popoverIcon, $fallback--icon)
}
}

View File

@ -54,6 +54,14 @@ const pxStringToNumber = (str) => {
return Number(str.substring(0, str.length - 2))
}
const deleteDraft = (draftKey) => {
const draftData = JSON.parse(localStorage.getItem('drafts') || '{}');
delete draftData[draftKey];
localStorage.setItem('drafts', JSON.stringify(draftData));
}
const PostStatusForm = {
props: [
'statusId',
@ -130,7 +138,7 @@ const PostStatusForm = {
statusText = buildMentionsString({ user: this.repliedUser, attentions: this.attentions }, currentUser)
}
const { postContentType: contentType, sensitiveByDefault, sensitiveIfSubject, interfaceLanguage } = this.$store.getters.mergedConfig
const { postContentType: contentType, sensitiveByDefault, sensitiveIfSubject, interfaceLanguage, alwaysShowSubjectInput } = this.$store.getters.mergedConfig
let statusParams = {
spoilerText: this.subject || '',
@ -161,6 +169,40 @@ const PostStatusForm = {
}
}
if (!this.statusId) {
let draftKey = 'status';
if (this.replyTo) {
draftKey = 'reply:' + this.replyTo;
} else if (this.quoteId) {
draftKey = 'quote:' + this.quoteId;
}
const draft = JSON.parse(localStorage.getItem('drafts') || '{}')[draftKey];
if (draft) {
statusParams = {
spoilerText: draft.data.spoilerText,
status: draft.data.status,
sensitiveIfSubject,
nsfw: draft.data.nsfw,
files: draft.data.files,
poll: draft.data.poll,
mediaDescriptions: draft.data.mediaDescriptions,
visibility: draft.data.visibility,
language: draft.data.language,
contentType: draft.data.contentType
}
if (draft.data.poll) {
this.togglePollForm();
}
}
}
// When first loading the form, hide the subject (CW) field if it's disabled or doesn't have a starting value.
// "disableSubject" seems to take priority over "alwaysShowSubjectInput".
const showSubject = !this.disableSubject && (statusParams.spoilerText || alwaysShowSubjectInput)
return {
dropFiles: [],
uploadingFiles: false,
@ -175,7 +217,10 @@ const PostStatusForm = {
preview: null,
previewLoading: false,
emojiInputShown: false,
idempotencyKey: ''
idempotencyKey: '',
activeEmojiInput: undefined,
activeTextInput: undefined,
subjectVisible: showSubject
}
},
computed: {
@ -280,6 +325,7 @@ const PostStatusForm = {
statusChanged () {
this.autoPreview()
this.updateIdempotencyKey()
this.saveDraft()
},
clearStatus () {
const newStatus = this.newStatus
@ -401,8 +447,38 @@ const PostStatusForm = {
}).finally(() => {
this.previewLoading = false
})
let draftKey = 'status';
if (this.replyTo) {
draftKey = 'reply:' + this.replyTo;
} else if (this.quoteId) {
draftKey = 'quote:' + this.quoteId;
}
deleteDraft(draftKey)
},
debouncePreviewStatus: debounce(function () { this.previewStatus() }, 500),
saveDraft() {
const draftData = JSON.parse(localStorage.getItem('drafts') || '{}');
let draftKey = 'status';
if (this.replyTo) {
draftKey = 'reply:' + this.replyTo;
} else if (this.quoteId) {
draftKey = 'quote:' + this.quoteId;
}
if (this.newStatus.status || this.newStatus.spoilerText || this.newStatus.files.length > 0 || this.newStatus.poll.length > 0) {
draftData[draftKey] = {
updatedAt: new Date(),
data: this.newStatus,
};
localStorage.setItem('drafts', JSON.stringify(draftData));
} else {
deleteDraft(draftKey);
}
},
autoPreview () {
if (!this.preview) return
this.previewLoading = true
@ -605,8 +681,33 @@ const PostStatusForm = {
this.$refs['emoji-input'].resize()
},
showEmojiPicker () {
this.$refs['textarea'].focus()
this.$refs['emoji-input'].triggerShowPicker()
if (!this.activeEmojiInput || !this.activeTextInput)
this.focusStatusInput()
this.$refs[this.activeTextInput].focus()
this.$refs[this.activeEmojiInput].triggerShowPicker()
},
focusStatusInput() {
this.activeEmojiInput = 'emoji-input'
this.activeTextInput = 'textarea'
},
focusSubjectInput() {
this.activeEmojiInput = 'subject-emoji-input'
this.activeTextInput = 'subject-input'
},
toggleSubjectVisible() {
// If hiding CW, then we need to clear the subject and reset focus
if (this.subjectVisible)
{
this.focusStatusInput()
// "nsfw" property is normally set by the @change listener, but this bypasses it.
// We need to clear it manually instead.
this.newStatus.spoilerText = ''
this.newStatus.nsfw = false
}
this.subjectVisible = !this.subjectVisible
},
clearError () {
this.error = null

View File

@ -118,13 +118,16 @@
/>
</div>
<EmojiInput
v-if="!disableSubject && (newStatus.spoilerText || alwaysShowSubject)"
ref="subject-emoji-input"
v-if="subjectVisible"
v-model="newStatus.spoilerText"
enable-emoji-picker
hide-emoji-button
:suggest="emojiSuggestor"
class="form-control"
>
<input
ref="subject-input"
v-model="newStatus.spoilerText"
type="text"
:placeholder="$t('post_status.content_warning')"
@ -132,6 +135,7 @@
size="1"
class="form-post-subject"
@input="onSubjectInput"
@focus="focusSubjectInput()"
>
</EmojiInput>
<i18n-t
@ -173,6 +177,7 @@
@input="resize"
@compositionupdate="resize"
@paste="paste"
@focus="focusStatusInput()"
/>
<p
v-if="hasStatusLengthLimit"
@ -276,6 +281,15 @@
>
<FAIcon icon="poll-h" />
</button>
<button
v-if="!disableSubject"
class="spoiler-icon button-unstyled"
:class="{ selected: subjectVisible }"
:title="$t('post_status.toggle_content_warning')"
@click="toggleSubjectVisible"
>
<FAIcon icon="eye-slash" />
</button>
</div>
<button
v-if="posting"
@ -291,12 +305,14 @@
>
{{ $t('post_status.post') }}
</button>
<!-- touchstart is used to keep the OSK at the same position after a message send -->
<!-- To keep the OSK at the same position after a message send, -->
<!-- @touchstart.stop.prevent was used. But while OSK position is -->
<!-- quirky, accidental mobile posts caused by the workaround -->
<!-- when people tried to scroll were a more serious bug. -->
<button
v-else
:disabled="uploadingFiles || disableSubmit"
class="btn button-default"
@touchstart.stop.prevent="postStatus($event, newStatus)"
@click.stop.prevent="postStatus($event, newStatus)"
>
{{ $t('post_status.post') }}
@ -454,7 +470,7 @@
}
}
.media-upload-icon, .poll-icon, .emoji-icon {
.media-upload-icon, .poll-icon, .emoji-icon, .spoiler-icon {
font-size: 1.85em;
line-height: 1.1;
flex: 1;
@ -497,6 +513,11 @@
.poll-icon {
order: 3;
justify-content: center;
}
.spoiler-icon {
order: 4;
justify-content: right;
}

View File

@ -74,6 +74,9 @@
.interactive {
.svg-inline--fa {
@media (prefers-reduced-motion: reduce) {
animation: unset;
}
animation-duration: 0.6s;
}

View File

@ -188,7 +188,7 @@ export default {
break
}
case 'span':
if (this.handleLinks && attrs['class'] && attrs['class'].includes('h-card')) {
if (this.handleLinks && attrs?.['class']?.includes?.('h-card')) {
return ['', children.map(processItem), '']
}
}

View File

@ -50,7 +50,6 @@
.emoji {
display: inline-block;
width: var(--emoji-size, 32px);
height: var(--emoji-size, 32px);
}

View File

@ -38,7 +38,7 @@ label.Select {
margin: 0;
padding: 0 2em 0 .2em;
font-family: sans-serif;
font-family: var(--inputFont, sans-serif);
font-family: var(--interfaceFont, sans-serif);
font-size: 1em;
width: 100%;
z-index: 1;

View File

@ -21,7 +21,6 @@
>
{{ $t('settings.settings_profile_force_sync') }}
</button>
</p>
<div
@click="toggleExpandedSettings"
@ -147,6 +146,11 @@
{{ $t('settings.show_wider_shortcuts') }}
</BooleanSetting>
</li>
<li>
<BooleanSetting path="displayPageBackgrounds">
{{ $t('settings.show_page_backgrounds') }}
</BooleanSetting>
</li>
<li>
<BooleanSetting path="stopGifs">
{{ $t('settings.stop_gifs') }}
@ -484,14 +488,6 @@
</BooleanSetting>
</li>
</ul>
<li>
<BooleanSetting
path="useAtIcon"
expert="1"
>
{{ $t('settings.use_at_icon') }}
</BooleanSetting>
</li>
<li>
<BooleanSetting path="mentionLinkShowAvatar">
{{ $t('settings.mention_link_show_avatar') }}

View File

@ -10,17 +10,20 @@ import SelectableList from 'src/components/selectable_list/selectable_list.vue'
import ProgressButton from 'src/components/progress_button/progress_button.vue'
import withSubscription from 'src/components/../hocs/with_subscription/with_subscription'
import Checkbox from 'src/components/checkbox/checkbox.vue'
import withLoadMore from 'src/components/../hocs/with_load_more/with_load_more'
const BlockList = withSubscription({
const BlockList = withLoadMore({
fetch: (props, $store) => $store.dispatch('fetchBlocks'),
select: (props, $store) => get($store.state.users.currentUser, 'blockIds', []),
childPropName: 'items'
childPropName: 'items',
destroy: () => {}
})(SelectableList)
const MuteList = withSubscription({
const MuteList = withLoadMore({
fetch: (props, $store) => $store.dispatch('fetchMutes'),
select: (props, $store) => get($store.state.users.currentUser, 'muteIds', []),
childPropName: 'items'
childPropName: 'items',
destroy: () => {}
})(SelectableList)
const DomainMuteList = withSubscription({

View File

@ -12,6 +12,7 @@ import InterfaceLanguageSwitcher from 'src/components/interface_language_switche
import BooleanSetting from '../helpers/boolean_setting.vue'
import SharedComputedObject from '../helpers/shared_computed_object.js'
import localeService from 'src/services/locale/locale.service.js'
import ChoiceSetting from '../helpers/choice_setting.vue'
import { library } from '@fortawesome/fontawesome-svg-core'
import {
@ -32,6 +33,7 @@ const ProfileTab = {
newName: this.$store.state.users.currentUser.name_unescaped,
newBio: unescape(this.$store.state.users.currentUser.description),
newLocked: this.$store.state.users.currentUser.locked,
newPermitFollowback: this.$store.state.users.currentUser.permit_followback,
newFields: this.$store.state.users.currentUser.fields.map(field => ({ name: field.name, value: field.value })),
showRole: this.$store.state.users.currentUser.show_role,
role: this.$store.state.users.currentUser.role,
@ -46,9 +48,16 @@ const ProfileTab = {
emailLanguage: this.$store.state.users.currentUser.language || '',
newPostTTLDays: this.$store.state.users.currentUser.status_ttl_days,
expirePosts: this.$store.state.users.currentUser.status_ttl_days !== null,
userAcceptsDirectMessagesFrom: this.$store.state.users.currentUser.accepts_direct_messages_from,
userAcceptsDirectMessagesFromOptions: ["everybody", "nobody", "people_i_follow"].map(mode => ({
key: mode,
value: mode,
label: this.$t(`settings.user_accepts_direct_messages_from_${mode}`)
}))
}
},
components: {
ChoiceSetting,
ScopeSelector,
ImageCropper,
EmojiInput,
@ -126,7 +135,9 @@ const ProfileTab = {
fields_attributes: this.newFields.filter(el => el != null),
bot: this.bot,
show_role: this.showRole,
status_ttl_days: this.expirePosts ? this.newPostTTLDays : -1
status_ttl_days: this.expirePosts ? this.newPostTTLDays : -1,
permit_followback: this.permit_followback,
accepts_direct_messages_from: this.userAcceptsDirectMessagesFrom
/* eslint-enable camelcase */
}

View File

@ -89,6 +89,15 @@
{{ $t('settings.bot') }}
</Checkbox>
</p>
<p>
<ChoiceSetting
id="userAcceptsDirectMessagesFrom"
path="userAcceptsDirectMessagesFrom"
:options="userAcceptsDirectMessagesFromOptions"
>
{{ $t('settings.user_accepts_direct_messages_from') }}
</ChoiceSetting>
</p>
<p>
<Checkbox v-model="expirePosts">
{{ $t('settings.expire_posts_enabled') }}
@ -102,6 +111,9 @@
class="expire-posts-days"
:placeholder="$t('settings.expire_posts_input_placeholder')"
/>
</p>
<p>
</p>
<p>
<interface-language-switcher
@ -247,6 +259,19 @@
<BooleanSetting path="serverSide_locked">
{{ $t('settings.lock_account_description') }}
</BooleanSetting>
<ul
class="setting-list suboptions"
:class="[{disabled: !serverSide_locked}]"
>
<li>
<BooleanSetting
path="serverSide_permitFollowback"
:disabled="!serverSide_locked"
>
{{ $t('settings.permit_followback_description') }}
</BooleanSetting>
</li>
</ul>
</li>
<li>
<BooleanSetting path="serverSide_discoverable">

View File

@ -89,6 +89,10 @@
margin: 1em 1em 0;
}
.presets {
text-align: center;
}
.tab-header {
display: flex;
justify-content: space-between;

View File

@ -268,6 +268,10 @@
.side-drawer {
overflow-x: hidden;
transition-timing-function: cubic-bezier(0, 1, 0.5, 1);
@media (prefers-reduced-motion: reduce) {
transition-timing-function: unset;
transition: unset;
}
transition: 0.35s;
transition-property: transform;
margin: 0 0 0 -100px;

View File

@ -20,6 +20,7 @@ import generateProfileLink from 'src/services/user_profile_link_generator/user_p
import { highlightClass, highlightStyle } from '../../services/user_highlighter/user_highlighter.js'
import { muteWordHits } from '../../services/status_parser/status_parser.js'
import { unescape, uniqBy } from 'lodash'
import StillImage from '../still-image/still-image.vue'
import { library } from '@fortawesome/fontawesome-svg-core'
import {
@ -117,7 +118,8 @@ const Status = {
RichContent,
MentionLink,
MentionsLine,
QuoteButton
QuoteButton,
StillImage
},
props: [
'statusoid',

View File

@ -174,12 +174,12 @@
>
@{{ status.user.screen_name_ui }}
</router-link>
<img
<StillImage
v-if="!!(status.user && status.user.favicon)"
class="status-favicon"
:src="status.user.favicon"
:title="faviconAlt(status)"
>
/>
</span>
</div>
@ -190,7 +190,7 @@
>
<Timeago
:time="status.created_at"
:with-direction="true"
:with-direction="!compact"
:auto-update="60"
/>
</router-link>

View File

@ -17,26 +17,26 @@
.emoji:hover {
transform: scale(1.4);
@media (prefers-reduced-motion: reduce) {
transition: unset;
}
transition: 0.05s;
}
._mfm_x2_ {
.emoji {
width: 100px;
height: 100px;
}
}
._mfm_x3_ {
.emoji {
width: 150px;
height: 150px;
}
}
._mfm_x4_ {
.emoji {
width: 200px;
height: 200px;
}
}

View File

@ -71,7 +71,7 @@
img, video {
&.emoji {
width: 50px;
max-width: 100%;
height: 50px;
}
}
@ -89,7 +89,6 @@
animation: none !important;
}
.emoji {
width: 32px !important;
height: 32px !important;
}
}

View File

@ -11,8 +11,9 @@ const StillImage = {
],
data () {
return {
stopGifs: this.$store.getters.mergedConfig.stopGifs,
isAnimated: false
stopGifs: this.$store.getters.mergedConfig.stopGifs || window.matchMedia('(prefers-reduced-motion: reduce)').matches,
isAnimated: false,
imageTypeLabel: ''
}
},
computed: {
@ -39,14 +40,24 @@ const StillImage = {
this.imageLoadError && this.imageLoadError()
},
detectAnimation (image) {
if (this.mimetype === 'image/gif' || this.src.endsWith('.gif')) {
this.isAnimated = true
return
const mediaProxyAvailable = this.$store.state.instance.mediaProxyAvailable
if (!mediaProxyAvailable) {
// It's a bit aggressive to assume all images we can't find the mimetype of is animated, but necessary for
// people in need of reduced motion accessibility. As such, we'll consider those images animated if the user
// agent is set to prefer reduced motion. Otherwise, it'll just be used as an early exit.
if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
// Since the canvas and images are not pixel-perfect matching (due to scaling),
// It makes the images jiggle on hover, which is not ideal for accessibility, methinks
this.isAnimated = true
return
}
this.detectWithoutMediaProxy(image)
} else {
this.detectWithMediaProxy(image)
}
// harmless CORS errors without-- clean console with
if (!this.$store.state.instance.mediaProxyAvailable) return
// Animated JPEGs?
if (!(this.src.endsWith('.webp') || this.src.endsWith('.png'))) return
},
detectAnimationWithFetch (image) {
// Browser Cache should ensure image doesn't get loaded twice if cache exists
fetch(image.src, {
referrerPolicy: 'same-origin'
@ -55,12 +66,20 @@ const StillImage = {
// We don't need to read the whole file so only call it once
data.body.getReader().read()
.then(reader => {
if (this.src.endsWith('.webp') && this.isAnimatedWEBP(reader.value)) {
// Ordered from least to most intensive
if (this.isGIF(reader.value)) {
this.isAnimated = true
this.setLabel('GIF')
return
}
if (this.src.endsWith('.png') && this.isAnimatedPNG(reader.value)) {
if (this.isAnimatedWEBP(reader.value)) {
this.isAnimated = true
this.setLabel('WEBP')
return
}
if (this.isAnimatedPNG(reader.value)) {
this.isAnimated = true
this.setLabel('APNG')
}
})
})
@ -68,6 +87,53 @@ const StillImage = {
// this.imageLoadError && this.imageLoadError()
})
},
detectWithMediaProxy (image) {
this.detectAnimationWithFetch(image)
},
detectWithoutMediaProxy (image) {
// We'll just assume that gifs and webp are animated
const extension = image.src.split('.').pop().toLowerCase()
if (extension === 'gif') {
this.isAnimated = true
this.setLabel('GIF')
return
}
if (extension === 'webp') {
this.isAnimated = true
this.setLabel('WEBP')
return
}
// Beware the apng! use this if ye dare
// if (extension === 'png') {
// this.isAnimated = true
// this.setLabel('PNG')
// return
// }
// Hail mary for extensionless
if (extension.includes('/')) {
// Don't mind the CORS error barrage
this.detectAnimationWithFetch(image)
}
},
setLabel (name) {
this.imageTypeLabel = name;
},
isGIF (data) {
// I am a perfectly sane individual
//
// GIF HEADER CHUNK
// === START HEADER ===
// 47 49 46 38 ("GIF8")
const gifHeader = [0x47, 0x49, 0x46];
for (let i = 0; i < 3; i++) {
if (data[i] !== gifHeader[i]) {
return false;
}
}
return true
},
isAnimatedWEBP (data) {
/**
* WEBP HEADER CHUNK
@ -101,16 +167,55 @@ const StillImage = {
const idatPos = str.indexOf('IDAT')
return (str.substring(0, idatPos > 0 ? idatPos : 0).indexOf('acTL') > 0)
},
drawThumbnail () {
const canvas = this.$refs.canvas
if (!this.$refs.canvas) return
const image = this.$refs.src
const width = image.naturalWidth
const height = image.naturalHeight
canvas.width = width
canvas.height = height
canvas.getContext('2d').drawImage(image, 0, 0, width, height)
}
drawThumbnail() {
const canvas = this.$refs.canvas;
if (!canvas) return;
const context = canvas.getContext('2d');
const image = this.$refs.src;
const parentElement = canvas.parentElement;
// Draw the quick, unscaled version first
context.drawImage(image, 0, 0, parentElement.clientWidth, parentElement.clientHeight);
// Use requestAnimationFrame to schedule the scaling to the next frame
requestAnimationFrame(() => {
// Compute scaling ratio between the natural dimensions of the image and its display dimensions
const scalingRatioWidth = parentElement.clientWidth / image.naturalWidth;
const scalingRatioHeight = parentElement.clientHeight / image.naturalHeight;
// Adjust for high-DPI displays
const ratio = window.devicePixelRatio || 1;
canvas.width = image.naturalWidth * scalingRatioWidth * ratio;
canvas.height = image.naturalHeight * scalingRatioHeight * ratio;
canvas.style.width = `${parentElement.clientWidth}px`;
canvas.style.height = `${parentElement.clientHeight}px`;
context.scale(ratio, ratio);
// Maintain the aspect ratio of the image
const imgAspectRatio = image.naturalWidth / image.naturalHeight;
const canvasAspectRatio = parentElement.clientWidth / parentElement.clientHeight;
let drawWidth, drawHeight;
if (imgAspectRatio > canvasAspectRatio) {
drawWidth = parentElement.clientWidth;
drawHeight = parentElement.clientWidth / imgAspectRatio;
} else {
drawHeight = parentElement.clientHeight;
drawWidth = parentElement.clientHeight * imgAspectRatio;
}
context.clearRect(0, 0, canvas.width, canvas.height); // Clear the previous unscaled image
context.imageSmoothingEnabled = true;
context.imageSmoothingQuality = 'high';
// Draw the good one for realsies
const dx = (parentElement.clientWidth - drawWidth) / 2;
const dy = (parentElement.clientHeight - drawHeight) / 2;
context.drawImage(image, dx, dy, drawWidth, drawHeight);
});
}
},
updated () {
// On computed animated change

View File

@ -1,9 +1,15 @@
<template>
<div
ref="still-image"
class="still-image"
:class="{ animated: animated }"
:style="style"
>
<div
v-if="animated && imageTypeLabel"
class="image-type-label">
{{ imageTypeLabel }}
</div>
<canvas
v-if="animated"
ref="canvas"
@ -57,30 +63,26 @@
}
}
&.animated {
&::before {
zoom: var(--_still_image-label-scale, 1);
content: 'gif';
position: absolute;
line-height: 1;
font-size: 0.7em;
top: 0.5em;
left: 0.5em;
background: rgba(127, 127, 127, 0.5);
color: #fff;
display: block;
padding: 2px 4px;
border-radius: $fallback--tooltipRadius;
border-radius: var(--tooltipRadius, $fallback--tooltipRadius);
z-index: 2;
visibility: var(--_still-image-label-visibility, visible);
}
.image-type-label {
position: absolute;
top: 0.25em;
left: 0.25em;
line-height: 1;
font-size: 0.6em;
background: rgba(127, 127, 127, 0.5);
color: #fff;
padding: 2px 4px;
border-radius: var(--tooltipRadius, $fallback--tooltipRadius);
z-index: 2;
visibility: var(--_still-image-label-visibility, visible);
}
&.animated {
&:hover canvas {
display: none;
}
&:hover::before {
&:hover .image-type-label {
visibility: var(--_still-image-label-visibility, hidden);
}

View File

@ -62,6 +62,9 @@
border-top-right-radius: 0;
border-top-left-radius: 0;
transform: translateY(-100%);
@media (prefers-reduced-motion: reduce) {
transition: unset;
}
transition: transform 100ms;
}
@ -89,6 +92,9 @@
svg {
margin-left: 0.6em;
@media (prefers-reduced-motion: reduce) {
transition: unset;
}
transition: transform 100ms;
}

View File

@ -8,6 +8,7 @@ import {
faHome,
faCircle
} from '@fortawesome/free-solid-svg-icons'
import { federatedTimelineVisible, publicTimelineVisible, bubbleTimelineVisible } from '../../lib/timeline_visibility'
library.add(
faUsers,
@ -24,7 +25,9 @@ const TimelineMenuContent = {
currentUser: state => state.users.currentUser,
privateMode: state => state.instance.private,
federating: state => state.instance.federating,
showBubbleTimeline: state => (state.instance.localBubbleInstances.length > 0)
publicTimelineVisible,
federatedTimelineVisible,
bubbleTimelineVisible,
})
}
}

View File

@ -16,23 +16,7 @@
>{{ $t("nav.home_timeline") }}</span>
</router-link>
</li>
<li v-if="currentUser && showBubbleTimeline">
<router-link
class="menu-item"
:to="{ name: 'bubble-timeline' }"
>
<FAIcon
fixed-width
class="fa-scale-110 fa-old-padding "
icon="circle"
/>
<span
:title="$t('nav.bubble_timeline_description')"
:aria-label="$t('nav.bubble_timeline_description')"
>{{ $t("nav.bubble_timeline") }}</span>
</router-link>
</li>
<li v-if="currentUser || !privateMode">
<li v-if="publicTimelineVisible">
<router-link
class="menu-item"
:to="{ name: 'public-timeline' }"
@ -48,7 +32,23 @@
>{{ $t("nav.public_tl") }}</span>
</router-link>
</li>
<li v-if="federating && showPublicExternalTimeline">
<li v-if="bubbleTimelineVisible">
<router-link
class="menu-item"
:to="{ name: 'bubble-timeline' }"
>
<FAIcon
fixed-width
class="fa-scale-110 fa-old-padding "
icon="circle"
/>
<span
:title="$t('nav.bubble_timeline_description')"
:aria-label="$t('nav.bubble_timeline_description')"
>{{ $t("nav.bubble_timeline") }}</span>
</router-link>
</li>
<li v-if="federatedTimelineVisible">
<router-link
class="menu-item"
:to="{ name: 'public-external-timeline' }"
@ -62,6 +62,7 @@
:title="$t('nav.twkn_timeline_description')"
:aria-label="$t('nav.twkn_timeline_description')"
>{{ $t("nav.twkn") }}</span>
</router-link>
</li>
<li v-if="currentUser">
@ -111,4 +112,4 @@
background-color: scale(var(--bg, $fallback--bg), 0.1);
padding-bottom: 0.4em;
}
</style>
</style>

View File

@ -8,6 +8,7 @@ import {
faHome
} from '@fortawesome/free-solid-svg-icons'
import { faCircle } from '@fortawesome/free-regular-svg-icons'
import { federatedTimelineVisible, publicTimelineVisible, bubbleTimelineVisible } from '../../lib/timeline_visibility'
library.add(
faUsers,
faGlobe,
@ -22,7 +23,10 @@ const TimelineMenuContent = {
...mapState({
currentUser: state => state.users.currentUser,
privateMode: state => state.instance.private,
federating: state => state.instance.federating
federating: state => state.instance.federating,
publicTimelineVisible,
federatedTimelineVisible,
bubbleTimelineVisible,
})
}
}

View File

@ -16,7 +16,7 @@
>{{ $t("nav.home_timeline") }}</span>
</router-link>
</li>
<li v-if="currentUser">
<li v-if="bubbleTimelineVisible">
<router-link
class="menu-item"
:to="{ name: 'bubble-timeline' }"
@ -32,7 +32,7 @@
>{{ $t("nav.bubble_timeline") }}</span>
</router-link>
</li>
<li v-if="currentUser || !privateMode">
<li v-if="publicTimelineVisible">
<router-link
class="menu-item"
:to="{ name: 'public-timeline' }"
@ -48,7 +48,7 @@
>{{ $t("nav.public_tl") }}</span>
</router-link>
</li>
<li v-if="federating && (currentUser || !privateMode)">
<li v-if="federatedTimelineVisible">
<router-link
class="menu-item"
:to="{ name: 'public-external-timeline' }"

View File

@ -4,6 +4,12 @@ import { library } from '@fortawesome/fontawesome-svg-core'
import {
faChevronDown
} from '@fortawesome/free-solid-svg-icons'
import { mapState } from 'vuex'
import {
publicTimelineVisible,
federatedTimelineVisible,
bubbleTimelineVisible,
} from '../../lib/timeline_visibility'
library.add(faChevronDown)
@ -36,12 +42,15 @@ const TimelineMenuTabs = {
}
},
computed: {
currentUser () {
return this.$store.state.users.currentUser
},
privateMode () {
return this.$store.state.instance.private
}
},
...mapState({
currentUser: state => state.users.currentUser,
publicTimelineVisible,
federatedTimelineVisible,
bubbleTimelineVisible,
})
},
methods: {
timelineName () {

View File

@ -18,6 +18,7 @@
<router-link
:to="{ name: 'public-timeline' }"
class="nav-icon"
v-if="publicTimelineVisible"
>
<FAIcon
fixed-width
@ -27,7 +28,7 @@
/>
</router-link>
<router-link
v-if="currentUser"
v-if="bubbleTimelineVisible"
:to="{ name: 'bubble-timeline' }"
class="nav-icon"
>
@ -41,6 +42,7 @@
<router-link
:to="{ name: 'public-external-timeline' }"
class="nav-icon"
v-if="federatedTimelineVisible"
>
<FAIcon
fixed-width

View File

@ -33,7 +33,7 @@
--_avatarShadowBox: var(--avatarStatusShadow);
--_avatarShadowFilter: var(--avatarStatusShadowFilter);
--_avatarShadowInset: var(--avatarStatusShadowInset);
--_still-image-label-visibility: hidden;
// --_still-image-label-visibility: hidden;
display: inline-block;
position: relative;

View File

@ -145,10 +145,12 @@ const UserProfile = {
if (user) {
loadById(user.id)
this.note = user.relationship.note
this.$store.dispatch('setDisplayBackground', user.background_image)
} else {
this.$store.dispatch('fetchUser', userNameOrId)
.then(({ id, relationship }) => {
.then(({ id, relationship, background_image }) => {
this.note = relationship.note
this.$store.dispatch('setDisplayBackground', background_image)
return loadById(id)
})
.catch((reason) => {
@ -225,6 +227,9 @@ const UserProfile = {
Conversation,
RichContent,
FollowedTagList
},
beforeRouteLeave(to, from) {
this.$store.dispatch('setDisplayBackground', null)
}
}

View File

@ -3,11 +3,13 @@ import * as bodyScrollLock from 'body-scroll-lock'
let previousNavPaddingRight
let previousAppBgWrapperRight
const lockerEls = new Set([])
const allowedScrollableClasses = ['emoji-tabs-item', 'emoji-item']
const disableBodyScroll = (el) => {
const scrollBarGap = window.innerWidth - document.documentElement.clientWidth
bodyScrollLock.disableBodyScroll(el, {
reserveScrollBarGap: true
reserveScrollBarGap: true,
allowTouchMove: el => allowedScrollableClasses.includes(el.parentElement.className),
})
lockerEls.add(el)
setTimeout(() => {

View File

@ -884,7 +884,6 @@
"upload_a_photo": "Pujar una foto",
"useStreamingApi": "Rebre apunts i notificacions en temps real",
"useStreamingApiWarning": "És genial emprar-lo. Si es trenca, refresca, suposo?",
"use_at_icon": "Mostra el símbol {'@'} com a icona enlloc de text",
"use_contain_fit": "No retallar els adjunts en miniatures",
"use_one_click_nsfw": "Obre els adjunts NSFW amb només un clic",
"user_mutes": "Usuaris",

View File

@ -252,6 +252,10 @@
"hint": "Anmelden um an der Diskussion teilzunehmen",
"login": "Anmelden",
"logout": "Abmelden",
"logout_confirm": "Willst du dich wirklich abmelden?",
"logout_confirm_accept_button": "Abmelden",
"logout_confirm_cancel_button": "Abbrechen",
"logout_confirm_title": "Abmelden",
"password": "Passwort",
"placeholder": "meinbenutzername",
"recovery_code": "Wiederherstellungscode",
@ -264,6 +268,32 @@
"next": "Weiter",
"previous": "Zurück"
},
"moderation": {
"moderation": "Moderation",
"reports": {
"add_note": "Notiz hinzufügen",
"close": "Schließen",
"delete_note": "Löschen",
"delete_note_accept": "Ja, löschen",
"delete_note_cancel": "Nein, behalten",
"delete_note_confirm": "Soll diese Notiz wirklich gelöscht werden?",
"delete_note_title": "Löschen bestätigen",
"no_content": "Keine Beschreibung angegeben",
"no_reports": "Keine Meldungen verfügbar",
"note_placeholder": "Hinterlasse eine Notiz",
"notes": "{ count } Notiz | { count } Notizen",
"reopen": "Wieder öffnen",
"report": "Meldung über",
"reports": "Meldungen",
"resolve": "Lösen",
"show_closed": "Geschlossene anzeigen",
"statuses": "{ count } Post| { count } Posts",
"tag_policy_notice": "Schalte die TagPolicy-MRF ein, um Post-Beschränkungen einzustellen",
"tags": "Post-Einschränkungen einstellen"
},
"statuses": "Posts",
"users": "Benutzer"
},
"nav": {
"about": "Über",
"administration": "Administration",
@ -278,6 +308,7 @@
"interactions": "Interaktionen",
"lists": "Listen",
"mentions": "Erwähnungen",
"moderation": "Moderation",
"preferences": "Voreinstellungen",
"public_timeline_description": "Öffentliche Beiträge von dieser Instanz",
"public_tl": "Öffentliche Zeitleiste",
@ -374,6 +405,8 @@
}
},
"registration": {
"awaiting_email_confirmation": "Dein Account wurde registriert und eine E-Mail wurde an deine Adresse gesendet. Bitte lies die E-Mail, um die Registrierung abzuschließen.",
"awaiting_email_confirmation_title": "Warte auf E-Mail-Bestätigung",
"bio": "Bio",
"bio_placeholder": "z. B.\nHallo! Willkommen auf meinem Profil.\nIch mag Anime und Spiele. Hoffentlich können wir Freunde sein!",
"captcha": "CAPTCHA",
@ -387,6 +420,8 @@
"reason_placeholder": "Diese Instanz bestätigt Registrierungen manuell. \nLass die Admins wissen warum du dich registrieren willst.",
"register": "Registrierung",
"registration": "Registrierung",
"request_sent": "Deine Bitte zur Registrierung wurde weitergeleitet. Du erhälst eine E-Mail, wenn deiner Registrierung zugestimmt wurde.",
"request_sent_title": "Bitte zur Registrierung gesendet",
"token": "Einladungsschlüssel",
"username_placeholder": "z. B. akko",
"validations": {
@ -496,6 +531,8 @@
"enable_web_push_notifications": "Web-Pushbenachrichtigungen aktivieren",
"enter_current_password_to_confirm": "Gib dein aktuelles Passwort ein, um deine Identität zu bestätigen",
"expert_mode": "Erweiterte Einstellungen anzeigen",
"expire_posts_enabled": "Posts löschen, die älter als eine Anzahl an Tagen sind",
"expire_posts_input_placeholder": "Anzahl an Tagen",
"export_theme": "Farbschema speichern",
"file_export_import": {
"backup_restore": "Einstellungen backuppen",
@ -688,6 +725,19 @@
"setting_changed": "Einstellungen weichen von den Standardeinstellungen ab",
"setting_server_side": "Diese Einstellung hängt an deinem Profil und gilt für alle Sitzungen und Clients",
"settings": "Einstellungen",
"settings_profile": "Einstellungs-Profile",
"settings_profile_creation": "Neues Profil erstellen",
"settings_profile_creation_new_name_label": "Name",
"settings_profile_creation_submit": "Erstellen",
"settings_profile_currently": "Benutze Profil {name} (version: {version})",
"settings_profile_delete": "Löschen",
"settings_profile_delete_confirm": "Dieses Profil wirklich löschen?",
"settings_profile_force_sync": "Synchronisieren",
"settings_profile_in_use": "In Benutzung",
"settings_profile_use": "Verwenden",
"settings_profiles_refresh": "Einstellungs-Profile neu laden",
"settings_profiles_show": "Alle Einstellungs-Profile anzeigen",
"settings_profiles_unshow": "Alle Einstellungs-Profile verbergen",
"show_admin_badge": "Zeige Admin-Abzeichen auf meinem Profil",
"show_moderator_badge": "Zeige Moderator-Abzeichen auf meinem Profil",
"show_nav_shortcuts": "Zusätzliche Schnellnavigation im Top-Panel anzeigen",
@ -866,7 +916,7 @@
"upload_a_photo": "Lade ein Foto hoch",
"useStreamingApi": "Empfange Posts und Benachrichtigungen in Echtzeit",
"useStreamingApiWarning": "(Nicht empfohlen, experimentell, bekannt dafür, Posts zu überspringen)",
"use_at_icon": "{'@'}-Symbol als Icon und nicht als Text anzeigen",
"use_blurhash": "Blurhash für NSFW-Vorschauen verwenden",
"use_contain_fit": "Vorschaubilder nicht zuschneiden",
"use_one_click_nsfw": "Heikle Anhänge mit nur einem Klick öffnen",
"user_mutes": "User",
@ -887,6 +937,12 @@
"word_filter": "Wortfilter",
"wordfilter": "Wortfilter"
},
"settings_profile": {
"creating": "Erstelle ein neues Einstellungs-Profil \"{profile}\"...",
"synchronization_error": "Konnte Einstellungen nicht synchronisieren: {err}",
"synchronized": "Einstellungen synchronisiert!",
"synchronizing": "Synchronisiere Einstellungs-Profil \"{profile}\"..."
},
"status": {
"ancestor_follow": "Zeige {numReplies} andere Antwort unter dieser Nachricht | Zeige {numReplies} andere Antworten unter dieser Nachricht",
"ancestor_follow_with_icon": "{icon} {text}",
@ -920,6 +976,11 @@
"pin": "An Profil anheften",
"pinned": "Angeheftet",
"plus_more": "+{number} mehr",
"redraft": "Löschen & neu erstellen",
"redraft_confirm": "Diesen Post wirklich löschen und neu erstellen? Interaktionen des ursprünglichen Posts werden nicht erhalten.",
"redraft_confirm_accept_button": "Ja, löschen und neu erstellen",
"redraft_confirm_cancel_button": "Nein, das Original behalten",
"redraft_confirm_title": "Löschen und neu erstellen bestätigen",
"remove_attachment": "Anhang entfernen",
"repeat_confirm": "Nachricht wirklich wiederholen?",
"repeat_confirm_accept_button": "Ja, wiederholen",
@ -948,6 +1009,7 @@
"thread_show_full": "Zeige {numStatus} Antwort | Zeige {numStatus} Antworten",
"thread_show_full_with_icon": "{icon} {text}",
"translate": "Übersetzen",
"translated_from": "Übersetzt von {language}",
"unbookmark": "Lesezeichen entfernen",
"unmute_conversation": "Konversation nicht mehr stummstellen",
"unpin": "Nicht mehr an Profil anheften",
@ -979,6 +1041,7 @@
"collapse": "Einklappen",
"conversation": "Unterhaltung",
"error": "Fehler beim Lesen der Timeline: {0}",
"follow_tag": "Hashtag folgen",
"load_older": "Lade ältere Nachrichten",
"no_more_statuses": "Keine weiteren Nachrichten",
"no_retweet_hint": "Die Nachricht ist als nur-für-Follower oder Direktnachricht markiert und kann nicht wiederholt oder zitiert werden",
@ -988,8 +1051,12 @@
"show_new": "Zeige Neuere",
"socket_broke": "Netzverbindung verloren: CloseEvent code {0}",
"socket_reconnected": "Netzverbindung hergestellt",
"unfollow_tag": "Hashtag entfolgen",
"up_to_date": "Aktuell"
},
"toast": {
"no_translation_target_set": "Keine Zielsprache für Übersetzungen eingestellt - das könnte schiefgehen. Bitte stell eine Zielsprache in deinen Einstellungen ein."
},
"tool_tip": {
"accept_follow_request": "Folgeanfrage annehmen",
"add_reaction": "Emoji-Reaktion hinzufügen",
@ -1049,6 +1116,7 @@
"block_confirm_title": "Benutzer blockieren",
"block_progress": "Blocken…",
"blocked": "Blockiert!",
"blocks_you": "Blockt dich!",
"bot": "Bot",
"deactivated": "Deaktiviert",
"deny": "Ablehnen",
@ -1063,7 +1131,10 @@
"follow_cancel": "Anfrage ablehnen",
"follow_progress": "Anfragen…",
"follow_sent": "Anfrage gesendet!",
"follow_tag": "Hashtag folgen",
"follow_unfollow": "Folgen beenden",
"followed_tags": "Gefolgte Hashtags",
"followed_users": "Gefolgte Benutzer",
"followees": "Folgt",
"followers": "Folgende",
"following": "Folgst du!",
@ -1088,11 +1159,14 @@
"mute_domain": "Domain blockieren",
"mute_progress": "Stummschalten erfolgt…",
"muted": "Stummgeschaltet",
"not_following_any_hashtags": "Du folgst keinen Hashtags",
"note": "Private Notiz",
"per_day": "pro Tag",
"remote_follow": "Folgen",
"remove_follower": "Nicht mehr folgen",
"replies": "Mit Antworten",
"report": "Melden",
"requested_by": "Möchte dir gern folgen",
"show_repeats": "Geteilte Beiträge anzeigen",
"statuses": "Nachrichten",
"subscribe": "Folgen",
@ -1102,11 +1176,13 @@
"unfollow_confirm_accept_button": "Ja, nicht mehr folgen",
"unfollow_confirm_cancel_button": "Nein, weiter folgen",
"unfollow_confirm_title": "Benutzer nicht mehr folgen",
"unfollow_tag": "Hashtag nicht mehr folgen",
"unmute": "Stummschalten aufheben",
"unmute_progress": "Aufhebung erfolgt…",
"unsubscribe": "Entfolgen"
},
"user_profile": {
"field_validated": "Link verifiziert",
"profile_does_not_exist": "Profil nicht vorhanden.",
"profile_loading_error": "Beim Laden dieses Profils ist ein Fehler aufgetreten.",
"timeline_title": "Beiträge"

220
src/i18n/el.json Normal file
View File

@ -0,0 +1,220 @@
{
"about": {
"mrf": {
"keyword": {
"keyword_policies": "Πολιτικές λέξεων-κλειδιών",
"reject": "Απόρριψη",
"replace": "Αντικατάσταση"
},
"mrf_policies": "Ενεργοποιημένες πολιτικές MRF",
"mrf_policies_desc": "",
"simple": {
"accept": "Αποδοχή",
"accept_desc": "Αυτό το instance αποδέχεται μηνύματα μόνο από τα ακόλουθα instances:",
"ftl_removal": "Αφαίρεση από το χρονολόγιο \"Γνωστού Δίκτυου\"",
"ftl_removal_desc": "Αυτό το instance αφαιρεί αυτά τα instances από το χρονολόγιο \"Γνωστού Δικτύου\":",
"quarantine": "Καραντίνα",
"quarantine_desc": "Αυτό το instance δε θα στέλνει αναρτήσεις στα ακόλουθα instances:",
"reason": "Λόγος",
"simple_policies": "Πολιτικές του instance"
}
},
"staff": "Προσωπικό"
},
"announcements": {
"all_day_prompt": "Αυτό είναι ένα ολοήμερο συμβάν",
"cancel_edit_action": "Ακύρωση",
"close_error": "Κλείσιμο",
"delete_action": "Διαγραφή",
"edit_action": "Επεξεργασία",
"end_time_display": "Λήγει στις {time}",
"end_time_prompt": "Λήξη: ",
"inactive_message": "Αυτή η ανακοίνωση είναι ανενεργή",
"page_header": "Ανακοινώσεις",
"post_action": "Ανάρτηση",
"title": "Ανακοίνωση"
},
"chats": {
"delete_confirm": "Θέλετε σίγουρα να διαγράψετε αυτό το μήνυμα;",
"empty_message_error": "Δε μπορεί να σταλεί κενό μήνυμα",
"error_sending_message": "Κάτι πήγε λάθος κατά την αποστολή του μηνύματος.",
"message_user": "Στείλε μήνυμα στον/στην {nickname}",
"more": "Περισσότερα",
"new": "Νέο Chat",
"you": "Εσείς:"
},
"display_date": {
"today": "Σήμερα"
},
"domain_mute_card": {
"mute": "Σίγαση"
},
"emoji": {
"add_emoji": "Εισαγωγή emoji",
"load_all": "Φόρτωση όλων των {emojiAmount} emoji",
"recent": "Χρησιμοποιήθηκαν πρόσφατα",
"search_emoji": "Αναζήτηση για ένα emoji",
"stickers": "Αυτοκόλλητα"
},
"errors": {
"storage_unavailable": "Το Pleroma δε μπόρεσε να προσπελάσει τον αποθηκευτικό χώρο του browser. Η σύνδεσή σας ή οι τοπικές ρυθμίσεις σας δε θα αποθηκευτούν και μπορεί να αντιμετωπίσετε απρόοπτα θέματα. Προσπαθήστε να ενεργοποιήσετε τα cookies."
},
"exporter": {
"export": "Εξαγωγή"
},
"features_panel": {
"text_limit": "Όριο κειμένου"
},
"file_type": {
"audio": "Ήχος",
"file": "Αρχείο",
"image": "Εικόνα",
"video": "Βίντεο"
},
"general": {
"apply": "Εφαρμογή",
"cancel": "Ακύρωση",
"close": "Κλείσιμο",
"disable": "Απενεργοποίηση",
"enable": "Ενεργοποίηση",
"error_retry": "Παρακαλώ δοκιμάστε ξανά",
"flash_content": "Κάντε κλικ για την εμφάνιση Flash περιεχομένου με τη χρήση του Ruffle (Πειραματικό, μπορεί να μη λειτουργεί).",
"loading": "Φόρτωση…",
"more": "Περισσότερα",
"optional": "προαιρετικό",
"retry": "Δοκιμάστε ξανά",
"role": {
"admin": "Διαχειριστής",
"moderator": "Συντονιστής"
},
"scope_in_timeline": {
"direct": "Άμεσο",
"local": "Τοπικό",
"private": "Μόνο για ακόλουθους",
"public": "Δημόσιο",
"unlisted": "Εκτός Λίστας"
},
"show_less": "Δείξε λιγότερα",
"show_more": "Δείξε περισσότερα"
},
"image_cropper": {
"cancel": "Ακύρωση",
"crop_picture": "Περικοπή εικόνας",
"save": "Αποθήκευση",
"save_without_cropping": "Αποθήκευση χωρίς περικοπή"
},
"importer": {
"success": "Εισήχθη επιτυχώς."
},
"languages": {
"ar": "Αραβικά",
"az": "Αζερικά",
"bg": "Βουλγαρικά",
"cs": "Τσεχικά",
"da": "Δανικά",
"de": "Γερμανικά",
"el": "Ελληνικά",
"en": "Αγγλικά",
"eo": "Εσπεράντο",
"es": "Ισπανικά",
"fa": "Περσικά",
"fi": "Φινλανδικά",
"fr": "Γαλλικά",
"ga": "Ιρλανδικά",
"he": "Εβραϊκά",
"hi": "Χίντι",
"hu": "Ουγγρικά",
"id": "Ινδονησιακά",
"it": "Ιταλικά",
"ja": "Ιαπωνικά",
"ko": "Κορεατικά",
"lt": "Λιθουανικά",
"lv": "Λετονικά",
"nl": "Ολλανδικά",
"pl": "Πολωνικά",
"pt": "Πορτογαλικά",
"ru": "Ρωσικά",
"sk": "Σλοβακικά",
"sv": "Σουηδικά",
"tr": "Τουρκικά",
"translated_from": {
"ar": "Μεταφράστηκε από τα @:languages.ar",
"az": "Μεταφράστηκε από τα @:languages.az",
"bg": "Μεταφράστηκε από τα @:languages.bg",
"cs": "Μεταφράστηκε από τα @:languages.cs",
"da": "Μεταφράστηκε από τα @:languages.da",
"de": "Μεταφράστηκε από τα @:languages.de",
"el": "Μεταφράστηκε από τα @:languages.el",
"en": "Μεταφράστηκε από τα @:languages.en",
"eo": "Μεταφράστηκε από τα @:languages.eo",
"es": "Μεταφράστηκε από τα @:languages.es",
"fa": "Μεταφράστηκε από τα @:languages.fa",
"fi": "Μεταφράστηκε από τα @:languages.fi",
"fr": "Μεταφράστηκε από τα @:languages.fr",
"ga": "Μεταφράστηκε από τα @:languages.ga",
"he": "Μεταφράστηκε από τα @:languages.he",
"hi": "Μεταφράστηκε από τα @:languages.hi",
"hu": "Μεταφράστηκε από τα @:languages.hu",
"id": "Μεταφράστηκε από τα @:languages.id",
"it": "Μεταφράστηκε από τα @:languages.it",
"ja": "Μεταφράστηκε από τα @:languages.ja",
"ko": "Μεταφράστηκε από τα @:languages.ko",
"lt": "Μεταφράστηκε από τα @:languages.lt",
"lv": "Μεταφράστηκε από τα @:languages.lv",
"nl": "Μεταφράστηκε από τα @:languages.nl",
"pl": "Μεταφράστηκε από τα @:languages.pl",
"pt": "Μεταφράστηκε από τα @:languages.pt",
"ru": "Μεταφράστηκε από τα @:languages.ru",
"sk": "Μεταφράστηκε από τα @:languages.sk",
"sv": "Μεταφράστηκε από τα @:languages.sv",
"tr": "tr",
"uk": "Μεταφράστηκε από τα @:languages.uk",
"zh": "Μεταφράστηκε από τα @:languages.zh"
},
"uk": "Ουκρανικά",
"zh": "Κινεζικά"
},
"lists": {
"create": "Δημιουργία",
"delete": "Διαγραφή λίστας",
"lists": "Λίστες",
"new": "Νέα Λίστα",
"save": "Αποθήκευση αλλαγών",
"search": "Αναζήτηση χρηστών",
"title": "Τίτλος λίστας"
},
"login": {
"authentication_code": "Κωδικός επαλήθευσης",
"description": "Σύνδεση με OAuth",
"enter_recovery_code": "Εισάγετε τον κωδικό ανάκτησης",
"hint": "Συνδεθείτε για να μπείτε στη συζήτηση",
"login": "Σύνδεση",
"logout": "Αποσύνδεση",
"logout_confirm": "Θέλετε σίγουρα να αποσυνδεθείτε;",
"logout_confirm_accept_button": "Αποσύνδεση",
"logout_confirm_cancel_button": "Ακύρωση",
"logout_confirm_title": "Αποσύνδεση",
"password": "Κωδικός πρόσβασης",
"placeholder": "τοονομαχρηστημου",
"recovery_code": "Κωδικός ανάκτησης",
"register": "Εγγραφή",
"username": "Όνομα χρήστη"
},
"media_modal": {
"next": "Επόμενο",
"previous": "Προηγούμενο"
},
"moderation": {
"reports": {
"add_note": "Προσθήκη σημείωσης",
"close": "Κλείσιμο",
"delete_note": "Διαγραφή",
"delete_note_accept": "Ναι, διάγραψέ το",
"delete_note_cancel": "Όχι, κράτα το",
"delete_note_confirm": "Θέλετε σίγουρα να διαγράψετε αυτήν τη σημείωση;",
"note_placeholder": "Αφήστε μια σημείωση",
"notes": "{ count } σημείωση | { count } σημειώσεις",
"statuses": "{ count } ανάρτηση| { count } αναρτήσεις"
}
}
}

View File

@ -86,7 +86,8 @@
"load_all_hint": "Loaded first {saneAmount} emoji, loading all emoji may cause performance issues.",
"search_emoji": "Search for an emoji",
"stickers": "Stickers",
"unicode": "Unicode emoji"
"unicode": "Unicode emoji",
"recent": "Recently used"
},
"errors": {
"storage_unavailable": "Pleroma could not access browser storage. Your login or your local settings won't be saved and you might encounter unexpected issues. Try enabling cookies."
@ -379,6 +380,7 @@
"text/x.misskeymarkdown": "MFM"
},
"content_warning": "Content Warning (optional)",
"toggle_content_warning": "Toggle content warning",
"default": "(Content goes here)",
"direct_warning_to_all": "This post will be visible to all the mentioned users.",
"direct_warning_to_first_only": "This post will only be visible to the mentioned users at the beginning of the message.",
@ -599,6 +601,7 @@
"list_aliases_error": "Error fetching aliases: {error}",
"list_backups_error": "Error fetching backup list: {error}",
"lock_account_description": "Restrict your account to approved followers only",
"permit_followback_description": "Automatically approve requests from already followed users",
"loop_video": "Loop videos",
"loop_video_silent_only": "Loop only videos without sound (i.e. Mastodon's \"gifs\")",
"mascot": "Mastodon FE Mascot",
@ -748,6 +751,7 @@
"show_nav_shortcuts": "Show extra navigation shortcuts in top panel",
"show_panel_nav_shortcuts": "Show timeline navigation shortcuts at the top of the panel",
"show_scrollbars": "Show side column's scrollbars",
"show_page_backgrounds": "Show page-specific backgrounds, e.g. for user profiles",
"show_wider_shortcuts": "Show wider gap between top panel shortcuts",
"show_yous": "Show (You)s",
"stop_gifs": "Pause animated images until you hover on them",
@ -831,7 +835,7 @@
"fine_print": "Read our {0} to learn nothing useful!",
"header": "Preview",
"header_faint": "This is fine",
"input": "Just arrived at Luna Nova Academy",
"input": "[content goes here]",
"link": "a nice lil' link",
"mono": "content",
"text": "A bunch of more {0} and {1}"
@ -921,13 +925,16 @@
"upload_a_photo": "Upload a photo",
"useStreamingApi": "Receive posts and notifications real-time",
"useStreamingApiWarning": "It's cool use it. If it breaks refresh I guess?",
"use_at_icon": "Display {'@'} symbol as an icon instead of text",
"use_contain_fit": "Don't crop the attachment in thumbnails",
"use_one_click_nsfw": "Open NSFW attachments with just one click",
"user_mutes": "Users",
"user_profile_default_tab": "Default Tab on User Profile",
"user_profiles": "User Profiles",
"user_settings": "User Settings",
"user_accepts_direct_messages_from": "Accept DMs From",
"user_accepts_direct_messages_from_everybody": "Everybody",
"user_accepts_direct_messages_from_nobody": "Nobody",
"user_accepts_direct_messages_from_people_i_follow": "People I follow",
"valid_until": "Valid until",
"values": {
"false": "no",

View File

@ -84,6 +84,7 @@
"keep_open": "Mantener el selector abierto",
"load_all": "Cargando todos los {emojiAmount} emoji",
"load_all_hint": "Cargado el primer emoji {saneAmount}, cargar todos los emoji puede causar problemas de rendimiento.",
"recent": "Recientemente usado",
"search_emoji": "Buscar un emoji",
"stickers": "Pegatinas",
"unicode": "Emojis unicode"
@ -282,18 +283,18 @@
"delete_note_title": "Confirma la eliminación",
"no_content": "Sin descripción dada",
"no_reports": "No hay informes que mostrar",
"note_placeholder": "Dejar una nota...",
"note_placeholder": "Dejar una nota",
"notes": "{ count } nota | { count } notas",
"reopen": "Reabrir",
"report": "Reportar",
"reports": "Reportes",
"resolve": "Resolver",
"show_closed": "Mostrar cerrados",
"statuses": "{ count } estado | { count } estados",
"statuses": "{ count } publicación | { count } publicaciones",
"tag_policy_notice": "Habilitar TagPolicy MRF para establecer restricciones de publicación",
"tags": "Establecer restricciones de publicación"
},
"statuses": "Estados",
"statuses": "Publicaciones",
"users": "Usuarios"
},
"nav": {
@ -535,6 +536,8 @@
"enable_web_push_notifications": "Habilitar las notificiaciones en el navegador",
"enter_current_password_to_confirm": "Introduce la contraseña actual para confirmar tu identidad",
"expert_mode": "Mostrar avanzados",
"expire_posts_enabled": "Eliminar publicaciones después de una cantidad determinada de días",
"expire_posts_input_placeholder": "Número de días",
"export_theme": "Exportar tema",
"file_export_import": {
"backup_restore": "Copia de seguridad de la configuración",
@ -696,6 +699,7 @@
"remove_alias": "Eliminar este alias",
"remove_backup": "Eliminar",
"render_mfm": "Renderizar Markdown de Misskey",
"render_mfm_on_hover": "Pausa las animaciones MFM hasta que se desplace el mensaje",
"replies_in_timeline": "Réplicas en la línea temporal",
"reply_visibility_all": "Mostrar todas las réplicas",
"reply_visibility_following": "Solo mostrar réplicas para mí o usuarios a los que sigo",
@ -719,6 +723,7 @@
"security": "Seguridad",
"security_tab": "Seguridad",
"sensitive_by_default": "Identificar las publicaciones como sensibles de forma predeterminada",
"sensitive_if_subject": "Marcar automáticamente las imágenes como confidenciales si se especifica una advertencia de contenido",
"set_new_avatar": "Cambiar avatar",
"set_new_mascot": "Fijar nueva mascota",
"set_new_profile_background": "Cambiar el fondo del perfil",
@ -736,10 +741,16 @@
"settings_profile_force_sync": "Sincronizar",
"settings_profile_in_use": "En uso",
"settings_profile_use": "Usar",
"settings_profiles_refresh": "Recargar perfiles de configuración",
"settings_profiles_show": "Mostrar todos los perfiles de configuración",
"settings_profiles_unshow": "Ocultar todos los perfiles de configuración",
"show_admin_badge": "Mostrar la insignia de \"Administrador/a\" en mi perfil",
"show_moderator_badge": "Mostrar la insignia de \"Moderador/a\" en mi perfil",
"show_nav_shortcuts": "Mostrar accesos directos de navegación adicionales en el panel superior",
"show_panel_nav_shortcuts": "Mostrar accesos directos de navegación de la línea de tiempo en la parte superior del panel",
"show_scrollbars": "Mostrar las barras de desplazamiento de la columna lateral",
"show_wider_shortcuts": "Mostrar una brecha más amplia entre los accesos directos del panel superior",
"show_yous": "Mostrar (Tú)s",
"stop_gifs": "Iniciar GIFs al pasar el ratón",
"streaming": "Habilitar la transmisión automática de nuevas publicaciones cuando se desplaza hacia la parte superior",
"style": {
@ -888,9 +899,9 @@
"use_source": "Nueva versión"
}
},
"subject_input_always_show": "Mostrar siempre el campo del tema",
"subject_line_behavior": "Copiar el tema en las respuestas",
"subject_line_email": "Como email: \"re: tema\"",
"subject_input_always_show": "Mostrar siempre el campo de advertencia de contenido",
"subject_line_behavior": "Copiar el campo de advertencia en las respuestas",
"subject_line_email": "Como email: \"re: advertencia\"",
"subject_line_mastodon": "Como mastodon: copiar como es",
"subject_line_noop": "No copiar",
"text": "Texto",
@ -898,15 +909,27 @@
"theme_help": "Use códigos de color hexadecimales (#rrggbb) para personalizar su tema de colores.",
"theme_help_v2_1": "También puede invalidar los colores y la opacidad de ciertos componentes si activa la casilla de verificación. Use el botón \"Borrar todo\" para deshacer los cambios.",
"theme_help_v2_2": "Los iconos debajo de algunas publicaciones son indicadores de contraste de fondo/texto, desplace el ratón por encima para obtener información más detallada. Tenga en cuenta que cuando se utilizan indicadores de contraste de transparencia se muestra el peor caso posible.",
"third_column_mode": "Cuando haya suficiente espacio, muestre la tercera columna",
"third_column_mode_none": "No mostrar la tercera columna en absoluto",
"third_column_mode_notifications": "Columna de notificaciones",
"third_column_mode_postform": "Formulario principal de publicación y navegación",
"token": "Token",
"tooltipRadius": "Información/alertas",
"translation_language": "Idioma de traducción automática",
"tree_advanced": "Mostrar botones extras para abrir y cerrar la cadena de réplicas en los hilos",
"type_domains_to_mute": "Buscar dominios para silenciar",
"upload_a_photo": "Subir una foto",
"useStreamingApi": "Recibir publicaciones y notificaciones en tiempo real",
"useStreamingApiWarning": "(no recomendado, experimental, puede omitir publicaciones)",
"use_blurhash": "Usar miniaturas borrosas para las imágenes sensibles",
"use_contain_fit": "No recortar los adjuntos en miniaturas",
"use_one_click_nsfw": "Abrir los adjuntos NSFW con un solo click",
"user_accepts_direct_messages_from": "Aceptar mensajes directos de",
"user_accepts_direct_messages_from_everybody": "Todos",
"user_accepts_direct_messages_from_nobody": "Nadie",
"user_accepts_direct_messages_from_people_i_follow": "Personas que sigo",
"user_mutes": "Usuarios",
"user_profiles": "Perfiles de usuario",
"user_settings": "Ajustes del Usuario",
"valid_until": "Válido hasta",
"values": {
@ -919,26 +942,61 @@
"title": "Versión"
},
"virtual_scrolling": "Optimizar la representación de la linea temporal",
"word_filter": "Filtro de palabras"
"word_filter": "Filtro de palabras",
"wordfilter": "Filtro de palabras"
},
"settings_profile": {
"creating": "Creando un nuevo perfil de configuración \"{profile}\"...",
"synchronization_error": "No se pudo sincronizar la configuración: {err}",
"synchronized": "¡Ajustes sincronizados!",
"synchronizing": "Sincronizando los ajustes de perfil \"{profile}\"..."
},
"status": {
"ancestor_follow": "Vea {numReplies} respuesta en esta publicación | Ver otras {numReplies} respuestas en esta publicación",
"ancestor_follow_with_icon": "{icon} {text}",
"attachment_stop_flash": "Parar el reproductor Flash",
"bookmark": "Marcar",
"copy_link": "Copiar el enlace al estado",
"delete": "Eliminar publicación",
"delete_confirm": "¿Realmente quieres borrar la publicación?",
"collapse_attachments": "Minimizar adjuntos",
"copy_link": "Copiar el enlace al mensaje",
"delete": "Eliminar mensaje",
"delete_confirm": "¿Realmente quieres borrar el mensaje?",
"delete_confirm_accept_button": "Sí, elimínelo",
"delete_confirm_cancel_button": "No, mantenerlo",
"delete_confirm_title": "Confirmar la eliminación",
"edit": "Editar",
"edit_history": "Editar el historial",
"edit_history_modal_title": "Editado {historyCount} vez | Editado {historyCount} veces",
"edited_at": "Editado {time}",
"expand": "Expandir",
"external_source": "Fuente externa",
"favorites": "Favoritos",
"hide_attachment": "Ocultar adjuntos",
"hide_content": "Ocultar el contenido",
"hide_full_subject": "Ocultar el tema completo",
"hide_full_subject": "Ocultar la advertencia de contenido",
"many_attachments": "El mensaje tiene {number} adjunto | El mensaje tiene {number} adjuntos",
"mentions": "Menciones",
"move_down": "Desplazar adjunto a la derecha",
"move_up": "Desplazar adjunto a la izquierda",
"mute_conversation": "Silenciar la conversación",
"nsfw": "NSFW (No apropiado para el trabajo)",
"open_gallery": "Abrir la galería",
"override_translation_source_language": "Anular el idioma de origen",
"pin": "Fijar en tu perfil",
"pinned": "Fijado",
"plus_more": "+{number} más",
"redraft": "Eliminar y volver a redactar",
"redraft_confirm": "¿Realmente deseas eliminar y volver a redactar esta publicación? Las interacciones con la publicación original no se conservarán.",
"redraft_confirm_accept_button": "Sí, eliminar y volver a redactar",
"redraft_confirm_cancel_button": "No, conserva el original",
"redraft_confirm_title": "Confirmar eliminación y volver a redactar",
"remove_attachment": "Quitar archivo adjunto",
"repeat_confirm": "¿De verdad quieres repetir esta entrada?",
"repeat_confirm_accept_button": "Si, repítela",
"repeat_confirm_cancel_button": "No, no repitas",
"repeat_confirm_title": "Confirmar repetir",
"repeats": "Repetidos",
"replies_list": "Respuestas:",
"replies_list_with_others": "Ver {numReplies} respuesta | Ver {numReplies} respuestas más",
"reply_to": "Respondiendo a",
"show_content": "Mostrar el contenido",
"show_full_subject": "Mostrar el tema completo",

View File

@ -84,6 +84,7 @@
"keep_open": "Garder ouvert",
"load_all": "Charger tout les {emojiAmount} émojis",
"load_all_hint": "{saneAmount} émojis chargé, charger tout les émojis peuvent causer des problèmes de performances.",
"recent": "Utilisé récemment",
"search_emoji": "Rechercher un émoji",
"stickers": "Stickers",
"unicode": "émoji unicode"
@ -254,6 +255,10 @@
"hint": "Connectez-vous pour rejoindre la discussion",
"login": "Connexion",
"logout": "Déconnexion",
"logout_confirm": "Voulez-vous vraiment vous déconnecter ?",
"logout_confirm_accept_button": "Déconnexion",
"logout_confirm_cancel_button": "Annuler",
"logout_confirm_title": "Déconnexion",
"password": "Mot de passe",
"placeholder": "mon nom d'utilisateur",
"recovery_code": "Code de récupération",
@ -266,6 +271,32 @@
"next": "Suivant",
"previous": "Précédent"
},
"moderation": {
"moderation": "Modération",
"reports": {
"add_note": "Ajouter une note",
"close": "Fermer",
"delete_note": "Supprimer",
"delete_note_accept": "Oui, supprimer",
"delete_note_cancel": "Non, abandonner",
"delete_note_confirm": "Voulez-vous vraiment supprimer cette note ?",
"delete_note_title": "Confirmer la suppression",
"no_content": "Description vide",
"no_reports": "Aucun rapport",
"note_placeholder": "Laisser une note",
"notes": "{ count } note | { count } notes",
"reopen": "Rouvrir",
"report": "Signaler",
"reports": "Rapports",
"resolve": "Résoudre",
"show_closed": "Afficher les rapports classés",
"statuses": "{ count } statut| { count } statuts",
"tag_policy_notice": "Activer la politique MRF pour établir les restrictions de publication",
"tags": "Établir les restrictions de publication"
},
"statuses": "Statuts",
"users": "Utilisateurs"
},
"nav": {
"about": "À propos",
"administration": "Administration",
@ -282,6 +313,7 @@
"interactions": "Interactions",
"lists": "Listes",
"mentions": "Mentions",
"moderation": "Moderation",
"preferences": "Préférences",
"public_timeline_description": "Tous les statuts publics de cette instance",
"public_tl": "Flux publique",
@ -378,6 +410,8 @@
}
},
"registration": {
"awaiting_email_confirmation": "Votre compte a été enregistré et un courriel envoyé à votre adresse. Veuillez consulter votre boîte mail pour terminer la registration.",
"awaiting_email_confirmation_title": "En attente de confirmation par courriel",
"bio": "Biographie",
"bio_placeholder": "ex :\nSalut, je me présente ici !\nJadore les animés et les jeux vidéos. Jespère qu'on peut être amis⋅ies !",
"captcha": "CAPTCHA",
@ -391,6 +425,8 @@
"reason_placeholder": "Cette instance modère les inscriptions manuellement.\nExpliquer ce qui motive votre inscription à l'administration.",
"register": "Enregistrer",
"registration": "Inscription",
"request_sent": "Votre demande d'enregistrement est en attente d'approbation. Vous recevrez un courriel lorsque votre compte sera approuvé.",
"request_sent_title": "Demande d'abonnement envoyée",
"token": "Jeton d'invitation",
"username_placeholder": "ex : misato",
"validations": {
@ -884,7 +920,6 @@
"upload_a_photo": "Envoyer une photo",
"useStreamingApi": "Recevoir les messages et notifications en temps réel",
"useStreamingApiWarning": "(Non recommandé, expérimental, connu pour rater des messages)",
"use_at_icon": "Afficher le symbol {'@'} comme une image",
"use_contain_fit": "Ne pas rogner les miniatures des pièces-jointes",
"use_one_click_nsfw": "Ouvrir les pièces-jointes sensibles avec un seul clic",
"user_mutes": "Comptes",

View File

@ -1,13 +1,18 @@
{
"about": {
"bubble_instances": "Instance Bubble Lokal",
"bubble_instances_description": "Instansi yang dipilih oleh admin untuk mewakili daerah lokal instansi ini",
"mrf": {
"federation": "Federasi",
"keyword": {
"ftl_removal": "Penghapusan dari Linimasa \"Jaringan Yang Dikenal\"",
"is_replaced_by": "→",
"reject": "Tolak"
"keyword_policies": "Kebijakan Kata Kunci",
"reject": "Tolak",
"replace": "Ganti"
},
"mrf_policies": "Kebijakan MRF yang diaktifkan",
"mrf_policies_desc": "Kebijakan MRF memanipulasi federasi yang terjadi pada instansi ini. Kebijakan berikut adalah yang aktif:",
"simple": {
"accept": "Terima",
"accept_desc": "Instansi ini hanya menerima pesan dari instansi-instansi berikut:",
@ -79,6 +84,7 @@
"keep_open": "Tetap buka pemilih",
"load_all": "Memuat semua {emojiAmount} emoji",
"load_all_hint": "Memuat {saneAmount} emoji pertama, memuat semua emoji dapat menyebabkan masalah performa.",
"recent": "Baru-baru ini digunakan",
"search_emoji": "Cari emoji",
"stickers": "Stiker",
"unicode": "Emoji Unicode"
@ -92,9 +98,11 @@
},
"features_panel": {
"media_proxy": "Proxy media",
"scope_options": "Opsi cakupan",
"text_limit": "Batas teks",
"title": "Fitur-fitur",
"upload_limit": "Batas unggahan"
"upload_limit": "Batas unggahan",
"who_to_follow": "Siapa untuk diikuti"
},
"file_type": {
"audio": "Audio",
@ -112,6 +120,7 @@
"close": "Tutup",
"confirm": "Konfirmasi",
"disable": "Nonaktifkan",
"dismiss": "Tutup",
"enable": "Aktifkan",
"error_retry": "Harap coba lagi",
"flash_content": "Klik untuk menampilkan konten Flash menggunakan Ruffle (Eksperimental, mungkin tidak bekerja).",
@ -131,7 +140,8 @@
"direct": "Langsung",
"local": "Lokal - hanya instansi kamu yang dapat melihat postingan ini",
"private": "Hanya pengikut",
"public": "Publik"
"public": "Publik",
"unlisted": "Tidak Tercantum"
},
"show_less": "Tampilkan lebih sedikit",
"show_more": "Tampilkan lebih banyak",
@ -181,15 +191,44 @@
"lv": "Latvia",
"nl": "Belanda",
"pl": "Polandia",
"pt": "Portugal",
"pt": "Portugis",
"ru": "Rusia",
"sk": "Slovakia",
"sv": "Swedia",
"tr": "Turki",
"translated_from": {
"ar": "Diterjemahkan dari @:languages.ar",
"bg": "Diterjemahkan dari @:languages.bg",
"en": "Diterjemahkan dari @:languages.en"
"ar": "Diterjemahkan dari bahasa @:languages.ar",
"az": "Diterjemahkan dari bahasa @:languages.az",
"bg": "Diterjemahkan dari bahasa @:languages.bg",
"cs": "Diterjemahkan dari bahasa @:languages.cs",
"da": "Diterjemahkan dari bahasa @:languages.da",
"de": "Diterjemahkan dari bahasa @:languages.de",
"el": "Diterjemahkan dari bahasa @:languages.el",
"en": "Diterjemahkan dari bahasa @:languages.en",
"eo": "Diterjemahkan dari bahasa @:languages.eo",
"es": "Diterjemahkan dari bahasa @:languages.es",
"fa": "Diterjemahkan dari bahasa @:languages.fa",
"fi": "Diterjemahkan dari bahasa @:languages.fi",
"fr": "Diterjemahkan dari bahasa @:languages.fr",
"ga": "Diterjemahkan dari bahasa @:languages.ga",
"he": "Diterjemahkan dari bahasa @:languages.he",
"hi": "Diterjemahkan dari bahasa @:languages.hi",
"hu": "Diterjemahkan dari bahasa @:languages.hu",
"id": "Diterjemahkan dari bahasa @:languages.id",
"it": "Diterjemahkan dari bahasa @:languages.it",
"ja": "Diterjemahkan dari bahasa @:languages.ja",
"ko": "Diterjemahkan dari bahasa @:languages.ko",
"lt": "Diterjemahkan dari bahasa @:languages.lt",
"lv": "Diterjemahkan dari bahasa @:languages.lv",
"nl": "Diterjemahkan dari bahasa @:languages.nl",
"pl": "Diterjemahkan dari bahasa @:languages.pl",
"pt": "Diterjemahkan dari bahasa @:languages.pt",
"ru": "Diterjemahkan dari bahasa @:languages.ru",
"sk": "Diterjemahkan dari bahasa @:languages.sk",
"sv": "Diterjemahkan dari bahasa @:languages.sv",
"tr": "Diterjemahkan dari bahasa @:languages.tr",
"uk": "Diterjemahkan dari bahasa @:languages.uk",
"zh": "Diterjemahkan dari bahasa @:languages.zh"
},
"uk": "Ukraina",
"zh": "Tionghoa"
@ -197,6 +236,7 @@
"lists": {
"create": "Buat",
"delete": "Hapus daftar",
"following_only": "Batas mengikuti",
"lists": "Daftar",
"new": "Buat Daftar",
"save": "Simpan perubahan",
@ -243,13 +283,18 @@
"delete_note_title": "Konfirmasi penghapusan",
"no_content": "Tak diberikan keterangan",
"no_reports": "Tak ada laporan",
"note_placeholder": "Tinggalkan catatan...",
"note_placeholder": "Tinggalkan catatan",
"notes": "{ count } catatan",
"reopen": "Buka kembali",
"report": "Laporan di",
"reports": "Laporan",
"resolve": "Selesaikan",
"show_closed": "Tampilkan yang telah ditutup"
"show_closed": "Tampilkan yang telah ditutup",
"statuses": "{ count } postingan",
"tag_policy_notice": "Aktifkan MRF TagPolicy untuk mengatur pembatasan postingan",
"tags": "Atur pembatasan postingan"
},
"statuses": "Status",
"statuses": "Postingan",
"users": "Pengguna"
},
"nav": {
@ -257,6 +302,8 @@
"administration": "Administrasi",
"announcements": "Pengumuman",
"back": "Kembali",
"bookmarks": "Bookmark",
"bubble_timeline": "Timeline Bubble",
"bubble_timeline_description": "Postingan dari instansi yang dekat dengan instansimu, yang direkomendasikan oleh admin kamu",
"chats": "Obrolan",
"dms": "Pesan langsung",
@ -275,7 +322,8 @@
"timelines": "Linimasa",
"twkn": "Jaringan Yang Dikenal",
"twkn_timeline_description": "Postingan dari seluruh jaringan",
"user_search": "Penelusuran Pengguna"
"user_search": "Penelusuran Pengguna",
"who_to_follow": "Siapa untuk diikuti"
},
"notifications": {
"broken_favorite": "Postingan tak dikenal, mencarinya…",
@ -310,10 +358,11 @@
"expired": "Japat berakhir {0} yang lalu",
"expires_in": "Japat berakhir dalam {0}",
"expiry": "Usia japat",
"multiple_choices": "Lebih dari satu opsi dapat dipilih",
"not_enough_options": "Terlalu sedikit opsi yang unik pada japat",
"option": "Opsi",
"people_voted_count": "{count} orang memilih | {count} orang memilih",
"single_choice": "",
"single_choice": "Hanya satu opsi dapat dipilih",
"type": "Jenis japat",
"vote": "Pilih",
"votes": "suara",
@ -350,7 +399,8 @@
"direct": "Langsung - posting hanya kepada pengguna yang disebut",
"local": "Lokal - postingan tidak akan difederasi",
"private": "Hanya-pengikut - posting hanya kepada pengikut",
"public": "Publik - posting ke linimasa publik"
"public": "Publik - posting ke linimasa publik",
"unlisted": "Tidak Tercantum - Tidak memposting ke timeline publik"
},
"scope_notice": {
"local": "Postingan ini tidak akan terlihat di instansi lain",
@ -367,6 +417,7 @@
"captcha": "CAPTCHA",
"email": "Surel",
"email_language": "Dalam bahasa apa kamu ingin menerima surel dari server ini?",
"fullname": "Tampilan Nama",
"fullname_placeholder": "cth. Atsuko Kagari",
"new_captcha": "Klik gambarnya untuk mendapatkan captcha baru",
"password_confirm": "Konfirmasi kata sandi",
@ -389,6 +440,7 @@
},
"remote_user_resolver": {
"error": "Tidak ditemukan.",
"remote_user_resolver": "Pencarian pengguna jarak jauh",
"searching_for": "Mencari"
},
"search": {
@ -402,15 +454,24 @@
"select_all": "Pilih semua"
},
"settings": {
"accent": "Aksen",
"account_alias": "Akun alias",
"account_alias_table_head": "Alias",
"account_backup": "Pencadangan akun",
"account_backup_description": "Ini memungkinkan kamu untuk mengunduh arsip yang berisi informasi tentang akun dan postingan kamu, namun belum bisa diimpor ke akun Pleroma.",
"account_backup_table_head": "Cadangan",
"account_privacy": "Privasi",
"add_alias_error": "Gagal menambahkan alias: {error}",
"add_backup": "Buat cadangan baru",
"add_backup_error": "Gagal menambahkan cadangan baru: {error}",
"added_alias": "Alias telah ditambahkan.",
"added_backup": "Cadangan baru ditambahkan.",
"allow_following_move": "Ikuti otomatis apabila akun yang diikuti pindah",
"always_show_post_button": "Selalu tampilkan tombol posting baru yang mengambang",
"app_name": "Nama aplikasi",
"attachmentRadius": "Lampiran",
"attachments": "Lampiran",
"autohide_floating_post_button": "Sembunyikan tombol buat posting secara otomatis (Ponsel)",
"avatar": "Avatar",
"avatarAltRadius": "Avatar (notifikasi)",
"avatarRadius": "Avatar",
@ -438,6 +499,8 @@
"changed_password": "Kata sandi berhasil diubah!",
"chatMessageRadius": "Pesan obrolan",
"checkboxRadius": "Kotak centang",
"collapse_subject": "Tampilkan post dengan peringatan",
"columns": "Kolum",
"composing": "Menulis",
"confirm_dialogs": "Perlukan konfirmasi sebelum:",
"confirm_dialogs_approve_follow": "Menerima permintaan mengikuti",
@ -448,13 +511,23 @@
"confirm_dialogs_repeat": "Mengulangi postingan",
"confirm_dialogs_unfollow": "Berhenti mengikuti seseorang",
"confirm_new_password": "Konfirmasi kata sandi baru",
"conversation_display": "Gaya tampilan obrolan",
"confirmation_dialogs": "Opsi Konfirmasi",
"conversation_display": "Gaya tampilan percakapan",
"conversation_display_linear": "Gaya Linier",
"conversation_display_tree": "Bercabang",
"conversation_other_replies_button": "Tampilkan tombol \"Balasan lainnya\"",
"conversation_other_replies_button_below": "Di bawah postingan",
"conversation_other_replies_button_inside": "Di postingan",
"current_avatar": "Avatarmu saat ini",
"current_mascot": "Maskot utamamu",
"current_password": "Kata sandi saat ini",
"data_import_export_tab": "Impor / ekspor data",
"default_vis": "Cakupan visibilitas default",
"delete_account": "Hapus akun",
"delete_account_description": "Hapus data kamu secara permanen dan nonaktifkan akunmu.",
"delete_account_error": "Ada masalah ketika menghapus akun kamu. Jika ini terus terjadi harap hubungi adminstrator instansi kamu.",
"delete_account_instructions": "Ketik kata sandi kamu pada input di bawah untuk mengonfirmasi penghapusan akun.",
"disable_sticky_headers": "Jangan tempel tajuk kolom ke bagian atas layar",
"discoverable": "Izinkan penelusuran akun ini pada hasil pencarian dan layanan lainnya",
"domain_mutes": "Domain",
"download_backup": "Unduh",
@ -462,30 +535,61 @@
"emoji_reactions_on_timeline": "Tampilkan reaksi emoji pada linimasa",
"enable_web_push_notifications": "Aktifkan notifikasi push web",
"enter_current_password_to_confirm": "Masukkan kata sandi kamu saat ini untuk mengonfirmasi identitas kamu",
"expert_mode": "Tampilkan pengaturan lanjutan",
"expire_posts_enabled": "Hapus postingan setelah jumlah hari yang ditentukan",
"expire_posts_input_placeholder": "Jumlah hari",
"export_theme": "Simpan preset",
"file_export_import": {
"backup_restore": "Pencadangan pengaturan",
"backup_settings": "Cadangkan pengaturan ke berkas",
"backup_settings_theme": "Cadangkan pengaturan dan tema ke berkas",
"errors": {
"file_slightly_new": "Versi minor berkas berbeda, beberapa pengaturan mungkin tidak termuat"
}
"file_slightly_new": "Versi minor berkas berbeda, beberapa pengaturan mungkin tidak termuat",
"file_too_new": "Versi major tidak kompatibel: {fileMajor}, PleromaFE ini (versi {feMajor}) terlalu lama untuk menanganinya",
"file_too_old": "Versi major tidak kompatibel: {fileMajor}, versi berkas terlalu lama dan tidak lagi didukung (min. versi {feMajor})",
"invalid_file": "Berkas yang dipilih bukan cadangan pengaturan Pleroma yang didukung. Tidak dibuat perubahan."
},
"restore_settings": "Pulihkan pengaturan dari berkas"
},
"filtering": "Penyaringan",
"filtering_explanation": "Semua postingan yang mengandung kata-kata ini akan dibisukan, satu kata per baris",
"follow_export": "Ekspor Follow",
"follow_export_button": "Export yang kamu ikuti ke dalam file csv",
"follow_import": "Import pengikut",
"follow_import_error": "Terjadi kesalahan ketika mengimpor pengikut",
"follows_imported": "Daftar mengikuti telah diimpor! Proses mungkin membutuhkan beberapa saat.",
"foreground": "Latar depan",
"fun": "Seru",
"general": "Umum",
"greentext": "Panah meme",
"hide_all_muted_posts": "Sembunyikan postingan yang dibisukan",
"hide_attachments_in_convo": "Sembunyikan lampiran pada percakapan",
"hide_attachments_in_tl": "Sembunyikan lampiran di linimasa",
"hide_bot_indication": "Sembunyikan tanda bot pada postingan",
"hide_favorites_description": "Jangan tunjukkan daftar kesukaan saya (orang masih mendapatkan notifikasi)",
"hide_filtered_statuses": "Sembunyikan semua postingan yang tersaring",
"hide_followers_count_description": "Jangan tampilkan jumlah pengikut",
"hide_followers_description": "Jangan tampilkan siapa yang mengikuti saya",
"hide_followers_description": "Jangan tampilkan siapa yang mengikutiku",
"hide_follows_count_description": "Jangan tampilkan jumlah mengikuti",
"hide_follows_description": "Jangan tampilkan siapa yang saya ikuti",
"hide_follows_description": "Jangan tampilkan siapa yang aku ikuti",
"hide_isp": "Sembunyikan panel spesifik instansi",
"hide_list_aliases_error_action": "Tutup",
"hide_media_previews": "Sembunyikan pratinjau media",
"hide_muted_posts": "Sembunyikan postingan-postingan dari pengguna yang dibisukan",
"hide_muted_threads": "Sembunyikan thread yang dibisukan",
"hide_post_stats": "Sembunyikan statistik postingan (seperti jumlah favorit)",
"hide_shoutbox": "Sembunyikan kotak suara instansi",
"hide_site_favicon": "Sembunyikan favicon instansi di panel atas",
"hide_site_name": "Sembunyikan nama instansi di panel atas",
"hide_threads_with_blocked_users": "Sembunyikan thread yang menyebut orang yang diblok",
"hide_user_stats": "Sembunyikan statistik pengguna (seperti jumlah pengikut)",
"hide_wallpaper": "Sembunyikan latar belakang instansi",
"hide_wordfiltered_statuses": "Sembunyikan post yang disaring dengan kata",
"import_blocks_from_a_csv_file": "Impor blokiran dari berkas csv",
"import_followers_from_a_csv_file": "Impor daftar mengikuti dari berkas csv",
"import_mutes_from_a_csv_file": "Impor daftar pembisuan dari berkas csv",
"import_theme": "Muat preset",
"inputRadius": "Bidang masukan",
"instance_default": "(bawaan: {value})",
"instance_default_simple": "(bawaan)",
"interface": "Antarmuka",
@ -493,9 +597,23 @@
"invalid_theme_imported": "Berkas yang dipilih bukan sebuah tema yang didukung Pleroma. Tidak ada perubahan yang dibuat pada tema kamu.",
"limited_availability": "Tidak tersedia di browser kamu",
"links": "Tautan",
"list_aliases_error": "Gagal mengambil alias: {error}",
"list_backups_error": "Gagal mengambil daftar cadangan: {error}",
"lock_account_description": "Batasi akunmu kepada pengikut yang sudah disetujui saja",
"loop_video": "Ulang-ulang video",
"loop_video_silent_only": "Ulang-ulang video tanpa suara (seperti \"gif\" Mastodon)",
"max_thumbnails": "Jumlah thumbnail maksimum per postingan",
"mascot": "Maskot Mastodon FE",
"max_depth_in_thread": "Tingat thread maksimum yang ditampilkan oleh bawaan",
"max_thumbnails": "Jumlah thumbnail maksimum per postingan (kosong = tidak terbatas)",
"mention_link_bolden_you": "Sorot sebutan kamu apabila kamu disebut",
"mention_link_display": "Tampilkan tautan sebutan",
"mention_link_display_full": "selalu sebagai nama lengkap (cth. {'@'}foo{'@'}example.org)",
"mention_link_display_full_for_remote": "sebagai nama lengkap hanya untuk pengguna di instansi lain (cth. {'@'}foo{'@'}example.org)",
"mention_link_display_short": "selalu sebagai nama pendek (cth. {'@'}foo)",
"mention_link_fade_domain": "Pudarkan domain (contoh: {'@'}example.org di {'@'}foo{'@'}example.org)",
"mention_link_show_avatar": "Tampilkan avatar pengguna di samping tautan",
"mention_link_show_tooltip": "Tunjukkan nama penuh pengguna sebagai tooltip untuk pengguna jauh",
"mention_links": "Tautan sebutan",
"mfa": {
"authentication_methods": "Metode otentikasi",
"confirm_and_enable": "Konfirmasi & aktifkan OTP",
@ -504,6 +622,8 @@
"recovery_codes": "Kode pemulihan.",
"recovery_codes_warning": "Tulis kodenya atau simpan mereka di tempat yang aman - jika tidak kamu tidak akan melihat mereka lagi. Jika kamu tidak dapat mengakses aplikasi 2FA kamu dan kode pemulihanmu hilang, kamu tidak akan bisa mengakses akun kamu.",
"scan": {
"desc": "Menggunakan aplikasi dua-faktor kamu, pindai kode QR ini atau masukkan kunci teks:",
"secret_code": "Kunci",
"title": "Pindai"
},
"setup_otp": "Siapkan OTP",
@ -511,10 +631,19 @@
"verify": {
"desc": "Untuk mengaktifkan otentikasi dua-faktor, masukkan kode dari aplikasi dua-faktor kamu:"
},
"wait_pre_setup_otp": "Pengaturan awal OTP",
"waiting_a_recovery_codes": "Menerima kode cadangan…",
"warning_of_generate_new_codes": "Ketika kamu menghasilkan kode pemulihan baru, kode lama kamu berhenti bekerja."
},
"minimal_scopes_mode": "Minimalkan pilihan seleksi lingkup posting",
"more_settings": "Lebih banyak pengaturan",
"move_account": "Pindahkan akun",
"move_account_error": "Gagal memindahkan akun: {error}",
"move_account_notes": "Jika kamu ingin memindahkan akun ini ke tempat lain, kamu harus pergi ke akun tujuan kamu dan menambahkan alias yang mengarah ke sini.",
"move_account_target": "Akun tujuan (contoh {example})",
"moved_account": "Akun telah dipindahkan.",
"mute_bot_posts": "Bisukan posting dari bot",
"mute_export": "Expor pembisuan",
"mutes_and_blocks": "Bisuan dan Blokiran",
"name": "Nama",
"name_bio": "Nama & bio",
@ -541,9 +670,9 @@
},
"profile_tab": "Profil",
"reply_visibility_all": "Tampilkan semua balasan",
"reply_visibility_following": "Hanya tampilkan balasan yang ditujukan kepada saya atau orang yang saya ikuti",
"reply_visibility_following_short": "Tampilkan balasan ke orang yang saya ikuti",
"reply_visibility_self": "Hanya tampilkan balasan yang ditujukan kepada saya",
"reply_visibility_following": "Hanya tampilkan balasan yang ditujukan kepadaku atau orang yang aku ikuti",
"reply_visibility_following_short": "Tampilkan balasan ke orang yang aku ikuti",
"reply_visibility_self": "Hanya tampilkan balasan yang ditujukan kepadaku",
"save": "Simpan perubahan",
"saving_err": "Terjadi kesalahan ketika menyimpan pengaturan",
"saving_ok": "Pengaturan disimpan",
@ -554,8 +683,8 @@
"set_new_avatar": "Tetapkan avatar baru",
"set_new_profile_background": "Tetapkan latar belakang profil baru",
"settings": "Pengaturan",
"show_admin_badge": "Tampilkan lencana \"Admin\" di profil saya",
"show_moderator_badge": "Tampilkan lencana \"Moderator\" di profil saya",
"show_admin_badge": "Tampilkan lencana \"Admin\" di profilku",
"show_moderator_badge": "Tampilkan lencana \"Moderator\" di profilku",
"style": {
"advanced_colors": {
"_tab_label": "Lanjutan",
@ -598,13 +727,13 @@
},
"preview": {
"button": "Tombol",
"checkbox": "Saya telah membaca sekilas syarat dan ketentuan",
"checkbox": "Aku telah membaca sekilas syarat dan ketentuan",
"error": "Contoh kesalahan",
"faint_link": "manual berguna",
"fine_print": "Baca {0} kami untuk belajar sesuatu yang tak ada gunanya!",
"header": "Pratinjau",
"header_faint": "Ini baik-baik saja",
"input": "Baru saja mendarat di L.A.",
"input": "Baru saja mendarat di Luna Nova Academy",
"link": "sebuah tautan yang kecil nan bagus"
},
"shadows": {
@ -625,15 +754,15 @@
"use_source": "Versi baru"
}
},
"subject_line_behavior": "Salin subyek ketika membalas",
"subject_line_email": "Seperti surel: \"re: subyek\"",
"subject_line_behavior": "Salin peringatan isi ketika membalas",
"subject_line_email": "Seperti surel: \"re: peringatan\"",
"subject_line_mastodon": "Seperti mastodon: salin saja",
"subject_line_noop": "Jangan salin",
"text": "Teks",
"theme": "Tema",
"token": "Token",
"upload_a_photo": "Unggah foto",
"useStreamingApiWarning": "(Tidak disarankan, eksperimental, diketahui dapat melewati postingan-postingan)",
"useStreamingApiWarning": "Ini bagus, gunakan. Kalau tidak jalan, mungkin segarkan halaman?",
"use_one_click_nsfw": "Buka lampiran NSFW hanya dengan satu klik",
"user_settings": "Pengaturan Pengguna",
"valid_until": "Valid hingga",
@ -649,7 +778,7 @@
"word_filter": "Penyaring kata"
},
"status": {
"delete": "Hapus status",
"delete": "Hapus post",
"delete_confirm": "Apakah kamu benar-benar ingin menghapus postingan ini?",
"favorites": "Favorit",
"hide_content": "",
@ -662,7 +791,7 @@
"reply_to": "Balas ke",
"show_content": "",
"status_deleted": "Postingan ini telah dihapus",
"status_unavailable": "Status tidak tersedia",
"status_unavailable": "Post tidak tersedia",
"thread_muted_and_words": ", memiliki kata:",
"unmute_conversation": "Berhenti membisikan percakapan",
"unpin": "Berhenti menyematkan dari profil"
@ -692,9 +821,9 @@
"timeline": {
"conversation": "Percakapan",
"error": "Terjadi kesalahan memuat linimasa: {0}",
"no_more_statuses": "Tidak ada status lagi",
"no_more_statuses": "Tidak ada post lagi",
"no_retweet_hint": "Postingan ditandai sebagai hanya-pengikut atau langsung dan tidak dapat diulang atau dikutip",
"no_statuses": "Tidak ada status",
"no_statuses": "Tidak ada post",
"reload": "Muat ulang",
"repeated": "diulangi"
},
@ -758,7 +887,7 @@
"per_day": "per hari",
"report": "Laporkan",
"show_repeats": "Tampilkan ulangan",
"statuses": "Status",
"statuses": "Postingan",
"unblock": "Berhenti memblokir",
"unmute": "Berhenti membisukan"
},

View File

@ -1,5 +1,7 @@
{
"about": {
"bubble_instances": "Istanze della Bolla Locale",
"bubble_instances_description": "Istanze selezionate dagli amministratori per rappresentare l'area d'interesse dell'istanza",
"mrf": {
"federation": "Federazione",
"keyword": {
@ -16,12 +18,15 @@
"accept_desc": "Questa stanza accetta messaggi solo dalle seguenti altre:",
"ftl_removal": "Rimozione dalla sequenza federale",
"ftl_removal_desc": "Questa stanza rimuove le seguenti dalla sequenza federale:",
"instance": "Istanza",
"media_nsfw": "Allegati oscurati d'ufficio",
"media_nsfw_desc": "Questa stanza oscura gli allegati dei messaggi provenienti da queste stanze:",
"media_removal": "Rimozione multimedia",
"media_removal_desc": "Questa istanza rimuove gli allegati dalle seguenti stanze:",
"not_applicable": "N/D",
"quarantine": "Quarantena",
"quarantine_desc": "Questa stanza inoltrerà solo messaggi pubblici alle seguenti:",
"quarantine_desc": "Questa istanza non invierà post alle seguenti istanze:",
"reason": "Motivazione",
"reject": "Rifiuta",
"reject_desc": "Questa stanza rifiuterà i messaggi provenienti dalle seguenti:",
"simple_policies": "Regole specifiche alla stanza"
@ -29,6 +34,27 @@
},
"staff": "Responsabili"
},
"announcements": {
"all_day_prompt": "Evento lungo tutto il giorno",
"cancel_edit_action": "Annulla",
"close_error": "Chiudi",
"delete_action": "Elimina",
"edit_action": "Modifica",
"end_time_display": "Finisce alle {time}",
"end_time_prompt": "Ora di fine: ",
"inactive_message": "Questo annuncio è inattivo",
"mark_as_read_action": "Segna come già letto",
"page_header": "Annunci",
"post_action": "Post",
"post_error": "Errore: {error}",
"post_form_header": "Posta annuncio",
"post_placeholder": "Contenuto dell'annuncio",
"published_time_display": "Pubblicato alle {time}",
"start_time_display": "Inizia alle {time}",
"start_time_prompt": "Ora di inizio: ",
"submit_edit_action": "Invia",
"title": "Annuncio"
},
"chats": {
"chats": "Conversazioni",
"delete": "Elimina",
@ -58,6 +84,7 @@
"keep_open": "Tieni aperto il menù",
"load_all": "Carico tutti i {emojiAmount} emoji",
"load_all_hint": "Primi {saneAmount} emoji caricati, caricarli tutti potrebbe causare rallentamenti.",
"recent": "Usato di recente",
"search_emoji": "Cerca un emoji",
"stickers": "Adesivi",
"unicode": "Emoji Unicode"
@ -109,6 +136,13 @@
"admin": "Amministratore",
"moderator": "Moderatore"
},
"scope_in_timeline": {
"direct": "Diretto",
"local": "Locale - Solo la tua istanza può vedere questo post",
"private": "Solo per i seguaci",
"public": "Pubblico",
"unlisted": "Non elencato"
},
"show_less": "Ripiega",
"show_more": "Mostra tutto",
"submit": "Invia",
@ -131,6 +165,84 @@
"load_older": "Carica interazioni precedenti",
"moves": "Utenti migrati"
},
"languages": {
"ar": "Arabo",
"az": "Azero",
"bg": "Bulgaro",
"cs": "Ceco",
"da": "Danese",
"de": "Tedesco",
"el": "Greco",
"en": "Inglese",
"eo": "Esperanto",
"es": "Spagnolo",
"fa": "Persiano",
"fi": "Finlandese",
"fr": "Francese",
"ga": "Irlandese",
"he": "Ebreo",
"hi": "Hindi",
"hu": "Ungherese",
"id": "Indonesiano",
"it": "Italiano",
"ja": "Giapponese",
"ko": "Coreano",
"lt": "Lituano",
"lv": "Lettone",
"nl": "Olandese",
"pl": "Polacco",
"pt": "Portoghese",
"ru": "Russo",
"sk": "Slovacco",
"sv": "Svedese",
"tr": "Turco",
"translated_from": {
"ar": "Tradotto dall' @:languages.ar",
"az": "Tradotto dall' @:languages.az",
"bg": "Tradotto dal @:languages.bg",
"cs": "Tradotto dal @:languages.cs",
"da": "Tradotto dal @:languages.da",
"de": "Tradotto dal @:languages.de",
"el": "Tradotto dal @:languages.el",
"en": "Tradotto dall' @:languages.en",
"eo": "Tradotto dal @:languages.eo",
"es": "Tradotto dallo @:languages.es",
"fa": "Tradotto dal @:languages.fa",
"fi": "Tradotto dal @:languages.fi",
"fr": "Tradotto dal @:languages.fr",
"ga": "Tradotto dal @:languages.ga",
"he": "Tradotto dal @:languages.he",
"hi": "Tradotto dal @:languages.hi",
"hu": "Tradotto dal @:languages.hu",
"id": "Tradotto dal @:languages.id",
"it": "Tradotto dall' @:languages.it",
"ja": "Tradotto dal @:languages.ja",
"ko": "Tradotto dal @:languages.ko",
"lt": "Tradotto dal @:languages.lt",
"lv": "Tradotto dal @:languages.lv",
"nl": "Tradotto dall' @:languages.nl",
"pl": "Tradotto dal @:languages.pl",
"pt": "Tradotto dal @:languages.pt",
"ru": "Tradotto dal @:languages.ru",
"sk": "Tradotto dal @:languages.sk",
"sv": "Tradotto dal @:languages.sv",
"tr": "Tradotto dal @:languages.tr",
"uk": "Tradotto dal @:languages.uk",
"zh": "Tradotto dal @:languages.zh"
},
"uk": "Ucraino",
"zh": "Cinese"
},
"lists": {
"create": "Crea",
"delete": "Elimina lista",
"following_only": "Limita a chi segui",
"lists": "Liste",
"new": "Nuova Lista",
"save": "Salva cambiamenti",
"search": "Cerca utenti",
"title": "Titolo della lista"
},
"login": {
"authentication_code": "Codice di autenticazione",
"description": "Accedi con OAuth",
@ -143,6 +255,10 @@
"hint": "Accedi per conversare",
"login": "Accedi",
"logout": "Disconnettiti",
"logout_confirm": "Sicuro di disconnetterti?",
"logout_confirm_accept_button": "Disconnetti",
"logout_confirm_cancel_button": "Annulla",
"logout_confirm_title": "Disconnetti",
"password": "Password",
"placeholder": "es. Lupo Lucio",
"recovery_code": "Codice di recupero",
@ -150,31 +266,67 @@
"username": "Nome utente"
},
"media_modal": {
"counter": "{current} / {total}",
"hide": "Chiudi visualizzatore multimediale",
"next": "Prossimo",
"previous": "Precedente"
},
"moderation": {
"moderation": "Moderazione",
"reports": {
"add_note": "Aggiungi nota",
"close": "Chiudi",
"delete_note": "Elimina",
"delete_note_accept": "Si, eliminalo",
"delete_note_cancel": "No, lascialo stare",
"delete_note_confirm": "Sei sicurə di voler eliminare questa nota?",
"delete_note_title": "Conferma eliminazione",
"no_content": "Nessuna descrizione",
"no_reports": "Nessun report da mostrare",
"note_placeholder": "Lascia una nota",
"notes": "{ count } nota | { count } note",
"reopen": "Riapri",
"report": "Riporta su",
"reports": "Rapporti",
"resolve": "Risolvi",
"show_closed": "Mostra chiusi",
"statuses": "{ count } post| { count } post",
"tag_policy_notice": "Abilita il TagPolicy MRF per poter impostare restrizioni sui post",
"tags": "Imposta restrizioni sui post"
},
"statuses": "Post",
"users": "Utenti"
},
"nav": {
"about": "Informazioni",
"administration": "Amministrazione",
"announcements": "Annunci",
"back": "Indietro",
"bookmarks": "Segnalibri",
"bubble_timeline": "Timeline della Bolla Locale",
"bubble_timeline_description": "Post da istanze vicine alla tua e raccomandate dagli amministratori",
"chats": "Conversazioni",
"dms": "Messaggi privati",
"friend_requests": "Vogliono seguirti",
"home_timeline": "Sequenza personale",
"home_timeline_description": "Post dalle persone che segui",
"interactions": "Interazioni",
"lists": "Liste",
"mentions": "Menzioni",
"moderation": "Moderazione",
"preferences": "Preferenze",
"public_timeline_description": "Post pubblici da questa istanza",
"public_tl": "Sequenza pubblica",
"search": "Ricerca",
"timeline": "Sequenza personale",
"timelines": "Sequenze",
"twkn": "Sequenza federale",
"twkn_timeline_description": "Post da tutta la rete",
"user_search": "Ricerca utenti",
"who_to_follow": "Chi seguire"
},
"notifications": {
"broken_favorite": "Stato sconosciuto, lo sto cercando…",
"broken_favorite": "Post sconosciuto, lo sto cercando…",
"error": "Errore nel caricare le notifiche: {0}",
"favorited_you": "ha gradito",
"follow_request": "vuole seguirti",
@ -183,9 +335,10 @@
"migrated_to": "è migrato verso",
"no_more_notifications": "Fine delle notifiche",
"notifications": "Notifiche",
"poll_ended": "sondaggio terminato",
"reacted_with": "ha reagito con {0}",
"read": "Letto!",
"repeated_you": "ha condiviso il tuo messaggio"
"repeated_you": "ha condiviso il tuo post"
},
"password_reset": {
"check_email": "Controlla la tua posta elettronica.",
@ -223,15 +376,20 @@
"text/bbcode": "BBCode",
"text/html": "HTML",
"text/markdown": "Markdown",
"text/plain": "Testo normale"
"text/plain": "Testo normale",
"text/x.misskeymarkdown": "MFM"
},
"content_warning": "Oggetto (facoltativo)",
"content_warning": "Contenuto Sensibile (facoltativo)",
"default": "Sono appena atterrato a Città Laggiù.",
"direct_warning_to_all": "Questo messaggio sarà visibile a tutti i menzionati.",
"direct_warning_to_first_only": "Questo messaggio sarà visibile solo agli utenti menzionati in testa.",
"edit_remote_warning": "Le modifiche fatte al messaggio potrebbero non essere visibili su alcune istanze!",
"edit_status": "Modifica Stato",
"edit_unsupported_warning": "Sondaggi e menzioni non verranno cambiati in fase di modifica.",
"empty_status_error": "Aggiungi del testo o degli allegati",
"media_description": "Descrizione allegati",
"media_description_error": "Allegati non caricati, riprova",
"media_not_sensitive_warning": "C'è un Contenuto Sensibile, ma gli allegati non sono contrassegnati come sensibili!",
"new_status": "Nuovo messaggio",
"post": "Pubblica",
"posting": "Sto pubblicando",
@ -239,21 +397,26 @@
"preview_empty": "Vuoto",
"scope": {
"direct": "Diretto - Visibile solo agli utenti menzionati",
"local": "Locale - non federare questo messaggio",
"private": "Solo per seguaci - Visibile solo dai tuoi seguaci",
"public": "Pubblico - Visibile sulla sequenza pubblica",
"unlisted": "Nascosto - Non visibile sulla sequenza pubblica"
},
"scope_notice": {
"local": "Questo messaggio non sarà visibile sulle altre istanze",
"private": "Questo messaggio sarà visibile solo ai tuoi seguaci",
"public": "Questo messaggio sarà visibile a tutti",
"unlisted": "Questo messaggio non sarà visibile sulla sequenza locale né su quella pubblica"
}
},
"registration": {
"awaiting_email_confirmation": "Il tuo account è stato registrato e un'email è stata inviata al tuo indirizzo. Controllala per completare la registrazione.",
"awaiting_email_confirmation_title": "Attendo la conferma dell'email",
"bio": "Introduzione",
"bio_placeholder": "es.\nCiao, sono Lupo Lucio.\nSono un lupo fantastico che vive nel Fantabosco. Forse mi hai visto alla Melevisione.",
"captcha": "CAPTCHA",
"email": "Email",
"email_language": "In quale lingua vuoi ricevere email dal server?",
"fullname": "Nome visualizzato",
"fullname_placeholder": "es. Lupo Lucio",
"new_captcha": "Clicca il captcha per averne uno nuovo",
@ -262,6 +425,8 @@
"reason_placeholder": "L'amministratore esamina ciascuna richiesta.\nFornisci il motivo della tua iscrizione.",
"register": "Registrati",
"registration": "Registrazione",
"request_sent": "La richiesta di registrazione è stata inoltrata ad un amministratore. Riceverai un'email non appena il tuo account verrà approvato.",
"request_sent_title": "Richiesta di registrazione inviata",
"token": "Codice d'invito",
"username_placeholder": "es. mister_wolf",
"validations": {
@ -290,6 +455,17 @@
},
"settings": {
"accent": "Accento",
"account_alias": "Alias dell'account",
"account_alias_table_head": "Alias",
"account_backup": "Backup dell'account",
"account_backup_description": "Puoi scaricare un archivio con le tue informazioni ed i tuoi messaggi, ma non possono essere importati in un account Akkoma.",
"account_backup_table_head": "Backup",
"account_privacy": "Privacy",
"add_alias_error": "Errore durante l'aggiunta dell'alias: {error}",
"add_backup": "Crea un nuovo backup",
"add_backup_error": "Errore durante l'aggiunta di un nuovo backup: {error}",
"added_alias": "Alias aggiunto.",
"added_backup": "Nuovo backup aggiunto.",
"allow_following_move": "Consenti l'iscrizione automatica ai profili traslocati",
"always_show_post_button": "Non nascondere il pulsante di composizione",
"app_name": "Nome applicazione",
@ -301,6 +477,7 @@
"avatarRadius": "Icone utente",
"avatar_size_instruction": "La taglia minima per l'icona personale è 150x150 pixel.",
"background": "Sfondo",
"backup_not_ready": "Questo backup non è ancora pronto.",
"bio": "Introduzione",
"block_export": "Esporta blocchi",
"block_export_button": "Esporta i tuoi blocchi in un file CSV",
@ -322,7 +499,8 @@
"changed_password": "Password cambiata correttamente!",
"chatMessageRadius": "Messaggi istantanei",
"checkboxRadius": "Caselle di selezione",
"collapse_subject": "Ripiega messaggi con oggetto",
"collapse_subject": "Ripiega messaggi con Contenuto Sensibile",
"columns": "Colonne",
"composing": "Composizione",
"confirm_new_password": "Conferma la nuova password",
"current_avatar": "La tua icona attuale",
@ -848,4 +1026,4 @@
"more": "Altro",
"who_to_follow": "Chi seguire"
}
}
}

11
src/i18n/ja.json Normal file
View File

@ -0,0 +1,11 @@
{
"about": {
"mrf": {
"keyword": {
"is_replaced_by": "→",
"replace": "置き換える"
},
"mrf_policies": "有効なMRFポリシー"
}
}
}

View File

@ -1,20 +1,31 @@
{
"about": {
"bubble_instances": "ローカルバブルインスタンス",
"mrf": {
"federation": "フェデレーション",
"keyword": {
"ftl_removal": "「せつぞくしているすべてのネットワーク」タイムラインからのぞく",
"is_replaced_by": "→",
"keyword_policies": "キーワードポリシー",
"reject": "おことわり",
"replace": "おきかえ"
},
"mrf_policies": "ゆうこうなMRFポリシー",
"mrf_policies_desc": "MRFポリシーは、このインスタンスのフェデレーションのふるまいを、いじります。これらのMRFポリシーがゆうこうになっています:",
"simple": {
"accept": "うけいれ",
"accept_desc": "このインスンスは、これらのインスタンスからのメッセージのみをうけいれます:",
"ftl_removal": "「つながっているすべてのネットワーク」タイムラインからのぞく",
"ftl_removal_desc": "このインスタンスは、つながっているすべてのネットワーク」タイムラインから、これらのインスタンスを、とりのぞきます:",
"ftl_removal_desc": "このインスタンスは、「つながっているすべてのネットワーク」タイムラインから、これらのインスタンスを、とりのぞきます:",
"instance": "インスタンス",
"media_nsfw": "メディアをすべてセンシティブにする",
"media_nsfw_desc": "このインスタンスは、これらのインスタンスからおくられてきたメディアを、すべて、センシティブにマークします:",
"media_removal": "メディアをのぞく",
"media_removal_desc": "このインスタンスは、これらのインスタンスからおくられてきたメディアを、とりのぞきます:",
"not_applicable": "なし",
"quarantine": "けんえき",
"quarantine_desc": "このインスタンスは、これらのインスタンスに、パブリックなとうこうのみを、おくります:",
"quarantine_desc": "このインスタンスは、これらのインスタンスに、とうこうをおくりません:",
"reason": "りゆう",
"reject": "おことわり",
"reject_desc": "このインスタンスは、これらのインスタンスからのメッセージをうけいれません:",
"simple_policies": "インスタンスのポリシー"
@ -22,6 +33,49 @@
},
"staff": "スタッフ"
},
"announcements": {
"all_day_prompt": "いちにちじゅう",
"cancel_edit_action": "キャンセル",
"close_error": "とじる",
"delete_action": "けす",
"edit_action": "へんしゅう",
"end_time_display": "{time} におわります",
"end_time_prompt": "おわるじかん: ",
"inactive_message": "このおしらせは、アクティブではありません",
"mark_as_read_action": "よんだ!",
"page_header": "おしらせ",
"post_action": "とうこう",
"post_error": "エラーになりました: {error}",
"post_form_header": "おしらせする",
"post_placeholder": "おしらせのほんぶん",
"published_time_display": "{time} に、おしらせされました",
"start_time_display": "{time} から、はじまります",
"start_time_prompt": "はじまるじかん: ",
"submit_edit_action": "そうしん",
"title": "おしらせ"
},
"chats": {
"chats": "チャット",
"delete": "けす",
"delete_confirm": "ほんとうに、このメッセージを、けしてもいいですか?",
"empty_chat_list_placeholder": "チャットはありません。あたらしく、チャットをはじみてみましょう!",
"empty_message_error": "からっぽのメッセージは、おくれません",
"error_loading_chat": "チャットをよみこむことが、できなかったかもしれません。",
"error_sending_message": "メッセージをおくることが、できなかったかもしれません。",
"message_user": "{nickname} にメッセージ",
"more": "つづき",
"new": "あたらしいチャット",
"you": "あなた:"
},
"display_date": {
"today": "きょう"
},
"domain_mute_card": {
"mute": "ミュート",
"mute_progress": "ミュートしています…",
"unmute": "ミュートをやめる",
"unmute_progress": "ミュートをとりけしています…"
},
"emoji": {
"add_emoji": "えもじをうちこむ",
"custom": "カスタムえもじ",
@ -29,6 +83,7 @@
"keep_open": "ピッカーをあけたままにする",
"load_all": "すべてのえもじをロード ({emojiAmount} こあります)",
"load_all_hint": "はじめの {saneAmount} このえもじだけがロードされています。すべてのえもじをロードすると、パフォーマンスがわるくなるかもしれません。",
"recent": "さいきんつかった",
"search_emoji": "えもじをさがす",
"stickers": "ステッカー",
"unicode": "ユニコードえもじ"
@ -42,8 +97,15 @@
"scope_options": "こうかいはんいせんたく",
"text_limit": "もじのかず",
"title": "ゆうこうなきのう",
"upload_limit": "ファイルのおおきさのじょうげん",
"who_to_follow": "おすすめユーザー"
},
"file_type": {
"audio": "おんせい",
"file": "ファイル",
"image": "がぞう",
"video": "ビデオ"
},
"finder": {
"error_fetching_user": "ユーザーけんさくがエラーになりました",
"find_user": "ユーザーをさがす"
@ -51,12 +113,32 @@
"general": {
"apply": "てきよう",
"cancel": "キャンセル",
"close": "とじる",
"confirm": "たしかめる",
"disable": "なし",
"dismiss": "わすれる",
"enable": "あり",
"error_retry": "もういちど、ためしてください",
"flash_content": "クリックすると、Ruffle をつかって、フラッシュさくひんをひょうじします。(うまくうごかないかもしれません)",
"flash_fail": "フラッシュさくひんのロードに、しっぱいしました。コンソールに、くわしいことがかかれています。",
"flash_security": "フラッシュさくひんは、あなたのコンピューターに、あぶないことをしてくるかもしれないので、ちゅういしてください。",
"generic_error": "エラーになりました",
"loading": "ロードしています…",
"more": "つづき",
"optional": "かかなくてもよい",
"peek": "かくす",
"retry": "もういちど、ためしてください",
"role": {
"admin": "アドミン",
"moderator": "モデレーター"
},
"scope_in_timeline": {
"direct": "ダイレクト",
"local": "ローカル: このとうこうは、このインスタンスのユーザーだけが、みることができます",
"private": "フォロワーげんてい",
"public": "パブリック",
"unlisted": "アンリステッド"
},
"show_less": "たたむ",
"show_more": "つづきをみる",
"submit": "そうしん",
@ -76,7 +158,86 @@
"interactions": {
"favs_repeats": "リピートとおきにいり",
"follows": "あたらしいフォロー",
"load_older": "ふるいやりとりをみる"
"load_older": "ふるいやりとりをみる",
"moves": "ユーザーをひっこしする"
},
"languages": {
"ar": "アラビアご",
"az": "アゼルバイジャンご",
"bg": "ブルガリアご",
"cs": "チェコご",
"da": "デンマークご",
"de": "ドイツご",
"el": "ギリシャご",
"en": "えいご",
"eo": "エスご",
"es": "スペインご",
"fa": "ペルシャご",
"fi": "フィンランドご",
"fr": "フランスご",
"ga": "アイルランドご",
"he": "ヘブライご",
"hi": "ヒンディーご",
"hu": "ハンガリーご",
"id": "インドネシアご",
"it": "イタリアご",
"ja": "にほんご",
"ko": "かんこくご",
"lt": "リトアニアご",
"lv": "ラトビアご",
"nl": "オランダご",
"pl": "ポーランドご",
"pt": "ポルトガルご",
"ru": "ロシアご",
"sk": "スロバキアご",
"sv": "スウェーデンご",
"tr": "トルコご",
"translated_from": {
"ar": "@:languages.ar から、ほんやくされました",
"az": "@:languages.az から、ほんやくされました",
"bg": "@:languages.bg から、ほんやくされました",
"cs": "@:languages.cs から、ほんやくされました",
"da": "@:languages.da から、ほんやくされました",
"de": "@:languages.de から、ほんやくされました",
"el": "@:languages.el から、ほんやくされました",
"en": "@:languages.en から、ほんやくされました",
"eo": "@:languages.eo から、ほんやくされました",
"es": "@:languages.es から、ほんやくされました",
"fa": "@:languages.fa から、ほんやくされました",
"fi": "@:languages.fi から、ほんやくされました",
"fr": "@:languages.fr から、ほんやくされました",
"ga": "@:languages.ga から、ほんやくされました",
"he": "@:languages.he から、ほんやくされました",
"hi": "@:languages.hi から、ほんやくされました",
"hu": "@:languages.hu から、ほんやくされました",
"id": "@:languages.id から、ほんやくされました",
"it": "@:languages.it から、ほんやくされました",
"ja": "@:languages.ja から、ほんやくされました",
"ko": "@:languages.ko から、ほんやくされました",
"lt": "@:languages.lt から、ほんやくされました",
"lv": "@:languages.lv から、ほんやくされました",
"nl": "@:languages.nl から、ほんやくされました",
"pl": "@:languages.pl から、ほんやくされました",
"pt": "@:languages.pt から、ほんやくされました",
"ru": "@:languages.ru から、ほんやくされました",
"sk": "@:languages.sk から、ほんやくされました",
"sv": "@:languages.sv から、ほんやくされました",
"tr": "@:languages.tr から、ほんやくされました",
"uk": "@:languages.uk から、ほんやくされました",
"zh": "@:languages.zh から、ほんやくされました"
},
"uk": "ウクライナご",
"zh": "ちゅうごくご"
},
"lists": {
"create": "つくる",
"delete": "けす",
"following_only": "フォローしているユーザーのみ",
"lists": "リスト",
"new": "リストをつくる",
"save": "セーブ",
"search": "ユーザーをさがす",
"title": "リストのなまえ"
},
"login": {
"authentication_code": "にんしょうコード",
@ -90,41 +251,90 @@
"hint": "はなしあいにくわわるには、ログインしてください",
"login": "ログイン",
"logout": "ログアウト",
"logout_confirm": "ほんとうに、ログアウトしてもいいですか?",
"logout_confirm_accept_button": "ログアウト",
"logout_confirm_cancel_button": "キャンセル",
"logout_confirm_title": "ログアウト",
"password": "パスワード",
"placeholder": "れい: lain",
"placeholder": "ユーザーめい",
"recovery_code": "リカバリーコード",
"register": "はじめる",
"username": "ユーザーめい"
},
"media_modal": {
"counter": "{current} / {total}",
"hide": "とじる",
"next": "つぎ",
"previous": "まえ"
},
"moderation": {
"moderation": "モデレーション",
"reports": {
"add_note": "メモする",
"close": "とじる",
"delete_note": "けす",
"delete_note_accept": "けす",
"delete_note_cancel": "キャンセル",
"delete_note_confirm": "ほんとうに、このメモをけしてもいいですか?",
"delete_note_title": "かくにんしてください",
"no_content": "せつめいはありません",
"no_reports": "つうほうはありません",
"note_placeholder": "メモする",
"notes": "{ count }こ",
"reopen": "ひらきなおす",
"report": "つうほう:",
"reports": "つうほう",
"resolve": "かいけつ",
"show_closed": "かいけつしたつうほうをみる",
"statuses": "{ count } こ",
"tag_policy_notice": "とうこうをせいげんするには、TagPolicy MRF をゆうこうにしてください",
"tags": "とうこうをせいげんする"
},
"statuses": "とうこう",
"users": "ユーザー"
},
"nav": {
"about": "これはなに?",
"administration": "アドミニストレーション",
"announcements": "おしらせ",
"back": "もどる",
"bookmarks": "ブックマーク",
"bubble_timeline": "バブルタイムライン",
"bubble_timeline_description": "アドミンがおすすめするインスタンスからのとうこう",
"chats": "チャット",
"dms": "ダイレクトメッセージ",
"friend_requests": "フォローリクエスト",
"home_timeline": "ホームタイムライン",
"home_timeline_description": "フォローしているユーザーのとうこう",
"interactions": "やりとり",
"lists": "リスト",
"mentions": "メンション",
"moderation": "モデレーション",
"preferences": "せってい",
"public_timeline_description": "このインスタンスからの、パブリックなとうこう",
"public_tl": "パブリックタイムライン",
"search": "さがす",
"timeline": "タイムライン",
"timelines": "タイムライン",
"twkn": "つながっているすべてのネットワーク",
"twkn_timeline_description": "つながっているすべてのネットワークからのとうこう",
"user_search": "ユーザーをさがす",
"who_to_follow": "おすすめユーザー"
},
"notifications": {
"broken_favorite": "ステータスがみつかりません。さがしています…",
"favorited_you": "あなたのステータスがおきにいりされました",
"broken_favorite": "とうこうがみつかりません。さがしています…",
"error": "つうちのしゅとくがエラーになりました: {0}",
"favorited_you": "あなたのとうこうが、おきにいりされました",
"follow_request": "フォローリクエストされました",
"followed_you": "フォローされました",
"load_older": "ふるいつうちをみる",
"migrated_to": "インスタンスをひっこしました",
"no_more_notifications": "つうちはありません",
"notifications": "つうち",
"poll_ended": "いれふだがおわりました",
"reacted_with": "{0} でリアクションされました",
"read": "よんだ!",
"repeated_you": "あなたのステータスがリピートされました"
"repeated_you": "あなたのとうこうが、リピートされました"
},
"password_reset": {
"check_email": "パスワードをリセットするためのリンクがかかれたメールが、とどいているかどうか、みてください。",
@ -147,49 +357,72 @@
"multiple_choices": "いくつでもえらべる",
"not_enough_options": "ユニークなオプションが、たりません",
"option": "オプション",
"people_voted_count": "{count} にんが、ふだをいれています",
"single_choice": "ひとつえらぶ",
"type": "いれふだのかた",
"vote": "ふだをいれる",
"votes": "いれふだ"
"votes": "いれふだ",
"votes_count": "{count} ふだ"
},
"post_status": {
"account_not_locked_warning": "あなたのアカウントは {0} ではありません。あなたをフォローすれば、だれでも、フォロワーげんていのステータスをよむことができます。",
"account_not_locked_warning": "あなたのアカウントは {0} ではありません。あなたをフォローすれば、だれでも、フォロワーげんていのとうこうをよむことができます。",
"account_not_locked_warning_link": "ロックされたアカウント",
"attachments_sensitive": "ファイルをNSFWにする",
"content_type": {
"text/bbcode": "BBCode",
"text/html": "HTML",
"text/markdown": "Markdown",
"text/plain": "プレーンテキスト"
"text/plain": "プレーンテキスト",
"text/x.misskeymarkdown": "MFM"
},
"content_warning": "せつめい (かかなくてもよい)",
"content_warning": "ちゅういがき (かかなくてもよい)",
"default": "はねだくうこうに、つきました。",
"direct_warning_to_all": "このとうこうは、メンションされたすべてのユーザーが、みることができます。",
"direct_warning_to_first_only": "このとうこうは、メッセージのはじめでメンションされたユーザーだけが、みることができます。",
"edit_remote_warning": "へんしゅうしたとうこうは、ほかのインスタンスに、はんえいされないことがあります!",
"edit_status": "へんしゅう",
"edit_unsupported_warning": "いれふだとメンションは、へんしゅうでかえることができません。",
"empty_status_error": "からっぽのとうこうは、おくることができません",
"media_description": "メディアのせつめい",
"media_description_error": "メディアのアップデートにしっぱいしました。もういちど、ためしてください",
"media_not_sensitive_warning": "ちゅういがきがついていますが、NSFWはついていません",
"new_status": "とうこうする",
"post": "とうこう",
"posting": "とうこう",
"preview": "プレビュー",
"preview_empty": "からっぽです",
"scope": {
"direct": "ダイレクト: メンションされたユーザーのみにとどきます",
"local": "ローカル: パブリックタイムラインにとどきますが、ほかのインスタンスにはとどきません",
"private": "フォロワーげんてい: フォロワーのみにとどきます",
"public": "パブリック: パブリックタイムラインにとどきます",
"unlisted": "アンリステッド: パブリックタイムラインにとどきません"
},
"scope_notice": {
"local": "このとうこうは、このインスタンスのユーザーだけが、みることができます",
"private": "このとうこうは、あなたのフォロワーだけが、みることができます",
"public": "このとうこうは、だれでもみることができます",
"unlisted": "このとうこうは、パブリックタイムラインと、つながっているすべてのネットワークでは、みることができません"
}
},
"registration": {
"awaiting_email_confirmation": "あなたのメールアドレスに、メールをおくりました。メールをかくにんして、とうろくをかんりょうさせてください。",
"awaiting_email_confirmation_title": "メールをかくにんするのをまっています",
"bio": "プロフィール",
"bio_placeholder": "れい:\nごきげんよう。わたしはれいん。\nわたしはアニメのおんなのこで、にほんのベッドタウンにすんでいます。ワイヤードで、わたしにあったことが、あるかもしれませんね。",
"captcha": "CAPTCHA",
"email": "Eメール",
"email_language": "サーバーからのメールは、どのことばで、かいてほしいですか?",
"fullname": "スクリーンネーム",
"fullname_placeholder": "れい: いわくら れいん",
"new_captcha": "もじがよめないときは、がぞうをクリックすると、あたらしいがぞうになります",
"password_confirm": "パスワードのかくにん",
"reason": "とうろくしたいりゆう",
"reason_placeholder": "このインスタンスは、しゅどうで、とうろくをうけつけています。\nとうろくしたいりゆうを、アドミニストレーターにおしえてください。",
"register": "はじめる",
"registration": "はじめる",
"request_sent": "とうろくリクエストをおくりました。とうろくがうけいれられると、メールがとどきます。",
"request_sent_title": "とうろくリクエストをおくりました",
"token": "しょうたいトークン",
"username_placeholder": "れい: lain",
"validations": {
@ -217,6 +450,20 @@
"select_all": "すべてえらぶ"
},
"settings": {
"accent": "アクセント",
"account_alias": "アカウントのエイリアス",
"account_alias_table_head": "エイリアス",
"account_backup": "アカウントのバックアップ",
"account_backup_description": "あなたのアカウントのじょうほうと、とうこうの、アーカイブをダウンロードできます。しかし、いまのところは、バックアップを Pleromaのアカウントにインポートすることはできません。",
"account_backup_table_head": "バックアップ",
"account_privacy": "プライバシー",
"add_alias_error": "エイリアスのついかがエラーになりました: {error}",
"add_backup": "あたらしいバックアップをつくる",
"add_backup_error": "バックアップのついかがエラーになりました: {error}",
"added_alias": "エイリアスをついかしました。",
"added_backup": "バックアップをつくりました。",
"allow_following_move": "フォローしているアカウントがひっこしたときに、じどうでフォローしてもよい",
"always_show_post_button": "みぎしたのとうこうボタンをいつでもひょうじする",
"app_name": "アプリのなまえ",
"attachmentRadius": "ファイル",
"attachments": "ファイル",
@ -226,6 +473,7 @@
"avatarRadius": "アバター",
"avatar_size_instruction": "アバターのおおきさは、150×150ピクセルか、それよりもおおきくするといいです。",
"background": "バックグラウンド",
"backup_not_ready": "このバックアップは、まだ、かんせいしていません。",
"bio": "プロフィール",
"block_export": "ブロックのエクスポート",
"block_export_button": "ブロックをCSVファイルにエクスポート",
@ -233,6 +481,7 @@
"block_import_error": "ブロックのインポートがエラーになりました",
"blocks_imported": "ブロックをインポートしました! じっさいにブロックするまでには、もうしばらくかかります。",
"blocks_tab": "ブロック",
"bot": "これは bot アカウントです",
"btnRadius": "ボタン",
"cBlue": "リプライとフォロー",
"cGreen": "リピート",
@ -244,11 +493,29 @@
"change_password_error": "パスワードをかえることが、できなかったかもしれません。",
"changed_email": "メールアドレスをかえることができました!",
"changed_password": "パスワードが、かわりました!",
"chatMessageRadius": "チャットメッセージ",
"checkboxRadius": "チェックボックス",
"collapse_subject": "せつめいのあるとうこうをたたむ",
"collapse_subject": "ちゅういがきのあるとうこうをたたむ",
"columns": "カラム",
"composing": "とうこう",
"confirm_dialogs": "いつ、かくにんがめんをひょうじしますか:",
"confirm_dialogs_approve_follow": "フォローリクエストをうけいれるとき",
"confirm_dialogs_block": "だれかをブロックするとき",
"confirm_dialogs_delete": "とうこうをけすとき",
"confirm_dialogs_deny_follow": "フォローリクエストをおことわりするとき",
"confirm_dialogs_mute": "だれかをミュートするとき",
"confirm_dialogs_repeat": "とうこうをリピートするとき",
"confirm_dialogs_unfollow": "だれかのフォローをやめるとき",
"confirm_new_password": "あたらしいパスワードのかくにん",
"confirmation_dialogs": "かくにんがめんのせってい",
"conversation_display": "スレッドのみため",
"conversation_display_linear": "リニア",
"conversation_display_tree": "ツリー",
"conversation_other_replies_button": "「ほかのへんしん」ボタンをひょうじするばしょ",
"conversation_other_replies_button_below": "とうこうのした",
"conversation_other_replies_button_inside": "とうこうのうちがわ",
"current_avatar": "いまのアバター",
"current_mascot": "いまのマスコット",
"current_password": "いまのパスワード",
"data_import_export_tab": "インポートとエクスポート",
"default_vis": "デフォルトのこうかいはんい",
@ -256,12 +523,18 @@
"delete_account_description": "あなたのアカウントとメッセージが、きえます。",
"delete_account_error": "アカウントをけすことが、できなかったかもしれません。インスタンスのアドミニストレーターに、おといあわせください。",
"delete_account_instructions": "ほんとうにアカウントをけしてもいいなら、パスワードをかいてください。",
"disable_sticky_headers": "カラムヘッダーをがめんのいちばんうえにくっつけない",
"discoverable": "けんさくなどのサービスで、このアカウントをみつけてもよい",
"domain_mutes": "ドメイン",
"download_backup": "ダウンロード",
"email_language": "メールのことば",
"emoji_reactions_on_timeline": "えもじのリアクションをタイムラインにひょうじする",
"enable_web_push_notifications": "ウェブプッシュつうちをゆるす",
"enter_current_password_to_confirm": "あなたのアイデンティティをたしかめるため、あなたのいまのパスワードをかいてください",
"expert_mode": "こまかいせっていをひょうじ",
"export_theme": "セーブ",
"filtering": "フィルタリング",
"filtering_explanation": "これらのことばをふくむすべてのものがミュートされます。1ぎょうに1つのことばをかいてください",
"filtering_explanation": "これらのことばをふくむすべてのとうこうがミュートされます。1ぎょうに1つのことばをかいてください",
"follow_export": "フォローのエクスポート",
"follow_export_button": "エクスポート",
"follow_import": "フォローインポート",
@ -329,6 +602,7 @@
"no_rich_text_description": "リッチテキストをつかわない",
"notification_blocks": "ブロックしているユーザーからのつうちは、すべてとまります。",
"notification_mutes": "あるユーザーからのつうちをとめるには、ミュートしてください。",
"notification_setting_hide_if_cw": "ちゅういがきがあるとうこうのないようを、つうちからみえないようにする",
"notification_visibility": "ひょうじするつうち",
"notification_visibility_follows": "フォロー",
"notification_visibility_likes": "おきにいり",
@ -361,6 +635,7 @@
"search_user_to_mute": "ミュートしたいひとを、ここでけんさくできます",
"security": "セキュリティ",
"security_tab": "セキュリティ",
"sensitive_if_subject": "ちゅういがきを、つけたときに、がぞうをじどうてきにNSFWにする",
"set_new_avatar": "あたらしいアバターをせっていする",
"set_new_profile_background": "あたらしいプロフィールのバックグラウンドをせっていする",
"set_new_profile_banner": "あたらしいプロフィールバナーを設定する",
@ -478,8 +753,8 @@
"save_load_hint": "「のこす」オプションをONにすると、テーマをえらんだときとロードしたとき、いまのせっていをのこします。また、テーマをエクスポートするとき、これらのオプションをストアします。すべてのチェックボックスをOFFにすると、テーマをエクスポートしたとき、すべてのせっていをセーブします。"
}
},
"subject_input_always_show": "サブジェクトフィールドをいつでもひょうじする",
"subject_line_behavior": "リプライするときサブジェクトをコピーする",
"subject_input_always_show": "ちゅういがきフィールドをいつでもひょうじする",
"subject_line_behavior": "リプライするとき、ちゅういがきをコピーする",
"subject_line_email": "メールふう: \"re: サブジェクト\"",
"subject_line_mastodon": "マストドンふう: そのままコピー",
"subject_line_noop": "コピーしない",
@ -506,8 +781,8 @@
}
},
"status": {
"delete": "ステータスをけす",
"delete_confirm": "ほんとうに、このステータスを、けしてもいいですか?",
"delete": "とうこうをけす",
"delete_confirm": "ほんとうに、このとうこうを、けしてもいいですか?",
"favorites": "おきにいり",
"mute_conversation": "スレッドをミュートする",
"pin": "プロフィールにピンどめする",
@ -515,6 +790,8 @@
"repeats": "リピート",
"replies_list": "へんしん:",
"reply_to": "へんしん:",
"translate": "ほんやく",
"translated_from": "{language} から、ほんやくされました",
"unmute_conversation": "スレッドをミュートするのをやめる",
"unpin": "プロフィールにピンどめするのをやめる"
},
@ -543,7 +820,7 @@
"timeline": {
"collapse": "たたむ",
"conversation": "スレッド",
"load_older": "ふるいステータス",
"load_older": "ふるいとうこう",
"no_more_statuses": "これでおわりです",
"no_retweet_hint": "とうこうを「フォロワーのみ」または「ダイレクト」にすると、リピートできなくなります",
"no_statuses": "ありません",
@ -611,16 +888,18 @@
"media": "メディア",
"mention": "メンション",
"mute": "ミュート",
"mute_domain": "ドメインをブロック",
"mute_progress": "ミュートしています…",
"muted": "ミュートしています!",
"per_day": "/日",
"remote_follow": "リモートフォロー",
"report": "つうほう",
"show_repeats": "リピートをみる",
"statuses": "ステータス",
"statuses": "とうこう",
"subscribe": "サブスクライブ",
"unblock": "ブロックをやめる",
"unblock_progress": "ブロックをとりけしています…",
"unfollow_confirm": "{user}のフォローをやめますか?",
"unmute": "ミュートをやめる",
"unmute_progress": "ミュートをとりけしています…",
"unsubscribe": "サブスクライブをやめる"
@ -643,4 +922,4 @@
"more": "くわしく",
"who_to_follow": "おすすめユーザー"
}
}
}

View File

@ -921,7 +921,6 @@
"upload_a_photo": "画像をアップロード",
"useStreamingApi": "投稿と通知を、すぐに受け取る",
"useStreamingApiWarning": "(実験中で、投稿を取りこぼすかもしれないので、おすすめしません)",
"use_at_icon": "{'@'}マークをアイコンにする",
"use_contain_fit": "画像のサムネイルを、切り抜かない",
"use_one_click_nsfw": "NSFWなファイルを1クリックで開く",
"user_mutes": "ユーザー",

View File

@ -21,6 +21,7 @@ const loaders = {
ga: () => import('./ga.json'),
he: () => import('./he.json'),
hu: () => import('./hu.json'),
id: () => import('./id.json'),
it: () => import('./it.json'),
ja: () => import('./ja_pedantic.json'),
ja_easy: () => import('./ja_easy.json'),
@ -35,6 +36,7 @@ const loaders = {
sk: () => import('./sk.json'),
te: () => import('./te.json'),
uk: () => import('./uk.json'),
vi: () => import('./vi.json'),
zh: () => import('./zh.json'),
zh_Hant: () => import('./zh_Hant.json')
}

View File

@ -254,6 +254,10 @@
"hint": "Log in om deel te nemen aan de discussie",
"login": "Inloggen",
"logout": "Uitloggen",
"logout_confirm": "Weet je zeker dat je wilt uitloggen?",
"logout_confirm_accept_button": "Uitloggen",
"logout_confirm_cancel_button": "Annuleren",
"logout_confirm_title": "Uitloggen",
"password": "Wachtwoord",
"placeholder": "mijngebruikersnaam",
"recovery_code": "Herstelcode",
@ -266,6 +270,30 @@
"next": "Volgende",
"previous": "Vorige"
},
"moderation": {
"moderation": "Moderatie",
"reports": {
"add_note": "Notitie toevoegen",
"close": "Sluiten",
"delete_note": "Verwijderen",
"delete_note_accept": "Ja, verwijderen",
"delete_note_cancel": "Nee, behouden",
"delete_note_confirm": "Weet je zeker dat je deze notitie wilt verwijderen?",
"delete_note_title": "Verwijderen bevestigen",
"no_content": "Geen omschrijving beschikbaar",
"no_reports": "Geen rapporten beschikbaar",
"notes": "{ count } notitie | { count } notities",
"reopen": "Heropenen",
"reports": "Rapporten",
"resolve": "Oplossen",
"show_closed": "Afgesloten tonen",
"statuses": "{ count } bericht| { count } berichten",
"tag_policy_notice": "Activeer de TagPolicy MRF om bericht-beperkingen in te stellen",
"tags": "Bericht-beperkingen instellen"
},
"statuses": "Berichten",
"users": "Gebruikers"
},
"nav": {
"about": "Over ons",
"administration": "Beheer",
@ -282,6 +310,7 @@
"interactions": "Interacties",
"lists": "Lijsten",
"mentions": "Vermeldingen",
"moderation": "Moderatie",
"preferences": "Voorkeuren",
"public_timeline_description": "Openbare berichten van deze instantie",
"public_tl": "Openbare tijdlijn",
@ -378,6 +407,8 @@
}
},
"registration": {
"awaiting_email_confirmation": "Je account is geregistreerd en een e-mail verzonden naar je e-mailadres ter bevestiging. Controleer je e-mail inbox om de registratie af te ronden.",
"awaiting_email_confirmation_title": "In afwachting van e-mail bevestiging",
"bio": "Bio",
"bio_placeholder": "Bijv.\nHallo! Welkom op mijn bio.\nIk vind anime en games leuk. Hopelijk kunnen we vrienden zijn!",
"captcha": "CAPTCHA",
@ -391,6 +422,8 @@
"reason_placeholder": "Deze instantie keurt registraties handmatig goed.\nLaat de beheerder weten waarom je je wilt registreren.",
"register": "Registreren",
"registration": "Registratie",
"request_sent": "Je registratieverzoek zal worden beoordeeld. Indien je account wordt goed gekeurd, zul je een e-mail ontvangen.",
"request_sent_title": "Registratieverzoek verzonden",
"token": "Uitnodigingstoken",
"username_placeholder": "bijv. akko",
"validations": {
@ -500,6 +533,8 @@
"enable_web_push_notifications": "Web push meldingen inschakelen",
"enter_current_password_to_confirm": "Voer je huidige wachtwoord in om je identiteit te bevestigen",
"expert_mode": "Geavanceerde opties tonen",
"expire_posts_enabled": "Berichten ouder dan een ingesteld aantal dagen verwijderen",
"expire_posts_input_placeholder": "Aantal dagen",
"export_theme": "Preset opslaan",
"file_export_import": {
"backup_restore": "Instellingen back-up",
@ -693,6 +728,18 @@
"setting_changed": "Instelling verschilt van standaard waarde",
"setting_server_side": "Deze instelling is gebonden aan je profiel en beïnvloed alle sessies en clients",
"settings": "Instellingen",
"settings_profile": "Instellingsprofielen",
"settings_profile_creation": "Nieuw profiel aanmaken",
"settings_profile_creation_new_name_label": "Naam",
"settings_profile_creation_submit": "Aanmaken",
"settings_profile_delete": "Verwijderen",
"settings_profile_delete_confirm": "Weet je zeker dat je dit profiel wilt verwijderen?",
"settings_profile_force_sync": "Synchroniseren",
"settings_profile_in_use": "In gebruik",
"settings_profile_use": "Gebruiken",
"settings_profiles_refresh": "Instellingsprofielen verversen",
"settings_profiles_show": "Alle instellingsprofielen tonen",
"settings_profiles_unshow": "Alle instellingsprofielen verbergen",
"show_admin_badge": "\"Beheerder\" badge in mijn profiel tonen",
"show_moderator_badge": "\"Moderator\" badge in mijn profiel tonen",
"show_nav_shortcuts": "Extra navigatie snelkoppelingen tonen in top paneel",
@ -871,7 +918,7 @@
"upload_a_photo": "Foto uploaden",
"useStreamingApi": "Berichten en meldingen in real-time ontvangen",
"useStreamingApiWarning": "Iets experimenteels met berichten streamen uwu miss kun je beter uit laten ofzo?",
"use_at_icon": "{'@'} symbool als icoon tonen in plaats van tekst",
"use_blurhash": "Waas tonen over NSFW-miniaturen",
"use_contain_fit": "Bijlage in miniaturen niet bijsnijden",
"use_one_click_nsfw": "Gevoelige bijlagen met slechts één klik openen",
"user_mutes": "Gebruikers",
@ -892,6 +939,12 @@
"word_filter": "Woord filter",
"wordfilter": "Woordfilter"
},
"settings_profile": {
"creating": "Bezig met nieuw profiel \"{profile}\" aan te maken...",
"synchronization_error": "Instellingen konden niet gesynchroniseerd worden: {err}",
"synchronized": "Instellingen gesynchroniseerd!",
"synchronizing": "Bezig met profiel \"{profile}\" te synchroniseren..."
},
"status": {
"ancestor_follow": "{numReplies} ander antwoord onder dit bericht tonen | {numReplies} andere antwoorden onder dit bericht tonen",
"ancestor_follow_with_icon": "{icon} {text}",
@ -925,6 +978,11 @@
"pin": "Aan profiel vastmaken",
"pinned": "Vastgezet",
"plus_more": "+{number} meer",
"redraft": "Verwijderen & opnieuw opstellen",
"redraft_confirm": "Weet je zeker at je dit bericht wilt verwijderen en opnieuw opstellen? Interacties met het originele bericht zullen vervallen.",
"redraft_confirm_accept_button": "Ja, verwijderen en opnieuw opstellen",
"redraft_confirm_cancel_button": "Nee, origineel bericht behouden",
"redraft_confirm_title": "Verwijderen & opnieuw opstellen bevestigen",
"remove_attachment": "Bijlage verwijderen",
"repeat_confirm": "Weet je zeker dat je dit bericht wilt herhalen?",
"repeat_confirm_accept_button": "Ja, herhalen",
@ -985,6 +1043,7 @@
"collapse": "Invouwen",
"conversation": "Gesprek",
"error": "Fout bij het ophalen van tijdlijn: {0}",
"follow_tag": "Hashtag volgen",
"load_older": "Oudere berichten laden",
"no_more_statuses": "Geen verdere berichten",
"no_retweet_hint": "Bericht is gemarkeerd als enkel-volgers of privé en kan niet worden herhaald of geciteerd",
@ -994,6 +1053,7 @@
"show_new": "Nieuwe tonen",
"socket_broke": "Realtime verbinding verloren: CloseEvent code {0}",
"socket_reconnected": "Realtime verbinding opgezet",
"unfollow_tag": "Hashtag ontvolgen",
"up_to_date": "Up-to-date"
},
"toast": {
@ -1058,6 +1118,7 @@
"block_confirm_title": "Gebruiker blokkeren",
"block_progress": "Blokkeren…",
"blocked": "Geblokkeerd!",
"blocks_you": "Blokkeert jou!",
"bot": "Bot",
"deactivated": "Gedeactiveerd",
"deny": "Weigeren",
@ -1072,7 +1133,10 @@
"follow_cancel": "Verzoek annuleren",
"follow_progress": "Aanvragen…",
"follow_sent": "Verzoek verzonden!",
"follow_tag": "Hashtag volgen",
"follow_unfollow": "Ontvolgen",
"followed_tags": "Gevolgde hashtags",
"followed_users": "Gevolgde gebruikers",
"followees": "Volgen",
"followers": "Volgers",
"following": "Gevolgd!",
@ -1097,11 +1161,14 @@
"mute_domain": "Domein blokkeren",
"mute_progress": "Negeren…",
"muted": "Genegeerd",
"not_following_any_hashtags": "Je volgt momenteel geen hashtags",
"note": "Privé notitie",
"per_day": "per dag",
"remote_follow": "Van afstand volgen",
"remove_follower": "Volger verwijderen",
"replies": "Met Antwoorden",
"report": "Rapporteren",
"requested_by": "Heeft verzocht je te volgen",
"show_repeats": "Herhalingen tonen",
"statuses": "Berichten",
"subscribe": "Abonneren",
@ -1111,11 +1178,13 @@
"unfollow_confirm_accept_button": "Ja, ontvolgen",
"unfollow_confirm_cancel_button": "Nee, niet ontvolgen",
"unfollow_confirm_title": "Gebruiker ontvolgen",
"unfollow_tag": "Hashtag ontvolgen",
"unmute": "Negeren opheffen",
"unmute_progress": "Negeren opheffen…",
"unsubscribe": "Abonnement opzeggen"
},
"user_profile": {
"field_validated": "Link geverifieerd",
"profile_does_not_exist": "Sorry, dit profiel bestaat niet.",
"profile_loading_error": "Sorry, er is een fout opgetreden bij het laden van dit profiel.",
"timeline_title": "Gebruikerstijdlijn"

View File

@ -1,5 +1,7 @@
{
"about": {
"bubble_instances": "Instancje lokalnej bańki",
"bubble_instances_description": "Instancje wybrane przez administratorów w celu przedstawienia okolicy tej instancji",
"mrf": {
"federation": "Federacja",
"keyword": {
@ -12,16 +14,19 @@
"mrf_policies": "Włączone zasady MRF",
"mrf_policies_desc": "Zasady MRF zmieniają zachowanie federowania instancji. Następujące zasady są włączone:",
"simple": {
"accept": "Akceptowanie",
"accept": "Akceptowane",
"accept_desc": "Ta instancja akceptuje tylko posty z wymienionych instancji:",
"ftl_removal": "Usunięcie z „Całej znanej sieci”",
"ftl_removal_desc": "Ta instancja usuwa wymienionych instancje z „Całej znanej sieci”:",
"instance": "Instancja",
"media_nsfw": "Multimedia ustawione jako wrażliwe",
"media_nsfw_desc": "Ta instancja wymusza, by multimedia z wymienionych instancji były ustawione jako wrażliwe:",
"media_removal": "Usuwanie multimediów",
"media_removal_desc": "Ta instancja usuwa multimedia z postów od wymienionych instancji:",
"not_applicable": "nie dotyczy",
"quarantine": "Kwarantanna",
"quarantine_desc": "Ta instancja wysyła tylko publiczne posty do wymienionych instancji:",
"quarantine_desc": "Ta instancja nie wysyła postów do wymienionych instancji:",
"reason": "Powód",
"reject": "Odrzucanie",
"reject_desc": "Ta instancja odrzuca posty z wymienionych instancji:",
"simple_policies": "Zasady specyficzne dla instancji"
@ -29,10 +34,31 @@
},
"staff": "Administracja"
},
"announcements": {
"all_day_prompt": "Jest to całodzienne wydarzenie",
"cancel_edit_action": "Anuluj",
"close_error": "Zamknij",
"delete_action": "Usuń",
"edit_action": "Edytuj",
"end_time_display": "Kończy się o {time}",
"end_time_prompt": "Koniec: ",
"inactive_message": "To ogłoszenie jest nieaktywne",
"mark_as_read_action": "Oznacz jako przeczytane",
"page_header": "Ogłoszenia",
"post_action": "Wyślij",
"post_error": "Błąd: {error}",
"post_form_header": "Wyślij ogłoszenie",
"post_placeholder": "Zawartość ogłoszenia",
"published_time_display": "Opublikowano o {time}",
"start_time_display": "Zaczyna się o {time}",
"start_time_prompt": "Początek: ",
"submit_edit_action": "Wyślij",
"title": "Ogłoszenie"
},
"chats": {
"chats": "Czaty",
"delete": "Usuń",
"delete_confirm": "Czy na pewno chcesz usunąć tą wiadomość?",
"delete_confirm": "Czy na pewno chcesz usunąć tę wiadomość?",
"empty_chat_list_placeholder": "Nie masz jeszcze żadnych czatów. Zacznij nowy czat!",
"empty_message_error": "Nie można wysłać pustej wiadomości",
"error_loading_chat": "Coś poszło nie tak podczas ładowania czatu.",
@ -48,8 +74,8 @@
"domain_mute_card": {
"mute": "Wycisz",
"mute_progress": "Wyciszam…",
"unmute": "Odcisz",
"unmute_progress": "Odciszam…"
"unmute": "Cofnij wyciszenie",
"unmute_progress": "Cofam wyciszenie…"
},
"emoji": {
"add_emoji": "Wstaw emoji",
@ -58,16 +84,17 @@
"keep_open": "Zostaw selektor otwarty",
"load_all": "Ładuję wszystkie {emojiAmount} emoji",
"load_all_hint": "Załadowano pierwsze {saneAmount} emoji, Załadowanie wszystkich emoji może spowodować problemy z wydajnością.",
"recent": "Ostatnio używane",
"search_emoji": "Wyszukaj emoji",
"stickers": "Naklejki",
"unicode": "Emoji unicode"
},
"errors": {
"storage_unavailable": "Pleroma nie mogła uzyskać dostępu do pamięci masowej przeglądarki. Twój login lub lokalne ustawienia nie zostaną zapisane i możesz napotkać problemy. Spróbuj włączyć ciasteczka."
"storage_unavailable": "Akkoma nie mogła uzyskać dostępu do pamięci masowej przeglądarki. Twój login lub lokalne ustawienia nie zostaną zapisane i możesz napotkać problemy. Spróbuj włączyć ciasteczka."
},
"exporter": {
"export": "Eksportuj",
"processing": "Przetwarzam, za chwilę zostaniesz zapytany(-na) o ściągnięcie pliku"
"processing": "Przetwarzam, za chwilę zostaniesz zapytane o ściągnięcie pliku"
},
"features_panel": {
"media_proxy": "Proxy mediów",
@ -96,8 +123,9 @@
"dismiss": "Odrzuć",
"enable": "Włącz",
"error_retry": "Spróbuj ponownie",
"flash_content": "Naciśnij, aby wyświetlić zawartości Flash z użyciem Ruffle (eksperymentalnie, może nie działać).",
"flash_fail": "Nie udało się załadować treści flash, zajrzyj do konsoli, aby odnaleźć szczegóły.",
"flash_content": "Naciśnij, aby wyświetlić zawartości Flash z użyciem Ruffle (eksperymentalne, może nie działać).",
"flash_fail": "Nie udało się załadować treści flash, zajrzyj do konsoli, by zobaczyć szczegóły.",
"flash_security": "Zauważ, że może to być potencjalnie niebezpieczne, ponieważ Flash zawiera dowolny kod wykonywalny.",
"generic_error": "Wystąpił błąd",
"loading": "Ładowanie…",
"more": "Więcej",
@ -108,6 +136,13 @@
"admin": "Administrator",
"moderator": "Moderator"
},
"scope_in_timeline": {
"direct": "Wiadomość bezpośrednia",
"local": "Lokalnie - tylko twoja instancja może zobaczyć ten post",
"private": "Tylko dla śledzących",
"public": "Publicznie",
"unlisted": "Poza listą"
},
"show_less": "Pokaż mniej",
"show_more": "Pokaż więcej",
"submit": "Wyślij",
@ -130,6 +165,84 @@
"load_older": "Załaduj starsze interakcje",
"moves": "Użytkownik migruje"
},
"languages": {
"ar": "Arabski",
"az": "Azerski",
"bg": "Bułgarski",
"cs": "Czeski",
"da": "Duński",
"de": "Niemiecki",
"el": "Grecki",
"en": "Angielski",
"eo": "Esperanto",
"es": "Hiszpański",
"fa": "Perski",
"fi": "Fiński",
"fr": "Francuski",
"ga": "Irlandzki",
"he": "Hebrajski",
"hi": "Hindi",
"hu": "Węgierski",
"id": "Indonezyjski",
"it": "Włoski",
"ja": "Japoński",
"ko": "Koreański",
"lt": "Litewski",
"lv": "Łotewski",
"nl": "Holenderski",
"pl": "Polski",
"pt": "Portugalski",
"ru": "Rosyjski",
"sk": "Słowacki",
"sv": "Szwedzki",
"tr": "Turecki",
"translated_from": {
"ar": "Przetłumaczono z języka arabskiego",
"az": "Przetłumaczono z języka azerskiego",
"bg": "Przetłumaczono z języka bułgarskiego",
"cs": "Przetłumaczono z języka czeskiego",
"da": "Przetłumaczono z języka duńskiego",
"de": "Przetłumaczono z języka niemieckiego",
"el": "Przetłumaczono z języka greckiego",
"en": "Przetłumaczono z języka angielskiego",
"eo": "Przetłumaczono z Esperanto",
"es": "Przetłumaczono z języka hiszpańskiego",
"fa": "Przetłumaczono z języka perskiego",
"fi": "Przetłumaczono z języka fińskiego",
"fr": "Przetłumaczono z języka francuskiego",
"ga": "Przetłumaczono z języka irlandzkiego",
"he": "Przetłumaczono z języka hebrajskiego",
"hi": "Przetłumaczono z Hindi",
"hu": "Przetłumaczono z języka węgierskiego",
"id": "Przetłumaczono z języka indonezyjskiego",
"it": "Przetłumaczono z języka włoskiego",
"ja": "Przetłumaczono z języka japońskiego",
"ko": "Przetłumaczono z języka koreańskiego",
"lt": "Przetłumaczono z języka litewskiego",
"lv": "Przetłumaczono z języka łotewskiego",
"nl": "Przetłumaczono z języka holenderskiego",
"pl": "Przetłumaczono z języka polskiego",
"pt": "Przetłumaczono z języka portugalskiego",
"ru": "Przetłumaczono z języka rosyjskiego",
"sk": "Przetłumaczono z języka słowackiego",
"sv": "Przetłumaczono z języka szwedzkiego",
"tr": "Przetłumaczono z języka tureckiego",
"uk": "Przetłumaczono z języka ukraińskiego",
"zh": "Przetłumaczono z języka chińskiego"
},
"uk": "Ukraiński",
"zh": "Chiński"
},
"lists": {
"create": "Stwórz listę",
"delete": "Usuń listę",
"following_only": "Zawęź do Śledzących",
"lists": "Listy",
"new": "Nowa Lista",
"save": "Zapisz zmiany",
"search": "Szukaj użytkowników",
"title": "Tytuł listy"
},
"login": {
"authentication_code": "Kod weryfikacyjny",
"description": "Zaloguj używając OAuth",
@ -142,61 +255,102 @@
"hint": "Zaloguj się, aby dołączyć do dyskusji",
"login": "Zaloguj",
"logout": "Wyloguj",
"logout_confirm": "Czy na pewno chcesz się wylogować?",
"logout_confirm_accept_button": "Wyloguj",
"logout_confirm_cancel_button": "Anuluj",
"logout_confirm_title": "Wyloguj",
"password": "Hasło",
"placeholder": "n.p. lain",
"placeholder": "mojanazwausera",
"recovery_code": "Kod zapasowy",
"register": "Zarejestruj",
"username": "Użytkownik"
},
"media_modal": {
"counter": "{current} / {total}",
"hide": "Zamknij przeglądarkę mediów",
"next": "Następne",
"previous": "Poprzednie"
},
"moderation": {
"moderation": "Moderacja",
"reports": {
"add_note": "Dodaj komentarz",
"close": "Zamknij",
"delete_note": "Usuń",
"delete_note_accept": "Tak, usuń",
"delete_note_cancel": "Nie, zostaw",
"delete_note_confirm": "Czy na pewno chesz usunąć ten komentarz?",
"delete_note_title": "Potwierdź usunięcie",
"no_content": "Brak opisu",
"no_reports": "Brak raportów do pokazania",
"note_placeholder": "Zostaw komenarz",
"notes": "{ count } komentarz | { count } komentarzy",
"reopen": "Otwórz ponownie",
"report": "Raport na",
"reports": "Raporty",
"resolve": "Oznacz jako rozwiązane",
"show_closed": "Pokaż zamknięte",
"statuses": "{ count } post| { count } postów",
"tag_policy_notice": "Włącz TagPolicy MRF by ustawić obostrzenia dla wpisów",
"tags": "Ustaw obostrzenia dla wpisów"
},
"statuses": "Wpisy",
"users": "Użytkownicy"
},
"nav": {
"about": "O nas",
"administration": "Administracja",
"announcements": "Ogłoszenia",
"back": "Wróć",
"bookmarks": "Zakładki",
"bubble_timeline": "Lokalna bańka",
"bubble_timeline_description": "Wpisy z instancji bliskich twojej, tak jak zaleca administracja",
"chats": "Czaty",
"dms": "Wiadomości bezpośrednie",
"friend_requests": "Prośby o możliwość obserwacji",
"home_timeline": "Główna oś czasu",
"home_timeline_description": "Wpisy ludzi, których śledzisz",
"interactions": "Interakcje",
"lists": "Listy",
"mentions": "Wzmianki",
"moderation": "Moderacja",
"preferences": "Preferencje",
"public_timeline_description": "Publiczne wpisy z tej instancji",
"public_tl": "Publiczna oś czasu",
"search": "Wyszukiwanie",
"timeline": "Oś czasu",
"timelines": "Osie czasu",
"twkn": "Znana sieć",
"twkn_timeline_description": "Wpisy z całej znanej sieci",
"user_search": "Wyszukiwanie użytkowników",
"who_to_follow": "Sugestie obserwacji"
},
"notifications": {
"broken_favorite": "Nieznany status, szukam go…",
"broken_favorite": "Nieznany wpis, szukam go…",
"error": "Błąd pobierania powiadomień: {0}",
"favorited_you": "dodał(-a) twój status do ulubionych",
"favorited_you": "dodało twój wpis do ulubionych",
"follow_request": "chce ciebie obserwować",
"followed_you": "obserwuje cię",
"load_older": "Załaduj starsze powiadomienia",
"migrated_to": "wyemigrował do",
"no_more_notifications": "Nie masz więcej powiadomień",
"notifications": "Powiadomienia",
"poll_ended": "Ankieta zakończona",
"reacted_with": "zareagował z {0}",
"read": "Przeczytane!",
"repeated_you": "powtórzył(-a) twój status"
"repeated_you": "powtórzyło twój wpis"
},
"password_reset": {
"check_email": "Sprawdź pocztę, aby uzyskać link do zresetowania hasła.",
"forgot_password": "Zapomniałeś(-aś) hasła?",
"forgot_password": "Zapomniał hasła?",
"instruction": "Wprowadź swój adres email lub nazwę użytkownika. Wyślemy ci link z którym możesz zresetować hasło.",
"password_reset": "Reset hasła",
"password_reset_disabled": "Resetowanie hasła jest wyłączone. Proszę skontaktuj się z administratorem tej instancji.",
"password_reset_disabled": "Resetowanie hasła jest wyłączone. Proszę skontaktuj się z administracją tej instancji.",
"password_reset_required": "Musisz zresetować hasło, by się zalogować.",
"password_reset_required_but_mailer_is_disabled": "Musisz zresetować hasło, ale resetowanie hasła jest wyłączone. Proszę skontaktuj się z administratorem tej instancji.",
"password_reset_required_but_mailer_is_disabled": "Musisz zresetować hasło, ale resetowanie hasła jest wyłączone. Proszę skontaktuj się z administracją tej instancji.",
"placeholder": "Twój email lub nazwa użytkownika",
"return_home": "Wróć do strony głównej",
"too_many_requests": "Przekroczyłeś(-aś) limit prób, spróbuj ponownie później."
"too_many_requests": "Przekroczył limit prób, spróbuj ponownie później."
},
"polls": {
"add_option": "Dodaj opcję",
@ -222,47 +376,59 @@
"text/bbcode": "BBCode",
"text/html": "HTML",
"text/markdown": "Markdown",
"text/plain": "Czysty tekst"
"text/plain": "Czysty tekst",
"text/x.misskeymarkdown": "MFM"
},
"content_warning": "Temat (nieobowiązkowy)",
"default": "Właśnie wróciłem z kościoła",
"direct_warning_to_all": "Ten wpis zobaczą wszystkie osoby, o których wspomniałeś(-aś).",
"direct_warning_to_first_only": "Ten wpis zobaczą tylko te osoby, o których wspomniałeś(-aś) na początku wiadomości.",
"content_warning": "Ostrzeżenie o zawartości (nieobowiązkowe)",
"default": "Właśnie wróciłom z kremówek",
"direct_warning_to_all": "Ten wpis zobaczą wszystkie osoby, o których wspomniałoś.",
"direct_warning_to_first_only": "Ten wpis zobaczą tylko te osoby, o których wspomniałoś na początku wiadomości.",
"edit_remote_warning": "Zmiany dokonane w tym wpisie mogą nie być widoczne na niektórych instancjach!",
"edit_status": "Edytuj wpis",
"edit_unsupported_warning": "Ankiety i wzmianki nie zostaną zmienione przez edycję",
"empty_status_error": "Nie można wysłać pustego wpisu bez plików",
"media_description": "Opis mediów",
"media_description_error": "Nie udało się zaktualizować mediów, spróbuj ponownie",
"new_status": "Dodaj nowy status",
"media_not_sensitive_warning": "Ustawiłoś ostrzeżenie o zawartości, ale załączniki nie zostały oznaczone jako wrażliwe!",
"new_status": "Dodaj nowy wpis",
"post": "Opublikuj",
"posting": "Wysyłanie",
"preview": "Podgląd",
"preview_empty": "Pusty",
"scope": {
"direct": "Bezpośredni tylko dla wspomnianych użytkowników",
"local": "Lokalnie - nie federuj tego wpisu",
"private": "Tylko dla obserwujących umieść dla osób, które cię obserwują",
"public": "Publiczny umieść na publicznych osiach czasu",
"unlisted": "Niewidoczny nie umieszczaj na publicznych osiach czasu"
},
"scope_notice": {
"local": "Ten wpis nie będzie widoczny dla innych instancji",
"private": "Ten post będzie widoczny tylko dla twoich obserwujących",
"public": "Ten post będzie widoczny dla każdego",
"unlisted": "Ten post nie będzie widoczny na publicznej osi czasu i całej znanej sieci"
"public": "Ten wpis będzie widoczny dla każdego",
"unlisted": "Ten wpis nie będzie widoczny na publicznej osi czasu i całej znanej sieci"
}
},
"registration": {
"awaiting_email_confirmation": "Twoje konto zostało zarejestrowane i email został wysłany na twój adres. Sprawdź swoją skrzynkę by dokończyć rejestrację.",
"awaiting_email_confirmation_title": "Oczekiwanie na potwierdzenie emailem",
"bio": "Bio",
"bio_placeholder": "e.g.\nCześć, jestem Lain.\nJestem dziewczynką z anime żyjącą na peryferiach Japonii. Możesz znać mnie z Wired.",
"bio_placeholder": "e.g.\nCześć! Witaj w moim bio.\nLubię oglądać anime i grać w gry. Mam nadzieję, że zostaniemy przyjaciółmi!",
"captcha": "CAPTCHA",
"email": "E-mail",
"email_language": "W jakim języku chcesz otrzymywać wiadomości z tego serwera?",
"fullname": "Wyświetlana nazwa profilu",
"fullname_placeholder": "np. Lain Iwakura",
"fullname_placeholder": "np. Atsuko Kagari",
"new_captcha": "Naciśnij na obrazek, aby dostać nowy kod captcha",
"password_confirm": "Potwierdzenie hasła",
"reason": "Powód rejestracji",
"reason_placeholder": "Ta instancja ręcznie zatwierdza rejestracje.\nPoinformuj administratora, dlaczego chcesz się zarejestrować.",
"register": "Zarejestruj się",
"registration": "Rejestracja",
"request_sent": "Twoja prośba o rejestrację została wysłana i czeka na potwierdzenie. Dostaniesz email kiedy twoje konto zostanie zaakceptowane.",
"request_sent_title": "Wysłano prośbę o rejestrację",
"token": "Token zaproszenia",
"username_placeholder": "np. lain",
"username_placeholder": "np. akko",
"validations": {
"email_required": "nie może być pusty",
"fullname_required": "nie może być pusta",
@ -289,7 +455,19 @@
},
"settings": {
"accent": "Akcent",
"account_alias": "Aliasy konta",
"account_alias_table_head": "Alias",
"account_backup": "Kopia zapasowa konta",
"account_backup_description": "Możesz ściągnąć archiwum danych swojego konta oraz swoje posty, ale na razie nie da się ich importować do konta na Akkomie.",
"account_backup_table_head": "Kopia zapasowa",
"account_privacy": "Prywatność",
"add_alias_error": "Błąd dodawania aliasu: {error}",
"add_backup": "Stwórz nową kopię zapasową",
"add_backup_error": "Błąd dodawania kopii zapasowej: {error}",
"added_alias": "Dodano alias.",
"added_backup": "Dodano kopię zapasową.",
"allow_following_move": "Zezwalaj na automatyczną obserwację gdy obserwowane konto migruje",
"always_show_post_button": "Zawsze pokazuj pływający przycisk Nowy Wpis",
"app_name": "Nazwa aplikacji",
"attachmentRadius": "Załączniki",
"attachments": "Załączniki",
@ -299,6 +477,7 @@
"avatarRadius": "Awatary",
"avatar_size_instruction": "Zalecany minimalny rozmiar awatarów to 150x150 pikseli.",
"background": "Tło",
"backup_not_ready": "Kopia zapasowa nie jest jeszcze gotowa.",
"bio": "Bio",
"block_export": "Eksport blokad",
"block_export_button": "Eksportuj twoje blokady do pliku .csv",
@ -320,10 +499,27 @@
"changed_password": "Pomyślnie zmieniono hasło!",
"chatMessageRadius": "Wiadomość czatu",
"checkboxRadius": "Pola wyboru",
"collapse_subject": "Zwijaj posty z tematami",
"collapse_subject": "Zwijaj posty z ostrzeżeniami o treści",
"columns": "Kolumny",
"composing": "Pisanie",
"confirm_dialogs": "Wymagaj potwierdzenia dla:",
"confirm_dialogs_approve_follow": "Akceptację prośby o śledzenie",
"confirm_dialogs_block": "Blokowanie kogoś",
"confirm_dialogs_delete": "Usunięcie wpisu",
"confirm_dialogs_deny_follow": "Odrzucenie prośby o śledzenie",
"confirm_dialogs_mute": "Wyciszenie kogoś",
"confirm_dialogs_repeat": "Powtórzenie wpisu",
"confirm_dialogs_unfollow": "Odwołanie śledzenia kogoś",
"confirm_new_password": "Potwierdź nowe hasło",
"confirmation_dialogs": "Opcje potwierdzeń",
"conversation_display": "Styl wyświetlania rozmów",
"conversation_display_linear": "Liniowy",
"conversation_display_tree": "Drzewiasty",
"conversation_other_replies_button": "Pokaż przycisk \"inne odpowiedzi\"",
"conversation_other_replies_button_below": "Pod wpisami",
"conversation_other_replies_button_inside": "Wewnątrz wpisów",
"current_avatar": "Twój obecny awatar",
"current_mascot": "Twoja obecna maskotka",
"current_password": "Obecne hasło",
"data_import_export_tab": "Import/eksport danych",
"default_vis": "Domyślny zakres widoczności",
@ -331,23 +527,32 @@
"delete_account_description": "Trwale usuń dane i zdezaktywuj konto.",
"delete_account_error": "Wystąpił problem z usuwaniem twojego konta. Jeżeli problem powtarza się, poinformuj administratora swojej instancji.",
"delete_account_instructions": "Wprowadź swoje hasło w poniższe pole aby potwierdzić usunięcie konta.",
"disable_sticky_headers": "Nie przyklejaj nagłówków kolumn do góry ekranu",
"discoverable": "Zezwól na odkrywanie tego konta w wynikach wyszukiwania i innych usługach",
"domain_mutes": "Domeny",
"download_backup": "Ściągnij",
"email_language": "Język w którym otrzymujesz emaile od serwera",
"emoji_reactions_on_timeline": "Pokaż reakcje emoji na osi czasu",
"enable_web_push_notifications": "Włącz powiadomienia push",
"enter_current_password_to_confirm": "Wprowadź obecne hasło, by potwierdzić twoją tożsamość",
"expert_mode": "Pokaż zaawansowane",
"expire_posts_enabled": "Usuń wpisy po zadanej liczbie dni",
"expire_posts_input_placeholder": "Liczba dni",
"export_theme": "Zapisz motyw",
"file_export_import": {
"backup_restore": "Kopia zapasowa ustawień",
"backup_settings": "Kopia zapasowa ustawień do pliku",
"backup_settings_theme": "Kopia zapasowa ustawień i motywu do pliku",
"errors": {
"file_slightly_new": "Nie zgadza się pomniejsza wersja pliku, niektóre ustawienia mogą się nie załadować",
"file_too_new": "Niekompatybilna główna wersja: {fileMajor}, ten PleromaFE (wersja ustawień {feMajor}) jest zbyt stary by to obsłużyć",
"file_too_old": "Niekompatybilna główna wersja: {fileMajor}, wersja pliku jest zbyt stara i nie wspierana (min. ustawiona wer. {feMajor})",
"invalid_file": "Wybrany plik nie jest obsługiwaną kopią zapasową ustawień Pleromy. Nie dokonano żadnych zmian."
},
"restore_settings": "Przywróć ustawienia z pliku"
},
"filtering": "Filtrowanie",
"filtering_explanation": "Wszystkie statusy zawierające te słowa będą wyciszone. Jedno słowo na linijkę.",
"filtering_explanation": "Wszystkie wpisy zawierające te słowa będą wyciszone. Jedno słowo na linijkę.",
"follow_export": "Eksport obserwowanych",
"follow_export_button": "Eksportuj swoją listę obserwowanych do pliku CSV",
"follow_import": "Import obserwowanych",
@ -360,18 +565,26 @@
"hide_all_muted_posts": "Ukryj wyciszone słowa",
"hide_attachments_in_convo": "Ukrywaj załączniki w rozmowach",
"hide_attachments_in_tl": "Ukrywaj załączniki w osi czasu",
"hide_bot_indication": "Ukryj we wpisach oznaczenie botów",
"hide_favorites_description": "Nie pokazuj list moich ulubionych (ludzie wciąż dostaną notyfikacje)",
"hide_filtered_statuses": "Ukrywaj filtrowane statusy",
"hide_followers_count_description": "Nie pokazuj licznika obserwujących",
"hide_followers_description": "Nie pokazuj kto mnie obserwuje",
"hide_follows_count_description": "Nie pokazuj licznika obserwowanych",
"hide_follows_description": "Nie pokazuj kogo obserwuję",
"hide_isp": "Ukryj panel informacji o instancji",
"hide_list_aliases_error_action": "Zamknij",
"hide_media_previews": "Ukryj podgląd mediów",
"hide_muted_posts": "Ukrywaj wpisy wyciszonych użytkowników",
"hide_muted_threads": "Ukryj wyciszone wątki",
"hide_post_stats": "Ukrywaj statysyki postów (np. liczbę polubień)",
"hide_shoutbox": "Ukryj shoutbox instancji",
"hide_site_favicon": "Ukryj favikonę instancji na górze panelu",
"hide_site_name": "Ukryj nazwę instancji na górze panelu",
"hide_threads_with_blocked_users": "Ukryj wątki wspominające o zablokowanych użytkownikach",
"hide_user_stats": "Ukrywaj statysyki użytkowników (np. liczbę obserwujących)",
"hide_wallpaper": "Ukryj tło instancji",
"hide_wordfiltered_statuses": "Ukryj wpisy zawierające wyfiltrowane słowa",
"import_blocks_from_a_csv_file": "Importuj blokady z pliku CSV",
"import_followers_from_a_csv_file": "Importuj obserwowanych z pliku CSV",
"import_mutes_from_a_csv_file": "Zaimportuj wyciszenia z pliku .csv",
@ -384,10 +597,23 @@
"invalid_theme_imported": "Wybrany plik nie jest obsługiwanym motywem Pleromy. Nie dokonano zmian w twoim motywie.",
"limited_availability": "Niedostępne w twojej przeglądarce",
"links": "Łącza",
"list_aliases_error": "Błąd pobierania aliasów: {error}",
"list_backups_error": "Błąd pobierania listy kopii zapasowych: {error}",
"lock_account_description": "Spraw, by konto mogli wyświetlać tylko zatwierdzeni obserwujący",
"loop_video": "Zapętlaj filmy",
"loop_video_silent_only": "Zapętlaj tylko filmy bez dźwięku (np. mastodonowe „gify”)",
"mascot": "Maskotka Mastodon FE",
"max_depth_in_thread": "Maksymalna liczba poziomów w wątku wyświetlana domyślnie",
"max_thumbnails": "Maksymalna liczba miniatur w poście",
"mention_link_bolden_you": "Podkreśl wspomnienia o tobie",
"mention_link_display": "Pokaż linki wspomnień",
"mention_link_display_full": "zawsze jako pełne nazwy (np. {'@'}foo{'@'}example.org)",
"mention_link_display_full_for_remote": "jako pełne nazwy tylko dla zdalnych użytkowników (np. {'@'}foo{'@'}example.org)",
"mention_link_display_short": "zawsze jako krótkie nazwy (np. {'@'}foo)",
"mention_link_fade_domain": "Wyblakłe domeny (np. {'@'}example.org w {'@'}foo{'@'}example.org)",
"mention_link_show_avatar": "Pokaż avatar użytkownika obok linku",
"mention_link_show_tooltip": "Pokaż pełne nazwy użytkowników jako dymek dla zdalnych użytkowników",
"mention_links": "Linki wspomnień",
"mfa": {
"authentication_methods": "Metody weryfikacji",
"confirm_and_enable": "Potwierdź i włącz OTP",
@ -411,6 +637,12 @@
},
"minimal_scopes_mode": "Zminimalizuj opcje wyboru zakresu postów",
"more_settings": "Więcej ustawień",
"move_account": "Przenieś konto",
"move_account_error": "Błąd przenoszenia konta: {error}",
"move_account_notes": "Jeśli chcesz przenieść to konto gdzieś indziej, musisz przejść do konta docelowego i dodać tam alias wskazujący tutaj.",
"move_account_target": "Konto docelowe (np. {example})",
"moved_account": "Konto zostało przeniesione.",
"mute_bot_posts": "Wycisz posty botów",
"mute_export": "Eksport wyciszeń",
"mute_export_button": "Wyeksportuj swoje wyciszenia do pliku .csv",
"mute_import": "Import wyciszeń",
@ -420,6 +652,7 @@
"mutes_tab": "Wyciszenia",
"name": "Imię",
"name_bio": "Imię i bio",
"new_alias_target": "Dodaj nowy alias (np. {example})",
"new_email": "Nowy e-mail",
"new_password": "Nowe hasło",
"no_blocks": "Brak blokad",
@ -429,6 +662,7 @@
"notification_mutes": "By przestać otrzymywać powiadomienia od jednego użytkownika, wycisz go.",
"notification_setting_block_from_strangers": "Zablokuj powiadomienia od użytkowników których nie obserwujesz",
"notification_setting_filters": "Filtry",
"notification_setting_hide_if_cw": "Ukryj zawartość powiadomień jeśli jest pod Ostrzeżeniem o Treści",
"notification_setting_hide_notification_contents": "Ukryj nadawcę i zawartość powiadomień push",
"notification_setting_privacy": "Prywatność",
"notification_visibility": "Rodzaje powiadomień do wyświetlania",
@ -437,6 +671,7 @@
"notification_visibility_likes": "Ulubione",
"notification_visibility_mentions": "Wzmianki",
"notification_visibility_moves": "Użytkownik migruje",
"notification_visibility_polls": "Koniec ankiety w której brałoś udział",
"notification_visibility_repeats": "Powtórzenia",
"notifications": "Powiadomienia",
"nsfw_clickthrough": "Włącz domyślne ukrywanie załączników o treści nieprzyzwoitej (NSFW)",
@ -445,7 +680,9 @@
"panelRadius": "Panele",
"pause_on_unfocused": "Wstrzymuj strumieniowanie kiedy karta nie jest aktywna",
"play_videos_in_modal": "Odtwarzaj filmy bezpośrednio w przeglądarce mediów",
"post_status_content_type": "Post status content type",
"post_look_feel": "Wygląd wpisów",
"post_status_content_type": "Domyślny typ zawartości wpisów",
"posts": "Wpisy",
"preload_images": "Ładuj wstępnie obrazy",
"presets": "Gotowe motywy",
"profile_background": "Tło profilu",
@ -459,6 +696,10 @@
"profile_tab": "Profil",
"radii_help": "Ustaw zaokrąglenie krawędzi interfejsu (w pikselach)",
"refresh_token": "Odśwież token",
"remove_alias": "Usuń ten alias",
"remove_backup": "Usuń kopię zapasową",
"render_mfm": "Wyświetlaj Misskey Markdown",
"render_mfm_on_hover": "Pauzuj animacje MFM dopóki nie najedziesz na nie kursorem",
"replies_in_timeline": "Odpowiedzi na osi czasu",
"reply_visibility_all": "Pokazuj wszystkie odpowiedzi",
"reply_visibility_following": "Pokazuj tylko odpowiedzi skierowane do mnie i osób które obserwuję",
@ -482,13 +723,34 @@
"security": "Bezpieczeństwo",
"security_tab": "Bezpieczeństwo",
"sensitive_by_default": "Domyślnie oznaczaj wpisy jako wrażliwe",
"sensitive_if_subject": "Automatycznie oznacz obrazki jako wrażliwe jeśli jest ustawnione ostrzeżenie o zawartości",
"set_new_avatar": "Ustaw nowy awatar",
"set_new_mascot": "Ustaw nową maskotkę",
"set_new_profile_background": "Ustaw nowe tło profilu",
"set_new_profile_banner": "Ustaw nowy banner profilu",
"setting_changed": "Opcja różni się od domyślnej",
"setting_server_side": "Ta opcja jest przywiązana do twojego profilu i wpływa na wszystkie sesje i klienty",
"settings": "Ustawienia",
"settings_profile": "Profile Ustawień",
"settings_profile_creation": "Stwórz nowy profil",
"settings_profile_creation_new_name_label": "Nazwa",
"settings_profile_creation_submit": "Stwórz",
"settings_profile_currently": "Aktualnie używane jest {name} (wersja: {version})",
"settings_profile_delete": "Usuń",
"settings_profile_delete_confirm": "Czy na pewno chesz usunąć ten profil?",
"settings_profile_force_sync": "Synchronizuj",
"settings_profile_in_use": "W użyciu",
"settings_profile_use": "Użyj",
"settings_profiles_refresh": "Odświerz profile ustawień",
"settings_profiles_show": "Pokaż wszystkie profile ustawień",
"settings_profiles_unshow": "Ukryj wszystkie profile ustawień",
"show_admin_badge": "Pokazuj odznakę „Administrator” na moim profilu",
"show_moderator_badge": "Pokazuj odznakę „Moderator” na moim profilu",
"show_nav_shortcuts": "Pokaż dodatkowe skróty nawigacyjne w górnym panelu",
"show_panel_nav_shortcuts": "Pokaż skróty nawigacji osi czasu na górze panelu",
"show_scrollbars": "Pokaż paski przewijania kolumn bocznych",
"show_wider_shortcuts": "Zwiększ odstęp między skrótami na panelu górnym",
"show_yous": "Pokaż (Ty)",
"stop_gifs": "Odtwarzaj GIFy po najechaniu kursorem",
"streaming": "Włącz automatycznie strumieniowanie nowych postów gdy jesteś na początku strony",
"style": {
@ -614,15 +876,15 @@
"help": {
"fe_downgraded": "Wersja PleromaFE została cofnięta.",
"fe_upgraded": "Silnik motywów PleromaFE został zaaktualizowany.",
"future_version_imported": "Plik który zaimportowałeś(-aś) został stworzony w nowszej wersji FE.",
"migration_napshot_gone": "Z jakiegoś powodu migawka zniknęła, niektóre rzeczy mogą wyglądać inaczej niż zapamiętałeś(-aś).",
"future_version_imported": "Plik który zaimportował został stworzony w nowszej wersji FE.",
"migration_napshot_gone": "Z jakiegoś powodu migawka zniknęła, niektóre rzeczy mogą wyglądać inaczej niż zapamiętał.",
"migration_snapshot_ok": "Żeby być bezpiecznym, migawka motywu została załadowana. Możesz spróbować załadować dane motywu.",
"older_version_imported": "Plik który zaimportowałeś(-aś) został stworzony w starszej wersji FE.",
"older_version_imported": "Plik który zaimportował został stworzony w starszej wersji FE.",
"snapshot_missing": "Nie znaleziono migawki motywu w pliku, więc motyw może wyglądać inaczej niż pierwotnie zaplanowano.",
"snapshot_present": "Migawka motywu jest załadowana, więc wszystkie wartości zostały nadpisane. Zamiast tego możesz załadować właściwe dane motywu.",
"snapshot_source_mismatch": "Konflikt wersji: najprawdopodobniej FE zostało cofnięte do poprzedniej wersji i zaktualizowane ponownie, jeśli zmieniłeś(-aś) motyw używając starszej wersji FE, najprawdopodobniej chcesz używać starszej wersji, w przeciwnym razie użyj nowej wersji.",
"upgraded_from_v2": "PleromaFE zostało zaaktualizowane, motyw może wyglądać nieco inaczej niż zapamiętałeś(-aś).",
"v2_imported": "Plik który zaimportowałeś(-aś) został stworzony dla starszego FE. Próbujemy zwiększyć kompatybilność, lecz wciąż mogą występować rozbieżności."
"snapshot_source_mismatch": "Konflikt wersji: najprawdopodobniej FE zostało cofnięte do poprzedniej wersji i zaktualizowane ponownie, jeśli zmienił motyw używając starszej wersji FE, najprawdopodobniej chcesz używać starszej wersji, w przeciwnym razie użyj nowej wersji.",
"upgraded_from_v2": "PleromaFE zostało zaaktualizowane, motyw może wyglądać nieco inaczej niż zapamiętał.",
"v2_imported": "Plik który zaimportował został stworzony dla starszego FE. Próbujemy zwiększyć kompatybilność, lecz wciąż mogą występować rozbieżności."
},
"keep_as_is": "Zostaw po staremu",
"keep_color": "Zachowaj kolory",
@ -637,9 +899,9 @@
"use_source": "Nowa wersja"
}
},
"subject_input_always_show": "Zawsze pokazuj pole tematu",
"subject_line_behavior": "Kopiuj temat podczas odpowiedzi",
"subject_line_email": "Jak w mailach „re: temat”",
"subject_input_always_show": "Zawsze pokazuj pole ostrzeżenia o treści",
"subject_line_behavior": "Kopiuj ostrzeżenie o treści podczas odpowiedzi",
"subject_line_email": "Jak w mailach „re: ostrzeżenie”",
"subject_line_mastodon": "Jak na Mastodonie po prostu kopiuj",
"subject_line_noop": "Nie kopiuj",
"text": "Tekst",
@ -647,15 +909,30 @@
"theme_help": "Użyj kolorów w notacji szesnastkowej (#rrggbb), by stworzyć swój motyw.",
"theme_help_v2_1": "Możesz też zastąpić kolory i widoczność poszczególnych komponentów przełączając pola wyboru, użyj „Wyczyść wszystko” aby usunąć wszystkie zastąpienia.",
"theme_help_v2_2": "Ikony pod niektórych wpisami są wskaźnikami kontrastu pomiędzy tłem a tekstem, po najechaniu na nie otrzymasz szczegółowe informacje. Zapamiętaj, że jeżeli używasz przezroczystości, wskaźniki pokazują najgorszy możliwy przypadek.",
"third_column_mode": "Jeśli jest dość miejsca, pokaż trzecią kolumnę zawierającą",
"third_column_mode_none": "Nie pokazuj trzeciej kolumny",
"third_column_mode_notifications": "Kolumnę powiadomień",
"third_column_mode_postform": "Główny formularz wpisu i nawigacja",
"token": "Token",
"tooltipRadius": "Etykiety/alerty",
"translation_language": "Automatyczny Język Tłumaczeń",
"tree_advanced": "Pokaż dodatkowe przyciski do otwierania i zamykania ciągów odpowiedzi w wątkach",
"tree_fade_ancestors": "Pokaż przodków aktualnego wpisu jako blady tekst",
"type_domains_to_mute": "Wyszukaj domeny, które chcesz wyciszyć",
"upload_a_photo": "Wyślij zdjęcie",
"useStreamingApi": "Otrzymuj posty i powiadomienia w czasie rzeczywistym",
"useStreamingApiWarning": "(Niezalecane, eksperymentalne, pomija posty)",
"use_at_icon": "Pokazuj symbol {'@'} jako ikonę a nie tekst",
"use_blurhash": "Używaj rozmycia dla miniatur wrażliwych obrazków",
"use_contain_fit": "Nie przycinaj załączników na miniaturach",
"use_one_click_nsfw": "Otwieraj załączniki NSFW jednym kliknięciem",
"user_accepts_direct_messages_from": "Pozwalaj na wiadomości od",
"user_accepts_direct_messages_from_everybody": "Każdego",
"user_accepts_direct_messages_from_nobody": "Nikogo",
"user_accepts_direct_messages_from_people_i_follow": "Ludzi, których śledzę",
"user_mutes": "Użytkownicy",
"user_profile_default_tab": "Domyślna Karta na Profilu Użytkownika",
"user_profiles": "Profile Użytkowników",
"user_settings": "Ustawienia użytkownika",
"valid_until": "Ważne do",
"values": {
@ -668,34 +945,86 @@
"title": "Wersja"
},
"virtual_scrolling": "Optymalizuj renderowanie osi czasu",
"word_filter": "Filtr słów"
"word_filter": "Filtr słów",
"wordfilter": "Filtr słów"
},
"settings_profile": {
"creating": "Tworzę nowy profil ustawień \"{profile}\"...",
"synchronization_error": "Nie można zsynchronizować ustawień: {err}",
"synchronized": "Zsynchronizowano ustawienia!",
"synchronizing": "Synchronizuję profil ustawień \"{profile}\"..."
},
"status": {
"ancestor_follow": "Pokaż {numReplies} inną odpowiedź pod tym wpisem | Pokaż {numReplies} innych odpowiedzi pod tym wpisem",
"ancestor_follow_with_icon": "{icon} {text}",
"attachment_stop_flash": "Zatrzymaj odtwarzacz Flash",
"bookmark": "Dodaj do zakładek",
"copy_link": "Kopiuj link do statusu",
"delete": "Usuń status",
"delete_confirm": "Czy naprawdę chcesz usunąć ten status?",
"collapse_attachments": "Złóż załączniki",
"copy_link": "Kopiuj link do wpisu",
"delete": "Usuń wpis",
"delete_confirm": "Czy naprawdę chcesz usunąć ten wpis?",
"delete_confirm_accept_button": "Tak, usuń",
"delete_confirm_cancel_button": "Nie, zostaw",
"delete_confirm_title": "Potwierdź usunięcie",
"edit": "Edytuj",
"edit_history": "Historia edycji",
"edit_history_modal_title": "Edytowano {historyCount} raz | Edytowano {historyCount} razy",
"edited_at": "Edytowano {time}",
"expand": "Rozwiń",
"external_source": "Zewnętrzne źródło",
"favorites": "Ulubione",
"hide_attachment": "Ukryj załącznik",
"hide_content": "Ukryj zawartość",
"hide_full_subject": "Ukryj cały temat",
"hide_full_subject": "Ukryj całe ostrzeżenie o treści",
"many_attachments": "Wpis ma {number} załącznik | Wpis ma {number} załączników",
"mentions": "Wspomnienia",
"move_down": "Przesuń załączniki w prawo",
"move_up": "Przesuń załączniki w lewo",
"mute_conversation": "Wycisz konwersację",
"nsfw": "NSFW",
"open_gallery": "Otwórz galerię",
"override_translation_source_language": "Nadpisz język źródłowy",
"pin": "Przypnij na profilu",
"pinned": "Przypnięte",
"plus_more": "+{number} więcej",
"redraft": "Usuń i przeredaguj",
"redraft_confirm": "Czy na pewno chesz usunąć i przeredagować post? Interakcje z oryginalnym wpisem nie zostaną zachowane.",
"redraft_confirm_accept_button": "Tak, usuń i przeredaguj",
"redraft_confirm_cancel_button": "Nie, zostaw wpis oryginalny",
"redraft_confirm_title": "Potwierdź usunięcie i przeredagowanie",
"remove_attachment": "Usuń załącznik",
"repeat_confirm": "Czy na pewno chesz powtórzyć ten wpis?",
"repeat_confirm_accept_button": "Tak, powtórz",
"repeat_confirm_cancel_button": "Nie, nie powtarzaj",
"repeat_confirm_title": "Potwierdź powtórzenie",
"repeats": "Powtórzenia",
"replies_list": "Odpowiedzi:",
"replies_list_with_others": "Pokaż {numReplies} więcej odpowiedź | Pokaż {numReplies} więcej odpowiedzi",
"reply_to": "Odpowiedź dla",
"show_all_attachments": "Pokaż wszystkie załączniki",
"show_all_conversation": "Pokaż pełną rozmowę ({numStatus} inny wpis) | Pokaż pełną rozmowę ({numStatus} innych wpisów)",
"show_all_conversation_with_icon": "{icon} {text}",
"show_attachment_description": "Podgląd opisu (otwórz załącznik by zobaczyć pełen opis)",
"show_attachment_in_modal": "Pokaż załącznik w oknie",
"show_content": "Pokaż zawartość",
"show_full_subject": "Pokaż cały temat",
"show_full_subject": "Pokaż całe ostrzeżenie o treści",
"show_only_conversation_under_this": "Pokaż tylko odpowiedzi na ten wpis",
"status_deleted": "Ten wpis został usunięty",
"status_unavailable": "Status niedostępny",
"status_unavailable": "Wpis niedostępny",
"thread_follow": "Pokaż {numStatus} więcej odpowiedź | Pokaż {numStatus} więcej odpowiedzi",
"thread_follow_with_icon": "{icon} {text}",
"thread_hide": "Ukryj ten wątek",
"thread_muted": "Wątek wyciszony",
"thread_muted_and_words": ", ma słowa:",
"thread_show": "Pokaż ten wątek",
"thread_show_full": "Pokaż {numStatus} odpowiedź | Pokaż wszystkie {numStatus} odpowiedzi",
"thread_show_full_with_icon": "{icon} {text}",
"translate": "Przetłumacz",
"translated_from": "Przetłumaczone z {language}",
"unbookmark": "Usuń z zakładek",
"unmute_conversation": "Odcisz konwersację",
"unpin": "Odepnij z profilu"
"unpin": "Odepnij z profilu",
"you": "(Ty)"
},
"time": {
"in_future": "za {0}",
@ -723,23 +1052,29 @@
"collapse": "Zwiń",
"conversation": "Rozmowa",
"error": "Błąd pobierania osi czasu: {0}",
"load_older": "Załaduj starsze statusy",
"no_more_statuses": "Brak kolejnych statusów",
"follow_tag": "Śledź hasztag",
"load_older": "Załaduj starsze wpisy",
"no_more_statuses": "Brak kolejnych wpisów",
"no_retweet_hint": "Wpis oznaczony jako tylko dla obserwujących lub bezpośredni nie może zostać powtórzony",
"no_statuses": "Brak statusów",
"no_statuses": "Brak wpisów",
"reload": "Odśwież",
"repeated": "powtórzył(-a)",
"show_new": "Pokaż nowe",
"socket_broke": "Utracono połączenie w czasie rzeczywistym: kod CloseEvent {0}",
"socket_reconnected": "Osiągnięto połączenie w czasie rzeczywistym",
"unfollow_tag": "Przestań śledzić hasztag",
"up_to_date": "Na bieżąco"
},
"toast": {
"no_translation_target_set": "Nie ustawiono docelowego języka tłumaczenia - to może się nie udać. Ustaw język docelowy w ustawieniach."
},
"tool_tip": {
"accept_follow_request": "Akceptuj prośbę o możliwość obserwacji",
"add_reaction": "Dodaj reakcję",
"bookmark": "Zakładka",
"favorite": "Dodaj do ulubionych",
"media_upload": "Wyślij media",
"quote": "Cytuj",
"reject_follow_request": "Odrzuć prośbę o możliwość obserwacji",
"repeat": "Powtórz",
"reply": "Odpowiedz",
@ -766,6 +1101,7 @@
"deactivate_account": "Dezaktywuj konto",
"delete_account": "Usuń konto",
"delete_user": "Usuń użytkownika",
"delete_user_data_and_deactivate_confirmation": "To nieodwracalnie usunie dane tego konta i je zdezaktywuje. Czy na pewno chesz to zrobić?",
"disable_any_subscription": "Zakaż całkowicie obserwowania użytkownika",
"disable_remote_subscription": "Zakaż obserwowania użytkownika ze zdalnych instancji",
"force_nsfw": "Oznacz wszystkie posty jako NSFW",
@ -780,17 +1116,36 @@
"strip_media": "Usuń multimedia z postów"
},
"approve": "Przyjmij",
"approve_confirm": "Czy na pewno chesz pozwolić by ten użytkownik cię śledził?",
"approve_confirm_accept_button": "Tak, akceptuj",
"approve_confirm_cancel_button": "Nie, anuluj",
"approve_confirm_title": "Akceptuj prośbę o śledzenie",
"block": "Zablokuj",
"block_confirm": "Czy na pewno chesz zablokować {user}?",
"block_confirm_accept_button": "Tak, blokuj",
"block_confirm_cancel_button": "Nie, nie blokuj",
"block_confirm_title": "Blokuj użytkownika",
"block_progress": "Blokuję…",
"blocked": "Zablokowany!",
"blocks_you": "Blokuje cię!",
"bot": "Bot",
"deactivated": "Zdezaktywowano",
"deny": "Odrzuć",
"deny_confirm": "Czy na pewno chesz odmówić prośbie o śledzenie?",
"deny_confirm_accept_button": "Tak, odmów",
"deny_confirm_cancel_button": "Nie, nie odmawiaj",
"deny_confirm_title": "Odmów prośbie o śledzenie",
"domain_muted": "Odblokuj domenę",
"edit_profile": "Edytuj profil",
"favorites": "Ulubione",
"follow": "Obserwuj",
"follow_cancel": "Anuluj prośbę",
"follow_progress": "Wysyłam prośbę…",
"follow_sent": "Wysłano prośbę!",
"follow_tag": "Śledź hasztag",
"follow_unfollow": "Przestań obserwować",
"followed_tags": "Śledzone hasztagi",
"followed_users": "Śledzeni użytkownicy",
"followees": "Obserwowani",
"followers": "Obserwujący",
"following": "Obserwowany!",
@ -798,28 +1153,47 @@
"hidden": "Ukryte",
"hide_repeats": "Ukryj powtórzenia",
"highlight": {
"disabled": "Bez wyróżnienia"
"disabled": "Bez wyróżnienia",
"side": "Pasek boczny",
"solid": "Jednokolorowe tło",
"striped": "Tło w paski"
},
"its_you": "To ty!",
"media": "Media",
"mention": "Wspomnienie",
"message": "Napisz",
"mute": "Wycisz",
"mute_confirm": "Czy na pewno chcesz wyciszyć {user}?",
"mute_confirm_accept_button": "Tak, wycisz",
"mute_confirm_cancel_button": "Nie, nie wyciszaj",
"mute_confirm_title": "Wycisz użytkownika",
"mute_domain": "Blokuj domenę",
"mute_progress": "Wyciszam…",
"muted": "Wyciszony(-a)",
"not_following_any_hashtags": "Nie śledzisz żadnych hasztagów",
"note": "Prywatna notatka",
"per_day": "dziennie",
"remote_follow": "Zdalna obserwacja",
"remove_follower": "Zdalny śledzący",
"replies": "Z odpowiedziami",
"report": "Zgłoś",
"requested_by": "Chce cię śledzić",
"show_repeats": "Pokaż powtórzenia",
"statuses": "Statusy",
"statuses": "Wpisy",
"subscribe": "Subskrybuj",
"unblock": "Odblokuj",
"unblock_progress": "Odblokowuję…",
"unfollow_confirm": "Czy na pewno chesz przestać śledzić {user}?",
"unfollow_confirm_accept_button": "Tak, przestań śledzić",
"unfollow_confirm_cancel_button": "Nie, nie przestawaj",
"unfollow_confirm_title": "Przestań śledzić użytkownika",
"unfollow_tag": "Przestań śledzić hasztag",
"unmute": "Cofnij wyciszenie",
"unmute_progress": "Cofam wyciszenie…",
"unsubscribe": "Odsubskrybuj"
},
"user_profile": {
"field_validated": "Link zweryfikowany",
"profile_does_not_exist": "Przepraszamy, ten profil nie istnieje.",
"profile_loading_error": "Przepraszamy, wystąpił błąd podczas ładowania tego profilu.",
"timeline_title": "Oś czasu użytkownika"
@ -837,4 +1211,4 @@
"more": "Więcej",
"who_to_follow": "Propozycje obserwacji"
}
}
}

View File

@ -16,18 +16,41 @@
"accept_desc": "Este domínio aceita apenas mensagens dos seguintes domínios:",
"ftl_removal": "Remoção da cronologia da \"Rede conhecida por todos\"",
"ftl_removal_desc": "Este domínio remove os seguintes domínios da cronologia \"Rede conhecida por todos\":",
"instance": "Domínio",
"media_nsfw": "Forçar definição de multimédia como Sensível",
"media_nsfw_desc": "Este domínio força a multimédia a ser marcada como sensível nos seguintes domínios:",
"media_removal": "Remoção de multimédia",
"media_removal_desc": "Este domínio remove multimédia das publicações dos seguintes domínios:",
"not_applicable": "N/A",
"quarantine": "Quarentena",
"quarantine_desc": "Este domínio apenas irá publicar nos seguintes domínios:",
"reason": "Razão",
"reject": "Rejeitar",
"reject_desc": "Este domínio não aceitará mensagens dos seguintes domínios:",
"simple_policies": "Políticas especificas do domínio"
}
},
"staff": "Staff"
"staff": "Equipe"
},
"announcements": {
"all_day_prompt": "Este evento dura o dia inteiro",
"cancel_edit_action": "Cancelar",
"close_error": "Fechar",
"delete_action": "Apagar",
"edit_action": "Editar",
"end_time_display": "Termina às {time}",
"inactive_message": "Este anúncio está inativo",
"mark_as_read_action": "Marcar como lido",
"page_header": "Anúncios",
"post_action": "Publicar",
"post_error": "Erro: {error}",
"post_form_header": "Publicar anúncio",
"post_placeholder": "Conteúdo do anúncio",
"published_time_display": "Publicado às {time}",
"start_time_display": "Começa às {time}",
"start_time_prompt": "Hora de início: ",
"submit_edit_action": "Enviar",
"title": "Anúncio"
},
"chats": {
"chats": "Chats",
@ -58,6 +81,7 @@
"keep_open": "Manter o seletor aberto",
"load_all": "A carregar todos os {emojiAmount} emojis",
"load_all_hint": "Carregado o primeiro emoji {saneAmount}, carregar todos os emojis pode causar problemas de desempenho.",
"recent": "Usado recentemente",
"search_emoji": "Pesquisar por um emoji",
"stickers": "Autocolantes",
"unicode": "Emoji Unicode"
@ -143,7 +167,7 @@
"password": "Palavra-passe",
"placeholder": "ex. lain",
"recovery_code": "Código de recuperação",
"register": "Registar",
"register": "Registrar",
"username": "Nome de Utilizador"
},
"media_modal": {
@ -220,7 +244,7 @@
"text/plain": "Texto puro"
},
"content_warning": "Assunto (opcional)",
"default": "Acabei de chegar a Lisboa.",
"default": "Acabei de chegar em",
"direct_warning_to_all": "Esta publicação será visível para todos os utilizadores mencionados.",
"direct_warning_to_first_only": "Esta publicação só será visível para os utilizadores mencionados no início da mensagem.",
"empty_status_error": "Não consegues publicar um post vazio e sem ficheiros",
@ -244,7 +268,7 @@
},
"registration": {
"bio": "Biografia",
"bio_placeholder": "ex.\nOlá, sou a Lain\nSou uma menina de anime que vive no Japão suburbano. Devem conhecer-me do \"the Wired\".",
"bio_placeholder": "Ex.:\nBem-vindo a minha bio.\nEu amo assistir anime e jogar. Eu espero que possamos ser amigos!",
"captcha": "CAPTCHA",
"email": "Endereço de e-mail",
"fullname": "Nome para exibição",
@ -377,7 +401,7 @@
"scan": {
"desc": "Utilizando a sua aplicação de dois fatores, faça scan deste código QR ou insira a chave de texto:",
"secret_code": "Chave",
"title": "Scan"
"title": "Escanear"
},
"setup_otp": "Configurar palavra-passe de utilização única",
"title": "Autenticação de Dois Fatores",
@ -542,7 +566,7 @@
"fine_print": "Leia nosso {0} para não aprender nada!",
"header": "Pré-visualizar",
"header_faint": "Isto está bem",
"input": "Acabei de chegar a Lisboa.",
"input": "Acabei de chegar na Lua",
"link": "um belo link",
"mono": "conteúdo",
"text": "Vários {0} e {1}"
@ -624,7 +648,7 @@
"type_domains_to_mute": "Pesquisar domínios para silenciar",
"upload_a_photo": "Enviar uma foto",
"useStreamingApi": "Receber publicações e notificações em tempo real",
"useStreamingApiWarning": "(não recomendado, experimental, pode omitir publicações)",
"useStreamingApiWarning": "É legal usar isso. Se der algum problema, atualize, eu acho?",
"use_contain_fit": "Não cortar o anexo na miniatura",
"use_one_click_nsfw": "Abrir anexos sensíveis com um clique",
"user_mutes": "Utilizadores",
@ -801,4 +825,4 @@
"more": "Mais",
"who_to_follow": "Quem seguir"
}
}
}

View File

@ -1,5 +1,7 @@
{
"about": {
"bubble_instances": "Узлы из локального пузыря",
"bubble_instances_description": "Узлы, выбранные администрацией для обозначения местности данного узла",
"mrf": {
"federation": "Федерация",
"keyword": {
@ -16,12 +18,15 @@
"accept_desc": "Данный узел принимает сообщения только со следующих узлов:",
"ftl_removal": "Скрытие с федеративной ленты",
"ftl_removal_desc": "Данный узел скрывает следующие узлы с федеративной ленты:",
"instance": "Узел",
"media_nsfw": "Принужденно помеченно как имеющее щекотливый характер",
"media_nsfw_desc": "Данный узел принужденно помечает вложения со следующих узлов как имеющие щекотливый характер:",
"media_removal": "Удаление вложений",
"media_removal_desc": "Данный узел удаляет вложения со следующих узлов:",
"not_applicable": "Н/Д",
"quarantine": "Зона карантина",
"quarantine_desc": "Данный узел отправляет только публичные статусы следующим узлам:",
"quarantine_desc": "Данный узел не отправляет статусы следующим узлам:",
"reason": "Причина",
"reject": "Черный список",
"reject_desc": "Данный узел не принимает сообщения со следующих узлов:",
"simple_policies": "Правила для определенных узлов"
@ -29,17 +34,43 @@
},
"staff": "Администрация"
},
"announcements": {
"all_day_prompt": "Весь день",
"cancel_edit_action": "Отмена",
"close_error": "Закрыть",
"delete_action": "Удалить",
"edit_action": "Редактировать",
"end_time_display": "Заканчивается в {time}",
"end_time_prompt": "Конец: ",
"inactive_message": "Это объявление неактивно",
"mark_as_read_action": "Прочитано",
"page_header": "Объявления",
"post_action": "Опубликовать",
"post_error": "Ошибка: {error}",
"post_form_header": "Опубликовать объявление",
"post_placeholder": "Содержание объявления",
"published_time_display": "Опубликовано в {time}",
"start_time_display": "Начинается в {time}",
"start_time_prompt": "Начало: ",
"submit_edit_action": "Отправить",
"title": "Объявление"
},
"chats": {
"chats": "Беседы",
"delete": "Удалить",
"delete_confirm": "Вы точно хотите удалить сообщение?",
"empty_chat_list_placeholder": "У вас пока нет бесед. Начните одну!",
"empty_message_error": "Нельзя отправить пустое сообщение",
"error_loading_chat": "Произошла ошибка при загрузке беседы.",
"error_sending_message": "Произошла ошибка при отправке сообщения.",
"message_user": "Напишите {nickname}",
"more": "Больше",
"new": "Новая беседа",
"you": "Вы:"
},
"display_date": {
"today": "Сегодня"
},
"domain_mute_card": {
"mute": "Игнорировать",
"mute_progress": "В процессе…",
@ -53,6 +84,7 @@
"keep_open": "Оставить окно выбора открытым",
"load_all": "Все {emojiAmount} эмодзи загружаются",
"load_all_hint": "Загружены первые {saneAmount} эмодзи, загрузка всех эмодзи может привести к проблемам с производительностью.",
"recent": "Недавно использованные",
"search_emoji": "Поиск эмодзи",
"stickers": "Стикеры",
"unicode": "Стандартные эмодзи"
@ -91,6 +123,9 @@
"dismiss": "Закрыть",
"enable": "Включить",
"error_retry": "Пожалуйста попробуйте еще раз",
"flash_content": "Показывать Flash-контент с помощью Ruffle (экспериментально, гарантии работы нет).",
"flash_fail": "Не удалось загрузить Flash-контент, подробности см. в консоли.",
"flash_security": "Эта функция является потенциально опасной, так как Flash-контент допускает выполнение произвольного кода.",
"generic_error": "Произошла ошибка",
"loading": "Загрузка…",
"more": "Больше",
@ -101,6 +136,13 @@
"admin": "Администратор",
"moderator": "Модератор"
},
"scope_in_timeline": {
"direct": "Прямой",
"local": "Локальный - только ваш узел может видеть этот статус",
"private": "Только для читателей",
"public": "Публичный",
"unlisted": "Тихий"
},
"show_less": "Показать меньше",
"show_more": "Показать больше",
"submit": "Отправить",
@ -123,6 +165,84 @@
"load_older": "Загрузить старые взаимодействия",
"moves": "Переезды"
},
"languages": {
"ar": "Арабский",
"az": "Азербайджанский",
"bg": "Болгарский",
"cs": "Чешский",
"da": "Датский",
"de": "Немецкий",
"el": "Греческий",
"en": "Английский",
"eo": "Эсперанто",
"es": "Испанский",
"fa": "Персидский",
"fi": "Финский",
"fr": "Французский",
"ga": "Ирландский",
"he": "Иврит",
"hi": "Хинди",
"hu": "Венгерский",
"id": "Индонезийский",
"it": "Итальянский",
"ja": "Японский",
"ko": "Корейский",
"lt": "Литовский",
"lv": "Латышский",
"nl": "Нидерландский",
"pl": "Польский",
"pt": "Португальский",
"ru": "Русский",
"sk": "Словацкий",
"sv": "Шведский",
"tr": "Турецкий",
"translated_from": {
"ar": "Переведено с арабского",
"az": "Переведено с азербайджанского",
"bg": "Переведено с болгарского",
"cs": "Переведено с чешского",
"da": "Переведено с датского",
"de": "Переведено с немецкого",
"el": "Переведено с греческого",
"en": "Переведено с английского",
"eo": "Переведено с эсперанто",
"es": "Переведено с испанского",
"fa": "Переведено с персидского",
"fi": "Переведено с финского",
"fr": "Переведено с французского",
"ga": "Переведено с ирландского",
"he": "Переведено с иврита",
"hi": "Переведено с хинди",
"hu": "Переведено с венгерского",
"id": "Переведено с индонезийского",
"it": "Переведено с итальянского",
"ja": "Переведено с японского",
"ko": "Переведено с корейского",
"lt": "Переведено с литовского",
"lv": "Переведено с латышского",
"nl": "Переведено с нидерландского",
"pl": "Переведено с польского",
"pt": "Переведено с португальского",
"ru": "Переведено с русского",
"sk": "Переведено со словацкого",
"sv": "Переведено со шведского",
"tr": "Переведено с турецкого",
"uk": "Переведено с украинского",
"zh": "Переведено с китайского"
},
"uk": "Украинский",
"zh": "Китайский"
},
"lists": {
"create": "Создать",
"delete": "Удалить список",
"following_only": "Показывать только читаемых пользователей",
"lists": "Списки",
"new": "Новый список",
"save": "Сохранить изменения",
"search": "Найти пользователя",
"title": "Название списка"
},
"login": {
"authentication_code": "Код аутентификации",
"description": "Войти с помощью OAuth",
@ -135,16 +255,41 @@
"hint": "Войдите чтобы присоединиться к дискуссии",
"login": "Войти",
"logout": "Выйти",
"logout_confirm": "Точно завершить сеанс?",
"logout_confirm_accept_button": "Выйти",
"logout_confirm_cancel_button": "Отмена",
"logout_confirm_title": "Выйти",
"password": "Пароль",
"placeholder": "e.c. lain",
"placeholder": "пользователь123",
"recovery_code": "Код восстановления",
"register": "Зарегистрироваться",
"username": "Имя пользователя"
},
"media_modal": {
"counter": "{current} / {total}",
"hide": "Закрыть смотровое окно",
"next": "Следующая",
"previous": "Предыдущая"
},
"moderation": {
"moderation": "Модерация",
"reports": {
"add_note": "Добавить заметку",
"close": "Закрыть",
"delete_note": "Удалить",
"delete_note_accept": "Да, удалить",
"delete_note_cancel": "Нет, оставить",
"delete_note_confirm": "Точно удалить эту заметку?",
"delete_note_title": "Подтвердить удаление",
"no_content": "Описание отсутствует",
"no_reports": "Жалоб нет",
"note_placeholder": "Добавьте вашу заметку",
"notes": "{ count } заметка | { count } заметок",
"reopen": "Возобновить",
"report": "Жалоба на",
"reports": "Жалобы"
}
},
"nav": {
"about": "Об узле",
"administration": "Панель администратора",
@ -748,4 +893,4 @@
"add_comment_description": "Жалоба будет направлена модераторам вашего узла. Вы можете указать причину жалобы ниже:",
"forward_description": "Данный пользователь находится на другом узле. Отослать туда копию вашей жалобы?"
}
}
}

34
src/i18n/th.json Normal file
View File

@ -0,0 +1,34 @@
{
"about": {
"bubble_instances": "เซิร์ฟเวอร์เพื่อนบ้าน",
"bubble_instances_description": "เซิร์ฟเวอร์ที่แอดมินตั้งค่าไว้เพื่อแสดงเป็นเพื่อนบ้าน",
"mrf": {
"keyword": {
"keyword_policies": "นโยบายของคีย์เวิร์ดค้นหา",
"reject": "ไม่อนุมัติ",
"replace": "แทนที่"
},
"simple": {
"accept": "ยอมรับ",
"accept_desc": "เซิร์ฟเวอร์นี้จะรับข้อความเฉพาะเซิฟร์เวอร์ต่อไปนี้:",
"instance": "เซิฟเวอร์",
"media_nsfw": "มีเดียถูกบังคับตั้งให้เป็น NSFW",
"not_applicable": "ไม่สามารถใช้ได้",
"quarantine": "คัดกรอง",
"reason": "เหตุผล",
"reject": "ปฎิเสธ"
}
},
"staff": "ผู้ดูแล"
},
"announcements": {
"cancel_edit_action": "ยกเลิก",
"close_error": "ปิด",
"delete_action": "ลบประกาศ",
"edit_action": "แก้ไขประกาศ",
"end_time_prompt": "เวลาสิ้นสุด: ",
"mark_as_read_action": "ตั้งเป็นอ่านแล้ว",
"page_header": "ประกาศ",
"post_action": "โพสต์"
}
}

134
src/i18n/tr.json Normal file
View File

@ -0,0 +1,134 @@
{
"about": {
"bubble_instances": "Yerel Balon Örnekleri",
"bubble_instances_description": "Yöneticiler tarafından bu örneğin yerel alanını temsil etmesi için seçilen örnekler",
"mrf": {
"federation": "Federasyon",
"keyword": {
"ftl_removal": "\"Bilinen Tüm Ağ\" Zaman Çizelgesinden Kaldırma",
"is_replaced_by": "→",
"keyword_policies": "Anahtar kelime politikaları",
"reject": "Reddetmek",
"replace": "Yer değiştirmek"
},
"mrf_policies": "Etkinleştirilmiş MRF politikaları",
"mrf_policies_desc": "MRF ilkeleri, örneğin federasyon davranışını manipüle eder. Aşağıdaki politikalar etkinleştirildi:",
"simple": {
"accept": "Kabul etmek",
"accept_desc": "Bu örnek yalnızca aşağıdaki örneklerden gelen mesajları kabul eder:",
"ftl_removal": "\"Bilinen Ağ\" Zaman Çizelgesinden Kaldırma",
"ftl_removal_desc": "Bu örnek, şu örnekleri \"Bilinen Ağ\" zaman çizelgesinden kaldırır:",
"instance": "Örnek",
"media_nsfw": "Medya hassas olarak ayarlandı",
"media_nsfw_desc": "Bu örnek, medyayı aşağıdaki örneklerdeki gönderilerde hassas olarak ayarlanmasına zorlar:",
"media_removal": "Medya Kaldırma",
"media_removal_desc": "Bu örnek, aşağıdaki örneklerdeki yayınlardan medyayı kaldırır:",
"not_applicable": "Yok",
"quarantine": "Karantina",
"quarantine_desc": "Bu örnek, aşağıdaki örneklere gönderi göndermeyecek:",
"reason": "Sebep",
"reject": "Reddetmek",
"reject_desc": "Bu örnek, aşağıdaki örneklerden gelen mesajları kabul etmeyecektir:",
"simple_policies": "Örneğe özgü politikalar"
}
},
"staff": "Kadro"
},
"announcements": {
"all_day_prompt": "Bu tüm gün süren bir etkinlik",
"cancel_edit_action": "İptal etmek",
"close_error": "Kapalı",
"delete_action": "Sil",
"edit_action": "Düzenle",
"end_time_display": "{time} saatinde biter",
"end_time_prompt": "Bitiş zamanı: ",
"inactive_message": "Bu duyuru etkin değil",
"mark_as_read_action": "Okundu olarak işaretle",
"page_header": "Duyurular",
"post_action": "Post",
"post_error": "Hata: {error}",
"post_form_header": "Post sonrası",
"post_placeholder": "Duyuru içeriği",
"published_time_display": "{time} tarihinde yayınlandı",
"start_time_display": "{time} saatinde başlar",
"start_time_prompt": "Başlangıç saati: ",
"submit_edit_action": "Gönder",
"title": "Duyuru"
},
"chats": {
"chats": "Sohbetler",
"delete": "Sil",
"delete_confirm": "Bu mesajı gerçekten silmek istiyor musun?",
"empty_chat_list_placeholder": "Henüz hiç sohbetiniz yok. Yeni bir sohbet başlatın!",
"empty_message_error": "Boş mesaj gönderilemiyor",
"error_loading_chat": "Sohbet yüklenirken bir şeyler ters gitti.",
"error_sending_message": "Mesajı gönderirken bir şeyler ters gitti.",
"message_user": "{nickname} mesajı",
"more": "Daha",
"new": "Yeni Sohbet",
"you": "Sen:"
},
"display_date": {
"today": "Bugün"
},
"domain_mute_card": {
"mute": "Sesini kapat",
"mute_progress": "Ses kapatılıyor…",
"unmute": "Sesini aç",
"unmute_progress": "Sessize alınıyor…"
},
"emoji": {
"add_emoji": "Emoji ekle",
"custom": "Özel emoji",
"emoji": "Emoji",
"keep_open": "Seçiciyi açık tut",
"load_all": "Tüm {emojiAmount} emoji yükleniyor",
"load_all_hint": "İlk {saneAmount} emoji yüklendi, tüm emojilerin yüklenmesi performans sorunlarına neden olabilir.",
"recent": "Son zamanlarda kullanılmış",
"search_emoji": "Emoji ara",
"stickers": ıkartmalar",
"unicode": "Unicode emojisi"
},
"errors": {
"storage_unavailable": "Pleroma, tarayıcı depolama alanına erişemedi. Oturum açma bilgileriniz veya yerel ayarlarınız kaydedilmeyecek ve beklenmeyen sorunlarla karşılaşabilirsiniz. Çerezleri etkinleştirmeyi deneyin."
},
"exporter": {
"export": "Dışa aktar",
"processing": "İşleniyor, yakında dosyanızı indirmeniz istenecek"
},
"features_panel": {
"media_proxy": "Medya proxy'si",
"scope_options": "Kapsam seçenekleri",
"text_limit": "Metin sınırı",
"title": "Özellikler",
"upload_limit": "Yükleme sınırı",
"who_to_follow": "Kimi takip etmeli"
},
"file_type": {
"audio": "Ses",
"file": "Dosya",
"image": "Resim",
"video": "Video"
},
"finder": {
"error_fetching_user": "Kullanıcı getirilirken hata oluştu",
"find_user": "Kullanıcı bul"
},
"general": {
"apply": "Uygula",
"cancel": "İptal",
"close": "Kapalı",
"confirm": "Onayla",
"disable": "Devre dışı bırak",
"dismiss": "Reddetmek",
"enable": "Etkinleştir",
"error_retry": "Lütfen tekrar deneyin",
"flash_content": "Ruffle kullanarak Flash içeriğini göstermek için tıklayın (Deneysel, çalışmayabilir).",
"flash_fail": "Flash içeriği yüklenemedi, ayrıntılar için konsola bakın.",
"flash_security": "Flash içeriği hala isteğe bağlı kod olduğundan, bunun potansiyel olarak tehlikeli olabileceğini unutmayın.",
"generic_error": "Bir hata oluştu",
"loading": "Yükleniyor…",
"more": "Daha",
"optional": "Seçenek"
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,7 @@
{
"about": {
"bubble_instances": "Các máy chủ lân cận",
"bubble_instances_description": "Các máy chủ được quản trị chọn để thể hiện vùng xung quanh máy chủ này",
"mrf": {
"federation": "Liên hợp",
"keyword": {
@ -16,12 +18,15 @@
"accept_desc": "Máy chủ này chỉ chấp nhận tin nhắn từ những máy chủ:",
"ftl_removal": "Giới hạn chung",
"ftl_removal_desc": "Nội dung từ những máy chủ sau sẽ bị ẩn:",
"media_nsfw": "Áp đặt nhạy cảm",
"media_nsfw_desc": "Nội dung từ những máy chủ sau sẽ bị tự động gắn nhãn nhạy cảm:",
"instance": "Máy chủ",
"media_nsfw": "Áp đặt nhạy cảm cho nội dung đa phương tiện",
"media_nsfw_desc": "Nội dung đa phương tiện từ những máy chủ sau sẽ bị tự động gắn nhãn nhạy cảm:",
"media_removal": "Ẩn Media",
"media_removal_desc": "Media từ những máy chủ sau sẽ bị ẩn:",
"quarantine": "Bảo hành",
"quarantine_desc": "Máy chủ này sẽ gửi tút công khai đến những máy chủ:",
"not_applicable": "không ghi",
"quarantine": "Cách ly",
"quarantine_desc": "Máy chủ này sẽ chỉ gửi bài đăng công khai đến những máy chủ:",
"reason": "Lý do",
"reject": "Từ chối",
"reject_desc": "Máy chủ này không chấp nhận tin nhắn từ những máy chủ:",
"simple_policies": "Quy tắc máy chủ"
@ -29,6 +34,27 @@
},
"staff": "Nhân viên"
},
"announcements": {
"all_day_prompt": "Đây là sự kiện kéo dài cả ngày",
"cancel_edit_action": "Huỷ",
"close_error": "Đóng",
"delete_action": "Xoá",
"edit_action": "Sửa",
"end_time_display": "Kết thúc lúc {time}",
"end_time_prompt": "Thời gian kết thúc: ",
"inactive_message": "Thông báo này đang vô hiệu",
"mark_as_read_action": "Đánh dấu đã đọc",
"page_header": "Thông báo",
"post_action": "Bài đăng",
"post_error": "Lỗi: {error}",
"post_form_header": "Đăng thông báo",
"post_placeholder": "Nội dung thông báo",
"published_time_display": "Đăng lúc {time}",
"start_time_display": "Bắt đầu lúc {time}",
"start_time_prompt": "Thời gian bắt đầu: ",
"submit_edit_action": "Đăng",
"title": "Thông báo"
},
"chats": {
"chats": "Chat",
"delete": "Xóa",
@ -58,6 +84,7 @@
"keep_open": "Mở khung lựa chọn",
"load_all": "Đang tải {emojiAmount} emoji",
"load_all_hint": "Tải trước {saneAmount} emoji, tải toàn bộ emoji có thể gây xử lí chậm.",
"recent": "Sử dụng gần đây",
"search_emoji": "Tìm emoji",
"stickers": "Sticker",
"unicode": "Unicode emoji"
@ -109,6 +136,13 @@
"admin": "Quản trị viên",
"moderator": "Kiểm duyệt viên"
},
"scope_in_timeline": {
"direct": "Trực tiếp",
"local": "Nội bộ - chỉ thành viên cùng máy chủ xem được bài đăng này",
"private": "Cho người theo dõi",
"public": "Công khai",
"unlisted": "Hạn chế"
},
"show_less": "Thu gọn",
"show_more": "Xem thêm",
"submit": "Gửi tặng",
@ -131,6 +165,84 @@
"load_older": "Xem tương tác cũ hơn",
"moves": "Người dùng chuyển đi"
},
"languages": {
"ar": "tiếng Ả-rập",
"az": "tiếng Azerbaijan",
"bg": "tiếng Bulgari",
"cs": "tiếng Séc",
"da": "tiếng Đan Mạch",
"de": "tiếng Đức",
"el": "tiếng Hy Lạp",
"en": "tiếng Anh",
"eo": "Quốc tế ngữ",
"es": "tiếng Tây Ban Nha",
"fa": "tiếng Ba Tư",
"fi": "tiếng Phần Lan",
"fr": "tiếng Pháp",
"ga": "tiếng Ireland",
"he": "tiếng Hebrew",
"hi": "tiếng Hindi",
"hu": "tiếng Hungari",
"id": "tiếng Indonesia",
"it": "tiếng Ý",
"ja": "tiếng Nhật",
"ko": "tiếng Hàn",
"lt": "tiếng Litva",
"lv": "tiếng Latvia",
"nl": "tiếng Hà Lan",
"pl": "tiếng Ba Lan",
"pt": "tiếng Bồ Đào Nha",
"ru": "tiếng Nga",
"sk": "tiếng Slovakia",
"sv": "tiếng Thuỵ Điển",
"tr": "tiếng Thổ Nhĩ Kỳ",
"translated_from": {
"ar": "Dịch từ @:languages.ar",
"az": "Dịch từ @:languages.az",
"bg": "Dịch từ @:languages.bg",
"cs": "Dịch từ @:languages.cs",
"da": "Dịch từ @:languages.da",
"de": "Dịch từ @:languages.de",
"el": "Dịch từ @:languages.el",
"en": "Dịch từ @:languages.en",
"eo": "Dịch từ @:languages.eo",
"es": "Dịch từ @:languages.es",
"fa": "Dịch từ @:languages.fa",
"fi": "Dịch từ @:languages.fi",
"fr": "Dịch từ @:languages.fr",
"ga": "Dịch từ @:languages.ga",
"he": "Dịch từ @:languages.he",
"hi": "Dịch từ @:languages.hi",
"hu": "Dịch từ @:languages.hu",
"id": "Dịch từ @:languages.id",
"it": "Dịch từ @:languages.it",
"ja": "Dịch từ @:languages.ja",
"ko": "Dịch từ @:languages.ko",
"lt": "Dịch từ @:languages.lt",
"lv": "Dịch từ @:languages.lv",
"nl": "Dịch từ @:languages.nl",
"pl": "Dịch từ @:languages.pl",
"pt": "Dịch từ @:languages.pt",
"ru": "Dịch từ @:languages.ru",
"sk": "Dịch từ @:languages.sk",
"sv": "Dịch từ @:languages.sv",
"tr": "Dịch từ @:languages.tr",
"uk": "Dịch từ @:languages.uk",
"zh": "Dịch từ @:languages.zh"
},
"uk": "Tiếng Ukraina",
"zh": "Tiếng Trung"
},
"lists": {
"create": "Tạo",
"delete": "Xoá danh sách",
"following_only": "Giới hạn chỉ người được theo dõi",
"lists": "Danh sách",
"new": "Tạo danh sách mới",
"save": "Lưu thay đổi",
"search": "Tìm người dùng",
"title": "Tên danh sách"
},
"login": {
"authentication_code": "Mã truy cập",
"description": "Đăng nhập bằng OAuth",
@ -143,60 +255,101 @@
"hint": "Đăng nhập để cùng trò chuyện",
"login": "Đăng nhập",
"logout": "Đăng xuất",
"logout_confirm": "Bạn có chắc mình muốn đăng xuất?",
"logout_confirm_accept_button": "Đăng xuất",
"logout_confirm_cancel_button": "Huỷ",
"logout_confirm_title": "Đăng xuất",
"password": "Mật khẩu",
"placeholder": "vd: cobetronxinh",
"placeholder": "ví dụ: kimdung",
"recovery_code": "Mã khôi phục",
"register": "Đăng ký",
"username": "Tên người dùng"
},
"media_modal": {
"counter": "{current} / {total}",
"hide": "Đóng nội dung đa phương tiện",
"next": "Kế tiếp",
"previous": "Trước đó"
},
"moderation": {
"moderation": "Quản lý",
"reports": {
"add_note": "Thêm ghi chú",
"close": "Đóng",
"delete_note": "Xoá",
"delete_note_accept": "Đúng, tôi muốn xoá",
"delete_note_cancel": "Không, giữ lại",
"delete_note_confirm": "Bạn có chắc bạn muốn xoá ghi chú này?",
"delete_note_title": "Xác nhận xoá",
"no_content": "Không có mô tả",
"no_reports": "Không có báo cáo nào",
"note_placeholder": "Để lại ghi chú",
"notes": "{ count } ghi chú | { count } ghi chú",
"reopen": "Mở lại",
"report": "Báo cáo",
"reports": "Báo cáo",
"resolve": "Giải quyết",
"show_closed": "Hiện những thông báo đã đóng",
"statuses": "{ count } bài đăng| { count } bài đăng",
"tag_policy_notice": "Kích hoạt MRF TagPolicy để giới hạn bài đăng",
"tags": "Giới hạn bài đăng"
},
"statuses": "Bài đăng",
"users": "Người dùng"
},
"nav": {
"about": "Về máy chủ này",
"administration": "Vận hành bởi",
"announcements": "Thông báo",
"back": "Quay lại",
"bookmarks": "Đã lưu",
"bubble_timeline": "Dòng thời gian lân cận",
"bubble_timeline_description": "Bài đăng từ các máy chủ gần với của bạn, được chọn bởi quản trị viên",
"chats": "Chat",
"dms": "Nhắn tin",
"friend_requests": "Yêu cầu theo dõi",
"home_timeline": "Bảng tin của bạn",
"interactions": "Giao tiếp",
"home_timeline_description": "Bài đăng từ những người bạn theo dõi",
"interactions": "Tương tác",
"lists": "Danh sách",
"mentions": "Lượt nhắc đến",
"moderation": "Quản lý",
"preferences": "Thiết lập",
"public_timeline_description": "Bài đăng công khai từ máy chủ này",
"public_tl": "Bảng tin máy chủ",
"search": "Tìm kiếm",
"timeline": "Bảng tin",
"timelines": "Bảng tin",
"twkn": "Thế giới",
"twkn_timeline_description": "Bài đăng từ toàn bộ mạng liên hợp",
"user_search": "Tìm kiếm người dùng",
"who_to_follow": "Đề xuất theo dõi"
},
"notifications": {
"broken_favorite": "Trạng thái chưa rõ, đang tìm kiếm…",
"error": "Lỗi khi nạp thông báo {0}",
"favorited_you": "thích tút của bạn",
"favorited_you": "thích bài đăng của bạn",
"follow_request": "yêu cầu theo dõi bạn",
"followed_you": "theo dõi bạn",
"load_older": "Xem những thông báo cũ hơn",
"migrated_to": "chuyển sang",
"no_more_notifications": "Không còn thông báo nào",
"notifications": "Thông báo",
"reacted_with": "chạm tới {0}",
"poll_ended": "bình chọn đã kết thúc",
"reacted_with": "biểu lộ cảm xúc {0}",
"read": "Đọc!",
"repeated_you": "chia sẻ tút của bạn"
"repeated_you": "chia sẻ bài đăng của bạn"
},
"password_reset": {
"check_email": "Kiểm tra email của bạn.",
"forgot_password": "Quên mật khẩu",
"instruction": "Nhập email hoặc tên người dùng. Chúng tôi sẽ gửi email reset mật khẩu cho bạn.",
"check_email": "Kiểm tra đường dẫn khôi phục mật khẩu trong email của bạn.",
"forgot_password": "Quên mật khẩu?",
"instruction": "Nhập email hoặc tên người dùng. Chúng tôi sẽ gửi email khôi phục mật khẩu cho bạn.",
"password_reset": "Đổi mật khẩu",
"password_reset_disabled": "Reset mật khẩu bị tắt. Hãy liên hệ quản trị viên máy chủ.",
"password_reset_disabled": "Đổi mật khẩu bị tắt. Hãy liên hệ quản trị viên máy chủ.",
"password_reset_required": "Bạn phải đổi mật khẩu để đăng nhập.",
"password_reset_required_but_mailer_is_disabled": "Bạn cần phải đổi mật khẩu, nhưng tính năng bị tắt. Hãy liên hệ quản trị viên máy chủ.",
"placeholder": "Email hoặc tên người dùng",
"return_home": "Quay lại Pleroma",
"return_home": "Quay lại trang chủ",
"too_many_requests": "Bạn đã vượt giới hạn cho phép, hãy thử lại sau."
},
"polls": {
@ -212,58 +365,70 @@
"single_choice": "Chỉ được chọn một lựa chọn",
"type": "Kiểu bình chọn",
"vote": "Bình chọn",
"votes": "người bình chọn",
"votes": "lượt bình chọn",
"votes_count": "{count} bình chọn | {count} bình chọn"
},
"post_status": {
"account_not_locked_warning": "Tài khoản của bạn chưa {0}. Bất kỳ ai cũng có thể xem những tút dành cho người theo dõi của bạn.",
"account_not_locked_warning_link": ã khóa",
"account_not_locked_warning_link": ược khóa",
"attachments_sensitive": "Đánh dấu media là nhạy cảm",
"content_type": {
"text/bbcode": "BBCode",
"text/html": "HTML",
"text/markdown": "Markdown",
"text/plain": "Văn bản"
"text/plain": "Văn bản",
"text/x.misskeymarkdown": "Markdown kiểu Misskey"
},
"content_warning": "Tiêu đề (tùy chọn)",
"content_warning": "Cảnh báo nội dung (tùy chọn)",
"default": "Đời người con gái không muốn yêu ai được không?",
"direct_warning_to_all": "Những ai được nhắc đến sẽ đều thấy tút này.",
"direct_warning_to_first_only": "Người đầu tiên được nhắc đến mới có thể thấy tút này.",
"empty_status_error": "Không thể đăng một tút trống và không có media",
"media_description": "Mô tả media",
"direct_warning_to_all": "Những ai được nhắc đến sẽ đều thấy bài đăng này.",
"direct_warning_to_first_only": "Những được nhắc đến ở đầu bài dăng mới có thể thấy bài đăng này.",
"edit_remote_warning": "Thay đổi của bài đăng này có thể không đến được một số máy chủ khác!",
"edit_status": "Sửa bài đăng",
"edit_unsupported_warning": "Bình chọn và những người được đề cập sẽ không bị thay đổi bởi chỉnh sửa.",
"empty_status_error": "Không thể đăng một bài đăng trống và không có tập tin đính kèm",
"media_description": "Mô tả nội dung tập tin",
"media_description_error": "Cập nhật media thất bại, thử lại sau",
"new_status": "Đăng tút",
"media_not_sensitive_warning": "Bạn có cảnh báo nội dung, nhưng tập tin đính kèm chưa được đánh dấu là nhạy cảm!",
"new_status": "Bài đăng mới",
"post": "Đăng",
"posting": "Đang đăng tút",
"posting": "Đang đăng",
"preview": "Xem trước",
"preview_empty": "Trống",
"scope": {
"direct": "Tin nhắn - chỉ người được nhắc đến mới thấy",
"local": "Nội bộ - không chia sẻ sang máy chủ khác",
"private": "Riêng tư - Chỉ dành cho người theo dõi",
"public": "Công khai - hiện trên bảng tin máy chủ",
"unlisted": "Hạn chế - không hiện trên bảng tin"
},
"scope_notice": {
"private": "Chỉ những người theo dõi bạn mới thấy tút này",
"public": "Mọi người đều có thể thấy tút này",
"unlisted": "Tút này sẽ không hiện trong bảng tin máy chủ và thế giới"
"local": "Bài đăng này sẽ không hiện trên máy chủ khác",
"private": "Chỉ những người theo dõi bạn mới thấy bài đăng này",
"public": "Mọi người đều có thể thấy bài đăng này",
"unlisted": "Bài đăng này sẽ không hiện trong bảng tin máy chủ và thế giới"
}
},
"registration": {
"awaiting_email_confirmation": "Tài khoản của bạn đã được đăng ký và một email đã được gửi cho bạn. Hãy kiểm tra email để hoàn tất đăng ký.",
"awaiting_email_confirmation_title": "Đang chờ xác nhận email",
"bio": "Tiểu sử",
"bio_placeholder": "vd:\nHi, I'm Cô Bé Tròn Xinh.\nIm an anime girl living in suburban Vietnam. You may know me from the school.",
"bio_placeholder": "ví dụ:\nChào mừng bạn đến với tiểu sử của tôi.\nTôi thích viết văn theo trường phái hiện thực, sau này viết báo kháng chiến. Hi vọng chúng ta có thể làm bạn!",
"captcha": "CAPTCHA",
"email": "Email",
"email_language": "Bạn muốn nhận email từ máy chủ này bằng ngôn ngữ nào?",
"fullname": "Tên hiển thị",
"fullname_placeholder": "vd: Cô Bé Tròn Xinh",
"fullname_placeholder": "ví dụ: Trần Hữu Tri",
"new_captcha": "Nhấn vào hình ảnh để đổi captcha mới",
"password_confirm": "Xác nhận mật khẩu",
"reason": "Lý do đăng ký",
"reason_placeholder": "Máy chủ này phê duyệt đăng ký thủ công.\nHãy cho quản trị viên biết lý do bạn muốn đăng ký.",
"register": "Đăng ký",
"registration": "Đăng ký",
"request_sent": "Đơn xin đăng ký đã được gửi và đang chờ phê duyệt. Bạn sẽ nhận được email khi tài khoản của bạn được duyệt.",
"request_sent_title": "Đã gửi đơn xin đăng ký",
"token": "Lời mời",
"username_placeholder": "vd: cobetronxinh",
"username_placeholder": "vd: namcao",
"validations": {
"email_required": "không được để trống",
"fullname_required": "không được để trống",
@ -281,7 +446,7 @@
"search": {
"hashtags": "Hashtag",
"no_results": "Không tìm thấy",
"people": "Người",
"people": "Mọi người",
"people_talking": "{count} người đang trò chuyện",
"person_talking": "{count} người đang trò chuyện"
},
@ -290,6 +455,13 @@
},
"settings": {
"accent": "Màu chủ đạo",
"account_backup": "Sao lưu dữ liệu",
"account_backup_description": "Tạo bản sao thông tin tài khoản và các bài viết (Akkoma hiện tại chưa thể nhập dữ liệu ngược lại từ bản sao).",
"account_backup_table_head": "Các bản sao",
"account_privacy": "Riêng tư",
"add_backup": "Thêm bản sao dữ liệu",
"add_backup_error": "Lỗi khi sao dữ liệu: {error}",
"added_backup": "Đã tạo bản sao dữ liệu.",
"allow_following_move": "Cho phép tự động theo dõi lại khi tài khoản đang theo dõi chuyển sang máy chủ khác",
"always_show_post_button": "Luôn hiện nút viết tút mới",
"app_name": "Tên app",
@ -301,6 +473,7 @@
"avatarRadius": "Ảnh đại diện",
"avatar_size_instruction": "Kích cỡ tối thiểu 150x150 pixels.",
"background": "Ảnh nền",
"backup_not_ready": "Sao lưu chưa hoàn tất.",
"bio": "Tiểu sử",
"block_export": "Xuất danh sách chặn",
"block_export_button": "Xuất danh sách chặn ra tập tin CSV",
@ -322,9 +495,27 @@
"changed_password": "Đổi mật khẩu thành công!",
"chatMessageRadius": "Tin nhắn chat",
"checkboxRadius": "Hộp kiểm",
"collapse_subject": "Thu gọn những tút có tựa đề",
"collapse_subject": "Thu gọn các bài viết có cảnh báo về nội dung",
"columns": "Cột",
"composing": "Thu gọn",
"confirm_dialogs": "Yêu cầu xác nhận cho:",
"confirm_dialogs_approve_follow": "Cho phép theo dõi",
"confirm_dialogs_block": "Chặn ai đó",
"confirm_dialogs_delete": "Xoá bài viết",
"confirm_dialogs_deny_follow": "Không cho theo dõi",
"confirm_dialogs_mute": "Bơ ai đó",
"confirm_dialogs_repeat": "Chia sẻ bài viết",
"confirm_dialogs_unfollow": "Ngừng theo dõi ai đó",
"confirm_new_password": "Xác nhận mật khẩu mới",
"confirmation_dialogs": "Lựa chọn xác nhận",
"conversation_display": "Cách hiển thị một thớt",
"conversation_display_linear": "Dọc",
"conversation_display_tree": "Hình cây",
"conversation_other_replies_button": "Hiện nút \"các phản hồi khác\"",
"conversation_other_replies_button_below": "Dưới bài viết",
"conversation_other_replies_button_inside": "Trong bài viết",
"current_avatar": "Hình đại diện hiện tại",
"current_mascot": "Linh vật hiện tại",
"current_password": "Mật khẩu cũ",
"data_import_export_tab": "Nhập / Xuất dữ liệu",
"default_vis": "Kiểu đăng tút mặc định",
@ -332,11 +523,16 @@
"delete_account_description": "Xóa vĩnh viễn mọi dữ liệu và vô hiệu hóa tài khoản của bạn.",
"delete_account_error": "Có lỗi khi xóa tài khoản. Xin liên hệ quản trị viên máy chủ để tìm hiểu.",
"delete_account_instructions": "Nhập mật khẩu bên dưới để xác nhận.",
"disable_sticky_headers": "Đừng dính đỉnh các cột vào trần màn hình",
"discoverable": "Hiện tài khoản trong công cụ tìm kiếm và những tính năng khác",
"domain_mutes": "Máy chủ",
"download_backup": "Tải xuống",
"email_language": "Ngôn ngữ gửi thư điện tử từ máy chủ",
"emoji_reactions_on_timeline": "Hiện tương tác emoji trên bảng tin",
"enable_web_push_notifications": "Cho phép thông báo đẩy trên web",
"enter_current_password_to_confirm": "Nhập mật khẩu để xác thực",
"expire_posts_enabled": "Xoá bài đăng sau một số ngày",
"expire_posts_input_placeholder": "Số ngày",
"export_theme": "Lưu mẫu",
"file_export_import": {
"backup_restore": "Sao lưu",
@ -345,13 +541,13 @@
"errors": {
"file_slightly_new": "Phiên bản tập tin khác biệt, không thể áp dụng một vài thay đổi",
"file_too_new": "Phiên bản không tương thích: {fileMajor}, phiên bản PleromaFE(settings ver {feMajor}) của máy chủ này quá cũ để sử dụng",
"file_too_old": "Phiên bản không tương thích: {fileMajor}, phiên bản tập tin quá cũ và không được hỗ trợ (min. set. ver. {feMajor})",
"file_too_old": "Phiên bản không tương thích: {fileMajor}, tập tin quá cũ và không được hỗ trợ (phiên bản tối thiểu: {feMajor})",
"invalid_file": "Tập tin đã chọn không hỗ trợ bởi Pleroma. Giữ nguyên mọi thay đổi."
},
"restore_settings": "Khôi phục thiết lập từ tập tin"
},
"filtering": "Bộ lọc",
"filtering_explanation": "Những tút chứa từ sau sẽ bị ẩn, mỗi chữ một hàng",
"filtering_explanation": "Những bài viết chứa các từ sau sẽ bị ẩn, mỗi từ một hàng",
"follow_export": "Xuất danh sách theo dõi",
"follow_export_button": "Xuất danh sách theo dõi ra tập tin CSV",
"follow_import": "Nhập danh sách theo dõi",
@ -364,16 +560,20 @@
"hide_all_muted_posts": "Ẩn những tút đã ẩn",
"hide_attachments_in_convo": "Ẩn tập tin đính kèm trong thảo luận",
"hide_attachments_in_tl": "Ẩn tập tin đính kèm trong bảng tin",
"hide_favorites_description": "Không hiện danh sách bài đăng đã thích (mọi người vẫn nhận được thông báo)",
"hide_filtered_statuses": "Ẩn những tút đã lọc",
"hide_followers_count_description": "Ẩn số lượng người theo dõi tôi",
"hide_followers_description": "Ẩn danh sách những người theo dõi tôi",
"hide_follows_count_description": "Ẩn số lượng người tôi theo dõi",
"hide_follows_description": "Ẩn danh sách những người tôi theo dõi",
"hide_isp": "Ẩn thanh bên của máy chủ",
"hide_list_aliases_error_action": "Đóng",
"hide_media_previews": "Ẩn xem trước media",
"hide_muted_posts": "Ẩn tút từ các người dùng đã ẩn",
"hide_post_stats": "Ẩn tương tác của tút (vd: số lượt thích)",
"hide_shoutbox": "Ẩn thanh chat máy chủ",
"hide_site_favicon": "Ẩn biểu tượng máy chủ ở thanh trên cùng",
"hide_site_name": "Ẩn tên máy chủ ở thanh trên cùng",
"hide_user_stats": "Ẩn số liệu người dùng (vd: số người theo dõi)",
"hide_wallpaper": "Ẩn ảnh nền máy chủ",
"import_blocks_from_a_csv_file": "Nhập danh sách chặn từ tập tin CSV",
@ -388,10 +588,17 @@
"invalid_theme_imported": "Tập tin đã chọn không hỗ trợ bởi Pleroma. Giao diện của bạn sẽ giữ nguyên.",
"limited_availability": "Trình duyệt không hỗ trợ",
"links": "Liên kết",
"list_backups_error": "Lỗi khi liệt kê các bản sao: {error}",
"lock_account_description": "Tự phê duyệt yêu cầu theo dõi",
"loop_video": "Lặp lại video",
"loop_video_silent_only": "Chỉ lặp lại những video không có âm thanh",
"max_thumbnails": "Số ảnh xem trước tối đa cho mỗi tút",
"mention_link_display_full": "luôn hiện đầy đủ tên (v.d. {'@'}foo{'@'}example.org)",
"mention_link_display_full_for_remote": "chỉ hiện đầy đủ tên cho người từ máy chủ khác (v.d. {'@'}foo{'@'}example.org)",
"mention_link_display_short": "luôn rút gọn tên (v.d. {'@'}foo)",
"mention_link_fade_domain": "Làm mờ tên miền (v.d. {'@'}example.org trong {'@'}foo{'@'}example.org)",
"mention_link_show_avatar": "Hiện ảnh đại diện cạnh đường dẫn",
"mention_link_show_tooltip": "Hiện tên đầy đủ khi trỏ vào cho người dùng từ máy chủ khác",
"mfa": {
"authentication_methods": "Phương pháp xác thực",
"confirm_and_enable": "Xác nhận và kích hoạt OTP",
@ -444,12 +651,13 @@
"notification_visibility_repeats": "Chia sẻ",
"notifications": "Thông báo",
"nsfw_clickthrough": "Cho phép nhấn vào xem các tút nhạy cảm",
"oauth_tokens": "OAuth tokens",
"oauth_tokens": "Các phiên đăng nhập",
"pad_emoji": "Nhớ chừa khoảng cách khi chèn emoji",
"panelRadius": "Panels",
"panelRadius": "Hộp thoại",
"pause_on_unfocused": "Dừng phát khi đang lướt các tút khác",
"play_videos_in_modal": "Phát video trong khung hình riêng",
"post_status_content_type": "Loại tút đăng",
"post_status_content_type": "Định dạng mặc định cho bài viết",
"posts": "Bài đăng",
"preload_images": "Tải trước hình ảnh",
"presets": "Mẫu có sẵn",
"profile_background": "Ảnh nền trang cá nhân",
@ -463,6 +671,9 @@
"profile_tab": "Trang cá nhân",
"radii_help": "Thiết lập góc bo tròn (bằng pixels)",
"refresh_token": "Làm tươi token",
"remove_backup": "Xoá",
"render_mfm": "Xử lí Markdown Misskey",
"render_mfm_on_hover": "Dừng hoạt hình MFM đến khi di chuột lên",
"replies_in_timeline": "Trả lời trong bảng tin",
"reply_visibility_all": "Hiện toàn bộ trả lời",
"reply_visibility_following": "Chỉ hiện những trả lời có nhắc tới tôi hoặc từ những người mà tôi theo dõi",
@ -476,7 +687,7 @@
"reset_profile_background": "Đặt lại ảnh nền",
"reset_profile_banner": "Đặt lại ảnh bìa",
"revoke_token": "Gỡ",
"right_sidebar": "Hiện thanh bên bên phải",
"right_sidebar": "Đảo ngược thứ tự các cột",
"save": "Lưu thay đổi",
"saving_err": "Thiết lập lỗi lưu",
"saving_ok": "Đã lưu các thay đổi",
@ -486,13 +697,30 @@
"security": "Bảo mật",
"security_tab": "Bảo mật",
"sensitive_by_default": "Mặc định tút là nhạy cảm",
"sensitive_if_subject": "Tự động đánh dấu hình ảnh nhậy cảm khi có cảnh báo nội dung",
"set_new_avatar": "Đổi ảnh đại diện",
"set_new_mascot": "Thay đổi linh vật",
"set_new_profile_background": "Đổi ảnh nền",
"set_new_profile_banner": "Đổi ảnh bìa",
"setting_changed": "Thiết lập khác với mặc định",
"setting_server_side": "Cài đặt này gắn liền với tài khoản của bạn và có hiệu lực với tất cả phiên làm việc và client khác nhau",
"settings": "Cài đặt",
"settings_profile": "Phiên bản tuỳ chỉnh",
"settings_profile_creation": "Tạo bản mới",
"settings_profile_creation_new_name_label": "Tên",
"settings_profile_creation_submit": "Tạo",
"settings_profile_currently": "Hiện tại: {name} (phiên bản thứ {version})",
"settings_profile_delete": "Xoá",
"settings_profile_delete_confirm": "Chắc chắn xoá bản tuỳ chọn này?",
"settings_profile_force_sync": "Đồng bộ",
"settings_profile_in_use": "Đang sử dụng",
"settings_profile_use": "Dùng",
"settings_profiles_refresh": "Tải lại bản tuỳ chỉnh",
"settings_profiles_show": "Hiện tất cả bản tuỳ chỉnh",
"settings_profiles_unshow": "Ẩn hết các bản tuỳ chỉnh",
"show_admin_badge": "Hiện huy hiệu \"Quản trị viên\" trên trang của tôi",
"show_moderator_badge": "Hiện huy hiệu \"Kiểm duyệt viên\" trên trang của tôi",
"show_yous": "Hiện (bạn) sau tên người dùng của bạn trong bài viết",
"stop_gifs": "Chỉ phát GIF khi chạm vào",
"streaming": "Tự động tải tút mới khi cuộn lên trên",
"style": {
@ -518,16 +746,16 @@
"inputs": "Khung soạn thảo",
"panel_header": "Tiêu đề panel",
"poll": "Biểu đồ cuộc bình chọn",
"popover": "Tooltips, menus, popovers",
"popover": "Tooltip, menu, popover",
"post": "Tút/Tiểu sử",
"pressed": "Khi nhấn xuống",
"selectedMenu": "Chọn menu",
"selectedPost": "Chọn tút",
"tabs": "Tab",
"toggled": "Toggled",
"toggled": "Đã thay đổi",
"top_bar": "Thanh trên cùng",
"underlay": "Lớp dưới",
"wallpaper": "Wallpaper"
"wallpaper": "Hình nền"
},
"common": {
"color": "Màu sắc",
@ -549,7 +777,7 @@
"_tab_label": "Chung",
"foreground_hint": "Mở tab \"Nâng cao\" để có nhiều tùy chọn hơn",
"main": "Màu sắc chung",
"rgbo": "Icons, accents, badges"
"rgbo": "Biểu tượng, accent, huy hiệu"
},
"fonts": {
"_tab_label": "Phông chữ",
@ -641,9 +869,9 @@
"use_source": "Bản mới"
}
},
"subject_input_always_show": "Luôn hiện vùng tiêu đề",
"subject_line_behavior": "Chép tiêu đề khi trả lời",
"subject_line_email": "Giống email: \"re: subject\"",
"subject_input_always_show": "Luôn hiện hộp nhập cảnh báo nội dung",
"subject_line_behavior": "Chép cảnh báo về nội dung khi trả lời",
"subject_line_email": "Như email: \"re: cảnh báo\"",
"subject_line_mastodon": "Giống Mastodon: copy as is",
"subject_line_noop": "Đừng chép",
"text": "Văn bản",
@ -651,14 +879,25 @@
"theme_help": "Dùng mã màu hex (#rrggbb) để tự chế theme.",
"theme_help_v2_1": "Bạn cũng có thể xóa hết màu thành phần và làm theme trong suốt, chọn nút \"Xóa hết\".",
"theme_help_v2_2": "Các biểu tượng bên dưới các mục có độ tương phản nền/văn bản, hãy rê chuột qua để biết thông tin chi tiết. Xin lưu ý rằng, khi sử dụng các độ tương phản trong suốt có thể khiến đọc chữ không ra.",
"third_column_mode": "Khi có đủ chỗ, tạo cột thứ ba cho",
"third_column_mode_none": "tốn chỗ (không tạo cột thứ ba)",
"third_column_mode_notifications": "thông báo",
"third_column_mode_postform": "bài viết mới và các đường dẫn nhanh",
"token": "Token",
"tooltipRadius": "Tooltips/alerts",
"tooltipRadius": "Tooltip/cảnh báo",
"translation_language": "Dịch tự động về",
"type_domains_to_mute": "Tìm máy chủ để ẩn",
"upload_a_photo": "Tải ảnh lên",
"useStreamingApi": "Nhận tút và thông báo theo thời gian thực",
"useStreamingApiWarning": "(Tính năng thử nghiệm, không đề xuất sử dụng)",
"use_at_icon": "Hiển thị kí hiệu {'@'} dạng biểu tượng thay vì chữ",
"use_blurhash": "Dùng ảnh xem trước làm mờ cho nội dung nhạy cảm",
"use_contain_fit": "Không cắt ảnh đính kèm trong bản xem trước",
"use_one_click_nsfw": "Xem nội dung nhạy cảm bằng cách nhấn vào",
"user_accepts_direct_messages_from": "Nhận tin nhắn riêng từ",
"user_accepts_direct_messages_from_everybody": "Mọi người",
"user_accepts_direct_messages_from_nobody": "Không ai hết",
"user_accepts_direct_messages_from_people_i_follow": "Những người tôi quen",
"user_mutes": "Người dùng",
"user_settings": "Thiết lập người dùng",
"valid_until": "Có giá trị tới",
@ -672,31 +911,69 @@
"title": "Phiên bản"
},
"virtual_scrolling": "Render bảng tin",
"word_filter": "Bộ lọc từ ngữ"
"word_filter": "Bộ lọc từ ngữ",
"wordfilter": "Lọc từ khoá"
},
"settings_profile": {
"creating": "Đang tạo hồ sơ cài đặt mới \"{profile}\"....",
"synchronization_error": "Không thể đồng bộ hoá cài đặt: {err}",
"synchronized": "Đã đồng bộ hoá cài đặt!",
"synchronizing": "Đang đồng bộ hoá hồ sơ cài đặt \"{profile}\"..."
},
"status": {
"ancestor_follow": "Xem {numReplies} phản hồi dưới bài này",
"ancestor_follow_with_icon": "{icon} {text}",
"bookmark": "Lưu",
"copy_link": "Sao chép URL",
"delete": "Xóa tút",
"delete_confirm": "Bạn có chắc chắn muốn xóa tút này?",
"collapse_attachments": "Đóng tập tin đính kèm",
"copy_link": "Sao chép đường dẫn đến bài viết",
"delete": "Xóa bài viết",
"delete_confirm": "Chắc chắn xoá vài viết này?",
"delete_confirm_accept_button": "Đúng, xoá nó",
"delete_confirm_cancel_button": "Không, giữ lại",
"delete_confirm_title": "Xác nhận xoá bài đăng",
"edit": "Chỉnh sửa",
"edit_history": "Lịch sử chỉnh sửa",
"edit_history_modal_title": "Đã sửa {historyCount} lần",
"edited_at": "Đã sửa lúc {time}",
"expand": "Xem nguyên văn",
"external_source": "Nguồn bên ngoài",
"favorites": "Thích",
"hide_attachment": "Ẩn tập tin đính kèm",
"hide_content": "Ẩn nội dung",
"hide_full_subject": "Ẩn tiêu đề",
"hide_full_subject": "Ẩn cảnh báo nội dung",
"many_attachments": "Bài đăng có {number} tập tin đính kèm",
"mentions": "Lượt nhắc",
"move_down": "Dịch tập tin sang phải",
"move_up": "Dịch tập tin sang trái",
"mute_conversation": "Không quan tâm nữa",
"nsfw": "Nhạy cảm",
"open_gallery": "Mở bộ ảnh",
"pin": "Ghim trên trang cá nhân",
"pinned": "Tút được ghim",
"plus_more": "+{number} nhiều hơn",
"redraft": "Xoá và viết lại",
"redraft_confirm": "Bạn có chắc muốn xoá và viết lại bài đăng này không? Tương tác với bài đăng gốc sẽ bị mất.",
"redraft_confirm_accept_button": "Đúng, xoá và viết lại",
"redraft_confirm_cancel_button": "Không, giữ lại bài gốc",
"redraft_confirm_title": "Xác nhận xoá và viết lại",
"remove_attachment": "Xoá tập tin",
"repeat_confirm": "Bạn có muốn chia sẻ bài đăng này?",
"repeat_confirm_accept_button": "Có, chia sẻ đi",
"repeat_confirm_cancel_button": "Không chia sẻ",
"repeat_confirm_title": "Xác nhận chia sẻ",
"repeats": "Chia sẻ",
"replies_list": "Những trả lời:",
"replies_list_with_others": "Xem thêm {numReplies} phản hồi",
"reply_to": "Trả lời",
"show_all_attachments": "Hiện tất cả tập tin đính kèm",
"show_all_conversation": "Hiện đầy đủ cuộc trò chuyện ({numStatus} bài đăng nữa)",
"show_all_conversation_with_icon": "{icon} {text}",
"show_content": "Hiện nội dung",
"show_full_subject": "Hiện đầy đủ tiêu đề",
"show_full_subject": "Hiện đầy đủ cảnh báo nội dung",
"show_only_conversation_under_this": "Chỉ hiện trả lời cho bài đăng này",
"status_deleted": "Tút này đã bị xóa",
"status_unavailable": "Không tìm thấy tút",
"status_unavailable": "Không tìm thấy bài viết",
"thread_follow_with_icon": "{icon} {text}",
"thread_muted": "Đã ẩn chủ đề",
"thread_muted_and_words": ", có từ:",
"unbookmark": "Bỏ lưu",
@ -730,8 +1007,8 @@
"collapse": "Thu gọn",
"conversation": "Thảo luận",
"error": "Lỗi khi nạp bảng tin {0}",
"load_older": "Xem tút cũ hơn",
"no_more_statuses": "Không còn tút nào",
"load_older": "Xem thêm",
"no_more_statuses": "Hết",
"no_retweet_hint": "Không thể chia sẻ tin nhắn và những tút riêng tư",
"no_statuses": "Trống trơn!",
"reload": "Tải lại",
@ -797,6 +1074,7 @@
"follow": "Theo dõi",
"follow_progress": "Đang yêu cầu…",
"follow_sent": "Đã gửi yêu cầu!",
"follow_tag": "Theo dõi hashtag",
"follow_unfollow": "Ngưng theo dõi",
"followees": "Đang theo dõi",
"followers": "Người theo dõi",
@ -817,19 +1095,28 @@
"mute": "Ẩn",
"mute_progress": "Đang ẩn…",
"muted": "Đã ẩn",
"not_following_any_hashtags": "Bạn không theo dõi hashtag nào cả",
"per_day": "tút mỗi ngày",
"remote_follow": "Theo dõi từ xa",
"replies": "Cả phản hồi",
"report": "Báo cáo",
"requested_by": "Muốn theo dõi bạn",
"show_repeats": "Hiện lượt chia sẻ",
"statuses": "t",
"statuses": "Các bài viết",
"subscribe": "Đăng ký",
"unblock": "Bỏ chặn",
"unblock_progress": "Đang bỏ chặn…",
"unfollow_confirm": "Xác nhận ngừng theo dõi {user}?",
"unfollow_confirm_accept_button": "Phải, ngừng theo dõi",
"unfollow_confirm_cancel_button": "Không, tiếp tục theo dõi",
"unfollow_confirm_title": "Ngừng theo dõi tài khoản này",
"unfollow_tag": "Ngừng theo dõi hashtag",
"unmute": "Bỏ ẩn",
"unmute_progress": "Đang bỏ ẩn…",
"unsubscribe": "Hủy đăng ký"
},
"user_profile": {
"field_validated": "Đường dẫn được xác nhận",
"profile_does_not_exist": "Xin lỗi, tài khoản này không tồn tại.",
"profile_loading_error": "Xin lỗi, có lỗi xảy ra khi xem trang cá nhân này.",
"timeline_title": "Bảng tin người dùng"
@ -847,4 +1134,4 @@
"more": "Nhiều hơn nữa",
"who_to_follow": "Những người dùng nổi bật"
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -19,7 +19,8 @@ const saveImmedeatelyActions = [
'setOption',
'setClientData',
'setToken',
'clearToken'
'clearToken',
'emojiUsed',
]
const defaultStorage = (() => {

View File

@ -0,0 +1,23 @@
const timelineVisibleUnauthenticated = (state, timeline) => (
state.instance.publicTimelineVisibility[timeline] ?? false
);
const currentUser = (state) => state.users.currentUser;
const currentUserOrTimelineVisibleUnauthenticated = (state, timeline) => (
currentUser(state) || timelineVisibleUnauthenticated(state, timeline)
);
const federatedTimelineAvailable = (state) => state.instance.federatedTimelineAvailable;
export const federatedTimelineVisible = (state) => (
federatedTimelineAvailable(state) && currentUserOrTimelineVisibleUnauthenticated(state, 'federated')
);
export const publicTimelineVisible = (state) => (
currentUserOrTimelineVisibleUnauthenticated(state, 'local')
);
export const bubbleTimelineVisible = (state) => (
state.instance.localBubbleInstances.length > 0 && currentUserOrTimelineVisibleUnauthenticated(state, 'bubble')
);

View File

@ -22,6 +22,7 @@ import announcementsModule from './modules/announcements.js'
import editStatusModule from './modules/editStatus.js'
import statusHistoryModule from './modules/statusHistory.js'
import tagModule from './modules/tags.js'
import recentEmojisModule from './modules/recentEmojis.js'
import { createI18n } from 'vue-i18n'
@ -47,7 +48,8 @@ const persistedStateOptions = {
paths: [
'config',
'users.lastLoginName',
'oauth'
'oauth',
'recentEmojis.emojis',
]
};
@ -98,7 +100,8 @@ const persistedStateOptions = {
announcements: announcementsModule,
editStatus: editStatusModule,
statusHistory: statusHistoryModule,
tags: tagModule
tags: tagModule,
recentEmojis: recentEmojisModule,
},
plugins,
strict: false // Socket modifies itself, let's ignore this for now.

View File

@ -5,15 +5,25 @@ import { map } from 'lodash'
const retryTimeout = (multiplier) => 1000 * multiplier
const isVisible = (store, message, visibility) => {
if (visibility === 'all') {
if (visibility == 'all') {
return true
} else if (visibility === 'following') {
return store.getters.relationship(message.in_reply_to_user_id).following
} else if (visibility === 'self') {
}
if (visibility == 'following') {
if (message.in_reply_to_user_id === null) {
return true
} else {
return store.getters.relationship(message.in_reply_to_user_id).following
}
}
if (visibility == 'self') {
return message.in_reply_to_user_id === store.rootState.users.currentUser.id
}
return false
}
const api = {
state: {
retryMultiplier: 1,

View File

@ -55,6 +55,7 @@ export const defaultState = {
alwaysShowNewPostButton: false,
autohideFloatingPostButton: false,
pauseOnUnfocused: true,
displayPageBackgrounds: true,
stopGifs: undefined,
replyVisibility: 'all',
thirdColumnMode: 'notifications',
@ -95,7 +96,6 @@ export const defaultState = {
disableStickyHeaders: false,
showScrollbars: false,
greentext: undefined, // instance default
useAtIcon: undefined, // instance default
mentionLinkDisplay: undefined, // instance default
mentionLinkShowTooltip: undefined, // instance default
mentionLinkShowAvatar: undefined, // instance default
@ -229,7 +229,7 @@ const config = {
break
case 'interfaceLanguage':
messages.setLanguage(this.getters.i18n, value)
Cookies.set(BACKEND_LANGUAGE_COOKIE_NAME, localeService.internalToBackendLocale(value))
Cookies.set(BACKEND_LANGUAGE_COOKIE_NAME, localeService.internalToBackendLocale(value), {sameSite: 'Lax'})
dispatch('setInstanceOption', { name: 'interfaceLanguage', value })
break
case 'thirdColumnMode':

View File

@ -21,7 +21,6 @@ const defaultState = {
background: '/static/aurora_borealis.jpg',
collapseMessageWithSubject: true,
greentext: false,
useAtIcon: false,
mentionLinkDisplay: 'short',
mentionLinkShowTooltip: true,
mentionLinkShowAvatar: false,

View File

@ -0,0 +1,57 @@
// each row is 7 emojis, 6 rows chosen arbitrarily. i don't think more than
// that are going to be useful.
const RECENT_MAX = 7 * 6
const defaultState = {
emojis: [],
}
const recentEmojis = {
state: defaultState,
mutations: {
emojiUsed ({ emojis }, emoji) {
if (emoji.displayText === undefined || emoji.displayText === null) {
console.error('emojiUsed was called with a bad emoji object: ', emoji)
return
} else if (emoji.displayText.includes('@')) {
console.error('emojiUsed was called with a remote emoji: ', emoji)
return
}
const i = emojis.indexOf(emoji.displayText)
if (i === -1) {
// not in `emojis` yet, insert and truncate if necessary
const newLength = emojis.unshift(emoji.displayText)
if (newLength > RECENT_MAX) {
emojis.pop()
}
} else if (i !== 0) {
// emoji is already in `emojis` but needs to be bumped to the top
emojis.splice(i, 1)
emojis.unshift(emoji.displayText)
}
},
},
getters: {
recentEmojis: (state, getters, rootState) => state.emojis.reduce((objects, displayText) => {
let comparator = emoji => emoji.displayText === displayText
let emojiObject = rootState.instance.emoji.find(comparator)
if (emojiObject !== undefined) {
objects.push(emojiObject)
} else {
emojiObject = rootState.instance.customEmoji.find(comparator)
if (emojiObject !== undefined) {
objects.push(emojiObject)
}
}
return objects
}, []),
},
}
export default recentEmojis

View File

@ -47,6 +47,10 @@ export const settingsMap = {
},
// Privacy
'locked': 'locked',
'permitFollowback': {
get: 'akkoma.permit_followback',
set: 'permit_followback'
},
'allowFollowingMove': {
get: 'pleroma.allow_following_move',
set: 'allow_following_move'

View File

@ -135,6 +135,10 @@ export const mutations = {
const user = state.usersObject[id]
user['deactivated'] = deactivated
},
setDisplayBackground(state, url) {
console.log("Commiting user profile bg mutation")
state.displayBackground = url
},
setCurrentUser (state, user) {
state.lastLoginName = user.screen_name
state.currentUser = mergeWith(state.currentUser || {}, user, mergeArrayLength)
@ -199,21 +203,28 @@ export const mutations = {
})
},
saveBlockIds (state, blockIds) {
state.currentUser.blockIds = blockIds
console.log("ADDING BLOCK IDS", blockIds);
state.currentUser.blockIds = uniq(concat(state.currentUser.blockIds || [], blockIds))
},
addBlockId (state, blockId) {
if (state.currentUser.blockIds.indexOf(blockId) === -1) {
state.currentUser.blockIds.push(blockId)
}
},
setBlockIdsMaxId (state, blockIdsMaxId) {
state.currentUser.blockIdsMaxId = blockIdsMaxId
},
saveMuteIds (state, muteIds) {
state.currentUser.muteIds = muteIds
state.currentUser.muteIds = uniq(concat(state.currentUser.muteIds || [], muteIds))
},
addMuteId (state, muteId) {
if (state.currentUser.muteIds.indexOf(muteId) === -1) {
state.currentUser.muteIds.push(muteId)
}
},
setMuteIdsMaxId (state, muteIdsMaxId) {
state.currentUser.muteIdsMaxId = muteIdsMaxId
},
updateMascot (state, mascotUrl) {
state.currentUser.mascot = mascotUrl
},
@ -300,6 +311,7 @@ export const defaultState = {
currentUser: false,
users: [],
usersObject: {},
displayBackground: null,
signUpPending: false,
signUpErrors: [],
relationships: {},
@ -312,6 +324,10 @@ const users = {
mutations,
getters,
actions: {
setDisplayBackground (store, url) {
console.log("Performing user profile bg action...")
store.commit('setDisplayBackground', url)
},
fetchUserIfMissing (store, id) {
if (!store.getters.findUser(id)) {
store.dispatch('fetchUser', id)
@ -330,10 +346,21 @@ const users = {
.then((relationships) => store.commit('updateUserRelationship', relationships))
}
},
fetchBlocks (store) {
return store.rootState.api.backendInteractor.fetchBlocks()
fetchBlocks (store, args) {
const { reset } = args || {}
const maxId = store.state.currentUser.blockIdsMaxId
return store.rootState.api.backendInteractor.fetchBlocks({ maxId })
.then((blocks) => {
store.commit('saveBlockIds', map(blocks, 'id'))
if (reset) {
store.commit('saveBlockIds', map(blocks, 'id'))
} else {
map(blocks, 'id').map(id => store.commit('addBlockId', id))
}
if (blocks.length) {
store.commit('setBlockIdsMaxId', last(blocks).id)
}
store.commit('addNewUsers', blocks)
return blocks
})
@ -353,10 +380,22 @@ const users = {
unblockUsers (store, ids = []) {
return Promise.all(ids.map(id => unblockUser(store, id)))
},
fetchMutes (store) {
return store.rootState.api.backendInteractor.fetchMutes()
fetchMutes (store, args) {
const { reset } = args || {}
const maxId = store.state.currentUser.muteIdsMaxId
return store.rootState.api.backendInteractor.fetchMutes({ maxId })
.then((mutes) => {
store.commit('saveMuteIds', map(mutes, 'id'))
if (reset) {
store.commit('saveMuteIds', map(mutes, 'id'))
} else {
map(mutes, 'id').map(id => store.commit('addMuteId', id))
}
if (mutes.length) {
store.commit('setMuteIdsMaxId', last(mutes).id)
}
store.commit('addNewUsers', mutes)
return mutes
})
@ -637,13 +676,16 @@ const users = {
// Get user mutes
store.dispatch('fetchMutes')
store.dispatch('setLayoutWidth', windowWidth())
store.dispatch('setLayoutHeight', windowHeight())
store.dispatch('getSupportedTranslationlanguages')
store.dispatch('getSettingsProfile')
store.dispatch('listSettingsProfiles')
store.dispatch('startFetchingConfig')
store.dispatch('startFetchingAnnouncements')
if (user.role === 'admin' || user.role === 'moderator') {
store.dispatch('startFetchingReports')
}
// Fetch our friends
store.rootState.api.backendInteractor.fetchFriends({ id: user.id })

View File

@ -1166,8 +1166,13 @@ const generateMfaBackupCodes = ({ credentials }) => {
}).then((data) => data.json())
}
const fetchMutes = ({ credentials }) => {
return promisedRequest({ url: MASTODON_USER_MUTES_URL, credentials })
const fetchMutes = ({ maxId, credentials }) => {
const query = new URLSearchParams({ with_relationships: true })
if (maxId) {
query.append('max_id', maxId)
}
return promisedRequest({ url: `${MASTODON_USER_MUTES_URL}?${query.toString()}`, credentials })
.then((users) => users.map(parseUser))
}
@ -1213,8 +1218,12 @@ const unsubscribeUser = ({ id, credentials }) => {
return promisedRequest({ url: MASTODON_UNSUBSCRIBE_USER(id), credentials, method: 'POST' })
}
const fetchBlocks = ({ credentials }) => {
return promisedRequest({ url: MASTODON_USER_BLOCKS_URL, credentials })
const fetchBlocks = ({ maxId, credentials }) => {
const query = new URLSearchParams({ with_relationships: true })
if (maxId) {
query.append('max_id', maxId)
}
return promisedRequest({ url: `${MASTODON_USER_BLOCKS_URL}?${query.toString()}`, credentials })
.then((users) => users.map(parseUser))
}

View File

@ -90,10 +90,12 @@ export const parseUser = (data) => {
output.friends_count = data.following_count
output.bot = data.bot
output.accepts_direct_messages_from = data.accepts_direct_messages_from
output.follow_requests_count = data.follow_requests_count
if (data.akkoma) {
output.instance = data.akkoma.instance
output.status_ttl_days = data.akkoma.status_ttl_days
output.permit_followback = data.akkoma.permit_followback
}
if (data.pleroma) {

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