@@ -172,11 +189,13 @@ import * as os from "@/os";
import { definePageMetadata } from "@/scripts/page-metadata";
let patrons = [];
-try {
- patrons = await os.api("patrons", { forceUpdate: true });
-} catch {
- console.error("Codeberg's down.");
-}
+let sponsors = [];
+const patronsResp = await os.api("patrons", { forceUpdate: true });
+patrons = patronsResp.patrons;
+sponsors = patronsResp.sponsors;
+
+
+patrons = patrons.filter((patron) => !sponsors.includes(patron));
let easterEggReady = false;
let easterEggEmojis = $ref([]);
diff --git a/packages/client/src/pages/user/home.vue b/packages/client/src/pages/user/home.vue
index e87052ea2..9d643c0b6 100644
--- a/packages/client/src/pages/user/home.vue
+++ b/packages/client/src/pages/user/home.vue
@@ -461,11 +461,8 @@ const timeForThem = $computed(() => {
});
let patrons = [];
-try {
- patrons = await os.api("patrons");
-} catch {
- console.error("Codeberg's down.");
-}
+const patronsResp = await os.api("patrons");
+patrons = patronsResp.patrons;
function parallaxLoop() {
parallaxAnimationId = window.requestAnimationFrame(parallaxLoop);
diff --git a/patrons.json b/patrons.json
index 28a3b5870..f2339e3b8 100644
--- a/patrons.json
+++ b/patrons.json
@@ -94,7 +94,14 @@
"@Space6host@calckey.social",
"@zakalwe@plasmatrap.com",
"@seasicksailor@calckey.social",
- "@Hunkabilly@calckey.world",
+ "@geerue@calckey.social",
+ "@WXFanatic@m.ai6yr.org",
+ "@Hunkabilly@calckey.world"
+ ],
+ "sponsors": [
+ "@atomicpoet@calckey.social",
+ "@unattributed@calckey.social",
+ "@jtbennett@noc.social",
"\nInterkosmos Link"
]
}
From 10e9c2bfd3d24ede316a520092622f43176bca3a Mon Sep 17 00:00:00 2001
From: Rauf
Date: Sat, 15 Jul 2023 06:00:35 +0000
Subject: [PATCH 135/162] chore: Translated using Weblate (Turkish)
Currently translated at 56.5% (1035 of 1830 strings)
Translation: Calckey/locales
Translate-URL: https://hosted.weblate.org/projects/calckey/locales/tr/
---
locales/tr-TR.yml | 59 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 59 insertions(+)
diff --git a/locales/tr-TR.yml b/locales/tr-TR.yml
index d6fecb6e8..82da6f649 100644
--- a/locales/tr-TR.yml
+++ b/locales/tr-TR.yml
@@ -1111,3 +1111,62 @@ customSplashIcons: Özel açılış ekranı simgeleri (url'ler)
recommendedInstancesDescription: Önerilen zaman çizelgesinde görünmesi için satır
sonlarıyla ayrılmış önerilen sunucular. `https://` EKLEMEYİN, YALNIZCA etki alanı.
recommendedInstances: Önerilen sunucular
+enableServerMachineStats: Sunucu donanımı istatistiklerini etkinleştir
+_sensitiveMediaDetection:
+ sensitivityDescription: Hassasiyetin düşürülmesi daha az yanlış tespite yol açarken,
+ hassasiyeti artırmak daha az tespitin gözden kaçmasına yol açacaktır.
+ setSensitiveFlagAutomaticallyDescription: Bu seçenek kapatılsa bile dahili algılamanın
+ sonuçları korunacaktır.
+ description: Makine Öğrenimi yoluyla NSFW ortamını otomatik olarak tanıyarak sunucu
+ denetleme çabasını azaltır. Bu, sunucudaki yükü biraz artıracaktır.
+ sensitivity: Algılama hassasiyeti
+ analyzeVideos: Videoların analizini etkinleştir
+ setSensitiveFlagAutomatically: NSFW olarak işaretle
+ analyzeVideosDescription: Görüntülere ek olarak videoları da analiz eder. Bu, sunucudaki
+ yükü biraz artıracaktır.
+enableIdenticonGeneration: Kimlik oluşturmayı etkinleştir
+reactionPickerSkinTone: Tercih edilen emoji cilt tonu
+noteId: Gönderi ID
+preventAiLearning: AI bot öğrenmesini önleyin
+preventAiLearningDescription: Gönderiler ve resimler gibi yüklediğiniz içeriği incelememek
+ için üçüncü taraf yapay zeka dil modellerini isteyin.
+isAdmin: Yönetici
+_emailUnavailable:
+ disposable: Tek kullanımlık mail adresleri kullanılamaz
+ smtp: Bu mail sunucusu cevap vermiyor
+ mx: Bu mail sunucusu hatalı
+ used: Bu mail zaten kullanılıyor
+ format: Bu mail adresi yanlış
+apps: Uygulamalar
+findOtherInstance: Başka bir sunucu bul
+showWithSparkles: Parıltılarla göster
+showPopup: Kullanıcıları pop-up ile bilgilendirin
+silencedWarning: Bu sayfa, bu kullanıcılar yöneticinizin susturduğu sunuculardan olduğu
+ için gösteriliyor, bu nedenle potansiyel olarak spam olabilirler.
+isPatron: Calckey Patronu
+youHaveUnreadAnnouncements: Okunmamış duyurularınız var
+donationLink: Bağış sayfası linki
+neverShow: Birdaha gösterme
+remindMeLater: Belki sonra
+removeQuote: Alıntıyı sil
+removeRecipient: Alıcıyı sil
+removeMember: Kullanıcıyı sil
+customKaTeXMacroDescription: 'Kolayca matematiksel ifadeler yazmak için makrolar kurun!
+ Gösterim, LaTeX komut tanımlarına uygundur ve \newcommand{\ name}{content} veya
+ \newcommand{\name}[argüman sayısı]{content} şeklinde yazılır. Örneğin, \newcommand{\add}[2]{#1
+ + #2}, \add{3}{foo} öğesini 3 + foo olarak genişletir. Makro adını çevreleyen süslü
+ parantezler, yuvarlak veya köşeli parantezler olarak değiştirilebilir. Bu, bağımsız
+ değişkenler için kullanılan parantezleri etkiler. Satır başına bir (ve yalnızca
+ bir) makro tanımlanabilir ve satırı tanımın ortasından ayıramazsınız. Geçersiz satırlar
+ basitçe yoksayılır. Yalnızca basit dizi değiştirme işlevleri desteklenir; koşullu
+ dallanma gibi gelişmiş söz dizimi burada kullanılamaz.'
+enableCustomKaTeXMacro: Özel KaTeX makrolarını aktif et
+isLocked: Bu hesabın takip onayları var
+isModerator: Moderatör
+signupsDisabled: Bu sunucudaki kayıtlar şu anda devre dışı, ancak istediğiniz zaman
+ başka bir sunucuya kaydolabilirsiniz! Bu sunucu için bir davet kodunuz varsa, lütfen
+ aşağıya girin.
+sendModMail: Moderasyon Bildirimi Gönder
+noGraze: Calckey ile çakıştığı için lütfen "Graze for Mastodon" tarayıcı uzantısını
+ devre dışı bırakın.
+isBot: Bu hesap bir bottur
From f4776712a3ae894767c19cb1b19e282a31ec6848 Mon Sep 17 00:00:00 2001
From: ThatOneCalculator
Date: Fri, 14 Jul 2023 23:13:32 -0700
Subject: [PATCH 136/162] refactor: :recycle: correct params for
notes/children+conversion
---
packages/backend/src/server/api/endpoints/notes/children.ts | 4 ++--
.../backend/src/server/api/endpoints/notes/conversation.ts | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/packages/backend/src/server/api/endpoints/notes/children.ts b/packages/backend/src/server/api/endpoints/notes/children.ts
index 9047fcce1..dc536df62 100644
--- a/packages/backend/src/server/api/endpoints/notes/children.ts
+++ b/packages/backend/src/server/api/endpoints/notes/children.ts
@@ -1,4 +1,3 @@
-import { Brackets } from "typeorm";
import { Notes } from "@/models/index.js";
import define from "../../define.js";
import { makePaginationQuery } from "../../common/make-pagination-query.js";
@@ -23,13 +22,14 @@ export const meta = {
ref: "Note",
},
},
-};
+} as const;
export const paramDef = {
type: "object",
properties: {
noteId: { type: "string", format: "misskey:id" },
limit: { type: "integer", minimum: 1, maximum: 100, default: 10 },
+ depth: { type: "integer", minimum: 1, maximum: 100, default: 12},
sinceId: { type: "string", format: "misskey:id" },
untilId: { type: "string", format: "misskey:id" },
},
diff --git a/packages/backend/src/server/api/endpoints/notes/conversation.ts b/packages/backend/src/server/api/endpoints/notes/conversation.ts
index 2e8f5ef73..47c672736 100644
--- a/packages/backend/src/server/api/endpoints/notes/conversation.ts
+++ b/packages/backend/src/server/api/endpoints/notes/conversation.ts
@@ -51,7 +51,7 @@ export default define(meta, paramDef, async (ps, user) => {
const conversation: Note[] = [];
let i = 0;
- async function get(id: any) {
+ async function get(id: string) {
i++;
const p = await getNote(id, user).catch((e) => {
if (e.id === "9725d0ce-ba28-4dde-95a7-2cbb2c15de24") return null;
@@ -60,7 +60,7 @@ export default define(meta, paramDef, async (ps, user) => {
if (p == null) return;
- if (i > ps.offset!) {
+ if (i > ps.offset) {
conversation.push(p);
}
From 49f543cebcdd2f023378802e1bd11e07ab8e931d Mon Sep 17 00:00:00 2001
From: ThatOneCalculator
Date: Fri, 14 Jul 2023 23:16:50 -0700
Subject: [PATCH 137/162] docs: :memo: descriptions for
notes/children+conversation endpoints
---
packages/backend/src/server/api/endpoints/notes/children.ts | 1 +
.../backend/src/server/api/endpoints/notes/conversation.ts | 3 ++-
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/packages/backend/src/server/api/endpoints/notes/children.ts b/packages/backend/src/server/api/endpoints/notes/children.ts
index dc536df62..3615df024 100644
--- a/packages/backend/src/server/api/endpoints/notes/children.ts
+++ b/packages/backend/src/server/api/endpoints/notes/children.ts
@@ -10,6 +10,7 @@ export const meta = {
requireCredential: false,
requireCredentialPrivateMode: true,
+ description: "Get threaded/chained replies to a note",
res: {
type: "array",
diff --git a/packages/backend/src/server/api/endpoints/notes/conversation.ts b/packages/backend/src/server/api/endpoints/notes/conversation.ts
index 47c672736..67927794d 100644
--- a/packages/backend/src/server/api/endpoints/notes/conversation.ts
+++ b/packages/backend/src/server/api/endpoints/notes/conversation.ts
@@ -9,6 +9,7 @@ export const meta = {
requireCredential: false,
requireCredentialPrivateMode: true,
+ description: "Get conversation of a note thread/chain by a reply",
res: {
type: "array",
@@ -34,7 +35,7 @@ export const meta = {
export const paramDef = {
type: "object",
properties: {
- noteId: { type: "string", format: "misskey:id" },
+ noteId: { type: "string", format: "misskey:id", description: "Should be a reply" },
limit: { type: "integer", minimum: 1, maximum: 100, default: 10 },
offset: { type: "integer", default: 0 },
},
From 4be5f3b58ca3b8085a8952a8408e8899a6fd0033 Mon Sep 17 00:00:00 2001
From: ThatOneCalculator
Date: Sat, 15 Jul 2023 00:06:42 -0700
Subject: [PATCH 138/162] refactor: :wastebasket: deprecate
DB_MAX_NOTE_TEXT_LENGTH
---
.config/example.yml | 2 +-
packages/backend/src/const.ts | 3 +--
packages/backend/src/misc/hard-limits.ts | 3 ++-
packages/backend/src/server/api/endpoints/admin/update-meta.ts | 1 -
packages/megalodon/src/misskey/entities/meta.ts | 2 +-
5 files changed, 5 insertions(+), 6 deletions(-)
diff --git a/.config/example.yml b/.config/example.yml
index ba74df8a5..9716915b6 100644
--- a/.config/example.yml
+++ b/.config/example.yml
@@ -121,7 +121,7 @@ redis:
# ┌─────────────────────┐
#───┘ Other configuration └─────────────────────────────────────
-# Maximum length of a post (default 3000, max 8192)
+# Maximum length of a post (default 3000, max 250000000)
#maxNoteLength: 3000
# Maximum length of an image caption (default 1500, max 8192)
diff --git a/packages/backend/src/const.ts b/packages/backend/src/const.ts
index 7e8f96444..1f1e63292 100644
--- a/packages/backend/src/const.ts
+++ b/packages/backend/src/const.ts
@@ -1,8 +1,7 @@
import config from "@/config/index.js";
import { DB_MAX_IMAGE_COMMENT_LENGTH } from "@/misc/hard-limits.js";
-export const MAX_NOTE_TEXT_LENGTH =
- config.maxNoteLength != null ? config.maxNoteLength : 3000; // <- should we increase this?
+export const MAX_NOTE_TEXT_LENGTH = config.maxNoteLength ?? 3000;
export const MAX_CAPTION_TEXT_LENGTH = Math.min(
config.maxCaptionLength ?? 1500,
DB_MAX_IMAGE_COMMENT_LENGTH,
diff --git a/packages/backend/src/misc/hard-limits.ts b/packages/backend/src/misc/hard-limits.ts
index 51d2c0f5d..f1a58a425 100644
--- a/packages/backend/src/misc/hard-limits.ts
+++ b/packages/backend/src/misc/hard-limits.ts
@@ -3,8 +3,9 @@
/**
* Maximum note text length that can be stored in DB.
* Surrogate pairs count as one
+ * DEPRECARTED: use const/MAX_NOTE_TEXT_LENGTH instead
*/
-export const DB_MAX_NOTE_TEXT_LENGTH = 8192;
+// export const DB_MAX_NOTE_TEXT_LENGTH = 8192;
/**
* Maximum image description length that can be stored in DB.
diff --git a/packages/backend/src/server/api/endpoints/admin/update-meta.ts b/packages/backend/src/server/api/endpoints/admin/update-meta.ts
index d11e6b964..2142c7df7 100644
--- a/packages/backend/src/server/api/endpoints/admin/update-meta.ts
+++ b/packages/backend/src/server/api/endpoints/admin/update-meta.ts
@@ -1,6 +1,5 @@
import { Meta } from "@/models/entities/meta.js";
import { insertModerationLog } from "@/services/insert-moderation-log.js";
-import { DB_MAX_NOTE_TEXT_LENGTH } from "@/misc/hard-limits.js";
import { db } from "@/db/postgre.js";
import define from "../../define.js";
diff --git a/packages/megalodon/src/misskey/entities/meta.ts b/packages/megalodon/src/misskey/entities/meta.ts
index 2e99266ab..7dd5f6400 100644
--- a/packages/megalodon/src/misskey/entities/meta.ts
+++ b/packages/megalodon/src/misskey/entities/meta.ts
@@ -12,7 +12,7 @@ namespace MisskeyEntity {
disableRegistration: boolean
disableLocalTimeline: boolean
bannerUrl: string
- maxNoteTextLength: 300
+ maxNoteTextLength: 3000
emojis: Array
}
}
From d33f74adda20cd7a8b7e2bc33fafb6fb20c51c3b Mon Sep 17 00:00:00 2001
From: ThatOneCalculator
Date: Sat, 15 Jul 2023 00:06:53 -0700
Subject: [PATCH 139/162] chore: :art: format
---
.../backend/src/server/api/endpoints/notes/children.ts | 2 +-
.../src/server/api/endpoints/notes/conversation.ts | 6 +++++-
packages/client/src/components/MkPostForm.vue | 2 +-
packages/client/src/pages/about-calckey.vue | 8 ++++----
4 files changed, 11 insertions(+), 7 deletions(-)
diff --git a/packages/backend/src/server/api/endpoints/notes/children.ts b/packages/backend/src/server/api/endpoints/notes/children.ts
index 3615df024..a35b17a02 100644
--- a/packages/backend/src/server/api/endpoints/notes/children.ts
+++ b/packages/backend/src/server/api/endpoints/notes/children.ts
@@ -30,7 +30,7 @@ export const paramDef = {
properties: {
noteId: { type: "string", format: "misskey:id" },
limit: { type: "integer", minimum: 1, maximum: 100, default: 10 },
- depth: { type: "integer", minimum: 1, maximum: 100, default: 12},
+ depth: { type: "integer", minimum: 1, maximum: 100, default: 12 },
sinceId: { type: "string", format: "misskey:id" },
untilId: { type: "string", format: "misskey:id" },
},
diff --git a/packages/backend/src/server/api/endpoints/notes/conversation.ts b/packages/backend/src/server/api/endpoints/notes/conversation.ts
index 67927794d..c74da2ec7 100644
--- a/packages/backend/src/server/api/endpoints/notes/conversation.ts
+++ b/packages/backend/src/server/api/endpoints/notes/conversation.ts
@@ -35,7 +35,11 @@ export const meta = {
export const paramDef = {
type: "object",
properties: {
- noteId: { type: "string", format: "misskey:id", description: "Should be a reply" },
+ noteId: {
+ type: "string",
+ format: "misskey:id",
+ description: "Should be a reply",
+ },
limit: { type: "integer", minimum: 1, maximum: 100, default: 10 },
offset: { type: "integer", default: 0 },
},
diff --git a/packages/client/src/components/MkPostForm.vue b/packages/client/src/components/MkPostForm.vue
index b1812c2f1..c49001f2a 100644
--- a/packages/client/src/components/MkPostForm.vue
+++ b/packages/client/src/components/MkPostForm.vue
@@ -400,7 +400,7 @@ const textLength = $computed((): number => {
});
const maxTextLength = $computed((): number => {
- return instance ? instance.maxNoteTextLength : 1000;
+ return instance ? instance.maxNoteTextLength : 3000;
});
const canPost = $computed((): boolean => {
diff --git a/packages/client/src/pages/about-calckey.vue b/packages/client/src/pages/about-calckey.vue
index eb06a6104..af06ea65a 100644
--- a/packages/client/src/pages/about-calckey.vue
+++ b/packages/client/src/pages/about-calckey.vue
@@ -129,9 +129,10 @@
-
+ >
+
!sponsors.includes(patron));
let easterEggReady = false;
From 63d28adeff9ed2b5e5d84c58e88a443c2637dc83 Mon Sep 17 00:00:00 2001
From: ThatOneCalculator
Date: Sat, 15 Jul 2023 00:19:09 -0700
Subject: [PATCH 140/162] =?UTF-8?q?fix:=20=F0=9F=90=9B=20allow=20up=20to?=
=?UTF-8?q?=201024=20chars=20for=20SMTP=20login?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Closes #10472
---
.../migration/1678426061773-tweak-varchar-length.js | 10 ++++++++++
packages/backend/src/models/entities/meta.ts | 4 ++--
2 files changed, 12 insertions(+), 2 deletions(-)
create mode 100644 packages/backend/migration/1678426061773-tweak-varchar-length.js
diff --git a/packages/backend/migration/1678426061773-tweak-varchar-length.js b/packages/backend/migration/1678426061773-tweak-varchar-length.js
new file mode 100644
index 000000000..883374599
--- /dev/null
+++ b/packages/backend/migration/1678426061773-tweak-varchar-length.js
@@ -0,0 +1,10 @@
+export class tweakVarcharLength1678426061773 {
+ name = 'tweakVarcharLength1678426061773'
+
+ async up(queryRunner) {
+ await queryRunner.query(`ALTER TABLE "meta" ALTER COLUMN "smtpUser" TYPE character varying(1024)`, undefined);
+ await queryRunner.query(`ALTER TABLE "meta" ALTER COLUMN "smtpPass" TYPE character varying(1024)`, undefined);
+ }
+
+ async down(queryRunner) {}
+}
diff --git a/packages/backend/src/models/entities/meta.ts b/packages/backend/src/models/entities/meta.ts
index d3de7ba53..e90a5269a 100644
--- a/packages/backend/src/models/entities/meta.ts
+++ b/packages/backend/src/models/entities/meta.ts
@@ -326,13 +326,13 @@ export class Meta {
public smtpPort: number | null;
@Column("varchar", {
- length: 128,
+ length: 1024,
nullable: true,
})
public smtpUser: string | null;
@Column("varchar", {
- length: 128,
+ length: 1024,
nullable: true,
})
public smtpPass: string | null;
From 85167cf15d5c70b5348f9105306af8d033542be3 Mon Sep 17 00:00:00 2001
From: jolupa
Date: Sat, 15 Jul 2023 07:36:02 +0000
Subject: [PATCH 141/162] chore: Translated using Weblate (Catalan)
Currently translated at 100.0% (1831 of 1831 strings)
Translation: Calckey/locales
Translate-URL: https://hosted.weblate.org/projects/calckey/locales/ca/
---
locales/ca-ES.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/locales/ca-ES.yml b/locales/ca-ES.yml
index 4d265d7ee..8fb57e879 100644
--- a/locales/ca-ES.yml
+++ b/locales/ca-ES.yml
@@ -1609,6 +1609,7 @@ _aboutMisskey:
pleaseDonateToHost: Penseu també en fer una donació a la vostre instància, {host},
per ajudar-lo a suportar els costos de funcionament.
donateHost: Fes una donació a {host}
+ sponsors: Patrocinadors de Calckey
unknown: Desconegut
pageLikesCount: Nombre de pàgines amb M'agrada
youAreRunningUpToDateClient: Estás fent servir la versió del client més nova.
From c8d3f5571afbec1b5e76819553cd1683ffd4b934 Mon Sep 17 00:00:00 2001
From: Rauf
Date: Sat, 15 Jul 2023 06:54:30 +0000
Subject: [PATCH 142/162] chore: Translated using Weblate (Turkish)
Currently translated at 100.0% (1831 of 1831 strings)
Translation: Calckey/locales
Translate-URL: https://hosted.weblate.org/projects/calckey/locales/tr/
---
locales/tr-TR.yml | 986 +++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 970 insertions(+), 16 deletions(-)
diff --git a/locales/tr-TR.yml b/locales/tr-TR.yml
index 82da6f649..8c3c15f33 100644
--- a/locales/tr-TR.yml
+++ b/locales/tr-TR.yml
@@ -1,9 +1,6 @@
_lang_: "Türkçe"
-introMisskey: "Açık kaynaklı bir dağıtılmış mikroblog hizmeti olan Calckey'e hoş geldiniz.\n
- Misskey, neler olup bittiğini paylaşmak ve herkese sizden bahsetmek için \"notlar\"\
- \ oluşturmanıza olanak tanıyan, açık kaynaklı, dağıtılmış bir mikroblog hizmetidir.\n
- Herkesin notlarına kendi tepkilerinizi hızlıca eklemek için \"Tepkiler\" özelliğini
- de kullanabilirsiniz👍.\nYeni bir dünyayı keşfedin🚀."
+introMisskey: "Hoş geldin! Calckey, sonsuza kadar ücretsiz olan, açık kaynaklı, merkezi
+ olmayan bir sosyal medya platformudur! 🚀"
monthAndDay: "{month}Ay {day}Gün"
search: "Arama"
notifications: "Bildirimler"
@@ -11,10 +8,10 @@ username: "Kullanıcı Adı"
password: "Şifre"
forgotPassword: "şifremi unuttum"
ok: "TAMAM"
-gotIt: "Anladım"
+gotIt: "Anladım!"
cancel: "İptal"
enterUsername: "Kullanıcı adınızı giriniz"
-noNotes: "Gönderiler mevcut değil."
+noNotes: "Gönderiler mevcut değil"
noNotifications: "Bildirim bulunmuyor"
settings: "Ayarlar"
basicSettings: "Temel Ayarlar"
@@ -22,11 +19,11 @@ otherSettings: "Diğer Ayarlar"
openInWindow: "Bir pencere ile aç"
profile: "Profil"
timeline: "Zaman çizelgesi"
-noAccountDescription: "Bu kullanıcı henüz biyografisini yazmadı"
-login: "Giriş Yap "
+noAccountDescription: "Bu kullanıcı henüz hakkındasını yazmadı."
+login: "Giriş Yap"
logout: "Çıkış Yap"
signup: "Kayıt Ol"
-uploading: "Yükleniyor"
+uploading: "Yükleniyor..."
users: "Kullanıcı"
addUser: "Kullanıcı Ekle"
favorite: "Favoriler"
@@ -54,17 +51,175 @@ user: "Kullanıcı"
searchByGoogle: "Arama"
_mfm:
search: "Arama"
+ play: MFM'i çal
+ stop: MFM'i durdur
+ cheatSheet: MFM Kopya Kağıdı
+ intro: MFM, Misskey, Calckey, Akkoma ve daha pek çok yerde kullanılabilen bir biçimlendirme
+ dilidir. Burada mevcut tüm MFM sözdiziminin bir listesini görüntüleyebilirsiniz.
+ link: Link
+ boldDescription: Harfleri kalınlaştırarak vurgular.
+ small: Küçük
+ smallDescription: İçeriği küçük ve ince görüntüler.
+ warn: MFM, hızla hareket eden veya gösterişli animasyonlar içerebilir
+ alwaysPlay: Her zaman tüm animasyonlu MFM'yi otomatik oynat
+ x4Description: İçeriği büyükten de büyükten daha büyük görüntüler.
+ rainbowDescription: İçeriğin gökkuşağı renklerinde görünmesini sağlar.
+ bounceDescription: İçeriğe sıçarayan bir animasyon verir.
+ sparkle: Işıltı
+ sparkleDescription: İçeriğe ışıltılı bir parçacık efekti verir.
+ rotateDescription: İçeriği belirli bir açıyla döndürür.
+ fadeDescription: İçeriği içeri ve dışarı karartır.
+ fade: Karart
+ position: Pozisyon
+ blockCode: Kod (Blok)
+ crop: Kırp
+ positionDescription: İçeriği belirli bir miktarda taşıyın.
+ scale: Ölçek
+ scaleDescription: İçeriği belirtilen bir miktara göre ölçeklendirin.
+ foreground: Ön plan rengi
+ mention: Bahset
+ mentionDescription: Bir et-sembolü (@) ve bir kullanıcı adı kullanarak bir kullanıcı
+ belirleyebilirsiniz.
+ hashtag: Etiket
+ dummy: Calckey, Fediverse dünyasını genişletiyor
+ hashtagDescription: Sayı işareti ve metin kullanarak bir etiket belirtebilirsiniz.
+ url: URL
+ urlDescription: URL'ler görüntülenebilir.
+ inlineMath: Matematik (Satır İçi)
+ blockCodeDescription: Bir blokta çok satırlı (program) kod için sözdizimi vurgulamasını
+ görüntüler.
+ inlineMathDescription: Matematik formüllerini (KaTeX) satır içinde görüntüleyin
+ quote: Alıntı
+ quoteDescription: İçeriği alıntı olarak görüntüler.
+ twitch: Animasyon (Seğir)
+ emoji: Özel Emoji
+ jelly: Animasyon (Jöle)
+ blur: Bulanık
+ blurDescription: İçeriği bulanıklaştırır. Fareyle üzerine gelindiğinde net bir şekilde
+ görüntülenecektir.
+ spinDescription: İçeriğe dönen bir animasyon verir.
+ plainDescription: Bu MFM efektinde bulunan tüm MFM'lerin etkilerini devre dışı bırakır.
+ background: Arka plan rengi
+ backgroundDescription: Metnin arka plan rengini değiştirin.
+ jump: Animasyon (Zıpla)
+ cropDescription: İçeriği kırpar.
+ advancedDescription: Devre dışı bırakılırsa, animasyonlu MFM oynatılmadığı sürece
+ yalnızca temel işaretlemeye izin verir
+ bold: Kalın
+ inlineCodeDescription: (Program) kodu için satır içi sözdizimi vurgulamasını görüntüler.
+ flip: Tersine Çevir
+ flipDescription: İçeriği yatay veya dikey olarak çevirir.
+ font: Yazı Tipi
+ twitchDescription: İçeriğe güçlü bir şekilde seğiren bir animasyon verir.
+ spin: Animasyon (Dön)
+ x2Description: İçeriği büyük gösterir.
+ rotate: Döndür
+ plain: Düz
+ linkDescription: Metnin belirli bölümleri bir URL olarak görüntülenebilir.
+ searchDescription: Önceden girilmiş metin içeren bir arama kutusu görüntüler.
+ blockMathDescription: Matematik formüllerini (KaTeX) bir blokta görüntüleyin
+ jumpDescription: İçeriğe zıplama animasyonu verir.
+ rainbow: Gökkuşağı
+ x4: İnanılmaz derecede büyük
+ tadaDescription: İçeriğe "Tada!" benzeri bir animasyon verir.
+ shake: Animasyon (Salla)
+ x3: Büyük göster
+ blockMath: Matematik (Blok)
+ x2: Büyük
+ fontDescription: İçeriğin görüntüleneceği yazı tipini ayarlar.
+ foregroundDescription: Metnin ön plan rengini değiştirin.
+ centerDescription: İçeriği ortada görüntüler.
+ inlineCode: Kod (Satır İçi)
+ advanced: Gelişmiş MFM
+ center: Ortala
+ x3Description: İçeriği daha büyük gösterir.
+ tada: Animasyon (Tada)
+ emojiDescription: Özel bir emoji adını iki nokta ile çevreleyerek, özel emoji görüntülenebilir.
+ jellyDescription: İçeriğe jöle benzeri bir animasyon verir.
+ shakeDescription: İçeriğe sallanan bir animasyon verir.
+ bounce: Animasyon (Sıçra)
_sfx:
notification: "Bildirim"
+ noteMy: Kendi Gönderim
+ note: Yeni gönderi
+ antenna: Anten
+ chat: Sohbet
+ channel: Kanal bildirimleri
+ chatBg: Sohbet (Arkaplan)
_widgets:
notifications: "Bildirim"
timeline: "Zaman çizelgesi"
+ photos: Fotoğraflar
+ userList: Kullanıcı Listesi
+ _userList:
+ chooseList: Liste seç
+ onlineUsers: Aktif Kullanıcılar
+ aiscript: AiScript Konsolu
+ activity: Aktivite
+ digitalClock: Dijital Saat
+ unixClock: UNIX Saati
+ meiliIndexCount: Indexlenmiş gönderiler
+ calendar: Takvim
+ trends: Popüler
+ memo: Yapışkan Notlar
+ rssTicker: RSS Ticker
+ federation: Federasyon
+ instanceCloud: Sunucu Bulutu
+ postForm: Gönderi Formu
+ meiliSize: Index boyutu
+ slideshow: Slayt Gösterisi
+ button: Düğme
+ clock: Saat
+ rss: RSS Okuyucu
+ serverInfo: Sunucu Bilgisi
+ meiliStatus: Sunucu Durumu
+ jobQueue: İş Sırası
+ serverMetric: Sunucu Bilgileri
_profile:
username: "Kullanıcı Adı"
+ changeBanner: Afişini değiştir
+ locationDescription: Önce şehrinizi girerseniz, yerel saatinizi diğer kullanıcılara
+ gösterecektir.
+ youCanIncludeHashtags: Hakkımdan'da etiket kullanabilirsin.
+ description: Hakkımda
+ metadataDescription: Bunları kullanarak profilinizde ek bilgi alanları görüntüleyebilirsiniz.
+ metadata: Ek Bilgi
+ metadataContent: İçerik
+ metadataLabel: Etiket
+ changeAvatar: Avatarını değiştir
+ name: İsim
+ metadataEdit: Ek Bilgini Düzenle
_deck:
_columns:
notifications: "Bildirim"
tl: "Zaman çizelgesi"
+ antenna: Anten
+ list: Liste
+ widgets: Araçlar
+ channel: Kanal
+ direct: Direkt mesajlar
+ main: Ana
+ mentions: Bahsetmeler
+ swapLeft: Sol sütunla değiştir
+ addColumn: Sütun ekle
+ configureColumn: Sütun ayarları
+ swapRight: Sağ sütunla değiştir
+ swapUp: Üstteki sütunla değiştir
+ stackLeft: Sol sütunla birleştir
+ swapDown: Alttaki sütunla değiştir
+ popRight: Sağdaki sütunu aç
+ introduction2: İstediğiniz zaman yeni sütunlar eklemek için ekranın sağındaki +
+ işaretini tıklayın.
+ alwaysShowMainColumn: Her zaman ana sütunu göster
+ columnAlign: Sütunları hizala
+ profile: Çalışma alanı
+ newProfile: Yeni çalışma alanı
+ renameProfile: Çalışma alanını yeniden adlandır
+ deleteProfile: Çalışma alanını sil
+ nameAlreadyExists: Bu çalışma alanı zaten mevcut.
+ introduction: Sütunları özgürce düzenleyerek sizin için mükemmel arayüzü oluşturun!
+ widgetsIntroduction: Lütfen sütun menüsünde "Araç'ları düzenle"yi seçin ve bir widget
+ ekleyin.
searchPlaceholder: Calckey'de Ara
reply: Yanıtla
jumpToPrevious: Öncekini görüntüle
@@ -80,7 +235,7 @@ headlineMisskey: Sonsuza kadar ücretsiz, açık kaynak kodlu, merkeziyetsiz sos
platformu! 🚀
loadMore: Daha fazla yükle
instance: Sunucu
-fetchingAsApObject: Fedevren'den çekiliyor
+fetchingAsApObject: Fediverse'den çekiliyor
removeReaction: Tepkini sil
rememberNoteVisibility: Gönderi görünürlüğü ayarlarını hatırla
attachCancel: Eklentiyi kaldır
@@ -279,7 +434,7 @@ lockedAccountInfo: Gönderi görünürlüğünüzü "Yalnızca takipçiler" olar
görülebilir.
unlikeConfirm: Beğeniyi kaldırmak istiyor musunuz?
notSpecifiedMentionWarning: Bu gönderi, alıcı olarak dahil edilmeyen kullanıcılardan
- bahsetmektedir.
+ bahsetmektedir
hideOnlineStatus: Çevrimiçi bilgisini gizle
hideOnlineStatusDescription: Çevrimiçi durumunuzu gizlemek, arama gibi bazı özelliklerin
rahatlığını azaltır.
@@ -517,7 +672,7 @@ objectStorageRegionDesc: "'xx-east-1' gibi bir bölge belirtin. Hizmetiniz bölg
arasında ayrım yapmıyorsa, bunu boş bırakın veya 'us-east-1' girin."
objectStorageUseSSL: SSL Kullan
popout: Açılır Pencere
-volume: Ses
+volume: Ses Kuvveti
showInPage: Sayfada göster
masterVolume: Ana ses
undeck: Desteden çık
@@ -565,7 +720,7 @@ moveAccountDescription: Bu süreç geri döndürülemez. Taşımadan önce yeni
bu hesap için bir takma ad ayarladığınızdan emin olun. Lütfen @person@server.com
şeklinde biçimlendirilmiş hesabın etiketini girin
emojis: Emoji
-flagAsCat: Kedi misin?
+flagAsCat: Kedi misin? 😺
selectChannel: Kanal seç
emojiName: Emoji adı
showOnRemote: Uzak sunucuda görüntüle
@@ -922,7 +1077,7 @@ manageAccounts: Hesapları Düzenle
makeReactionsPublicDescription: Bu, tüm geçmiş tepkilerinizin listesini herkesin görebileceği
bir hale getirecektir.
unmuteThread: İleti dizisinin sesini aç
-ffVisibility: Takipçiler/Takipçiler Görünürlüğü
+ffVisibility: Takipler/Takipçiler Görünürlüğü
reflectMayTakeTime: Bunun yansıması biraz zaman alabilir.
cropImageAsk: Bu resmi kırpmak istediğinize emin misiniz?
check: Kontrol Et
@@ -1109,7 +1264,7 @@ adminCustomCssWarn: Bu ayar yalnızca ne işe yaradığını biliyorsanız kulla
emin olun.
customSplashIcons: Özel açılış ekranı simgeleri (url'ler)
recommendedInstancesDescription: Önerilen zaman çizelgesinde görünmesi için satır
- sonlarıyla ayrılmış önerilen sunucular. `https://` EKLEMEYİN, YALNIZCA etki alanı.
+ sonlarıyla ayrılmış önerilen sunucular.
recommendedInstances: Önerilen sunucular
enableServerMachineStats: Sunucu donanımı istatistiklerini etkinleştir
_sensitiveMediaDetection:
@@ -1170,3 +1325,802 @@ sendModMail: Moderasyon Bildirimi Gönder
noGraze: Calckey ile çakıştığı için lütfen "Graze for Mastodon" tarayıcı uzantısını
devre dışı bırakın.
isBot: Bu hesap bir bottur
+_2fa:
+ renewTOTPOk: Yeniden Yapılandır
+ registerTOTP: Doğrulayıcı uygulamasını kaydedin
+ renewTOTPCancel: İptal Et
+ renewTOTPConfirm: Bu, önceki uygulamanızdaki doğrulama kodlarının çalışmamasına
+ neden olur
+ alreadyRegistered: Zaten bir 2 faktörlü kimlik doğrulama cihazını kaydettiniz.
+ chromePasskeyNotSupported: Chrome geçiş anahtarları şu anda desteklenmemektedir.
+ registerSecurityKey: Bir güvenlik veya geçiş anahtarı kaydedin
+ securityKeyName: Bir anahtar adı girin
+ removeKey: Güvenlik anahtarını kaldır
+ removeKeyConfirm: '{name} anahtarı gerçekten silinsin mi?'
+ renewTOTP: Kimlik doğrulayıcı uygulamasını yeniden yapılandırın
+ token: 2FA Tokeni
+ step1: Öncelikle, cihazınıza bir kimlik doğrulama uygulaması ({a} veya {b} gibi)
+ yükleyin.
+ step2Click: Bu QR koduna tıklamak, 2FA'yı güvenlik anahtarınıza veya telefon kimlik
+ doğrulayıcı uygulamanıza kaydetmenize olanak tanır.
+ step3Title: Bir kimlik doğrulama kodu girin
+ securityKeyNotSupported: Tarayıcınız güvenlik anahtarlarını desteklemiyor.
+ step2: Ardından, bu ekranda görüntülenen QR kodunu tarayın.
+ step2Url: "Bir masaüstü programı kullanıyorsanız bu URL'yi de girebilirsiniz:"
+ step3: Kurulumu tamamlamak için uygulamanız tarafından sağlanan tokeni girin.
+ step4: Şu andan itibaren, gelecekteki herhangi bir oturum açma denemesi böyle bir
+ oturum açma tokeni isteyecektir.
+ securityKeyInfo: Parmak izi veya PIN kimlik doğrulamasının yanı sıra, hesabınızın
+ güvenliğini daha da artırmak için FIDO2'yi destekleyen donanım güvenlik anahtarları
+ aracılığıyla kimlik doğrulama ayarlayabilirsiniz.
+ tapSecurityKey: Güvenlik veya geçiş anahtarını kaydetmek için lütfen tarayıcınızı
+ takip edin
+ registerTOTPBeforeKey: Bir güvenlik veya geçiş anahtarı kaydetmek için lütfen bir
+ kimlik doğrulama uygulaması kurun.
+ whyTOTPOnlyRenew: Kimlik doğrulayıcı uygulaması, bir güvenlik anahtarı kaydedildiği
+ sürece kaldırılamaz.
+_poll:
+ voted: Oylandı
+ deadlineTime: Zaman
+ remainingDays: '{d} gün {h} saat kaldı'
+ remainingHours: '{h} saat {m} dakika kaldı'
+ remainingSeconds: '{s} saniye kaldı'
+ remainingMinutes: '{m} dakika {s} saniye kaldı'
+ noOnlyOneChoice: En az 2 seçenek gerekiyor
+ noMore: Daha fazla seçenek ekleyemezsin
+ at: Bitiş...
+ deadlineDate: Bitiş tarihi
+ duration: Süre
+ votesCount: '{n} oy'
+ expiration: Anketi bitir
+ totalVotes: toplam {n} oy
+ closed: Bitti
+ infinite: Asla
+ vote: Oyla
+ showResult: Sonuçları görüntüle
+ after: "'den sonra bitiş..."
+ choiceN: Seçenek {n}
+ canMultipleVote: Birden fazla seçime izin ver
+_theme:
+ code: Tema kodu
+ description: Açıklama
+ builtinThemes: Yerleşik temalar
+ color: Renk
+ keys:
+ fgHighlighted: Vurgulanan Metin
+ infoWarnFg: Uyarı metni
+ mention: Bahsetme
+ mentionMe: Bahsetme (Kendim)
+ buttonBg: Düğme arka planı
+ buttonHoverBg: Düğme arka planı (Üstüne Gelince)
+ shadow: Gölge
+ navBg: Kenar çubuğu arka planı
+ accent: Vurgu
+ fg: Yazı
+ dateLabelFg: Tarih etiketi metni
+ navActive: Kenar çubuğu metni (Etkin)
+ wallpaperOverlay: Arkaplan arayüzü
+ messageBg: Sohbet arkaplanı
+ focus: Fokus
+ accentLighten: Vurgu (Aydınlık)
+ bg: Arkaplan
+ indicator: Gösterge
+ hashtag: Etiket
+ renote: Yükseltme
+ modalBg: Modal arka plan
+ divider: Bölücü
+ scrollbarHandle: Kaydırma çubuğu kolu
+ scrollbarHandleHover: Kaydırma çubuğu tutacağı (Üzerine Gelince)
+ infoBg: Bilgi geçmişi
+ accentDarken: Vurgu (Karanlık)
+ header: Başlık
+ navFg: Kenar çubuğu metni
+ navIndicator: Kenar çubuğu göstergesi
+ link: Link
+ infoFg: Bilgi metni
+ infoWarnBg: Uyarı arka planı
+ badge: Rozen
+ panel: Panel
+ navHoverFg: Kenar çubuğu metni (Üzerine Gelince)
+ cwBg: CW düğmesi arka planı
+ cwFg: CW düğmesi meni
+ cwHoverBg: CW düğmesi arka planı (Üzerine Gelince)
+ toastFg: Bildirim metni
+ inputBorder: Giriş alanı sınırı
+ listItemHoverBg: Liste öğesi arka planı (Üstüne Gelince)
+ toastBg: Bildirim arka planı
+ driveFolderBg: Drive klasörü arkaplanı
+ funcKind: Fonksiyon tipi
+ argument: Argüman
+ lighten: Aydınlat
+ inputConstantName: Bu sabit için bir ad girin
+ deleteConstantConfirm: '{const} sabitini gerçekten silmek istiyor musunuz?'
+ explore: Temaları Keşfet
+ darken: Karart
+ base: Temel
+ manage: Temaları düzenle
+ installedThemes: Yüklenen temalar
+ invalid: Bu temanın biçimi geçersiz
+ make: Tema oluştur
+ key: Anahtar
+ alpha: Opaklık
+ install: Tema yükle
+ installed: '{name} başarıyla yüklendi'
+ alreadyInstalled: Bu tema zaten yüklendi
+ importInfo: Buraya tema kodunu girerseniz, onu tema düzenleyiciye aktarabilirsiniz
+ func: Fonksiyonlar
+ basedProp: Referenslanan özellik
+ constant: Sabit
+ defaultValue: Varsayılan değer
+ refConst: Bir sabiti referansla
+ refProp: Bir mülkü referansla
+ addConstant: Sabit ekle
+_menuDisplay:
+ sideIcon: Yan (Simgeler)
+ sideFull: Yan
+ hide: Gizle
+ top: Üst
+_filters:
+ fromUser: Kullanıcıdan
+ withFile: Dosya ile
+ notesBefore: Gönderiden önce
+ notesAfter: Gönderiden sonra
+ followingOnly: Sadece takip ettiklerim
+ fromDomain: Alan adı ile
+ followersOnly: Sadece takipçiler
+_permissions:
+ "write:blocks": Engelli kullanıcıları düzenle
+ "read:drive": Drive dosya ve klasörlerine eriş
+ "read:favorites": Yer imlerini görüntüle
+ "write:mutes": Susturulmuş kullanıcıları düzenle
+ "read:notifications": Bildirimleri görüntüle
+ "write:notifications": Bildirimleri düzenle
+ "write:page-likes": Sayfalardaki beğenilerini düzenle
+ "read:user-groups": Kullanıcı gruplarını göster
+ "write:reactions": Tepkilerini düzenle
+ "read:pages": Sayfalarını göster
+ "write:channels": Kanallarını düzenle
+ "read:gallery": Galerini göster
+ "read:gallery-likes": Beğenilen galeri gönderilerini göster
+ "write:gallery-likes": Galeri gönderilerini düzenle
+ "write:messaging": Sohbet mesajı oluştur veya sil
+ "write:user-groups": Kullanıcı gruplarını düzenle veya sil
+ "read:messaging": Sohbetlerini görüntüle
+ "read:mutes": Susturulmuş kullanıcıları göster
+ "write:votes": Bir ankete oy ver
+ "read:page-likes": Beğenilen sayfalarını göster
+ "read:reactions": Tepkilerini göster
+ "read:channels": Kanallarını göster
+ "write:notes": Gönderi oluştur veya sil
+ "write:drive": Drive dosya ve klasörlerini düzenle
+ "write:favorites": Yer imlerini düzenle
+ "read:following": Kimleri takip ettiğini göster
+ "write:account": Hesap bilgisini düzenle
+ "read:account": Hesap bilgisini görüntüle
+ "read:blocks": Engelli kullanıcıları gör
+ "write:following": Hesapları takip et veya takipten çıkar
+ "write:pages": Sayfalarını düzenle veya sil
+ "write:gallery": Galerini düzenle
+_auth:
+ pleaseGoBack: Lütfen uygulamaya geri dönün
+ callback: Uygulamaya geri dönülüyor
+ shareAccess: '"{name}" adlı kişinin bu hesaba erişmesine izin vermek ister misiniz?'
+ permissionAsk: 'Bu uygulama aşağıdaki izinleri ister:'
+ allPermissions: Tam hesap erişimi
+ denied: Erişim reddedildi
+ copyAsk: 'Lütfen aşağıdaki yetkilendirme kodunu uygulamaya yapıştırın:'
+ shareAccessAsk: Bu uygulamanın hesabınıza erişmesine izin vermek istediğinizden
+ emin misiniz?
+_antennaSources:
+ users: Belirli kullanıcılardan gönderiler
+ homeTimeline: Takip edilen kullanıcılardan gönderiler
+ all: Tüm gönderiler
+ instances: Bir sunucudaki tüm kullanıcılardan gelen gönderiler
+ userList: Belirli bir kullanıcı listesinden gönderiler
+ userGroup: Belirli bir gruptaki kullanıcıların gönderileri
+_charts:
+ usersIncDec: Kullanıcı sayısı farkı
+ usersTotal: Toplam kullanıcı sayısı
+ remoteNotesIncDec: Uzak gönderilerin sayısındaki fark
+ notesTotal: Toplam gönderi sayısı
+ filesTotal: Toplam dosya sayısı
+ apRequest: İstekler
+ storageUsageIncDec: Depolama kullanımındaki fark
+ localNotesIncDec: Yerel gönderilerin sayısındaki fark
+ storageUsageTotal: Toplam depolama kullanımı
+ federation: Federasyon
+ notesIncDec: Gönderi sayısındaki fark
+ activeUsers: Aktif kullanıcılar
+ filesIncDec: Dosya sayısındaki fark
+_pages:
+ fontSerif: Serif
+ fontSansSerif: Sans Serif
+ chooseBlock: Bloğu sil
+ blocks:
+ _canvas:
+ id: Tuval ID
+ height: Yükseklik
+ width: Genişlik
+ _button:
+ _action:
+ resetRandom: Rastgele çekirdeği sıfırla
+ _pushEvent:
+ no-variable: Hiçbiri
+ event: Etkinlik ismi
+ message: Aktif olduğunda gösterilecek mesaj
+ variable: Gönderilecek değişken
+ callAiScript: AiScript'i çağırın
+ _callAiScript:
+ functionName: Fonksiyon ismi
+ dialog: Dialog göster
+ _dialog:
+ content: İçerik
+ pushEvent: Etkinlik gönder
+ text: Başlık
+ action: Düğmeye basıldığında olacaklar
+ colored: Renkli
+ text: Yazı
+ if: Eğer
+ _if:
+ variable: Değişken
+ canvas: Tuval
+ note: Gömülü yazı
+ _note:
+ id: Gönderi ID
+ idDescription: Alternatif olarak gönderi URL'sini buraya yapıştırabilirsiniz.
+ detailed: Detaylı görüntüleme
+ _counter:
+ text: Başlık
+ inc: Adım
+ name: Değer ismi
+ radioButton: Seçenek
+ _radioButton:
+ name: Değişken ismi
+ values: Seçenekleri satırlarla ayırın
+ title: Başlık
+ default: Varsayılan değer
+ _post:
+ text: İçerik
+ attachCanvasImage: Tuval resmi ekle
+ canvasId: Tuval ID
+ _textInput:
+ text: Başlık
+ name: Değişken ismi
+ default: Varsayılan değer
+ _numberInput:
+ name: Değiken ismi
+ text: Başlık
+ default: Varsayılan değer
+ _textareaInput:
+ text: Başlık
+ name: Değişken ismi
+ default: Varsayılan değer
+ textarea: Yazı alanı
+ _switch:
+ name: Değişken ismi
+ default: Varsayılan değer
+ text: Başlık
+ counter: Sayaç
+ switch: Değiştir
+ post: Gönderi formu
+ image: Resimler
+ section: Bölüm
+ textareaInput: Çok satırlı yazı girişi
+ button: Düğme
+ textInput: Yazı girişi
+ numberInput: Sayısal giriş
+ script:
+ categories:
+ text: Yazı işlemleri
+ flow: Akış kontrolü
+ random: Rastgele
+ fn: Fonksiyonlar
+ convert: Dönüşümler
+ list: Listeler
+ logical: Mantıksal işlem
+ operation: Hesaplama
+ comparison: Karşılaştırma
+ value: Değerler
+ blocks:
+ and: A ve B
+ _or:
+ arg2: B
+ arg1: A
+ _lt:
+ arg1: A
+ arg2: B
+ _ltEq:
+ arg1: A
+ arg2: B
+ textList: Yazı listesi
+ strReverse: Yazıyı çevir
+ multiply: Çarp
+ subtract: Çıkar
+ _mod:
+ arg1: A
+ arg2: B
+ _divide:
+ arg2: B
+ arg1: A
+ round: Ondalık yuvarlama
+ _round:
+ arg1: Sayı
+ _eq:
+ arg1: A
+ arg2: B
+ notEq: A ve B farklıysa
+ _notEq:
+ arg1: A
+ arg2: B
+ or: A veya B
+ gt: "> A, B'den çoksa"
+ ltEq: <= A, B'den az veya eşitse
+ gtEq: ">= A, B'den çok veya eşitse"
+ _gtEq:
+ arg1: A
+ arg2: B
+ _not:
+ arg1: OLUMSUZ
+ random: Rastgele
+ randomPick: Listeden rastgele seç
+ seedRandom: Random (çekirdek ile)
+ _for:
+ arg1: Tekrarlama sayısı
+ arg2: Eylem
+ _seedRannum:
+ arg3: Maksimum değer
+ arg2: Minimum değer
+ arg1: Çekirdek
+ _strReplace:
+ arg3: ile değiştir
+ arg2: Değiştirilecek yazı
+ arg1: Yazı
+ _subtract:
+ arg2: B
+ arg1: A
+ mod: Kalan
+ _and:
+ arg1: A
+ arg2: B
+ _DRPWPM:
+ arg1: Yazı listesi
+ _fn:
+ slots-info: Her yuvayı bir satır sonu ile ayırın
+ arg1: Çıkış
+ slots: Yuvalar
+ for: dögü
+ dailyRandomPick: Listeden rastgele seçim yapın (Her kullanıcı için günde bir
+ kez değişir)
+ _dailyRannum:
+ arg1: Minimum değer
+ arg2: Maksimum değer
+ _seedRandomPick:
+ arg2: Liste
+ arg1: Çekirdek
+ _pick:
+ arg2: Pozisyon
+ arg1: Liste
+ number: Sayı
+ _if:
+ arg3: Yoksa
+ arg1: Eğer
+ arg2: Sonra
+ _rannum:
+ arg1: Minimum değer
+ arg2: Maksimum değer
+ eq: A ve B eşitse
+ _gt:
+ arg1: A
+ arg2: B
+ rannum: Rastgele sayı
+ _randomPick:
+ arg1: Liste
+ pick: Listeden seç
+ _listLen:
+ arg1: Liste
+ _multiply:
+ arg2: B
+ arg1: A
+ divide: Böl
+ strPick: Dize ayıklayın
+ _strPick:
+ arg1: Yazı
+ arg2: Dize konunumu
+ dailyRandom: Rastgele (Her kullanıcı için günde bir kez değişir)
+ _dailyRandom:
+ arg1: Olasılık
+ dailyRannum: Rastgele sayı (Her kullanıcı için günde bir kez değişir)
+ _stringToNumber:
+ arg1: Yazı
+ if: Şube
+ strReplace: Yedek dize
+ text: Yazı
+ _splitStrByLine:
+ arg1: Yazı
+ not: OLUMSUZ
+ _seedRandom:
+ arg1: Çekirdek
+ arg2: Olasılık
+ seedRandomPick: Listeden rastgele seçim yapın (çekirdek ile)
+ fn: Fonksiyon
+ multiLineText: Yazı (çok satırlı)
+ _textList:
+ info: Her girişi satırlar ile ayırın
+ _strReverse:
+ arg1: Yazı
+ join: Yazıyı birleştirme
+ _join:
+ arg1: Listeler
+ arg2: Ayraç
+ add: Ekle
+ _add:
+ arg1: A
+ arg2: B
+ _strLen:
+ arg1: Yazu
+ aiScriptVar: AiScript Değişkeni
+ ref: Değişken
+ splitStrByLine: Yazıyı satır sonlarına göre bölme
+ strLen: Yazı uzunluğu
+ lt: < A, B'den azsa
+ _random:
+ arg1: Olasılık
+ DRPWPM: Ağırlıklı listeden rastgele seçim yapın (Her kullanıcı için günde bir
+ kez değişir)
+ listLen: Listenin uzunluğunu al
+ numberToString: Sayıdan yazıya
+ _dailyRandomPick:
+ arg1: Liste
+ stringToNumber: Yazıdan Sayıya
+ seedRannum: Rastgele sayı (çekirdek ile)
+ _numberToString:
+ arg1: Sayı
+ types:
+ number: Sayı
+ boolean: Etiket
+ array: Liste
+ stringArray: Yazı listesi
+ string: Yazı
+ emptySlot: Boş yuva
+ enviromentVariables: Ortam değikenleri
+ argVariables: Giriş yuvaları
+ thereIsEmptySlot: Yuva {slot} boş!
+ typeError: Yuva {slot}, "{expect}" türündeki değerleri kabul eder, ancak sağlanan
+ değer "{actual}" türündedir!
+ pageVariables: Sayfa değişkenleri
+ readPage: Bu sayfanın kaynağını görüntüle
+ created: Sayfa başarıyla oluşturuldu
+ eyeCatchingImageRemove: Afişi sil
+ selectType: Tip seç
+ pageSetting: Sayfa ayarları
+ viewSource: Kaynağı görüntüle
+ variables: Değişkenler
+ url: Sayfa URL'si
+ unlike: Beğeniyi kaldır
+ my: Sayfalarım
+ content: Sayfa bloğu
+ deleted: Sayfa başarıyla silindi
+ newPage: Yeni sayfa oluştur
+ editPage: Bu sayfayı düzenle
+ viewPage: Sayfalarını görüntüle
+ like: Beğen
+ nameAlreadyExists: Belirtilen Sayfa URL'si zaten var
+ invalidNameTitle: Belirtilen Sayfa URL'si geçersiz
+ invalidNameText: Sayfa başlığının boş olmadığından emin olun
+ editThisPage: Sayfayı düzenle
+ featured: Popüler
+ inspector: Denetçi
+ contents: İçerik
+ title: Başlık
+ liked: Beğenilen Sayfalar
+ font: Yazı Tipi
+ alignCenter: İçerikleri ortala
+ eyeCatchingImageSet: Afiş ayarla
+ enterVariableName: Değişken ismi ekle
+ hideTitleWhenPinned: Profile sabitlendiğinde Sayfa başlığını gizle
+ variableNameIsAlreadyUsed: Bu değişken adı zaten kullanımda
+ contentBlocks: İçerik
+ inputBlocks: Giriş
+ specialBlocks: Özel
+ updated: Sayfa başarıyla düzenlendi
+ summary: Sayfa özeti
+_notification:
+ _types:
+ follow: Yeni takipçiler
+ mention: Bahsetmeler
+ app: Bağlı uygulamalardan bildirimler
+ pollEnded: Biten anket
+ receiveFollowRequest: Takip istekleri alındı
+ reaction: Tepkiler
+ all: Hepsi
+ followRequestAccepted: Takip istekleri kabul edildi
+ pollVote: Anket oylamaları
+ renote: Yükseltmeler
+ reply: Yanıtlar
+ groupInvited: Grup davetleri
+ quote: Alıntılar
+ pollEnded: Anket sonuçları açıklandı
+ fileUploaded: Dosya başarıyla yüklendi
+ youRenoted: '{name} tarafından yükseltildin'
+ _actions:
+ followBack: Seni geri takip etti
+ reply: Yanıtla
+ renote: Yükseltmeler
+ youGotMention: '{name} senden bahsetti'
+ youWereFollowed: seni takip etti
+ youGotMessagingMessageFromGroup: '{name} grubuna bir sohbet mesajı gönderildi'
+ renoted: gönderini yükseltti
+ youGotQuote: '{name} seni alıntıladı'
+ youGotReply: '{name} seni yanıtladı'
+ reacted: gönderine tepki ekledi
+ yourFollowRequestAccepted: Takip isteğin kabul edildi
+ emptyPushNotificationMessage: Push bildirimleri güncellendi
+ youWereInvitedToGroup: '{userName} seni gruba davet etti'
+ voted: anketine oy verdi
+ youReceivedFollowRequest: Bir takip isteği geldi
+ youGotPoll: '{name} anketinde oylama yaptı'
+ youGotMessagingMessageFromUser: '{name} sana bir sohbet mesajı gönderdi'
+_experiments:
+ title: Deneyler
+ postImportsCaption: Kullanıcıların geçmiş Calckey, Misskey, Mastodon, Akkoma ve
+ Pleroma hesaplarından gönderilerini içe aktarmalarına izin verir. Kuyruğunuz tıkanırsa
+ yükleme sırasında yavaşlamalara neden olabilir.
+ enablePostImports: Gönderi içeri aktarmasını aktif et
+_dialog:
+ charactersExceeded: 'Maksimum karakter aşıldı! Geçerli: {current}/Sınır: {max}'
+ charactersBelow: 'Yeterli karakter yok! Geçerli: {current}/Sınır: {min}'
+_signup:
+ emailSent: Mail adresinize ({email}) bir onay maili gönderildi. Hesap oluşturmayı
+ tamamlamak için lütfen verilen bağlantıya tıklayın.
+ almostThere: Neredeyse vardık
+ emailAddressInfo: Lütfen mail adresinizi giriniz. Herkese açık gözükmeyecektir.
+_ad:
+ back: Geri
+ reduceFrequencyOfThisAd: Daha az reklam göster
+_accountDelete:
+ accountDelete: Hesabı sil
+ mayTakeTime: Hesap silme, kaynak yoğun bir işlem olduğundan, ne kadar içerik oluşturduğunuza
+ ve ne kadar dosya yüklediğinize bağlı olarak tamamlanması biraz zaman alabilir.
+ sendEmail: Hesap silme işlemi tamamlandıktan sonra, bu hesapta kayıtlı olan mail
+ adresine bir mail gönderilecektir.
+ started: Silme işlemi başlatıldı.
+ requestAccountDelete: Hesap silme talebinde bulun
+ inProgress: Silme işlemi şu anda devam ediyor
+_forgotPassword:
+ enterEmail: Kaydolmak için kullandığınız mail adresini girin. Parolanızı sıfırlayabileceğiniz
+ bir bağlantı daha sonra ona gönderilecektir.
+ contactAdmin: Bu sunucu, mail adreslerinin kullanılmasını desteklemiyor, bunun yerine
+ şifrenizi sıfırlamak için lütfen sunucu yöneticisiyle iletişime geçin.
+ ifNoEmail: Kayıt sırasında bir mail kullanmadıysanız, sunucu yöneticisiyle iletişime
+ geçin.
+_gallery:
+ my: Galerim
+ liked: Beğenilen Gönderiler
+ like: Beğen
+ unlike: Beğeniyi kaldır
+_registry:
+ key: Anahtar
+ scope: Kapsam
+ keys: Anahtarlar
+ createKey: Anahtar oluştur
+ domain: Alan adı
+_email:
+ _follow:
+ title: Yeni bir takipçin var
+ _receiveFollowRequest:
+ title: Yeni bir takip isteğin var
+_preferencesBackups:
+ apply: Bu cihaza uygula
+ invalidFile: Geçersiz dosya formatı
+ applyConfirm: '"{name}" yedeğini bu cihaza gerçekten uygulamak istiyor musunuz?
+ Bu cihazın mevcut ayarlarının üzerine yazılacak.'
+ inputName: Lütfen bu yedekleme için bir ad girin
+ cannotSave: Kaydedilemedi
+ saveConfirm: Yedekleme {name} olarak kaydedilsin mi?
+ renameConfirm: '"{old}" olan bu yedeğin adı "{new}" olarak değiştirilsin mi?'
+ createdAt: 'Oluşturma tarihi: {date} {time}'
+ save: Değişiklikleri Kaydet
+ nameAlreadyExists: '"{name}" adlı bir yedek zaten var. Lütfen farklı bir ad girin.'
+ deleteConfirm: '{name} yedeği silinsin mi?'
+ noBackups: Yedekleme yok. "Yeni yedekleme oluştur" seçeneğini kullanarak bu sunucudaki
+ istemci ayarlarınızı yedekleyebilirsiniz.
+ list: Oluşturulan yedekler
+ saveNew: Yeni bir yedek oluştur
+ loadFile: Dosyadan yükle
+ updatedAt: 'Güncelleme tarihi: {date} {time}'
+ cannotLoad: Yüklenemedi
+_aboutMisskey:
+ patronsList: Bağış büyüklüğüne göre değil, kronolojik olarak listelenmiştir. Adınızı
+ buraya almak için yukarıdaki bağlantıyla bağış yapın!
+ about: Calckey, 2022'den beri geliştirilmekte olan ThatOneCalculator tarafından
+ yapılan bir Misskey çatalıdır.
+ allContributors: Tüm katkıda bulunanlar
+ patrons: Calckey patronları
+ morePatrons: Burada listelenmeyen diğer birçok yardımcının desteğini de takdir ediyoruz.
+ Teşekkür ederim! 🥰
+ donate: Calckey'e bağışta bulunun
+ contributors: Ana katkıda bulunanlar
+ source: Kaynak Kodu
+ translation: Calckey'i tercüme et
+ donateTitle: Calckey'den hoşlanıyor musunuz?
+ pleaseDonateToCalckey: Lütfen gelişimini desteklemek için Calckey'e bağış yapmayı
+ düşünün.
+ pleaseDonateToHost: İşletme maliyetlerini desteklemek için lütfen ev sunucunuz {host}'a
+ bağış yapmayı da düşünün.
+ donateHost: '{ev sahibi} için bağış yapın'
+ sponsors: Calckey sponsorları
+_weekday:
+ saturday: Cumartesi
+ sunday: Pazar
+ wednesday: Çarşamba
+ friday: Cuma
+ thursday: Perşembe
+ monday: Pazartesi
+ tuesday: Salı
+_serverDisconnectedBehavior:
+ reload: Otomatik olarak yenile
+ quiet: Göze çarpmayan uyarı göster
+ nothing: Hiçbir şey yapma
+ dialog: Uyarı mesajını göster
+_channel:
+ removeBanner: Afişi sil
+ owned: Sahip Olunan
+ nameOnly: Sadece isim
+ featured: Popüler
+ setBanner: Afiş ayarla
+ usersCount: '{n} Katılımcı'
+ create: Kanal oluştur
+ following: Takip
+ notesCount: '{n} Gönderi'
+ nameAndDescription: İsim ve açıklama
+ edit: Kanalı düzenle
+_messaging:
+ groups: Gruplar
+ dms: Özel
+_tutorial:
+ step5_5: Sosyal {icon} zaman çizelgesi, Ev ve Yerel zaman çizelgelerinin bir kombinasyonudur.
+ step5_6: Önerilen {icon} zaman çizelgesi, yöneticilerin önerdiği sunuculardan gelen
+ gönderileri görebileceğiniz yerdir.
+ step6_1: Peki burası neresi?
+ title: Calckey nasıl kullanılır
+ step3_2: "Ev ve sosyal zaman çizelgeleriniz, kimi takip ettiğinize bağlıdır, bu
+ nedenle başlamak için birkaç hesabı takip etmeyi deneyin.\nTakip etmek için bir
+ profilin sağ üstündeki artı dairesine tıklayın."
+ step5_3: Ana Sayfa {icon} zaman çizelgesi, takip ettiğiniz hesaplardan gelen gönderileri
+ görebileceğiniz yerdir.
+ step5_4: Yerel {icon} zaman çizelgesi, bu sunucudaki diğer herkesin gönderilerini
+ görebileceğiniz yerdir.
+ step6_2: Calckey'e öylece katılmadın. Binlerce sunucudan oluşan birbirine bağlı
+ bir ağ olan Fediverse'e giden bir portala katıldınız.
+ step6_4: Şimdi gidin, keşfedin ve eğlenin!
+ step5_7: Global {icon} zaman çizelgesi, bağlı diğer tüm sunuculardan gelen gönderileri
+ görebileceğiniz yerdir.
+ step2_1: Öncelikle lütfen profilinizi doldurunuz.
+ step2_2: Kim olduğunuz hakkında biraz bilgi vermeniz, başkalarının gönderilerinizi
+ görmek mi yoksa sizi takip etmek mi istediklerini anlamalarını kolaylaştıracaktır.
+ step3_1: Şimdi birkaç kullanıcı takip etme zamanı!
+ step1_1: Hoşgeldin!
+ step1_2: Hadi seni hazırlayalım. Kısa sürede kullanmaya başlayacaksınız!
+ step5_1: Zaman çizelgeleri, her yerde zaman çizelgeleri!
+ step6_3: Her sunucu farklı şekillerde çalışır ve tüm sunucular Calckey'i çalıştırmaz.
+ Ama bu sunucu kullanıyor! Biraz karışık ama kısa sürede anlayacaksın.
+ step4_1: Seni oradan çıkaralım.
+ step5_2: Sunucunuzda etkinleştirilmiş {timelines} farklı zaman çizelgesi var.
+ step4_2: İlk gönderiniz için, bazı insanlar bir {introduction} gönderisi veya basit
+ bir "Merhaba dünya!" gönderir
+_visibility:
+ public: Herkese açık
+ publicDescription: Gönderiniz herkese açık tüm zaman çizelgelerinde görünür olacak
+ specified: Direkt
+ followersDescription: Yalnızca takipçilerinize ve adı geçen kullanıcılara görünür
+ kılın
+ localOnlyDescription: Uzak kullanıcılara gözükmez
+ home: Listelenmemiş
+ homeDescription: Yalnızca ev zaman çizelgesine yayınla
+ followers: Takipçiler
+ specifiedDescription: Belirli kullanıcılara özel yapın
+ localOnly: Sadece yerel
+_postForm:
+ quotePlaceholder: Bu gönderiyi alıntıla...
+ _placeholders:
+ a: Ne ile meşgulsün?
+ b: Etrafında neler oluyor?
+ f: Yazman bekleniyor...
+ c: Aklınızdan ne geçiyor?
+ d: Ne demek istiyorsun?
+ e: Yazmaya başka...
+ replyPlaceholder: Bu gönderiyi yanıtla...
+ channelPlaceholder: Bir kanala gönder...
+_exportOrImport:
+ allNotes: Tüm gönderiler
+ followingList: Takip edilen kullanıcılar
+ muteList: Susturulmuş kullanıcılar
+ excludeMutingUsers: Susturulmuş kullanıcıları hariç tut
+ excludeInactiveUsers: Aktif olmayan kullanıcıları hariç tut
+ userLists: Kullanıcı listeleri
+ blockingList: Engellenimş kullanıcılar
+_instanceCharts:
+ notes: Gönderi sayısındaki fark
+ notesTotal: Toplu gönderi sayısı
+ files: Dosya sayısındaki fark
+ filesTotal: Toplu dosya sayısı
+ requests: İstekler
+ usersTotal: Toplu kullanıcı sayısı
+ users: Kullanıcı sayısı farkı
+ cacheSize: Önbellek boyutundaki fark
+ ff: 'Takip edilen / Takipçi sayısındaki fark '
+ cacheSizeTotal: Toplam önbellek boyutu
+ ffTotal: Toplu Takip edilen / Takipçi sayısı
+_wordMute:
+ soft: Yumuşak
+ muteWords: Susturulmuş kelimeler
+ muteWordsDescription: AND koşulu için boşluklarla veya OR koşulu için satır sonlarıyla
+ ayırın.
+ softDescription: Belirlenen koşulları karşılayan gönderileri zaman çizelgesinden
+ gizleyin.
+ hardDescription: Belirlenen koşulları sağlayan gönderilerin zaman çizelgesineeklenmesini
+ engeller. Ayrıca bu gönderiler, koşullar değişse dahi zaman tüneline eklenmeyecektir.
+ mutedNotes: Susturulmuş gönderiler
+ hard: Sert
+ muteWordsDescription2: Normal ifadeleri kullanmak için anahtar kelimeleri eğik çizgilerle
+ çevreleyin.
+_ago:
+ weeksAgo: '{n}hafta önce'
+ minutesAgo: '{n}dakika önce'
+ daysAgo: '{n}gün önce'
+ future: Gelecek
+ justNow: Şimdi
+ secondsAgo: '{n}saniye önce'
+ hoursAgo: '{n}saat önce'
+ monthsAgo: '{n}ay önce'
+ yearsAgo: '{n}yıl önce'
+_timelines:
+ home: Ev
+ local: Yerel
+ social: Sosyal
+ global: Global
+ recommended: Tavsiye Edilen
+_nsfw:
+ respect: NSFW medyasını gizle
+ force: Tüm medyayı gizle
+ ignore: NSFW medyasını gizleme
+_cw:
+ files: '{count} dosya(lar)'
+ chars: '{count} harf'
+ hide: Gizle
+ show: İçeriği göster
+_relayStatus:
+ rejected: Reddedildi
+ accepted: Kabul edildi
+ requesting: Bekleniyor
+_time:
+ day: Gün(ler)
+ hour: Saat(ler)
+ second: Saniye(ler)
+ minute: Dakika(lar)
+_skinTones:
+ light: Aydınlık
+ medium: Orta
+ mediumLight: Orta Aydınlık
+ dark: Karanlık
+ yellow: Sarı
+ mediumDark: Orta Karanlık
+_plugin:
+ install: Eklenti indir
+ installWarn: Lütfen güvenli olmayan eklentiler kurmayınız.
+ manage: Eklentileri yönet
+_instanceTicker:
+ remote: Uzak kullanıcılar için göster
+ always: Her zaman göster
+ none: Asla gösterme
+_instanceMute:
+ heading: Sessize alınacak sunucuların listesi
+ instanceMuteDescription2: Yeni satırlarla ayırın
+ title: Listelenen sunuculardan gönderileri gizler.
+ instanceMuteDescription: Bu, sessize alınmış bir sunucudan bir kullanıcıya yanıt
+ veren kullanıcılarınkiler de dahil olmak üzere, listelenen sunuculardan gelen
+ tüm gönderileri/yükseltmeleri sessize alacaktır.
+_ffVisibility:
+ followers: Takipçilere açık
+ private: Gizli
+ public: Herkese açık
From 911745583270043d3f47ce86e231443e15956394 Mon Sep 17 00:00:00 2001
From: freeplay
Date: Sat, 15 Jul 2023 15:21:33 -0400
Subject: [PATCH 143/162] fix: note detailed tabs using wrong styling
---
packages/client/src/components/MkNoteDetailed.vue | 1 -
packages/client/src/components/MkTab.vue | 1 +
2 files changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/client/src/components/MkNoteDetailed.vue b/packages/client/src/components/MkNoteDetailed.vue
index 3dfac1f0c..71c11350d 100644
--- a/packages/client/src/components/MkNoteDetailed.vue
+++ b/packages/client/src/components/MkNoteDetailed.vue
@@ -35,7 +35,6 @@
diff --git a/packages/client/src/components/MkTab.vue b/packages/client/src/components/MkTab.vue
index a5bc28260..b5d6e8056 100644
--- a/packages/client/src/components/MkTab.vue
+++ b/packages/client/src/components/MkTab.vue
@@ -58,6 +58,7 @@ export default defineComponent({
font-size: 90%;
border-radius: var(--radius);
padding: 10px 8px;
+ white-space: nowrap;
> button {
flex: 1;
From d64a72c806c8a118ecd08286e9a97b0ef0a7dc3a Mon Sep 17 00:00:00 2001
From: Cold Ravioli
Date: Sat, 15 Jul 2023 14:23:49 +0000
Subject: [PATCH 144/162] chore: Translated using Weblate (Spanish)
Currently translated at 86.9% (1592 of 1831 strings)
Translation: Calckey/locales
Translate-URL: https://hosted.weblate.org/projects/calckey/locales/es/
---
locales/es-ES.yml | 32 ++++++++++++++++----------------
1 file changed, 16 insertions(+), 16 deletions(-)
diff --git a/locales/es-ES.yml b/locales/es-ES.yml
index 0bd874f33..faf9ba282 100644
--- a/locales/es-ES.yml
+++ b/locales/es-ES.yml
@@ -642,7 +642,7 @@ wordMute: "Silenciar palabras"
regexpError: "Error de la expresión regular"
regexpErrorDescription: "Ocurrió un error en la expresión regular en la linea {line}
de las palabras muteadas {tab}"
-instanceMute: "Instancias silenciadas"
+instanceMute: "Servidores silenciados"
userSaysSomething: "{name} dijo algo"
makeActive: "Activar"
display: "Apariencia"
@@ -671,14 +671,14 @@ sample: "Muestra"
abuseReports: "Reportes"
reportAbuse: "Reportar"
reportAbuseOf: "Reportar a {name}"
-fillAbuseReportDescription: "Ingrese los detalles del reporte. Si hay una nota en
- particular, ingrese la URL de esta."
+fillAbuseReportDescription: "Ingrese los detalles del reporte. Si hay una publicación
+ en particular, ingrese la URL de esta."
abuseReported: "Se ha enviado el reporte. Muchas gracias."
reporter: "Reportador"
reporteeOrigin: "Reportar a"
reporterOrigin: "Origen del reporte"
-forwardReport: "Transferir un informe a una instancia remota"
-forwardReportIsAnonymous: "No puede ver su información de la instancia remota y aparecerá
+forwardReport: "Transferir reporte a un servidor remoto"
+forwardReportIsAnonymous: "No puede ver su información del servidor remoto y aparecerá
como una cuenta anónima del sistema"
send: "Enviar"
abuseMarkAsResolved: "Marcar reporte como resuelto"
@@ -686,7 +686,7 @@ openInNewTab: "Abrir en una Nueva Pestaña"
openInSideView: "Abrir en una vista al costado"
defaultNavigationBehaviour: "Navegación por defecto"
editTheseSettingsMayBreakAccount: "Editar estas configuraciones puede dañar su cuenta."
-instanceTicker: "Información de notas de la instancia"
+instanceTicker: "Información de publicaciones de el servidor"
waitingFor: "Esperando a {x}"
random: "Aleatorio"
system: "Sistema"
@@ -697,14 +697,14 @@ createNew: "Crear"
optional: "Opcional"
createNewClip: "Crear clip nuevo"
unclip: "Quitar clip"
-confirmToUnclipAlreadyClippedNote: "Esta nota ya está incluida en el clip \"{name}\"\
- . ¿Quiere quitar la nota del clip?"
+confirmToUnclipAlreadyClippedNote: "Esta publicación ya está incluida en el clip \"\
+ {name}\". ¿Quiere quitar la nota del clip?"
public: "Público"
i18nInfo: "Calckey está siendo traducido a varios idiomas gracias a voluntarios. Se
puede colaborar traduciendo en {link}"
manageAccessTokens: "Administrar tokens de acceso"
accountInfo: "Información de la Cuenta"
-notesCount: "Cantidad de notas"
+notesCount: "Cantidad de publicaciones"
repliesCount: "Cantidad de respuestas hechas"
renotesCount: "Cantidad de renotas hechas"
repliedCount: "Cantidad de respuestas recibidas"
@@ -720,7 +720,7 @@ no: "No"
driveFilesCount: "Cantidad de archivos en el drive"
driveUsage: "Uso del drive"
noCrawle: "Rechazar indexación del crawler"
-noCrawleDescription: "Pedir a los motores de búsqueda que no indexen tu perfil, notas,
+noCrawleDescription: "Pedir a los motores de búsqueda que no indexen tu perfil, publicaciones,
páginas, etc."
lockedAccountInfo: "A menos que configures la visibilidad de tus notas como \"Sólo
seguidores\", tus notas serán visibles para cualquiera, incluso si requieres que
@@ -734,7 +734,7 @@ verificationEmailSent: "Se le ha enviado un correo electrónico de confirmación
configuración."
notSet: "Sin especificar"
emailVerified: "Su dirección de correo electrónico ha sido verificada."
-noteFavoritesCount: "Número de notas favoritas"
+noteFavoritesCount: "Número de publicaciones favoritas"
pageLikesCount: "Número de favoritos en la página"
pageLikedCount: "Número de favoritos de su página"
contact: "Contacto"
@@ -975,7 +975,7 @@ shuffle: "Aleatorio"
account: "Cuentas"
move: "Mover"
_sensitiveMediaDetection:
- description: "Reduce el esfuerzo de la moderación el el servidor a través del reconocimiento
+ description: "Reduce el esfuerzo de la moderación de el servidor a través del reconocimiento
automático de contenido NSFW usando 'Machine Learning'. Esto puede incrementar
ligeramente la carga en el servidor."
sensitivity: "Sensibilidad de detección"
@@ -1295,7 +1295,7 @@ _time:
_tutorial:
title: "Cómo usar Calckey"
step1_1: "¡Bienvenido!"
- step1_2: "Vamos a configurarte. Estarás listo y funcionando en poco tiempo"
+ step1_2: "Vamos a configurarte. ¡Estarás listo y funcionando en poco tiempo!"
step2_1: "En primer lugar, rellena tu perfil"
step2_2: "Proporcionar algo de información sobre quién eres hará que sea más fácil
para los demás saber si quieren ver tus notas o seguirte."
@@ -1789,7 +1789,7 @@ _pages:
splitStrByLine: "Separar texto en lineas"
_splitStrByLine:
arg1: "Texto"
- ref: "Variables"
+ ref: "Variable"
aiScriptVar: "Variable de AiScript"
fn: "funciones"
_fn:
@@ -1800,8 +1800,8 @@ _pages:
_for:
arg1: "Cantidad de repeticiones"
arg2: "Acción"
- typeError: "El slot {slot} acepta el tipo {expect} pero fue ingresado el tipo
- {actual}"
+ typeError: "El slot {slot} acepta el tipo \"{expect}\" pero fue ingresado el tipo
+ \"{actual}\""
thereIsEmptySlot: "El slot {slot} está vacío"
types:
string: "Texto"
From 0978a210cb90cfe01e92afdf1fcb8fe2ec905ebc Mon Sep 17 00:00:00 2001
From: Rauf
Date: Sat, 15 Jul 2023 08:10:17 +0000
Subject: [PATCH 145/162] chore: Translated using Weblate (Turkish)
Currently translated at 100.0% (1831 of 1831 strings)
Translation: Calckey/locales
Translate-URL: https://hosted.weblate.org/projects/calckey/locales/tr/
---
locales/tr-TR.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/locales/tr-TR.yml b/locales/tr-TR.yml
index 8c3c15f33..a3021221d 100644
--- a/locales/tr-TR.yml
+++ b/locales/tr-TR.yml
@@ -660,7 +660,7 @@ driveCapacityPerLocalAccount: Kullanıcı başı Driver kapasitesi
driveCapacityPerRemoteAccount: Uzak kullanıcı başı Driver kapasitesi
inMb: Megabayt cinsinden
pinnedClipId: Sabitlenecek atacın ID'si
-withFiles: Dosyaları içer
+withFiles: Dosya içeren
recentlyRegisteredUsers: Yeni katılmış kullanıcılar
recentlyDiscoveredUsers: Yeni keşfedilmiş kullanıcılar
nUsersMentioned: '{n} kullanıcı tarafından bahsedildi'
@@ -1237,7 +1237,7 @@ objectStorageRegion: Region
invisibleNote: Gizli Gönderi
deletedNote: Silinmiş Gönderi
visibility: Görünürlük
-poll: Oylama
+poll: Anket
themeEditor: Tema düzenleyicisi
enterFileDescription: Başlık gir
description: Açıklama
From 21e8f5bf234b6394ce19514c1f0c86f8e80a0040 Mon Sep 17 00:00:00 2001
From: Xalis Ratt
Date: Sat, 15 Jul 2023 17:32:11 +0000
Subject: [PATCH 146/162] chore: Translated using Weblate (Ukrainian)
Currently translated at 100.0% (1831 of 1831 strings)
Translation: Calckey/locales
Translate-URL: https://hosted.weblate.org/projects/calckey/locales/uk/
---
locales/uk-UA.yml | 688 ++++++++++++++++++++++++++++++++++++++++------
1 file changed, 598 insertions(+), 90 deletions(-)
diff --git a/locales/uk-UA.yml b/locales/uk-UA.yml
index 4df6dd212..78aaf2bbd 100644
--- a/locales/uk-UA.yml
+++ b/locales/uk-UA.yml
@@ -153,10 +153,11 @@ flagAsBotDescription: "Ввімкніть якщо цей обліковий з
Ця опція позначить обліковий запис як бота. Це потрібно щоб виключити безкінечну
інтеракцію між ботами а також відповідного підлаштування Calckey."
flagAsCat: "Акаунт кота"
-flagAsCatDescription: "Ввімкніть, щоб позначити, що обліковий запис є котиком."
+flagAsCatDescription: "Ввімкніть, щоб позначити, що обліковий запис є котиком, та
+ отримати котячі вуха!"
flagShowTimelineReplies: "Показувати відповіді на нотатки на часовій шкалі"
-flagShowTimelineRepliesDescription: "Показує відповіді користувачів на нотатки інших
- користувачів на часовій шкалі."
+flagShowTimelineRepliesDescription: "Показує відповіді користувачів на записи інших
+ користувачів у стрічці."
autoAcceptFollowed: "Автоматично приймати запити на підписку від користувачів, на
яких ви підписані"
addAccount: "Додати акаунт"
@@ -169,7 +170,7 @@ removeWallpaper: "Прибрати шпалери"
searchWith: "Пошук: {q}"
youHaveNoLists: "У вас немає списків"
followConfirm: "Підписатися на {name}?"
-proxyAccount: "Проксі-акаунт"
+proxyAccount: "Обліковий запис проксі"
proxyAccountDescription: "Обліковий запис проксі – це обліковий запис, який діє як
віддалений підписник для користувачів за певних умов. Наприклад, коли користувач
додає віддаленого користувача до списку, активність віддаленого користувача не буде
@@ -217,7 +218,7 @@ blockedUsers: "Заблоковані користувачі"
noUsers: "Немає користувачів"
editProfile: "Редагувати обліковий запис"
noteDeleteConfirm: "Ви дійсно хочете видалити цей запис?"
-pinLimitExceeded: "Більше записів не можна закріпити"
+pinLimitExceeded: "Ви не можете закріпити більше записів"
intro: "Встановлення Calckey завершено! Будь ласка, створіть обліковий запис адміністратора."
done: "Готово"
processing: "Обробка"
@@ -232,7 +233,7 @@ all: "Всі"
subscribing: "Підписка"
publishing: "Публікація"
notResponding: "Не відповідає"
-instanceFollowing: "Підписка на інстанс"
+instanceFollowing: "Підписка на сервер"
instanceFollowers: "Підписники серверу"
instanceUsers: "Користувачі цього серверу"
changePassword: "Змінити пароль"
@@ -359,7 +360,7 @@ pinnedUsersDescription: "Впишіть в список користувачів
\"Знайти\", ім'я в стовпчик."
pinnedPages: "Закріплені сторінки"
pinnedPagesDescription: "Введіть шляхи сторінок, які ви бажаєте закріпити на головній
- сторінці цього інстанса, розділені новими рядками."
+ сторінці цього сервера, розділені новими рядками."
pinnedClipId: "Ідентифікатор закріпленої замітки"
pinnedNotes: "Закріплений запис"
hcaptcha: "hCaptcha"
@@ -506,12 +507,14 @@ promote: "Виділити"
numberOfDays: "Кількість днів"
hideThisNote: "Сховати цей запис"
showFeaturedNotesInTimeline: "Показувати популярні записи у стрічці"
-objectStorage: "Object Storage"
+objectStorage: "Сховище"
useObjectStorage: "Використовувати object storage"
-objectStorageBaseUrl: "Base URL"
-objectStorageBaseUrlDesc: "Це початкова частина адреси, що використовується CDN або
- проксі, наприклад для S3: https://.s3.amazonaws.com, або GCS: 'https://storage.googleapis.com/'"
-objectStorageBucket: "Bucket"
+objectStorageBaseUrl: "Базовий URL"
+objectStorageBaseUrlDesc: "URL-адреса, що використовується як джерело. Вкажіть URL-адресу
+ вашого CDN або проксі-сервера, якщо ви їх використовуєте.\nДля S3 використовуйте
+ 'https://.s3.amazonaws.com', а для GCS або подібних сервісів - 'https://storage.googleapis.com/',
+ тощо."
+objectStorageBucket: "Сховище (Bucket)"
objectStorageBucketDesc: "Будь ласка вкажіть назву відра в налаштованому сервісі."
objectStoragePrefix: "Prefix"
objectStoragePrefixDesc: "Файли будуть зберігатись у розташуванні з цим префіксом."
@@ -665,11 +668,11 @@ reportAbuse: "Поскаржитись"
reportAbuseOf: "Поскаржитись на {name}"
fillAbuseReportDescription: "Будь ласка вкажіть подробиці скарги. Якщо скарга стосується
запису, вкажіть посилання на нього."
-abuseReported: "Дякуємо, вашу скаргу було відправлено. "
+abuseReported: "Дякуємо. Ваш звіт було відправлено."
reporter: "Репортер"
reporteeOrigin: "Про кого повідомлено"
reporterOrigin: "Хто повідомив"
-forwardReport: "Переслати звіт на віддалений інстанс"
+forwardReport: "Переслати звіт на віддалений сервер"
forwardReportIsAnonymous: "Замість вашого облікового запису, анонімний системний обліковий
запис буде відображатися як доповідач на віддаленому сервері."
send: "Відправити"
@@ -679,16 +682,16 @@ openInSideView: "Відкрити збоку"
defaultNavigationBehaviour: "Поведінка навігації за замовчуванням"
editTheseSettingsMayBreakAccount: "Зміна цих параметрів може призвести до пошкодження
вашого акаунта."
-instanceTicker: "Мітка з назвою інстанса в нотатках"
+instanceTicker: "Інформація про записи на сервері"
waitingFor: "Чекаємо на {x}"
random: "Випадковий"
system: "Система"
switchUi: "Інтерфейс"
desktop: "Десктоп"
-clip: "Добірка"
+clip: "Підбірка"
createNew: "Створити новий"
optional: "Необов'язково"
-createNewClip: "Створити нотатку"
+createNewClip: "Створити підбірку"
public: "Публічний"
i18nInfo: "Calckey перекладається на різні мови волонтерами. Ви можете допомогти за
посиланням: {link}."
@@ -793,24 +796,33 @@ hide: "Сховати"
searchByGoogle: "Пошук"
indefinitely: "Ніколи"
file: "Файли"
-reverse: "Перевернути"
+reverse: "Переворот"
colored: "Кольоровий"
label: "Назва"
localOnly: "Локально"
_ffVisibility:
public: "Опублікувати"
+ private: Приватні
+ followers: Доступно тільки для підписників
_ad:
back: "Назад"
+ reduceFrequencyOfThisAd: Менше показувати цю рекламу
_gallery:
unlike: "Не вподобати"
+ liked: Вподобані записи
+ like: Подобається
+ my: Моя галерея
_email:
_follow:
title: "Новий підписник"
+ _receiveFollowRequest:
+ title: Ви отримали запит на підписку
_registry:
key: "Ключ"
keys: "Ключі"
domain: "Домен"
createKey: "Створити ключ"
+ scope: Область
_aboutMisskey:
about: "Misskey - це програмне забезпечення з відкритим кодом, яке розробляє syuilo
з 2014 року."
@@ -822,12 +834,20 @@ _aboutMisskey:
morePatrons: "Ми дуже цінуємо підтримку багатьох інших помічників, не перелічених
тут. Дякуємо! 🥰"
patrons: "Підтримали"
+ patronsList: Перераховані в хронологічному порядку, а не за розміром пожертви. Зробіть
+ внесок за посиланням вище, щоб ваше ім'я було тут!
+ donateTitle: Сподобався Calckey?
+ pleaseDonateToCalckey: Будь ласка, підтримайте розробку Calckey.
+ pleaseDonateToHost: Також не забудьте підтримати ваш домашній сервер {host}, щоб
+ допомогти з його операційними витратами.
+ donateHost: Зробити внесок на рахунок {host}
+ sponsors: Спонсори Calckey
_nsfw:
respect: "Приховувати NSFW медіа"
ignore: "Не приховувати NSFW медіа"
force: "Приховувати всі медіа файли"
_mfm:
- cheatSheet: " Довідка MFM"
+ cheatSheet: "Довідка MFM"
intro: "MFM це ексклюзивна мова розмітки тексту в Calckey, яку можна використовувати
в багатьох місцях. Тут ви можете переглянути приклади її синтаксису."
dummy: "Calckey розширює світ Федіверсу"
@@ -839,35 +859,36 @@ _mfm:
url: "URL"
urlDescription: "Відображаються URL-адреси."
link: "Посилання"
- linkDescription: "Окремі частини тексту можуть містити посилання"
+ linkDescription: "Окремі частини тексту можуть містити посилання."
bold: "Жирний шрифт"
- boldDescription: "Виділяє літери, роблячи їх товще"
+ boldDescription: "Виділяє літери, роблячи їх товщими."
small: "Дрібний шрифт"
- smallDescription: "Робить текст маленьким і тонким"
+ smallDescription: "Робить текст маленьким і тонким."
center: "По центру"
- centerDescription: "Показує вміст у центрі"
+ centerDescription: "Показує вміст у центрі."
inlineCode: "Код (у рядку)"
- inlineCodeDescription: "Показує фрагмент тексту у рядку як програмний код"
+ inlineCodeDescription: "Відображає підсвічування синтаксису для коду (програми)."
blockCode: "Код (блок)"
- blockCodeDescription: "Показує кілька рядків тексту як блок програмного кода"
+ blockCodeDescription: "Відображає підсвічування синтаксису для багаторядкового (програмного)
+ коду в блоці."
inlineMath: "Формула (у рядку)"
inlineMathDescription: "Відображення математичних формул (KaTeX) у рядку"
blockMath: "Формули (блок)"
- blockMathDescription: "Відображати багаторядкові формули (KaTeX) блоками"
+ blockMathDescription: "Відображати математичні формули (KaTeX) блоками"
quote: "Цитата"
quoteDescription: "Відображає зміст як цитату."
emoji: "Кастомні емоджі"
emojiDescription: "Щоб показати нетиповий емоджі, потрібно ввести його назву в двокрапках."
search: "Пошук"
- searchDescription: "Відображає вікно пошуку з попередньо введеним текстом"
+ searchDescription: "Відображає вікно пошуку з попередньо введеним текстом."
flip: "Перевернути"
- flipDescription: "Віддзеркалює вміст по горизонталі або вертикалі"
+ flipDescription: "Віддзеркалює вміст по горизонталі або вертикалі."
jelly: "Анімація (желе)"
- jellyDescription: "Створює желеподібну анімацію"
+ jellyDescription: "Створює желеподібну анімацію."
tada: "Анімація (Тада!)"
- tadaDescription: "Створює анімацію з відчуттям \"Тада!\""
+ tadaDescription: "Створює анімацію з відчуттям \"Тада!\"."
jump: "Анімація (стрибки)"
- jumpDescription: "Показує стрибаючу анімацію"
+ jumpDescription: "Надає вмісту стрибучу анімацію."
bounce: "Анімація (пружина)"
shake: "Анімація (Shake)"
twitch: "Анімація (Twitch)"
@@ -884,6 +905,36 @@ _mfm:
font: "Шрифт"
fontDescription: "Встановлює шрифт для контенту."
rotate: "Обертати"
+ play: Відтворити MFM
+ alwaysPlay: Завжди автозапускати всі анімовані MFM
+ twitchDescription: Надає контенту анімацію, що сильно сіпається.
+ spinDescription: Надає контенту анімацію обертання.
+ sparkle: Блиск
+ sparkleDescription: Надає вмісту ефект мерехтливого блиску.
+ fade: Згасання
+ fadeDescription: Зменшує та збільшує видимість контенту.
+ crop: Обрізати
+ cropDescription: Обрізати вміст.
+ scale: Масштабувати
+ positionDescription: Перемістити вміст на вказане значення.
+ scaleDescription: Масштабувати вміст на вказану величину.
+ background: Фоновий колір
+ foreground: Колір переднього плану
+ foregroundDescription: Змінити колір тексту на передньому плані.
+ bounceDescription: Надає контенту пружної анімації.
+ shakeDescription: Надає контенту тремтливої анімації.
+ rainbowDescription: Робить вміст веселковим.
+ rotateDescription: Повертає вміст на вказаний кут.
+ advancedDescription: Якщо вимкнено, дозволяє лише базову розмітку, якщо не відтворюється
+ анімований MFM
+ plainDescription: Вимикає ефекти всіх MFM, що містяться в цьому MFM-ефекті.
+ stop: Зупинити MFM
+ plain: Звичайний текст
+ advanced: Розширені MFM
+ warn: MFM може містити швидко-рухому або яскраву анімацію
+ position: Розташування
+ rainbow: Веселка
+ backgroundDescription: Змінити колір фону тексту.
_instanceTicker:
none: "Не відображати"
remote: "Відображати для віддалених користувачів"
@@ -892,6 +943,7 @@ _serverDisconnectedBehavior:
reload: "Автоматично перезавантажити"
dialog: "Показати діалогове вікно"
quiet: "Показати ненав’язливе попередження"
+ nothing: Нічого не робити
_channel:
create: "Створити канал"
edit: "Редагувати канал"
@@ -900,22 +952,27 @@ _channel:
featured: "Тренди"
following: "Підписки"
usersCount: "{n} учасників"
- notesCount: "{n} дописів"
+ notesCount: "{n} записів"
+ nameOnly: Тільки назва
+ nameAndDescription: Назва та опис
+ owned: Власні
_menuDisplay:
hide: "Сховати"
+ sideFull: Збоку
+ sideIcon: Збоку (тільки іконки)
+ top: Верх
_wordMute:
muteWords: "Заглушені слова"
- muteWordsDescription: "Розділення ключових слів пробілами для \"І\" або з нової
- лінійки для \"АБО\""
+ muteWordsDescription: "Відокремліть ключові слова пробілами для умови \"І\" або
+ з нового рядку для умови \"АБО\"."
muteWordsDescription2: "Для використання RegEx, ключові слова потрібно вписати поміж
слешів \"/\"."
- softDescription: "Приховати записи які відповідають критеріям зі стрічки подій."
+ softDescription: "Приховати записи які відповідають критеріям зі стрічки."
hardDescription: "Приховати записи які відповідають критеріям зі стрічки подій.
- Також приховані записи не будуть додані до стрічки подій навіть якщо критерії
- буде змінено."
+ Також приховані записи не будуть додані до стрічки навіть якщо критерії буде змінено."
soft: "М'яко"
hard: "Жорстко"
- mutedNotes: "Заблоковані нотатки"
+ mutedNotes: "Ігноровані записи"
_theme:
explore: "Оглянути теми"
install: "Встановити тему"
@@ -979,9 +1036,20 @@ _theme:
accentDarken: "Акцент (Затемлений)"
accentLighten: "Акцент (Освітлений)"
fgHighlighted: "Виділений текст"
+ color: Колір
+ refProp: Посилання на властивість
+ alpha: Прозорість
+ constant: Стала
+ refConst: Посилання на сталу
+ key: Ключ
+ funcKind: Тип функції
+ darken: Затемнення
+ argument: Аргумент
+ basedProp: Початкова властивість
+ addConstant: Додати сталу
_sfx:
- note: "Нотатки"
- noteMy: "Мої нотатки"
+ note: "Новий запис"
+ noteMy: "Мої записи"
notification: "Сповіщення"
chat: "Чати"
chatBg: "Чати (фон)"
@@ -991,7 +1059,7 @@ _ago:
future: "Майбутнє"
justNow: "Щойно"
secondsAgo: "{n}с тому"
- minutesAgo: "{n}х тому"
+ minutesAgo: "{n}хв тому"
hoursAgo: "{n}г тому"
daysAgo: "{n}д тому"
weeksAgo: "{n} тиж. тому"
@@ -1006,36 +1074,66 @@ _tutorial:
title: "Як використовувати Calckey"
step1_1: "Ласкаво просимо!"
step1_2: "Давайте налаштуємо вас. Ви будете працювати в найкоротші терміни!"
- step2_1: "Спочатку, будь ласка, заповніть свій профіль"
- step2_2: "Надавши деяку інформацію про себе, іншим людям буде легше зрозуміти, чи
+ step2_1: "Спочатку, будь ласка, заповніть свій профіль."
+ step2_2: "Після надання інформації про себе, іншим людям буде легше зрозуміти, чи
хочуть вони бачити ваші записи або стежити за вами."
- step3_1: "Тепер настав час стежити за деякими людьми!"
+ step3_1: "Тепер настав час на когось підписатися!"
step3_2: "Ваша домашня і соціальна стрічки ґрунтуються на тому, за ким ви стежите,
тому для початку спробуйте стежити за кількома акаунтами.\nНатисніть на гурток
із плюсом у правому верхньому кутку профілю, щоб стежити за ним."
- step4_1: "Давайте вийдемо на вас"
+ step4_1: "Давайте вийдемо на вас."
step4_2: "Для свого першого повідомлення деякі люди люблять робити {introduction}
повідомлення або просте \"Hello world!\""
- step5_1: "Тимчасові рамки, скрізь тимчасові рамки!"
- step5_2: "У вашому екземплярі включені {timelines} різних часових ліній."
- step5_3: "Головна {icon} часова шкала - це шкала, де ви можете бачити повідомлення
- ваших підписників."
- step5_4: "Місцева {icon} тимчасова шкала - це шкала, де ви можете бачити повідомлення
- всіх інших користувачів даного екземпляра"
- step5_5: "Тимчасова шкала Рекомендовані {icon} - це шкала, де ви можете бачити повідомлення
- від інстанцій, рекомендованих адміністраторами."
- step5_6: "На часовій шкалі Social {icon} відображаються повідомлення від друзів
- ваших підписників"
- step5_7: "Глобальна {icon} часова шкала - це місце, де ви можете бачити повідомлення
- від усіх інших підключених екземплярів"
+ step5_1: "Стрічки, скрізь одні стрічки!"
+ step5_2: "У вашому сервері включені {timelines} різні стрічки."
+ step5_3: "Головна {icon} стрічка - це стрічка, де ви можете бачити записи тих, на
+ кого ви підписалися."
+ step5_4: "Місцева {icon} стрічка - це стрічка, де ви можете бачити записи всіх інших
+ користувачів даного серверу."
+ step5_5: "Стрічка рекомендованих {icon} - це комбінація домашньої та місцевої стрічок."
+ step5_6: "На стрічці Рекомендованих {icon} ви можете бачити записи з серверів, які
+ рекомендують адміністратори."
+ step5_7: "Глобальна {icon} стрічка - це місце, де ви можете бачити записи від усіх
+ інших приєднаних серверів."
step6_1: "Отже, що це за місце?"
- step6_2: "Ну, ви не просто приєдналися до Кальки. Ви приєдналися до порталу в Fediverse,
- взаємопов'язаної мережі з тисяч серверів, званих \"інстансами\"."
+ step6_2: "Ну, ви не просто приєдналися до Calckey. Ви увійшли в Fediverse, взаємопов'язану
+ мережу з тисяч серверів."
step6_3: "Кожен сервер працює по-своєму, і не на всіх серверах працює Calckey. Але
- цей працює! Це трохи складно, але ви швидко розберетеся"
+ цей працює! Це трохи складно, але ви швидко розберетеся."
step6_4: "Тепер ідіть, вивчайте і розважайтеся!"
_2fa:
registerSecurityKey: "Зареєструвати новий ключ безпеки"
+ registerTOTP: Зареєструйте новий пристрій
+ tapSecurityKey: Будь ласка, дотримуйтесь інструкцій вашого браузера, щоб зареєструвати
+ апаратний ключ безпеки або ключ-пароль
+ securityKeyName: Введіть назву ключа
+ chromePasskeyNotSupported: Паролі Chrome наразі не підтримуються.
+ renewTOTPOk: Переналаштувати
+ removeKey: Видалити ключ безпеки
+ alreadyRegistered: 2FA вже налаштовано.
+ step2Click: Натиснувши на цей QR-код, ви зможете зареєструвати 2FA у вашому ключі
+ безпеки або додатку-автентифікаторі для телефону.
+ step3Title: Введіть код автентифікації
+ step1: По-перше, встановіть програму 2FA (наприклад, {a} або {b}) на свій пристрій.
+ securityKeyNotSupported: Ваш браузер не підтримує ключі безпеки.
+ step4: Відтепер при наступних спробах входу в систему буде запитуватися такий токен.
+ securityKeyInfo: Окрім автентифікації за відбитком пальця або PIN-кодом, ви також
+ можете налаштувати автентифікацію за допомогою апаратних ключів безпеки, які підтримують
+ FIDO2, щоб додатково захистити свій обліковий запис.
+ removeKeyConfirm: Дійсно видалити ключ {name}?
+ whyTOTPOnlyRenew: Додаток автентифікатора не можна видалити, доки зареєстровано
+ ключ безпеки.
+ renewTOTP: Переналаштувати додаток-автентифікатор
+ renewTOTPCancel: Скасувати
+ renewTOTPConfirm: Це призведе до того, що коди підтвердження з попереднього додатку
+ перестануть працювати
+ token: 2FA Токен
+ registerTOTPBeforeKey: Будь ласка, налаштуйте додаток-автентифікатор, щоб зареєструвати
+ ключ безпеки або пароль.
+ step2Url: 'Також, ви можете ввести цю URL-адресу, якщо використовуєте десктопну
+ програму:'
+ step3: Введіть токен, наданий вашим додатком, щоб завершити налаштування.
+ step2: Потім відскануйте QR-код, що відображається на цьому екрані.
_permissions:
"read:account": "Переглядати дані профілю"
"write:account": "Змінити дані акаунту"
@@ -1051,7 +1149,7 @@ _permissions:
"write:messaging": "Створювати та видаляти повідомлення"
"read:mutes": "Переглядати список ігнорованих"
"write:mutes": "Змінювати список ігнорованих"
- "write:notes": "Писати і видаляти нотатки"
+ "write:notes": "Створення та видалення записів"
"read:notifications": "Переглядати сповіщення"
"read:reactions": "Переглядати реакції"
"write:reactions": "Змінювати реакції"
@@ -1064,13 +1162,27 @@ _permissions:
"write:user-groups": "Змінювати групи користувача"
"read:channels": "Переглядати канали"
"write:channels": "Змінювати канали"
+ "read:gallery": Переглянути галерею
+ "write:gallery": Редагування галереї
+ "read:gallery-likes": Переглянути список вподобаних записів галереї
+ "write:notifications": Керування сповіщеннями
+ "write:gallery-likes": Редагувати список вподобаних записів галереї
_auth:
shareAccess: "Ви хочете надати \"{name}\" доступ до цього акаунту?"
shareAccessAsk: "Ви впевнені, що хочете надати цій програмі доступ до вашого акаунту?"
denied: "У доступі відмовлено"
+ allPermissions: Повний доступ до облікового запису
+ permissionAsk: 'Цей додаток запитує наступні дозволи:'
+ copyAsk: 'Будь ласка, вставте наступний код авторизації в додаток:'
+ pleaseGoBack: Будь ласка, поверніться до додатку
+ callback: Повернення до додатку
_antennaSources:
- all: "Всі нотатки"
- homeTimeline: "Нотатки тих, на кого ви підписані"
+ all: "Усі записи"
+ homeTimeline: "Записи тих, на кого ви підписані"
+ instances: Записи від усіх користувачів на сервері
+ userGroup: Записи від користувачів у вказаній групі
+ users: Записи обраних користувачів
+ userList: Дописи користувачів із вказаного списку
_weekday:
sunday: "Неділя"
monday: "Понеділок"
@@ -1091,20 +1203,30 @@ _widgets:
photos: "Фото"
digitalClock: "Цифровий годинник"
federation: "Федіверс"
- postForm: "Створення нотатки"
+ postForm: "Створення запису"
slideshow: "Слайд-шоу"
button: "Кнопка"
onlineUsers: "Користувачі онлайн"
jobQueue: "Черга завдань"
- serverMetric: "Показники сервера "
+ serverMetric: "Показники сервера"
aiscript: "Консоль AiScript"
+ _userList:
+ chooseList: Оберіть список
+ meiliStatus: Стан сервера
+ meiliSize: Розмір індексу
+ rssTicker: RSS-тікер
+ instanceCloud: Хмара серверів
+ unixClock: Годинник UNIX
+ userList: Список користувачів
+ serverInfo: Інформація про сервер
+ meiliIndexCount: Індексовані записи
_cw:
hide: "Сховати"
show: "Показати більше"
chars: "{count} символів"
files: "{count} файлів"
_poll:
- noOnlyOneChoice: "Потрібні принаймні два варіанти."
+ noOnlyOneChoice: "Потрібні принаймні два варіанти"
choiceN: "Варіант {n}"
noMore: "Більше варіантів додати не можна"
canMultipleVote: "Можна вибрати кілька варіантів"
@@ -1127,19 +1249,19 @@ _poll:
remainingSeconds: "Залишилось {s} секунд"
_visibility:
public: "Публічний"
- publicDescription: "Для всіх користувачів"
- home: "Домівка"
+ publicDescription: "Ваш запис буде видно в усіх публічних стрічках"
+ home: "Скритий"
homeDescription: "Лише на домашній стрічці"
followers: "Підписники"
- followersDescription: "Тільки для підписників"
+ followersDescription: "Зробити видимим тільки для ваших підписників і згаданих користувачів"
specified: "Особисто"
specifiedDescription: "Лише для певних користувачів"
localOnly: "Локально"
localOnlyDescription: "Приховано для віддалених користувачів"
_postForm:
- replyPlaceholder: "Відповідь на цю нотатку..."
- quotePlaceholder: "Прокоментуйте цю нотатку..."
- channelPlaceholder: "Опублікувати в каналі"
+ replyPlaceholder: "Відповідь на цей запис..."
+ quotePlaceholder: "Прокоментуйте цей запис..."
+ channelPlaceholder: "Опублікувати в каналі..."
_placeholders:
a: "Чим займаєтесь?"
b: "Що відбувається навколо вас?"
@@ -1160,46 +1282,59 @@ _profile:
metadataContent: "Вміст"
changeAvatar: "Змінити аватар"
changeBanner: "Змінити банер"
+ locationDescription: Якщо ви спочатку введете своє місто, іншим користувачам буде
+ показано ваш місцевий час.
_exportOrImport:
- allNotes: "Всі нотатки"
+ allNotes: "Всі записи"
followingList: "Підписки"
muteList: "Ігнорувати"
blockingList: "Заблокувати"
userLists: "Списки"
+ excludeInactiveUsers: Вилучити неактивних користувачів
+ excludeMutingUsers: Вилучити заглушених користувачів
_charts:
federation: "Федіверс"
apRequest: "Запити"
usersTotal: "Загальна кількість користувачів"
activeUsers: "Активні користувачі"
- notesTotal: "Загальна кількість нотаток"
+ notesTotal: "Загальна кількість записів"
filesIncDec: "Зміни кількості файлів"
filesTotal: "Загальна кількість файлів"
+ storageUsageIncDec: Різниця в використанні ємності диску
+ remoteNotesIncDec: Різниця в кількості віддалених записів
+ notesIncDec: Різниця в кількості записів
+ localNotesIncDec: Різниця в кількості локальних записів
+ storageUsageTotal: Загальне використання пам'яті
+ usersIncDec: Різниця в кількості користувачів
_instanceCharts:
requests: "Запити"
usersTotal: "Сумарна кількість користувачів"
- notes: "Різниця кількості зроблених записів"
- notesTotal: "Сумарна кількість нотаток"
- ff: "Різниця кількості підписників"
+ notes: "Різниця в кількості зроблених записів"
+ notesTotal: "Сумарна кількість записів"
+ ff: "Різниця кількості підписників "
ffTotal: "Кількість підписників"
cacheSizeTotal: "Сумарний розмір кешу"
files: "Різниця в кількості файлів"
filesTotal: "Сумарна кількість файлів"
+ users: Різниця в кількості користувачів
+ cacheSize: Різниця в розмірі кешу
_timelines:
home: "Домівка"
local: "Локальна"
social: "Соціальна"
global: "Глобальна"
+ recommended: Рекомендована
_pages:
newPage: "Створити сторінку"
editPage: "Редагувати сторінку"
readPage: "Перегляд вихідного коду"
- created: "Сторінка успішно створена."
- updated: "Сторінка успішно оновлена."
+ created: "Сторінка успішно створена"
+ updated: "Сторінка успішно оновлена"
deleted: "Сторінку видалено"
pageSetting: "Налаштування сторінки"
- nameAlreadyExists: "Вказана адреса сторінки вже існує."
- invalidNameTitle: "Вказана адреса сторінки неприпустима."
- invalidNameText: "Переконайтеся, що не залишили порожнім."
+ nameAlreadyExists: "Вказана адреса сторінки вже існує"
+ invalidNameTitle: "Вказана адреса сторінки неприпустима"
+ invalidNameText: "Переконайтеся, що поле заголовка сторінки не порожнє"
editThisPage: "Редагувати цю сторінку"
viewSource: "Переглянути вихідний код"
viewPage: "Переглянути свої сторінки"
@@ -1242,6 +1377,7 @@ _pages:
_post:
text: "Вміст"
canvasId: "Ідентифікатор полотна"
+ attachCanvasImage: Прикріпити зображення полотна
textInput: "Введення тексту"
_textInput:
name: "Ім'я змінної"
@@ -1262,10 +1398,10 @@ _pages:
id: "Ідентифікатор полотна"
width: "Ширина"
height: "Висота"
- note: "Вбудована нотатка"
+ note: "Вбудований запис"
_note:
- id: "Ідентифікатор нотатки"
- idDescription: "Також можна вказати посилання на нотатку"
+ id: "Ідентифікатор запису"
+ idDescription: "Також можна вказати посилання на запис."
detailed: "Детальний вигляд"
switch: "Перемикач"
_switch:
@@ -1456,7 +1592,7 @@ _pages:
arg1: "Текст"
ref: "Змінні"
aiScriptVar: "Змінна AiScript"
- fn: "Функції"
+ fn: "Функція"
_fn:
slots: "Паз"
slots-info: "Використовувати нову лінію як роздільник пазів"
@@ -1508,9 +1644,16 @@ _notification:
followRequestAccepted: "Прийняті підписки"
groupInvited: "Запрошення до груп"
app: "Сповіщення від додатків"
+ pollEnded: Опитування закінчено
_actions:
reply: "Відповісти"
- renote: "Поширити"
+ renote: "Поширення"
+ followBack: також підписався на вас
+ emptyPushNotificationMessage: Push-сповіщення були оновлені
+ voted: проголосував на вашому опитуванні
+ renoted: поширив ваш запис
+ reacted: відреагував на ваш запис
+ pollEnded: Стали доступні результати опитування
_deck:
alwaysShowMainColumn: "Завжди показувати головну колонку"
columnAlign: "Вирівняти стовпці"
@@ -1521,16 +1664,27 @@ _deck:
swapDown: "Пересунути вниз"
stackLeft: "У стовпчик вліво"
popRight: "Витягнути вправо"
- profile: "Обліковий запис"
+ profile: "Простір"
_columns:
main: "Головна"
widgets: "Віджети"
notifications: "Сповіщення"
tl: "Стрічка"
- antenna: "Антени"
+ antenna: "Антена"
list: "Списки"
mentions: "Згадки"
- direct: "Особисте"
+ direct: "Особисті повідомлення"
+ channel: Канал
+ newProfile: Новий простір
+ introduction2: Натисніть на + у правій частині екрана, щоб додавати нові стовпці
+ по бажанню.
+ configureColumn: Налаштування стовпців
+ introduction: Створіть ідеальний інтерфейс для себе, вільно розташовуючи стовпці!
+ widgetsIntroduction: Будь ласка, виберіть "Редагувати віджети" в меню колонки і
+ додайте віджет.
+ renameProfile: Перейменувати простір
+ deleteProfile: Видалити простір
+ nameAlreadyExists: Простір із такою назвою вже існує.
removeReaction: Видалити вашу реакцію
renoteMute: Ігнорувати поширення
renoteUnmute: Показувати поширення
@@ -1623,3 +1777,357 @@ usernameInfo: Ім'я, яке ідентифікує ваш обліковий
Ім'я користувача не може бути змінено пізніше.
noThankYou: Ні, дякую
keepCw: Зберігати попередження про вміст
+showEmojisInReactionNotifications: Показувати емодзі у сповіщеннях про реакції
+accountMoved: 'Користувач переїхав до нового облікового запису:'
+expandOnNoteClickDesc: Якщо цю опцію вимкнено, ви все одно зможете відкривати дописи
+ в меню, клацнувши правою кнопкою миші або натиснувши на мітку часу.
+deleteAccountConfirm: Це призведе до незворотного видалення вашого облікового запису.
+ Приступити?
+unread: Непрочитане
+filter: Фільтри
+useDrawerReactionPickerForMobile: Відображати вибирач реакцій як шухляду на мобільному
+ телефоні
+leaveGroupConfirm: Ви впевнені, що хочете залишити "{name}"?
+clickToFinishEmailVerification: Будь ласка, натисніть [{ok}], щоб завершити перевірку
+ електронної пошти.
+welcomeBackWithName: Ласкаво просимо назад, {name}
+overridedDeviceKind: Тип пристрою
+themeColor: Колір теми серверу
+oneDay: Один день
+instanceDefaultLightTheme: Світла тема за замовчуванням для сервера
+oneWeek: Одна неділя
+instanceDefaultDarkTheme: Темна тема за замовчуванням для сервера
+video: Відео
+audio: Аудіо
+rateLimitExceeded: Перевищено ліміт
+numberOfPageCacheDescription: Збільшення цієї величини покращить зручність для користувачів,
+ але призведе до збільшення навантаження на сервер та використання більшої кількості
+ пам'яті.
+lastActiveDate: Останній раз використовувався у
+statusbar: Панель статусу
+speed: Швидкість
+sensitiveMediaDetection: Виявлення NSFW медіа
+cannotUploadBecauseNoFreeSpace: Завантаження не вдалося через брак місця на Диску.
+cannotUploadBecauseExceedsFileSizeLimit: Цей файл не може бути завантажений, оскільки
+ він перевищує максимально дозволений розмір.
+account: Обліковий запис
+move: Перемістити
+pushNotification: Push-сповіщення
+subscribePushNotification: Увімкнути push-сповіщення
+unsubscribePushNotification: Вимкнути push-сповіщення
+pushNotificationAlreadySubscribed: Push-сповіщення вже увімкнено
+enterSendsMessage: Натисніть Enter у повідомленнях, щоб надіслати повідомлення (якщо
+ вимкнено, то Ctrl + Enter)
+showAds: Показувати рекламу
+customMOTD: Користувацькі MOTD (повідомлення на заставці)
+customSplashIcons: Користувацькі іконки заставки (URL)
+splash: Заставка
+adminCustomCssWarn: Цей параметр слід використовувати, тільки якщо ви знаєте, що він
+ робить. Введення неправильних значень може призвести до того, що ВСІ клієнти перестануть
+ нормально працювати. Будь ласка, переконайтеся, що ваш CSS працює належним чином,
+ протестувавши його в налаштуваннях користувача.
+_filters:
+ followersOnly: Тільки підписники
+ fromUser: Від користувача
+ notesBefore: Записи до
+ withFile: З файлом
+ fromDomain: З домену
+ notesAfter: Записи після
+ followingOnly: Тільки підписки
+sendModMail: Надіслати повідомлення про модерацію
+enableServerMachineStats: Увімкнути статистику серверного обладнання
+enableIdenticonGeneration: Увімкнути генерацію Identicon
+_sensitiveMediaDetection:
+ analyzeVideosDescription: Аналізує відео так само як і зображення. Це трохи збільшить
+ навантаження на сервер.
+ description: Зменшує навантаження на серверну модерацію завдяки автоматичному розпізнаванню
+ NSFW медіа за допомогою машинного навчання. Це трохи збільшить навантаження на
+ сервер.
+ sensitivity: Чутливість виявлення
+ sensitivityDescription: Зменшення чутливості призведе до зменшення кількості хибних
+ спрацьовувань, тоді як збільшення чутливості призведе до зменшення кількості пропущених
+ спрацьовувань.
+ setSensitiveFlagAutomatically: Позначити як NSFW
+ setSensitiveFlagAutomaticallyDescription: Результати внутрішнього виявлення будуть
+ збережені, навіть якщо цю опцію вимкнено.
+ analyzeVideos: Ввімкнути аналіз відео
+_emailUnavailable:
+ used: Ця електронна пошта вже використовується
+ format: Формат цієї адреси електронної пошти є неправильним
+ mx: Цей сервер електронної пошти є недійсним
+ disposable: Використовувати одноразові адреси електронної пошти заборонено
+ smtp: Цей поштовий сервер не відповідає
+_messaging:
+ dms: Приватні
+ groups: Групи
+_instanceMute:
+ instanceMuteDescription: Це приховає всі записи/поширення із вказаних серверів,
+ включно з відповідями користувачам заглушеного серверу.
+ title: Приховує записи з перелічених серверів.
+ instanceMuteDescription2: Розділити новими рядками
+ heading: Список серверів для заглушення
+_experiments:
+ enablePostImports: Ввімкнути імпорт записів
+ title: Експерименти
+ postImportsCaption: Дозволяє користувачам імпортувати свої публікації з минулих
+ облікових записів Calckey, Misskey, Mastodon, Akkoma і Pleroma. Це може спричинити
+ зниження швидкості під час завантаження, якщо ваша черга перевантажена.
+_dialog:
+ charactersExceeded: 'Перевищено максимальну кількість символів! Обмеження: {current}/{max}'
+ charactersBelow: 'Недостатньо символів! Обмеження: {current}/{min}'
+jumpToSpecifiedDate: Перейти до конкретної дати
+quitFullView: Закрити повний вигляд
+ffVisibility: Видимість підписок/підписників
+numberOfColumn: Кількість стовпців
+failedToFetchAccountInformation: Не вдалося отримати інформацію про обліковий запис
+reflectMayTakeTime: Може пройти деякий час, перш ніж зміни набудуть чинності.
+recentNHours: Останні {n} годин
+logoutConfirm: Ви впевнені, що хочете вийти?
+enableRecommendedTimeline: Увімкнути рекомендовану стрічку
+_accountDelete:
+ requestAccountDelete: Запросити видалення облікового запису
+ accountDelete: Видалити обліковий запис
+ mayTakeTime: Оскільки видалення облікового запису є ресурсоємним процесом, він може
+ зайняти деякий час, залежно від того, скільки контенту ви створили та скільки
+ файлів завантажили.
+ sendEmail: Коли ваш обліковий запис буде видалено, ми повідомимо на вказану вами
+ електронну пошту.
+ started: Процес видалення розпочався.
+ inProgress: Наразі триває видалення
+_preferencesBackups:
+ deleteConfirm: Видалити резервну копію {name}?
+ applyConfirm: Ви дійсно хочете застосувати резервну копію "{name}" до цього пристрою?
+ Існуючі налаштування цього пристрою буде замінено.
+ saveConfirm: Зберегти резервну копію як {name}?
+ saveNew: Зберегти нову резервну копію
+ save: Зберегти зміни
+ inputName: Будь ласка, введіть назву для цієї резервної копії
+ loadFile: Завантажити з файлу
+ updatedAt: 'Оновлено: {date} {time}'
+ invalidFile: Неправильний формат файлу
+ apply: Застосувати до цього пристрою
+ list: Створені резервні копії
+ cannotSave: Збереження невдале
+ nameAlreadyExists: Резервна копія з назвою "{name}" вже існує. Будь ласка, введіть
+ іншу назву.
+ renameConfirm: Перейменувати цю резервну копію з "{old}" на "{new}"?
+ noBackups: Резервних копій немає. Ви можете створити резервну копію налаштувань
+ клієнта на цьому сервері за допомогою "Створити нову резервну копію".
+ createdAt: 'Створено: {date} {time}'
+ cannotLoad: Не вдалося завантажити
+beta: Бета
+customMOTDDescription: Користувацькі повідомлення для MOTD (заставки), розділені новими
+ рядками, які будуть показуватися випадковим чином щоразу, коли користувач завантажує/перезавантажує
+ сторінку.
+replayTutorial: Перезапустити туторіал
+_forgotPassword:
+ ifNoEmail: Якщо ви не використовували електронну пошту під час реєстрації, зверніться
+ до адміністратора серверу.
+ enterEmail: Введіть адресу електронної пошти, яку ви використовували для реєстрації.
+ На неї буде надіслано посилання, за яким ви зможете скинути пароль.
+ contactAdmin: Цей сервер не підтримує використання адрес електронної пошти, будь
+ ласка, зверніться до адміністратора сервера, щоб скинути пароль.
+reactionPickerSkinTone: Бажаний колір шкіри емодзі
+addInstance: Додати сервер
+jumpToPrevious: Перейти до попереднього
+listsDesc: Списки дозволяють створювати стрічки із вказаними користувачами. Доступ
+ до них можна отримати на сторінці стрічок.
+channelFederationWarn: Канали наразі федеруються з іншими серверами
+lastCommunication: Останнє повідомлення
+edited: Відредаговано {date} о {time}
+confirmToUnclipAlreadyClippedNote: Цей запис уже в підбірці "{name}". Чи бажаєте ви
+ натомість видалити пост із підбірки?
+quickAction: Швидкі дії
+remoteOnly: Тільки віддалені
+failedToUpload: Помилка завантаження
+moveFrom: Мігрувати на цей обліковий запис зі старого облікового запису
+preventAiLearning: Захист від скрепінгу ШІ-ботів
+moveAccountDescription: Цей процес є незворотнім. Переконайтеся, що ви створили псевдонім
+ для цього акаунта в новому акаунті перед переїздом. Будь ласка, введіть тег акаунта
+ у форматі @person@server.com
+_signup:
+ almostThere: Майже готово
+ emailAddressInfo: Будь ласка, введіть свою адресу електронної пошти. Вона не буде
+ опублікована.
+ emailSent: На вашу електронну адресу ({email}) було надіслано лист із підтвердженням.
+ Будь ласка, перейдіть за посиланням, щоб завершити створення облікового запису.
+defaultValueIs: 'За замовчуванням: {value}'
+shareWithNote: Поділитися з записом
+classic: Відцентрований
+size: Розмір
+slow: Повільно
+alt: ALT
+auto: Автоматично
+oneHour: Одна година
+instanceDefaultThemeDescription: Введіть код теми в об'єктному форматі.
+cropImageAsk: Чи бажаєте ви обрізати це зображення?
+noEmailServerWarning: Поштовий сервер не налаштовано.
+thereIsUnresolvedAbuseReportWarning: Є не розглянуті звіти.
+image: Зображення
+check: Перевірити
+isSystemAccount: Цей акаунт створений і автоматично управляється системою. Будь ласка,
+ не модеруйте, не редагуйте, не видаляйте та не втручайтеся в цей акаунт будь-яким
+ іншим чином, інакше це може призвести до поломки вашого серверу.
+document: Документація
+driveCapOverrideCaption: Ви можете скинути ємність до значення за замовчуванням, ввівши
+ значення 0 або менше.
+numberOfPageCache: Кількість кешованих сторінок
+pleaseSelect: Оберіть варіант
+refreshInterval: 'Інтервал оновлення '
+enableAutoSensitive: Автоматичне маркування NSFW
+cannotUploadBecauseInappropriate: Цей файл не може бути завантажений тому що його
+ частини були виявлені як потенційне NSFW.
+sendPushNotificationReadMessageCaption: На короткий час буде показано сповіщення з
+ текстом "{emptyPushNotificationMessage}". Це може призвести до збільшення споживання
+ заряду акумулятора вашого пристрою, якщо це можливо.
+pushNotificationNotSupported: Ваш браузер або сервер не підтримує push-сповіщення
+showUpdates: Показувати спливаюче вікно при оновленні Calckey
+updateAvailable: Можливо, є доступне оновлення!
+recommendedInstancesDescription: Рекомендовані сервери відокремлюються переведенням
+ рядка, щоб з'явитися на стрічці рекомендацій.
+caption: Автоматичний підпис
+showAdminUpdates: Вказати, що доступна нова версія Calckey (тільки для адміністратора)
+defaultReaction: Емодзі реакція за замовчуванням для вихідних і вхідних записів
+license: Ліцензія
+indexPosts: Індексувати пости
+indexFrom: Індексувати записи з ID
+indexFromDescription: Залиште порожнім, щоб індексувати кожен запис
+indexNotice: Зараз відбувається індексація. Це, ймовірно, займе деякий час, будь ласка,
+ не перезавантажуйте сервер принаймні годину.
+signupsDisabled: Реєстрація на цьому сервері наразі відключена, але ви завжди можете
+ зареєструватися на іншому сервері! Якщо у вас є код запрошення на цей сервер, будь
+ ласка, введіть його нижче.
+findOtherInstance: Знайти інший сервер
+customKaTeXMacro: Користувацькі макроси KaTeX
+enableCustomKaTeXMacro: Увімкнути користувацькі макроси KaTeX
+apps: Додатки
+isModerator: Модератор
+isAdmin: Адміністратор
+isPatron: Патрон Calckey
+swipeOnMobile: Дозволити гортання між сторінками
+migration: Міграція
+swipeOnDesktop: Дозволити свайп у мобільному стилі на десктопі
+logoImageUrl: URL-адреса зображення логотипу
+moveTo: Перенести поточний обліковий запис на новий
+moveFromDescription: Це встановить псевдонім вашого старого облікового запису, щоб
+ ви могли перейти зі старого облікового запису до цього поточного. Зробіть це ДО
+ переходу зі старого акаунта. Будь ласка, введіть тег акаунта у форматі @person@server.com
+moveToLabel: 'Обліковий запис, на який ви мігруєте:'
+moveAccount: Перемістити обліковий запис!
+moveFromLabel: 'Обліковий запис, з якого ви мігруєте:'
+_plugin:
+ install: Встановлення плагінів
+ manage: Керування плагінами
+ installWarn: Будь ласка, не встановлюйте ненадійні плагіни.
+_skinTones:
+ yellow: Жовтий
+ mediumLight: Помірно-світлий
+ medium: Помірний
+ mediumDark: Помірно-темний
+ dark: Темний
+ light: Світлий
+tenMinutes: 10 хвилин
+expandOnNoteClick: Відкрити запис кліком
+preferencesBackups: Резервне копіювання
+unlikeConfirm: Дійсно видалити вподобайку?
+fullView: Повний вигляд
+postToGallery: Опублікувати в галереї
+memo: Нотатки
+allowedInstancesDescription: Хости серверів, які будуть допущені до федерації, кожен
+ з яких відокремлюється новим рядком (стосується лише приватного режиму).
+squareAvatars: Квадратні аватарки
+aiChanMode: Режим ШІ
+controlPanel: Панель керування
+manageAccounts: Керування обліковими записами
+incorrectPassword: Неправильний пароль.
+voteConfirm: Підтвердити свій голос за "{choice}"?
+leaveGroup: Залишити групу
+smartphone: Смартфон
+mutePeriod: Тривалість глушіння
+requireAdminForView: Ви маєте увійти з облікового запису адміністратора, щоб переглянути
+ це.
+fast: Швидко
+isBot: Цей обліковий запис є ботом
+isLocked: Цей обліковий запис має схвалення запитів на підписку
+silenceThisInstance: Ігнорувати цей сервер
+hideOnlineStatusDescription: Приховування вашого онлайн-статусу знижує зручність деяких
+ функцій, таких як пошук.
+accountDeletionInProgress: Наразі триває видалення облікового запису
+makeReactionsPublic: Зробити історію реакцій публічною
+continueThread: Показати наступні відповіді
+unmuteThread: Скасувати глушіння гілки
+ffVisibilityDescription: Дозволяє налаштувати, хто може бачити, на кого ви підписані
+ і хто підписаний на вас.
+tablet: Планшет
+cropImage: Обрізати зображення
+recentNDays: Останні {n} днів
+navbar: Панель навігації
+noGraze: Будь ласка, вимкніть розширення браузера "Graze для Mastodon", оскільки воно
+ заважає роботі Calckey.
+preventAiLearningDescription: Попросити сторонні мовні моделі ШІ не вивчати вміст,
+ який ви завантажуєте, наприклад, записи та зображення.
+userSaysSomethingReasonReply: '{name} відповів на пост з {reason}'
+secureMode: Безпечний режим (Authorized Fetch)
+seperateRenoteQuote: Розділити кнопки поширення та цитати
+makeReactionsPublicDescription: Це зробить список усіх ваших минулих реакцій публічно
+ видимим.
+muteThread: Заглушити гілку
+sendPushNotificationReadMessage: Видаляти push-сповіщення після того, як відповідні
+ сповіщення або повідомлення будуть прочитані
+unclip: Видалити з підбірки
+silencedInstances: Ігноровані сервери
+typeToConfirm: Введіть {x} щоб підтвердити
+silencedWarning: Ця сторінка відображається тому, що ці користувачі з серверів, які
+ ваш адміністратор заглушив, тому вони потенційно можуть бути спамом.
+shuffle: Перетасувати
+ratio: Співвідношення
+secureModeInfo: У разі запитів з інших серверів не надсилати непідтверджену відповідь.
+pubSub: Облікові записи Pub/Sub
+driveCapOverrideLabel: Змінити ємність диску для цього користувача
+deleteAccount: Видалити обліковий запис
+type: Тип
+enableAutoSensitiveDescription: Дозволяє автоматично виявляти та позначати медіафайли
+ NSFW за допомогою машинного навчання, де це можливо. Навіть якщо цю опцію вимкнено,
+ вона може бути увімкнена на всьому сервері.
+recommendedInstances: Рекомендовані сервери
+noteId: Ідентифікатор запису
+showPopup: Сповіщати користувачів спливаючим вікном
+showWithSparkles: Показати з блиском
+youHaveUnreadAnnouncements: У вас є непрочитані оголошення
+donationLink: Посилання на сторінку для внесків
+neverShow: Не показувати знову
+remindMeLater: Можливо пізніше
+removeQuote: Видалити цитату
+removeRecipient: Видалити одержувача
+removeMember: Видалити члена
+silencedInstancesDescription: Вкажіть імена хостів серверів, які ви хочете ігнорувати.
+ Облікові записи на перелічених серверах вважаються "Ігнорованими", можуть робити
+ лише запити на підписку і не можуть згадувати локальні облікові записи, якщо на
+ них не підписалися. Це не вплине на заблоковані сервери.
+hiddenTagsDescription: 'Перелічіть хештеги (без #), які ви хочете приховати з трендів
+ і дослідження. Приховані хештеги все одно можна знайти іншими способами.'
+antennasDesc: "Антени показують нові дописи, що відповідають встановленим вами критеріям!\n
+ Доступ до них можна отримати зі сторінки стрічок."
+clipsDesc: Підбірки схожі на категоризовані закладки, до яких можна надавати спільний
+ доступ. Ви можете створювати підбірки з меню окремих записів.
+migrationConfirm: "Ви точно впевнені, що хочете перенести свій обліковий запис на
+ {account}? Якщо ви це зробите, ви не зможете скасувати цю операцію і не зможете
+ користуватися своїм обліковим записом як раніше.\nТакож, будь ласка, переконайтеся,
+ що ви вибрали цей поточний обліковий запис як обліковий запис, з якого ви переходите."
+customKaTeXMacroDescription: 'Налаштуйте макроси, щоб легко писати математичні вирази!
+ Позначення відповідає визначенню команд LaTeX і записується у вигляді \newcommand{\
+ name}{content} або \newcommand{\name}[number of arguments]{content}. Наприклад,
+ \newcommand{\add}[2]{#1 + #2} розширить \add{3}{foo} to 3 + foo. Фігурні дужки навколо
+ назви макросу можна змінити на круглі або квадратні. Це вплине на дужки, що використовуються
+ для аргументів. В одному рядку можна визначити один (і тільки один) макрос, і жоден
+ рядок не можна розривати посередині визначення. Неправильні рядки просто ігноруються.
+ Підтримуються лише прості функції заміни рядків; розширений синтаксис, такий як
+ умовне розгалуження, не може бути використаний тут.'
+activeEmailValidationDescription: Вмикає більш сувору перевірку адрес електронної
+ пошти, яка включає перевірку на наявність одноразових адрес і перевірку того, чи
+ дійсно з нею можна зв'язатися. Якщо цей прапорець знято, перевіряється лише формат
+ електронної пошти.
+customSplashIconsDescription: URL-адреси іконок для заставки, розділені новими рядками,
+ які будуть показуватися випадковим чином щоразу, коли користувач завантажує/перезавантажує
+ сторінку. Будь ласка, переконайтеся, що зображення знаходяться на статичній URL-адресі,
+ бажано, щоб вони були змінені до розміру 192x192.
From d0cc2d8af5bec631d13b81e905da8119eb885c7a Mon Sep 17 00:00:00 2001
From: freeplay
Date: Sat, 15 Jul 2023 15:26:15 -0400
Subject: [PATCH 147/162] fix: move nowrap to proper place
---
packages/client/src/components/MkTab.vue | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/packages/client/src/components/MkTab.vue b/packages/client/src/components/MkTab.vue
index b5d6e8056..bc5f20d4c 100644
--- a/packages/client/src/components/MkTab.vue
+++ b/packages/client/src/components/MkTab.vue
@@ -58,7 +58,6 @@ export default defineComponent({
font-size: 90%;
border-radius: var(--radius);
padding: 10px 8px;
- white-space: nowrap;
> button {
flex: 1;
@@ -106,6 +105,8 @@ export default defineComponent({
transparent
);
padding-right: 90px !important;
+ white-space: nowrap;
+
&::-webkit-scrollbar {
display: none;
}
From b8fcd0dc331ce73994f85ce078c03509bb8cc5ea Mon Sep 17 00:00:00 2001
From: ThatOneCalculator
Date: Sat, 15 Jul 2023 14:13:21 -0700
Subject: [PATCH 148/162] fix: :lock: prevent potential SSRF through media
proxy
---
packages/backend/src/misc/download-url.ts | 3 +-
.../backend/src/server/proxy/proxy-media.ts | 36 +++++++++++++++++++
2 files changed, 38 insertions(+), 1 deletion(-)
diff --git a/packages/backend/src/misc/download-url.ts b/packages/backend/src/misc/download-url.ts
index 7fafb635b..b96871e72 100644
--- a/packages/backend/src/misc/download-url.ts
+++ b/packages/backend/src/misc/download-url.ts
@@ -21,9 +21,10 @@ export async function downloadUrl(url: string, path: string): Promise {
const maxSize = config.maxFileSize || 262144000;
const req = got
- .stream(url, {
+ .stream(url, {
headers: {
"User-Agent": config.userAgent,
+ "Host": new URL(url).hostname,
},
timeout: {
lookup: timeout,
diff --git a/packages/backend/src/server/proxy/proxy-media.ts b/packages/backend/src/server/proxy/proxy-media.ts
index a9c257bfe..b3bb03124 100644
--- a/packages/backend/src/server/proxy/proxy-media.ts
+++ b/packages/backend/src/server/proxy/proxy-media.ts
@@ -1,4 +1,6 @@
import * as fs from "node:fs";
+import net from "node:net";
+import { promises } from "node:dns";
import type Koa from "koa";
import sharp from "sharp";
import type { IImage } from "@/services/drive/image-processor.js";
@@ -19,6 +21,40 @@ export async function proxyMedia(ctx: Koa.Context) {
return;
}
+ const { hostname } = new URL(url);
+ let resolvedIps;
+ try {
+ resolvedIps = await promises.resolve(hostname);
+ } catch (error) {
+ ctx.status = 400;
+ ctx.body = { message: "Invalid URL" };
+ return;
+ }
+
+ const isSSRF = resolvedIps.some((ip) => {
+ if (net.isIPv4(ip)) {
+ const parts = ip.split(".").map(Number);
+ return (
+ parts[0] === 10 ||
+ (parts[0] === 172 && parts[1] >= 16 && parts[1] < 32) ||
+ (parts[0] === 192 && parts[1] === 168) ||
+ parts[0] === 127 ||
+ parts[0] === 0
+ );
+ } else if (net.isIPv6(ip)) {
+ return (
+ ip.startsWith("::") || ip.startsWith("fc00:") || ip.startsWith("fe80:")
+ );
+ }
+ return false;
+ });
+
+ if (isSSRF) {
+ ctx.status = 400;
+ ctx.body = { message: "Access to this URL is not allowed" };
+ return;
+ }
+
// Create temp file
const [path, cleanup] = await createTemp();
From 7308d9f90f5dd2735bfee48db173cc7dee987b29 Mon Sep 17 00:00:00 2001
From: ThatOneCalculator
Date: Sat, 15 Jul 2023 14:28:44 -0700
Subject: [PATCH 149/162] dev78
---
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/package.json b/package.json
index b38da39fa..a30d85b3d 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "calckey",
- "version": "14.0.0-dev77",
+ "version": "14.0.0-dev78",
"codename": "aqua",
"repository": {
"type": "git",
From 5324d1298fc2157adb9777e631a66814d6cc42c6 Mon Sep 17 00:00:00 2001
From: ThatOneCalculator
Date: Sat, 15 Jul 2023 14:50:23 -0700
Subject: [PATCH 150/162] fix: :wrench: max post length 100000
Pleroma doesn't accept >100K (ref: https://blob.cat/objects/82f33d96-534f-45ee-902a-f77c2723db8b)
---
.config/example.yml | 2 +-
packages/backend/src/const.ts | 7 +++++--
packages/backend/src/misc/hard-limits.ts | 3 +--
3 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/.config/example.yml b/.config/example.yml
index 9716915b6..f73f4f1d7 100644
--- a/.config/example.yml
+++ b/.config/example.yml
@@ -121,7 +121,7 @@ redis:
# ┌─────────────────────┐
#───┘ Other configuration └─────────────────────────────────────
-# Maximum length of a post (default 3000, max 250000000)
+# Maximum length of a post (default 3000, max 100000)
#maxNoteLength: 3000
# Maximum length of an image caption (default 1500, max 8192)
diff --git a/packages/backend/src/const.ts b/packages/backend/src/const.ts
index 1f1e63292..49f012c5e 100644
--- a/packages/backend/src/const.ts
+++ b/packages/backend/src/const.ts
@@ -1,7 +1,10 @@
import config from "@/config/index.js";
-import { DB_MAX_IMAGE_COMMENT_LENGTH } from "@/misc/hard-limits.js";
+import { DB_MAX_NOTE_TEXT_LENGTH, DB_MAX_IMAGE_COMMENT_LENGTH } from "@/misc/hard-limits.js";
-export const MAX_NOTE_TEXT_LENGTH = config.maxNoteLength ?? 3000;
+export const MAX_NOTE_TEXT_LENGTH = Math.min(
+ config.maxNoteLength ?? 3000,
+ DB_MAX_NOTE_TEXT_LENGTH,
+);
export const MAX_CAPTION_TEXT_LENGTH = Math.min(
config.maxCaptionLength ?? 1500,
DB_MAX_IMAGE_COMMENT_LENGTH,
diff --git a/packages/backend/src/misc/hard-limits.ts b/packages/backend/src/misc/hard-limits.ts
index f1a58a425..62671a706 100644
--- a/packages/backend/src/misc/hard-limits.ts
+++ b/packages/backend/src/misc/hard-limits.ts
@@ -3,9 +3,8 @@
/**
* Maximum note text length that can be stored in DB.
* Surrogate pairs count as one
- * DEPRECARTED: use const/MAX_NOTE_TEXT_LENGTH instead
*/
-// export const DB_MAX_NOTE_TEXT_LENGTH = 8192;
+export const DB_MAX_NOTE_TEXT_LENGTH = 100000;
/**
* Maximum image description length that can be stored in DB.
From 3ee2dc787b814517642e46d6c8b96aa9542ea42f Mon Sep 17 00:00:00 2001
From: ThatOneCalculator
Date: Sat, 15 Jul 2023 15:32:39 -0700
Subject: [PATCH 151/162] docs: :bulb: going past DB_MAX_NOTE_TEXT_LENGTH
---
packages/backend/src/misc/hard-limits.ts | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/packages/backend/src/misc/hard-limits.ts b/packages/backend/src/misc/hard-limits.ts
index 62671a706..5ce3e0ac9 100644
--- a/packages/backend/src/misc/hard-limits.ts
+++ b/packages/backend/src/misc/hard-limits.ts
@@ -3,6 +3,11 @@
/**
* Maximum note text length that can be stored in DB.
* Surrogate pairs count as one
+ *
+ * NOTE: this can hypothetically be pushed further
+ * (up to 250000000), but will likely cause truncations
+ * and incompatibilities with other servers,
+ * as well as potential performance issues.
*/
export const DB_MAX_NOTE_TEXT_LENGTH = 100000;
From 17124f38344a484d92f3ee06dc4e320398476afd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E3=82=B3=E3=83=AB=E3=82=BB=E3=83=83=E3=83=88=E5=A7=AB=40?=
=?UTF-8?q?=E3=81=8C=E3=82=93=E3=81=B0=E3=82=89=E3=81=AA=E3=81=84?=
Date: Sat, 15 Jul 2023 22:56:09 +0000
Subject: [PATCH 152/162] =?UTF-8?q?feat:=20=E2=9C=A8=20Add=20media=20to=20?=
=?UTF-8?q?Mastodon=20and=20Calckey=20post=20imports=20(#10496)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
### What does this PR do?
Adding files fields in the export notes option, and corresponding import notes
Current the mastodon import does not import any attachments, this pr will use the "upload from url" feature to include medias if its a valid URL.
There are many way to convert the outbox.json file, can be simple as upload media_attachments to any web hosting and do string replace on the json file.
I also create a tool that upload the tar.gz file with auto convert and host the media as simplify the process at https://tempfile.moegirl.live
Detail example can be found at https://fedi.moegirl.live/notes/9h76gtqnp2gwl5dz
https://r2temp.moegirl.live/2023/7/15/15356683-050f-423a-b331-c9a05561f52a/shana-settings-_-meng-zhai-le-yuan-xyou-yu-ou-xiang-de-luo-ke-ke-wu-yan-moe-otaku-elysian-x-gloomily-idol-s-rococo-luncheon----mozilla-firefox-private-browsing-2023-07-15-18-36-37.mp4
Co-authored-by: CGsama
Reviewed-on: https://codeberg.org/calckey/calckey/pulls/10496
Co-authored-by: コルセット姫@がんばらない
Co-committed-by: コルセット姫@がんばらない
---
.../src/queue/processors/db/export-notes.ts | 9 +++++----
.../processors/db/import-calckey-post.ts | 19 +++++++++++++++++-
.../queue/processors/db/import-masto-post.ts | 20 ++++++++++++++++++-
3 files changed, 42 insertions(+), 6 deletions(-)
diff --git a/packages/backend/src/queue/processors/db/export-notes.ts b/packages/backend/src/queue/processors/db/export-notes.ts
index de8fac05b..bf53f8360 100644
--- a/packages/backend/src/queue/processors/db/export-notes.ts
+++ b/packages/backend/src/queue/processors/db/export-notes.ts
@@ -4,7 +4,7 @@ import * as fs from "node:fs";
import { queueLogger } from "../../logger.js";
import { addFile } from "@/services/drive/add-file.js";
import { format as dateFormat } from "date-fns";
-import { Users, Notes, Polls } from "@/models/index.js";
+import { Users, Notes, Polls, DriveFiles } from "@/models/index.js";
import { MoreThan } from "typeorm";
import type { Note } from "@/models/entities/note.js";
import type { Poll } from "@/models/entities/poll.js";
@@ -75,7 +75,7 @@ export async function exportNotes(
if (note.hasPoll) {
poll = await Polls.findOneByOrFail({ noteId: note.id });
}
- const content = JSON.stringify(serialize(note, poll));
+ const content = JSON.stringify(await serialize(note, poll));
const isFirst = exportedNotesCount === 0;
await write(isFirst ? content : ",\n" + content);
exportedNotesCount++;
@@ -112,15 +112,16 @@ export async function exportNotes(
done();
}
-function serialize(
+async function serialize(
note: Note,
poll: Poll | null = null,
-): Record {
+): Promise> {
return {
id: note.id,
text: note.text,
createdAt: note.createdAt,
fileIds: note.fileIds,
+ files: await DriveFiles.packMany(note.fileIds),
replyId: note.replyId,
renoteId: note.renoteId,
poll: poll,
diff --git a/packages/backend/src/queue/processors/db/import-calckey-post.ts b/packages/backend/src/queue/processors/db/import-calckey-post.ts
index 28e794aa0..945c50d63 100644
--- a/packages/backend/src/queue/processors/db/import-calckey-post.ts
+++ b/packages/backend/src/queue/processors/db/import-calckey-post.ts
@@ -3,6 +3,8 @@ import create from "@/services/note/create.js";
import { Users } from "@/models/index.js";
import type { DbUserImportMastoPostJobData } from "@/queue/types.js";
import { queueLogger } from "../../logger.js";
+import { uploadFromUrl } from "@/services/drive/upload-from-url.js";
+import type { DriveFile } from "@/models/entities/drive-file.js";
import type Bull from "bull";
const logger = queueLogger.createSubLogger("import-calckey-post");
@@ -29,10 +31,25 @@ export async function importCkPost(
done();
return;
}
+ const urls = (post.files || [])
+ .map((x: any) => x.url)
+ .filter((x: String) => x.startsWith("http"));
+ const files: DriveFile[] = [];
+ for (const url of urls) {
+ try {
+ const file = await uploadFromUrl({
+ url: url,
+ user: user,
+ });
+ files.push(file);
+ } catch (e) {
+ logger.error(`Skipped adding file to drive: ${url}`);
+ }
+ }
const { text, cw, localOnly, createdAt } = Post.parse(post);
const note = await create(user, {
createdAt: createdAt,
- files: undefined,
+ files: files.length == 0 ? undefined : files,
poll: undefined,
text: text || undefined,
reply: null,
diff --git a/packages/backend/src/queue/processors/db/import-masto-post.ts b/packages/backend/src/queue/processors/db/import-masto-post.ts
index efa4adf3f..05166b085 100644
--- a/packages/backend/src/queue/processors/db/import-masto-post.ts
+++ b/packages/backend/src/queue/processors/db/import-masto-post.ts
@@ -6,6 +6,8 @@ import type Bull from "bull";
import { htmlToMfm } from "@/remote/activitypub/misc/html-to-mfm.js";
import { resolveNote } from "@/remote/activitypub/models/note.js";
import { Note } from "@/models/entities/note.js";
+import { uploadFromUrl } from "@/services/drive/upload-from-url.js";
+import type { DriveFile } from "@/models/entities/drive-file.js";
const logger = queueLogger.createSubLogger("import-masto-post");
@@ -43,9 +45,25 @@ export async function importMastoPost(
throw e;
}
job.progress(80);
+ const urls = post.object.attachment
+ .map((x: any) => x.url)
+ .filter((x: String) => x.startsWith("http"));
+ const files: DriveFile[] = [];
+ for (const url of urls) {
+ try {
+ const file = await uploadFromUrl({
+ url: url,
+ user: user,
+ });
+ files.push(file);
+ } catch (e) {
+ logger.error(`Skipped adding file to drive: ${url}`);
+ }
+ }
+
const note = await create(user, {
createdAt: new Date(post.object.published),
- files: undefined,
+ files: files.length == 0 ? undefined : files,
poll: undefined,
text: text || undefined,
reply,
From 9fbcdb529ed01a3391f4fbf56630fa4c79116c9f Mon Sep 17 00:00:00 2001
From: Mizunashi Mana
Date: Sun, 16 Jul 2023 18:57:38 +0900
Subject: [PATCH 153/162] feat: Move json5 to prod dependencies
---
packages/backend/package.json | 2 +-
pnpm-lock.yaml | 94 ++++++-----------------------------
2 files changed, 17 insertions(+), 79 deletions(-)
diff --git a/packages/backend/package.json b/packages/backend/package.json
index fe8c078a0..8564ca832 100644
--- a/packages/backend/package.json
+++ b/packages/backend/package.json
@@ -71,6 +71,7 @@
"is-svg": "4.3.2",
"js-yaml": "4.1.0",
"jsdom": "20.0.3",
+ "json5": "2.2.3",
"jsonld": "8.2.0",
"jsrsasign": "10.8.6",
"koa": "2.14.2",
@@ -185,7 +186,6 @@
"cross-env": "7.0.3",
"eslint": "^8.44.0",
"execa": "6.1.0",
- "json5": "2.2.3",
"json5-loader": "4.0.1",
"mocha": "10.2.0",
"pug": "3.0.2",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index adead9c6f..540d94109 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -219,6 +219,9 @@ importers:
jsdom:
specifier: 20.0.3
version: 20.0.3
+ json5:
+ specifier: 2.2.3
+ version: 2.2.3
jsonld:
specifier: 8.2.0
version: 8.2.0
@@ -563,9 +566,6 @@ importers:
execa:
specifier: 6.1.0
version: 6.1.0
- json5:
- specifier: 2.2.3
- version: 2.2.3
json5-loader:
specifier: 4.0.1
version: 4.0.1(webpack@5.88.1)
@@ -595,7 +595,7 @@ importers:
version: 5.1.6
webpack:
specifier: ^5.88.1
- version: 5.88.1(@swc/core@1.3.68)
+ version: 5.88.1(@swc/core@1.3.68)(webpack-cli@5.1.3)
ws:
specifier: 8.13.0
version: 8.13.0
@@ -780,7 +780,7 @@ importers:
version: 2.30.0
emojilib:
specifier: github:thatonecalculator/emojilib
- version: github.com/thatonecalculator/emojilib/1d6adc1af8105b4937d2f0e7479acf5bd565bd9b
+ version: github.com/thatonecalculator/emojilib/d3c8c6a77d4362b3b3180099f1d2eac344ce245c
escape-regexp:
specifier: 0.0.1
version: 0.0.1
@@ -5138,7 +5138,7 @@ packages:
/axios@0.24.0:
resolution: {integrity: sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==}
dependencies:
- follow-redirects: 1.15.2
+ follow-redirects: 1.15.2(debug@4.3.4)
transitivePeerDependencies:
- debug
dev: false
@@ -5164,7 +5164,7 @@ packages:
/axios@1.4.0:
resolution: {integrity: sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==}
dependencies:
- follow-redirects: 1.15.2
+ follow-redirects: 1.15.2(debug@4.3.4)
form-data: 4.0.0
proxy-from-env: 1.1.0
transitivePeerDependencies:
@@ -6843,17 +6843,6 @@ packages:
dependencies:
ms: 2.0.0
- /debug@3.2.7:
- resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
- peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
- optional: true
- dependencies:
- ms: 2.1.3
- dev: false
-
/debug@3.2.7(supports-color@8.1.1):
resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
peerDependencies:
@@ -6864,7 +6853,6 @@ packages:
dependencies:
ms: 2.1.3
supports-color: 8.1.1
- dev: true
/debug@4.3.3:
resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
@@ -8377,16 +8365,6 @@ packages:
tabbable: 6.2.0
dev: true
- /follow-redirects@1.15.2:
- resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==}
- engines: {node: '>=4.0'}
- peerDependencies:
- debug: '*'
- peerDependenciesMeta:
- debug:
- optional: true
- dev: false
-
/follow-redirects@1.15.2(debug@4.3.4):
resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==}
engines: {node: '>=4.0'}
@@ -9355,7 +9333,7 @@ packages:
engines: {node: '>= 4.5.0'}
dependencies:
agent-base: 4.3.0
- debug: 3.2.7
+ debug: 3.2.7(supports-color@8.1.1)
transitivePeerDependencies:
- supports-color
dev: false
@@ -11280,7 +11258,7 @@ packages:
json5: 2.2.3
loader-utils: 2.0.4
schema-utils: 3.3.0
- webpack: 5.88.1(@swc/core@1.3.68)
+ webpack: 5.88.1(@swc/core@1.3.68)(webpack-cli@5.1.3)
dev: true
/json5@1.0.2:
@@ -11535,7 +11513,7 @@ packages:
resolution: {integrity: sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==}
engines: {node: '>= 7.6.0'}
dependencies:
- debug: 3.2.7
+ debug: 3.2.7(supports-color@8.1.1)
koa-send: 5.0.1
transitivePeerDependencies:
- supports-color
@@ -12579,7 +12557,7 @@ packages:
engines: {node: '>= 4.4.x'}
hasBin: true
dependencies:
- debug: 3.2.7
+ debug: 3.2.7(supports-color@8.1.1)
iconv-lite: 0.4.24
sax: 1.2.4
transitivePeerDependencies:
@@ -15558,7 +15536,7 @@ packages:
webpack: '>=2'
dependencies:
'@swc/core': 1.3.68
- webpack: 5.88.1(@swc/core@1.3.68)
+ webpack: 5.88.1(@swc/core@1.3.68)(webpack-cli@5.1.3)
dev: true
/swiper@10.0.4:
@@ -15677,7 +15655,7 @@ packages:
schema-utils: 3.3.0
serialize-javascript: 6.0.1
terser: 5.19.0
- webpack: 5.88.1(@swc/core@1.3.68)
+ webpack: 5.88.1(@swc/core@1.3.68)(webpack-cli@5.1.3)
dev: true
/terser@5.19.0:
@@ -16016,7 +15994,7 @@ packages:
micromatch: 4.0.5
semver: 7.5.4
typescript: 5.1.6
- webpack: 5.88.1(@swc/core@1.3.68)
+ webpack: 5.88.1(@swc/core@1.3.68)(webpack-cli@5.1.3)
dev: true
/ts-node@10.4.0(@swc/core@1.3.68)(@types/node@20.3.1)(typescript@5.1.3):
@@ -16933,46 +16911,6 @@ packages:
engines: {node: '>=10.13.0'}
dev: true
- /webpack@5.88.1(@swc/core@1.3.68):
- resolution: {integrity: sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==}
- engines: {node: '>=10.13.0'}
- hasBin: true
- peerDependencies:
- webpack-cli: '*'
- peerDependenciesMeta:
- webpack-cli:
- optional: true
- dependencies:
- '@types/eslint-scope': 3.7.4
- '@types/estree': 1.0.1
- '@webassemblyjs/ast': 1.11.6
- '@webassemblyjs/wasm-edit': 1.11.6
- '@webassemblyjs/wasm-parser': 1.11.6
- acorn: 8.10.0
- acorn-import-assertions: 1.9.0(acorn@8.10.0)
- browserslist: 4.21.9
- chrome-trace-event: 1.0.3
- enhanced-resolve: 5.15.0
- es-module-lexer: 1.3.0
- eslint-scope: 5.1.1
- events: 3.3.0
- glob-to-regexp: 0.4.1
- graceful-fs: 4.2.11
- json-parse-even-better-errors: 2.3.1
- loader-runner: 4.3.0
- mime-types: 2.1.35
- neo-async: 2.6.2
- schema-utils: 3.3.0
- tapable: 2.2.1
- terser-webpack-plugin: 5.3.9(@swc/core@1.3.68)(webpack@5.88.1)
- watchpack: 2.4.0
- webpack-sources: 3.2.3
- transitivePeerDependencies:
- - '@swc/core'
- - esbuild
- - uglify-js
- dev: true
-
/webpack@5.88.1(@swc/core@1.3.68)(webpack-cli@5.1.3):
resolution: {integrity: sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==}
engines: {node: '>=10.13.0'}
@@ -17486,8 +17424,8 @@ packages:
url-polyfill: 1.1.12
dev: true
- github.com/thatonecalculator/emojilib/1d6adc1af8105b4937d2f0e7479acf5bd565bd9b:
- resolution: {tarball: https://codeload.github.com/thatonecalculator/emojilib/tar.gz/1d6adc1af8105b4937d2f0e7479acf5bd565bd9b}
+ github.com/thatonecalculator/emojilib/d3c8c6a77d4362b3b3180099f1d2eac344ce245c:
+ resolution: {tarball: https://codeload.github.com/thatonecalculator/emojilib/tar.gz/d3c8c6a77d4362b3b3180099f1d2eac344ce245c}
name: emojilib
version: 3.0.10
dev: true
From 9c245e603123c88683da0eb1bbbefbe5ce637acc Mon Sep 17 00:00:00 2001
From: DVD
Date: Sun, 16 Jul 2023 21:54:42 +0800
Subject: [PATCH 154/162] Fix: Quicktime Video Play on Chrome
---
packages/client/src/components/MkMedia.vue | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/packages/client/src/components/MkMedia.vue b/packages/client/src/components/MkMedia.vue
index 4c023f131..2cbb881f3 100644
--- a/packages/client/src/components/MkMedia.vue
+++ b/packages/client/src/components/MkMedia.vue
@@ -54,7 +54,7 @@
controls
@contextmenu.stop
>
-
+
@@ -80,7 +80,7 @@