forked from FoundKeyGang/FoundKey
Compare commits
113 commits
9cfc7c1027
...
75113b3d4f
Author | SHA1 | Date | |
---|---|---|---|
vib | 75113b3d4f | ||
Johann150 | 7821bbc28d | ||
Johann150 | f1d7357e75 | ||
Johann150 | 48363a90ef | ||
Puniko | 59da6063cb | ||
Johann150 | d3fbe5e382 | ||
Johann150 | 7e4148880b | ||
Johann150 | 806f757cc8 | ||
Johann150 | ed9b9210a9 | ||
Johann150 | af49f811c1 | ||
Johann150 | 5391ae4a1b | ||
Johann150 | 3cf728a664 | ||
Johann150 | 742fa37e2b | ||
Johann150 | 00332ed37f | ||
Johann150 | ae0a7b668f | ||
79a9b04d25 | |||
Johann150 | 32beda4344 | ||
Johann150 | d6837814d9 | ||
1274af05a4 | |||
Johann150 | 6a17dcf4de | ||
Johann150 | 383ea40704 | ||
Johann150 | e52cf25489 | ||
Johann150 | 1bce487965 | ||
Johann150 | 78c93c5539 | ||
Johann150 | 2164fda2fb | ||
Johann150 | 180a1c968d | ||
Johann150 | 4f6d6b681e | ||
Johann150 | 0d470387dd | ||
Johann150 | d0a021c868 | ||
Johann150 | f455075efc | ||
Johann150 | 95afbf11ab | ||
Johann150 | fbfbe4a72e | ||
Johann150 | 57241cdffe | ||
Johann150 | ba1c4e76b9 | ||
Johann150 | 8e1adfa03a | ||
Johann150 | 2759cd8174 | ||
Johann150 | 74c2b79df1 | ||
Johann150 | 79ec44aa2c | ||
Johann150 | 59a7f10fdc | ||
Johann150 | f2350e6eba | ||
Johann150 | 49ae56a9e9 | ||
Johann150 | 5a263ec2c3 | ||
Johann150 | 559a17cf26 | ||
Johann150 | 691c9d4972 | ||
Johann150 | ae1e7883e7 | ||
Johann150 | ee2860e894 | ||
Johann150 | a750c7ad57 | ||
Johann150 | 5aa5344f2e | ||
Johann150 | 68c0fa91bc | ||
Jeder | 6f3504a12e | ||
Norm | f68c41dd41 | ||
Johann150 | e2063f4ff9 | ||
Jeder | a5b0f5cb65 | ||
Johann150 | 145a949480 | ||
Johann150 | e4a7e9f9b0 | ||
1dc2a6e452 | |||
Chloe Kudryavtsev | 8ba8a1cd60 | ||
Johann150 | 765cb36d02 | ||
Johann150 | c4c97f19b6 | ||
Johann150 | 57e4971214 | ||
Johann150 | 32f4bee5e8 | ||
Johann150 | c8731333ba | ||
Johann150 | 0a7352eda9 | ||
Johann150 | c777c2ed04 | ||
Johann150 | 8f5952bb7d | ||
Johann150 | 73d546372e | ||
Johann150 | e701bdadbe | ||
Johann150 | 2fda599a86 | ||
Johann150 | bfd1adf761 | ||
Johann150 | 41aa5cd18f | ||
Johann150 | 17c9a9374d | ||
Johann150 | f207d839c4 | ||
Johann150 | f103c86d0a | ||
Puniko | a6461e74d6 | ||
Puniko | 5dd2b9ff61 | ||
Puniko | 98acca0a31 | ||
Puniko | b85e60df0f | ||
Puniko | add309f189 | ||
Johann150 | 3acf127e1d | ||
Puniko | 3152630f27 | ||
Puniko | 4de0b4e4ca | ||
Puniko | 2da92eb075 | ||
Johann150 | 105aa511ce | ||
Puniko | eb6dbca9fd | ||
Johann150 | f323c65dde | ||
8887605e1b | |||
f66560fa90 | |||
Johann150 | 89757363f0 | ||
Johann150 | 3e9dd7957d | ||
Johann150 | 0cf8f78e23 | ||
Johann150 | 0db3f1f8ed | ||
Johann150 | 2525b59bb6 | ||
Johann150 | 8993d83114 | ||
Johann150 | fd8fc301b4 | ||
Johann150 | 6aeb033507 | ||
Johann150 | acaca35ff7 | ||
Johann150 | bf445964b5 | ||
Johann150 | 1ffa4b08e0 | ||
Johann150 | c9d395961e | ||
Johann150 | 3a7e8cfe50 | ||
Johann150 | b8796cb1fa | ||
Johann150 | 68bc2e314b | ||
Johann150 | fff93c6965 | ||
Johann150 | 7c89e99243 | ||
Johann150 | 6ed13ea9a7 | ||
Johann150 | 02aaee6050 | ||
Johann150 | d26e2588e3 | ||
Johann150 | df9064c284 | ||
Johann150 | f7c4107ca4 | ||
Johann150 | c983c4860c | ||
Johann150 | d96070bc80 | ||
Johann150 | 240cf98920 | ||
Johann150 | 7b39483966 |
807
.yarn/releases/yarn-3.3.0.cjs
vendored
807
.yarn/releases/yarn-3.3.0.cjs
vendored
File diff suppressed because one or more lines are too long
873
.yarn/releases/yarn-3.4.1.cjs
vendored
Executable file
873
.yarn/releases/yarn-3.4.1.cjs
vendored
Executable file
File diff suppressed because one or more lines are too long
|
@ -8,4 +8,4 @@ plugins:
|
||||||
- path: .yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs
|
- path: .yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs
|
||||||
spec: "@yarnpkg/plugin-workspace-tools"
|
spec: "@yarnpkg/plugin-workspace-tools"
|
||||||
|
|
||||||
yarnPath: .yarn/releases/yarn-3.3.0.cjs
|
yarnPath: .yarn/releases/yarn-3.4.1.cjs
|
||||||
|
|
|
@ -86,8 +86,6 @@ This release contains 6 breaking changes, including changes to the configuration
|
||||||
|
|
||||||
### Removed:
|
### Removed:
|
||||||
- **BREAKING** server: remove Twitter, Github and Discord integrations
|
- **BREAKING** server: remove Twitter, Github and Discord integrations
|
||||||
ff31b8b06 server: remove bios and cli
|
|
||||||
a673647fb server: remove avatarColor and bannerColor properties
|
|
||||||
- **BREAKING** server: remove `api/admin/delete-account`,
|
- **BREAKING** server: remove `api/admin/delete-account`,
|
||||||
You should use the API endpoint `admin/accounts/delete` instead.
|
You should use the API endpoint `admin/accounts/delete` instead.
|
||||||
It has the same parameter and the same behaviour.
|
It has the same parameter and the same behaviour.
|
||||||
|
@ -108,6 +106,8 @@ a673647fb server: remove avatarColor and bannerColor properties
|
||||||
- `/api/i/gallery/likes`
|
- `/api/i/gallery/likes`
|
||||||
- `/api/i/gallery/posts`
|
- `/api/i/gallery/posts`
|
||||||
- `/api/users/gallery/posts`
|
- `/api/users/gallery/posts`
|
||||||
|
- server: remove bios and cli
|
||||||
|
- server: remove avatarColor and bannerColor properties
|
||||||
- server: remove application level websocket ping
|
- server: remove application level websocket ping
|
||||||
This pinging mechanism was unused in `foundkey-js`, and we expect other usage to be low.
|
This pinging mechanism was unused in `foundkey-js`, and we expect other usage to be low.
|
||||||
You can use the pinging mechanism built into the websocket protocol if you wish.
|
You can use the pinging mechanism built into the websocket protocol if you wish.
|
||||||
|
|
|
@ -34,6 +34,7 @@ For a production environment you might not want to follow the `main` branch dire
|
||||||
This project follows [Semantic Versioning 2.0.0](https://semver.org/spec/v2.0.0.html).
|
This project follows [Semantic Versioning 2.0.0](https://semver.org/spec/v2.0.0.html).
|
||||||
Significant changes should be listed in the changelog (i.e. the file called `CHANGELOG.md`, see also section "Changelog Trailer" below).
|
Significant changes should be listed in the changelog (i.e. the file called `CHANGELOG.md`, see also section "Changelog Trailer" below).
|
||||||
Although Semantic Versioning talks about "the API", changes to the user interface should also be tracked.
|
Although Semantic Versioning talks about "the API", changes to the user interface should also be tracked.
|
||||||
|
However, changes to translation files are not considered notable enough to be listed in the changelog.
|
||||||
|
|
||||||
Consider if any of the existing documentation has to be updated because of your contribution.
|
Consider if any of the existing documentation has to be updated because of your contribution.
|
||||||
|
|
||||||
|
|
16
READING.md
16
READING.md
|
@ -40,15 +40,27 @@ After that the actual endpoint code is run by `call.ts` after checking some more
|
||||||
|
|
||||||
ActivityPub related code is in `/packages/backend/src/remote/activitypub/`
|
ActivityPub related code is in `/packages/backend/src/remote/activitypub/`
|
||||||
|
|
||||||
|
Both incoming and outgoing ActivityPub request are handled through queues, to e.g. allow for retrying a request when it fails, or spikes of many incoming requests.
|
||||||
|
|
||||||
|
#### Incoming Activities
|
||||||
|
Remote ActivityPub implementations will HTTP POST to the resource `/user/:userId/inbox` or `/inbox` (the latter is also known as the "shared inbox").
|
||||||
|
The behaviour for these routes is exactly the same: They add all the received data into the inbox queue.
|
||||||
|
This is defined in `/packages/backend/src/server/activitypub.ts`.
|
||||||
|
|
||||||
|
The inbox processor will do some basic things like verify signatures.
|
||||||
|
|
||||||
Incoming ActivityPub requests are processed by the code in `kernel/`.
|
Incoming ActivityPub requests are processed by the code in `kernel/`.
|
||||||
|
The files/directories are generally named the same as the Activities that they process, which should help with orientation.
|
||||||
The entry point for processing an activity is `processOneActivity` in the `kernel/index.ts` file in that directory.
|
The entry point for processing an activity is `processOneActivity` in the `kernel/index.ts` file in that directory.
|
||||||
Parts of incoming activities may also be processed by `models/`.
|
Parts of incoming activities may also be processed by `models/`.
|
||||||
|
|
||||||
The bodys of outgoing ActivityPub requests are "rendered" using `renderer/`.
|
#### Outgoing Activities
|
||||||
|
Outgoing activities are usually initiated in the logic of the API endpoints.
|
||||||
|
The bodies of outgoing ActivityPub requests are "rendered" using `renderer/`.
|
||||||
These files define several functions that are meant to be used together, e.g. `renderCreate(await renderNote(note, false), note)`.
|
These files define several functions that are meant to be used together, e.g. `renderCreate(await renderNote(note, false), note)`.
|
||||||
The invocation of these functions is placed either in the API endpoints directly or in the services code.
|
The invocation of these functions is placed either in the API endpoints directly or in the services code.
|
||||||
|
|
||||||
Both incoming and outgoing ActivityPub request are handled through queues, to e.g. allow for retrying a request when it fails, or spikes of many incoming requests.
|
The rendered bodies of the functions and the recipients are put into the deliver queue to be delivered.
|
||||||
|
|
||||||
### Services
|
### Services
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,9 @@ FoundKey is a free and open source microblogging server compatible with Activity
|
||||||
See the [changelog](./CHANGELOG.md) and [roadmap](./ROADMAP.md) for more on what's changed and future plans.
|
See the [changelog](./CHANGELOG.md) and [roadmap](./ROADMAP.md) for more on what's changed and future plans.
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
FoundKey's documentation is a work in progress. In the meantime, much of the documentation on the [Misskey Hub](https://misskey-hub.net/) will also apply to FoundKey.
|
FoundKey's documentation is a work in progress, which can be found in the `docs/` folder.
|
||||||
|
|
||||||
|
In the meantime, much of the documentation on the [Misskey Hub](https://misskey-hub.net/) will also apply to FoundKey.
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
If you're interested in helping out with the project, please read the [contributing guide](./CONTRIBUTING.md).
|
If you're interested in helping out with the project, please read the [contributing guide](./CONTRIBUTING.md).
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
# Changing the default Reaction
|
|
||||||
You can change the default reaction that is used when an ActivityPub "Like" is received from '👍' to '⭐' by changing the boolean value `meta.useStarForReactionFallback` in the databse respectively.
|
|
|
@ -64,6 +64,13 @@ adduser --disabled-password --disabled-login foundkey
|
||||||
- Make sure you set the PostgreSQL and Redis settings correctly.
|
- Make sure you set the PostgreSQL and Redis settings correctly.
|
||||||
- Use a strong password for the PostgreSQL user and take note of it since it'll be needed later.
|
- Use a strong password for the PostgreSQL user and take note of it since it'll be needed later.
|
||||||
|
|
||||||
|
### Reverse proxy
|
||||||
|
For production use and for HTTPS termination you will have to use a reverse proxy.
|
||||||
|
There are instructions for setting up [nginx](./nginx.md) for this purpose.
|
||||||
|
|
||||||
|
### Changing the default Reaction
|
||||||
|
You can change the default reaction that is used when an ActivityPub "Like" is received from '👍' to '⭐' by changing the boolean value `meta.useStarForReactionFallback` in the databse respectively.
|
||||||
|
|
||||||
## Build FoundKey
|
## Build FoundKey
|
||||||
|
|
||||||
Build foundkey with the following:
|
Build foundkey with the following:
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
4. Run `sudo nginx -t` to verify that the configuration file will be loaded successfully.
|
4. Run `sudo nginx -t` to verify that the configuration file will be loaded successfully.
|
||||||
5. Run `sudo systemctl restart nginx` to restart nginx.
|
5. Run `sudo systemctl restart nginx` to restart nginx.
|
||||||
|
|
||||||
# Nginx cofig example
|
# Nginx config example
|
||||||
|
|
||||||
```nginx
|
```nginx
|
||||||
# For WebSocket
|
# For WebSocket
|
||||||
|
|
|
@ -11,9 +11,9 @@ username: "اسم المستخدم"
|
||||||
password: "الكلمة السرية"
|
password: "الكلمة السرية"
|
||||||
forgotPassword: "نسيتَ كلمة السر"
|
forgotPassword: "نسيتَ كلمة السر"
|
||||||
fetchingAsApObject: "جارٍ جلبه مِن الفديفرس…"
|
fetchingAsApObject: "جارٍ جلبه مِن الفديفرس…"
|
||||||
ok: " حسناً"
|
ok: "حسناً"
|
||||||
gotIt: "فهِمت"
|
gotIt: "فهِمت"
|
||||||
cancel: " إلغاء"
|
cancel: "إلغاء"
|
||||||
renotedBy: "أعاد نشرها {user}"
|
renotedBy: "أعاد نشرها {user}"
|
||||||
noNotes: "لم يُعثر على أية ملاحظات"
|
noNotes: "لم يُعثر على أية ملاحظات"
|
||||||
noNotifications: "ليس هناك أية اشعارات"
|
noNotifications: "ليس هناك أية اشعارات"
|
||||||
|
@ -144,7 +144,7 @@ youHaveNoLists: "لا تمتلك أية قائمة"
|
||||||
followConfirm: "أتريد متابعة {name}؟"
|
followConfirm: "أتريد متابعة {name}؟"
|
||||||
proxyAccount: "حساب وكيل البروكسي"
|
proxyAccount: "حساب وكيل البروكسي"
|
||||||
proxyAccountDescription: "يتصرف حساب الوكيل كمتابع بعيد لمستخدمين تحت ظروف معينة.\
|
proxyAccountDescription: "يتصرف حساب الوكيل كمتابع بعيد لمستخدمين تحت ظروف معينة.\
|
||||||
\ على سبيل المثال ، عندما يضيف مستخدم مستخدمًا بعيدًا إلى قائمة فإن ملاحظاته لن\
|
\ على سبيل المثال ، عندما يضيف مستخدم مستخدمًا بعيدًا إلى قائمة فإن ملاحظاته لن\
|
||||||
\ تُرسل إلى المثيل ما لم يُتابعه مستخدم محلي. وبالتالي فإن حساب الوكيل سوف يتابع\
|
\ تُرسل إلى المثيل ما لم يُتابعه مستخدم محلي. وبالتالي فإن حساب الوكيل سوف يتابع\
|
||||||
\ هذا المستخدم لكي تُرسل ملاحظاته."
|
\ هذا المستخدم لكي تُرسل ملاحظاته."
|
||||||
host: "المضيف"
|
host: "المضيف"
|
||||||
|
@ -222,7 +222,7 @@ fromUrl: "عبر رابط"
|
||||||
uploadFromUrl: "ارفع عبر رابط"
|
uploadFromUrl: "ارفع عبر رابط"
|
||||||
uploadFromUrlDescription: "رابط الملف المراد رفعه"
|
uploadFromUrlDescription: "رابط الملف المراد رفعه"
|
||||||
uploadFromUrlRequested: "الرفع مطلوب"
|
uploadFromUrlRequested: "الرفع مطلوب"
|
||||||
uploadFromUrlMayTakeTime: "سيستغرق بعض الوقت لاتمام الرفع "
|
uploadFromUrlMayTakeTime: "سيستغرق بعض الوقت لاتمام الرفع"
|
||||||
explore: "استكشاف"
|
explore: "استكشاف"
|
||||||
messageRead: "مقروءة"
|
messageRead: "مقروءة"
|
||||||
noMoreHistory: "لا يوجد المزيد من التاريخ"
|
noMoreHistory: "لا يوجد المزيد من التاريخ"
|
||||||
|
@ -484,7 +484,7 @@ description: "الوصف"
|
||||||
describeFile: "أضف تعليقًا توضيحيًا"
|
describeFile: "أضف تعليقًا توضيحيًا"
|
||||||
author: "الكاتب"
|
author: "الكاتب"
|
||||||
leaveConfirm: "لديك تغييرات غير محفوظة. أتريد المتابعة دون حفظها؟"
|
leaveConfirm: "لديك تغييرات غير محفوظة. أتريد المتابعة دون حفظها؟"
|
||||||
manage: "إدارة "
|
manage: "إدارة"
|
||||||
plugins: "الإضافات"
|
plugins: "الإضافات"
|
||||||
width: "العرض"
|
width: "العرض"
|
||||||
height: "الإرتفاع"
|
height: "الإرتفاع"
|
||||||
|
@ -502,7 +502,7 @@ useStarForReactionFallback: "استخدم ★ كبديل إذا كان التف
|
||||||
emailServer: "خادم البريد الإلكتروني"
|
emailServer: "خادم البريد الإلكتروني"
|
||||||
emailConfigInfo: "يستخدم لتأكيد عنوان بريدك الإلكتروني ولإعادة تعيين كلمة المرور إن\
|
emailConfigInfo: "يستخدم لتأكيد عنوان بريدك الإلكتروني ولإعادة تعيين كلمة المرور إن\
|
||||||
\ نسيتها."
|
\ نسيتها."
|
||||||
email: "البريد الإلكتروني "
|
email: "البريد الإلكتروني"
|
||||||
emailAddress: "عنوان البريد الالكتروني"
|
emailAddress: "عنوان البريد الالكتروني"
|
||||||
smtpConfig: "إعدادات خادم SMTP"
|
smtpConfig: "إعدادات خادم SMTP"
|
||||||
smtpHost: "المضيف"
|
smtpHost: "المضيف"
|
||||||
|
@ -645,16 +645,13 @@ enabled: "مفعّل"
|
||||||
disabled: "معطّل"
|
disabled: "معطّل"
|
||||||
quickAction: "الإجراءات السّريعة"
|
quickAction: "الإجراءات السّريعة"
|
||||||
user: "المستخدمون"
|
user: "المستخدمون"
|
||||||
administration: "إدارة "
|
administration: "إدارة"
|
||||||
accounts: "الحسابات"
|
accounts: "الحسابات"
|
||||||
switch: "بدّل"
|
switch: "بدّل"
|
||||||
noMaintainerInformationWarning: "لم تُضبط معلومات المدير"
|
noMaintainerInformationWarning: "لم تُضبط معلومات المدير"
|
||||||
noBotProtectionWarning: "لم تضبط الحماية من الحسابات الآلية"
|
noBotProtectionWarning: "لم تضبط الحماية من الحسابات الآلية"
|
||||||
configure: "اضبط"
|
configure: "اضبط"
|
||||||
postToGallery: "انشر في المعرض"
|
|
||||||
gallery: "المعرض"
|
|
||||||
recentPosts: "المشاركات الحديثة"
|
recentPosts: "المشاركات الحديثة"
|
||||||
popularPosts: "المشاركات المتداولة"
|
|
||||||
shareWithNote: "شاركه في ملاحظة"
|
shareWithNote: "شاركه في ملاحظة"
|
||||||
emailNotConfiguredWarning: "لم تعيّن بريدًا إلكترونيًا"
|
emailNotConfiguredWarning: "لم تعيّن بريدًا إلكترونيًا"
|
||||||
ratio: "النسبة"
|
ratio: "النسبة"
|
||||||
|
@ -743,11 +740,6 @@ _forgotPassword:
|
||||||
ifNoEmail: "إذا لم تربط حسابك ببريد إلكتروني سيتوجب عليك التواصل مع مدير الموقع."
|
ifNoEmail: "إذا لم تربط حسابك ببريد إلكتروني سيتوجب عليك التواصل مع مدير الموقع."
|
||||||
contactAdmin: "هذا المثيل لا يدعم استخدام البريد الإلكتروني، إن أردت إعادة تعيين\
|
contactAdmin: "هذا المثيل لا يدعم استخدام البريد الإلكتروني، إن أردت إعادة تعيين\
|
||||||
\ كلمة المرور تواصل مع المدير."
|
\ كلمة المرور تواصل مع المدير."
|
||||||
_gallery:
|
|
||||||
my: "معرضي"
|
|
||||||
liked: "المشاركات المُعجب بها"
|
|
||||||
like: "أعجبني"
|
|
||||||
unlike: "أزل الإعجاب"
|
|
||||||
_email:
|
_email:
|
||||||
_follow:
|
_follow:
|
||||||
title: "يتابعك"
|
title: "يتابعك"
|
||||||
|
@ -772,7 +764,7 @@ _nsfw:
|
||||||
force: "اخف كل الوسائط"
|
force: "اخف كل الوسائط"
|
||||||
_mfm:
|
_mfm:
|
||||||
cheatSheet: "مرجع ملخص عن MFM"
|
cheatSheet: "مرجع ملخص عن MFM"
|
||||||
intro: "MFM هي لغة ترميزية مخصصة يمكن استخدامها في عدّة أماكن في ميسكي. يمكنك مراجعة\
|
intro: "MFM هي لغة ترميزية مخصصة يمكن استخدامها في عدّة أماكن في ميسكي. يمكنك مراجعة\
|
||||||
\ كل تعابيرها مع كيفية استخدامها هنا."
|
\ كل تعابيرها مع كيفية استخدامها هنا."
|
||||||
mention: "أشر الى"
|
mention: "أشر الى"
|
||||||
mentionDescription: "يمكنك الإشارة لمستخدم معيّن من خلال كتابة @ متبوعة باسم مستخدم."
|
mentionDescription: "يمكنك الإشارة لمستخدم معيّن من خلال كتابة @ متبوعة باسم مستخدم."
|
||||||
|
@ -950,7 +942,6 @@ _permissions:
|
||||||
"write:notes": "أنشئ أو احذف ملاحظات"
|
"write:notes": "أنشئ أو احذف ملاحظات"
|
||||||
"read:notifications": "اظهر الإشعارات"
|
"read:notifications": "اظهر الإشعارات"
|
||||||
"write:notifications": "إدارة الإشعارات"
|
"write:notifications": "إدارة الإشعارات"
|
||||||
"read:reactions": "اعرض تفاعلاتك"
|
|
||||||
"write:reactions": "عدّل تفاعلاتك"
|
"write:reactions": "عدّل تفاعلاتك"
|
||||||
"write:votes": "صوّت"
|
"write:votes": "صوّت"
|
||||||
"read:pages": "اعرض صفحاتك"
|
"read:pages": "اعرض صفحاتك"
|
||||||
|
@ -960,9 +951,6 @@ _permissions:
|
||||||
"write:user-groups": "عدّل أو احذف فِرق المستخدمين"
|
"write:user-groups": "عدّل أو احذف فِرق المستخدمين"
|
||||||
"read:channels": "طالع قنواتك"
|
"read:channels": "طالع قنواتك"
|
||||||
"write:channels": "عدّل القنوات"
|
"write:channels": "عدّل القنوات"
|
||||||
"read:gallery": "اعرض المعرض"
|
|
||||||
"write:gallery": "عدّل المعرض"
|
|
||||||
"read:gallery-likes": "يعرض ما أعجبك من مشاركات المعرض"
|
|
||||||
_auth:
|
_auth:
|
||||||
shareAccess: "أتريد التفويض لـ \"{name}\" بالوصول لحسابك؟"
|
shareAccess: "أتريد التفويض لـ \"{name}\" بالوصول لحسابك؟"
|
||||||
shareAccessAsk: "هل تخول لهذا التطبيق الوصول لحسابك؟"
|
shareAccessAsk: "هل تخول لهذا التطبيق الوصول لحسابك؟"
|
||||||
|
|
|
@ -3,7 +3,7 @@ headlineMisskey: "নোট ব্যাবহার করে সংযুক
|
||||||
introMisskey: "স্বাগতম! মিসকি একটি ওপেন সোর্স, ডিসেন্ট্রালাইজড মাইক্রোব্লগিং পরিষেবা।\
|
introMisskey: "স্বাগতম! মিসকি একটি ওপেন সোর্স, ডিসেন্ট্রালাইজড মাইক্রোব্লগিং পরিষেবা।\
|
||||||
\ \n\"নোট\" তৈরির মাধ্যমে যা ঘটছে তা সবার সাথে শেয়ার করুন \U0001F4E1\n\"রিঅ্যাকশন\"\
|
\ \n\"নোট\" তৈরির মাধ্যমে যা ঘটছে তা সবার সাথে শেয়ার করুন \U0001F4E1\n\"রিঅ্যাকশন\"\
|
||||||
\ গুলির মাধ্যমে যেকোনো নোট সম্পর্কে আপনার অনুভূতি ব্যাক্ত করতে পারেন \U0001F44D\n\
|
\ গুলির মাধ্যমে যেকোনো নোট সম্পর্কে আপনার অনুভূতি ব্যাক্ত করতে পারেন \U0001F44D\n\
|
||||||
একটি নতুন দুনিয়া ঘুরে দেখুন \U0001F680\n"
|
একটি নতুন দুনিয়া ঘুরে দেখুন \U0001F680"
|
||||||
monthAndDay: "{day}/{month}"
|
monthAndDay: "{day}/{month}"
|
||||||
search: "খুঁজুন"
|
search: "খুঁজুন"
|
||||||
notifications: "বিজ্ঞপ্তি"
|
notifications: "বিজ্ঞপ্তি"
|
||||||
|
@ -65,7 +65,7 @@ driveFileDeleteConfirm: "আপনি কি নিশ্চিত যে আপ
|
||||||
unfollowConfirm: "{name} কে আনফলোও করার ব্যাপারে নিশ্চিত?"
|
unfollowConfirm: "{name} কে আনফলোও করার ব্যাপারে নিশ্চিত?"
|
||||||
exportRequested: "আপনার তথ্যসমূহ রপ্তানির জন্য অনুরোধ করেছেন। এতে কিছু সময় লাগতে পারে।\
|
exportRequested: "আপনার তথ্যসমূহ রপ্তানির জন্য অনুরোধ করেছেন। এতে কিছু সময় লাগতে পারে।\
|
||||||
\ রপ্তানি সম্পন্ন হলে তা আপনার ড্রাইভে সংরক্ষিত হবে।"
|
\ রপ্তানি সম্পন্ন হলে তা আপনার ড্রাইভে সংরক্ষিত হবে।"
|
||||||
importRequested: "আপনার তথ্যসমূহ আমদানির জন্য অনুরোধ করেছেন। এতে কিছু সময় লাগতে পারে। "
|
importRequested: "আপনার তথ্যসমূহ আমদানির জন্য অনুরোধ করেছেন। এতে কিছু সময় লাগতে পারে।."
|
||||||
lists: "লিস্ট"
|
lists: "লিস্ট"
|
||||||
note: "নোট"
|
note: "নোট"
|
||||||
notes: "নোটগুলি"
|
notes: "নোটগুলি"
|
||||||
|
@ -79,10 +79,10 @@ somethingHappened: "একটি ত্রুটি হয়েছে"
|
||||||
retry: "আবার চেষ্টা করুন"
|
retry: "আবার চেষ্টা করুন"
|
||||||
pageLoadError: "পেজ লোড করা যায়নি"
|
pageLoadError: "পেজ লোড করা যায়নি"
|
||||||
pageLoadErrorDescription: "এটি সাধারনত নেটওয়ার্কের সমস্যার বা ব্রাউজার ক্যাশের কারণে\
|
pageLoadErrorDescription: "এটি সাধারনত নেটওয়ার্কের সমস্যার বা ব্রাউজার ক্যাশের কারণে\
|
||||||
\ ঘটে থাকে। ব্রাউজার এর ক্যাশ পরিষ্কার করুন এবং একটু পর আবার চেষ্টা করুন। "
|
\ ঘটে থাকে। ব্রাউজার এর ক্যাশ পরিষ্কার করুন এবং একটু পর আবার চেষ্টা করুন।."
|
||||||
serverIsDead: "এই সার্ভার বর্তমানে সাড়া দিচ্ছে না। একটু পরে আবার চেষ্টা করুন।"
|
serverIsDead: "এই সার্ভার বর্তমানে সাড়া দিচ্ছে না। একটু পরে আবার চেষ্টা করুন।"
|
||||||
youShouldUpgradeClient: "এই পেজ দেখার জন্য আপনার ব্রাউজার রিফ্রেশ করে ক্লায়েন্ট আপডেট\
|
youShouldUpgradeClient: "এই পেজ দেখার জন্য আপনার ব্রাউজার রিফ্রেশ করে ক্লায়েন্ট আপডেট\
|
||||||
\ করুন। "
|
\ করুন।."
|
||||||
enterListName: "লিস্টের নাম লিখুন"
|
enterListName: "লিস্টের নাম লিখুন"
|
||||||
privacy: "গোপনীয়তা"
|
privacy: "গোপনীয়তা"
|
||||||
makeFollowManuallyApprove: "অনুসরণ করার অনুরোধগুলি গৃহীত হওয়ার জন্য আপনার অনুমতি লাগবে"
|
makeFollowManuallyApprove: "অনুসরণ করার অনুরোধগুলি গৃহীত হওয়ার জন্য আপনার অনুমতি লাগবে"
|
||||||
|
@ -93,7 +93,7 @@ followRequests: "অনুসরণ করার অনুরোধসমূহ"
|
||||||
unfollow: "অনুসরণ বাতিল"
|
unfollow: "অনুসরণ বাতিল"
|
||||||
followRequestPending: "অনুসরণ করার অনুরোধ বিচারাধীন"
|
followRequestPending: "অনুসরণ করার অনুরোধ বিচারাধীন"
|
||||||
renote: "রিনোট"
|
renote: "রিনোট"
|
||||||
unrenote: "রিনোট সরান "
|
unrenote: "রিনোট সরান"
|
||||||
quote: "উদ্ধৃতি"
|
quote: "উদ্ধৃতি"
|
||||||
pinnedNote: "পিন করা নোট"
|
pinnedNote: "পিন করা নোট"
|
||||||
you: "আপনি"
|
you: "আপনি"
|
||||||
|
@ -103,7 +103,7 @@ add: "যুক্ত করুন"
|
||||||
reaction: "প্রতিক্রিয়া"
|
reaction: "প্রতিক্রিয়া"
|
||||||
reactionSettingDescription2: "পুনরায় সাজাতে টেনে আনুন, মুছতে ক্লিক করুন, যোগ করতে\
|
reactionSettingDescription2: "পুনরায় সাজাতে টেনে আনুন, মুছতে ক্লিক করুন, যোগ করতে\
|
||||||
\ + টিপুন।"
|
\ + টিপুন।"
|
||||||
attachCancel: "অ্যাটাচমেন্ট সরান "
|
attachCancel: "অ্যাটাচমেন্ট সরান"
|
||||||
markAsSensitive: "সংবেদনশীল হিসাবে চিহ্নিত করুন"
|
markAsSensitive: "সংবেদনশীল হিসাবে চিহ্নিত করুন"
|
||||||
unmarkAsSensitive: "সংবেদনশীল চিহ্ন সরান"
|
unmarkAsSensitive: "সংবেদনশীল চিহ্ন সরান"
|
||||||
enterFileName: "ফাইলের নাম লিখুন"
|
enterFileName: "ফাইলের নাম লিখুন"
|
||||||
|
@ -129,7 +129,7 @@ addEmoji: "ইমোজি যুক্ত করুন"
|
||||||
cacheRemoteFiles: "রিমোট ফাইলসমুহ ক্যাশ করুন"
|
cacheRemoteFiles: "রিমোট ফাইলসমুহ ক্যাশ করুন"
|
||||||
cacheRemoteFilesDescription: "যখন এই অপশনটি বন্ধ থাকে তখন রিমোট ফাইল সমূহ সরাসরি রিমোট\
|
cacheRemoteFilesDescription: "যখন এই অপশনটি বন্ধ থাকে তখন রিমোট ফাইল সমূহ সরাসরি রিমোট\
|
||||||
\ ইন্সট্যান্স থেকে লোড করা হয়। এই অপশনটি বন্ধ করলে স্টোরেজ এর ব্যাবহার কমবে তবে\
|
\ ইন্সট্যান্স থেকে লোড করা হয়। এই অপশনটি বন্ধ করলে স্টোরেজ এর ব্যাবহার কমবে তবে\
|
||||||
\ থাম্বনেইল তৈরি না করার কারণে নেটওয়ার্ক ব্যান্ডউইথ বেশী লাগবে। "
|
\ থাম্বনেইল তৈরি না করার কারণে নেটওয়ার্ক ব্যান্ডউইথ বেশী লাগবে।"
|
||||||
flagAsBot: "বট হিসাবে চিহ্নিত করুন"
|
flagAsBot: "বট হিসাবে চিহ্নিত করুন"
|
||||||
flagAsBotDescription: "এই অ্যাকাউন্টটি যদি একটি প্রোগ্রাম দ্বারা পরিচালিত হয়, তাহলে\
|
flagAsBotDescription: "এই অ্যাকাউন্টটি যদি একটি প্রোগ্রাম দ্বারা পরিচালিত হয়, তাহলে\
|
||||||
\ এই অপশনটি চালু করুন। ইন্টারঅ্যাকশান চেইনিং রোধ করতে, মিস্কির সিস্টেম পরিচালনাকে\
|
\ এই অপশনটি চালু করুন। ইন্টারঅ্যাকশান চেইনিং রোধ করতে, মিস্কির সিস্টেম পরিচালনাকে\
|
||||||
|
@ -184,7 +184,7 @@ clearCachedFiles: "ক্যাশ পরিষ্কার করুন"
|
||||||
clearCachedFilesConfirm: "আপনি কি ক্যাশ পরিষ্কার করার ব্যাপারে নিশ্চিত?"
|
clearCachedFilesConfirm: "আপনি কি ক্যাশ পরিষ্কার করার ব্যাপারে নিশ্চিত?"
|
||||||
blockedInstances: "ব্লককৃত ইন্সট্যান্সসমুহ"
|
blockedInstances: "ব্লককৃত ইন্সট্যান্সসমুহ"
|
||||||
blockedInstancesDescription: "আপনি যে ইন্সট্যান্সগুলি ব্লক করতে চান তার হোস্টনেমগুলি\
|
blockedInstancesDescription: "আপনি যে ইন্সট্যান্সগুলি ব্লক করতে চান তার হোস্টনেমগুলি\
|
||||||
\ প্রত্যেকটি আলাদা লাইনে লিখুন। ব্লককৃত ইন্সট্যান্সগুলি এই ইন্সট্যান্সের সাথে যোগাযোগ\
|
\ প্রত্যেকটি আলাদা লাইনে লিখুন। ব্লককৃত ইন্সট্যান্সগুলি এই ইন্সট্যান্সের সাথে যোগাযোগ\
|
||||||
\ করতে পারবেনা৷"
|
\ করতে পারবেনা৷"
|
||||||
muteAndBlock: "মিউট এবং ব্লকগুলি"
|
muteAndBlock: "মিউট এবং ব্লকগুলি"
|
||||||
mutedUsers: "নিঃশব্দকৃত ব্যবহারকারী"
|
mutedUsers: "নিঃশব্দকৃত ব্যবহারকারী"
|
||||||
|
@ -292,7 +292,7 @@ reload: "আবার লোড করুন"
|
||||||
doNothing: "কিছু করবেন না"
|
doNothing: "কিছু করবেন না"
|
||||||
reloadConfirm: "আপনি কি রিলোড করতে চান?"
|
reloadConfirm: "আপনি কি রিলোড করতে চান?"
|
||||||
watch: "বিজ্ঞপ্তি পান"
|
watch: "বিজ্ঞপ্তি পান"
|
||||||
unwatch: "বিজ্ঞপ্তি পাওয়া বন্ধ করুন "
|
unwatch: "বিজ্ঞপ্তি পাওয়া বন্ধ করুন"
|
||||||
accept: "অনুমোদন"
|
accept: "অনুমোদন"
|
||||||
reject: "প্রত্যাখ্যান"
|
reject: "প্রত্যাখ্যান"
|
||||||
normal: "স্বাভাবিক"
|
normal: "স্বাভাবিক"
|
||||||
|
@ -422,7 +422,7 @@ uiLanguage: "UI এর ভাষা"
|
||||||
groupInvited: "আপনি একটি গ্রুপে আমন্ত্রিত হয়েছেন"
|
groupInvited: "আপনি একটি গ্রুপে আমন্ত্রিত হয়েছেন"
|
||||||
useOsNativeEmojis: "অপারেটিং সিস্টেমের নেটিভ ইমোজি ব্যবহার করুন"
|
useOsNativeEmojis: "অপারেটিং সিস্টেমের নেটিভ ইমোজি ব্যবহার করুন"
|
||||||
disableDrawer: "ড্রয়ার মেনু প্রদর্শন করবেন না"
|
disableDrawer: "ড্রয়ার মেনু প্রদর্শন করবেন না"
|
||||||
youHaveNoGroups: "আপনার কোন গ্রুপ নেই "
|
youHaveNoGroups: "আপনার কোন গ্রুপ নেই"
|
||||||
joinOrCreateGroup: "একটি বিদ্যমান গ্রুপের আমন্ত্রণ পান বা একটি নতুন গ্রুপ তৈরি করুন৷"
|
joinOrCreateGroup: "একটি বিদ্যমান গ্রুপের আমন্ত্রণ পান বা একটি নতুন গ্রুপ তৈরি করুন৷"
|
||||||
noHistory: "কোনো ইতিহাস নেই"
|
noHistory: "কোনো ইতিহাস নেই"
|
||||||
signinHistory: "প্রবেশ করার ইতিহাস"
|
signinHistory: "প্রবেশ করার ইতিহাস"
|
||||||
|
@ -447,7 +447,7 @@ objectStorageBaseUrl: "Base URL"
|
||||||
objectStorageBaseUrlDesc: "রেফারেন্স হিসাবে ব্যবহৃত URL। আপনি একটি CDN বা প্রক্সি\
|
objectStorageBaseUrlDesc: "রেফারেন্স হিসাবে ব্যবহৃত URL। আপনি একটি CDN বা প্রক্সি\
|
||||||
\ ব্যবহার করলে URL, S3: 'https://<bucket>.s3.amazonaws.com', GCS: 'https://storage.googleapis.com/<bucket>'।"
|
\ ব্যবহার করলে URL, S3: 'https://<bucket>.s3.amazonaws.com', GCS: 'https://storage.googleapis.com/<bucket>'।"
|
||||||
objectStorageBucket: "Bucket"
|
objectStorageBucket: "Bucket"
|
||||||
objectStorageBucketDesc: "ব্যবহার করা পরিষেবার bucket এর নাম লিখুন। "
|
objectStorageBucketDesc: "ব্যবহার করা পরিষেবার bucket এর নাম লিখুন।."
|
||||||
objectStoragePrefix: "Prefix"
|
objectStoragePrefix: "Prefix"
|
||||||
objectStoragePrefixDesc: "ফাইলসমূহ এই prefix যুক্ত ফোল্ডারের অধীনে সংরক্ষণ করা হবে।"
|
objectStoragePrefixDesc: "ফাইলসমূহ এই prefix যুক্ত ফোল্ডারের অধীনে সংরক্ষণ করা হবে।"
|
||||||
objectStorageEndpoint: "এন্ডপয়েন্ট"
|
objectStorageEndpoint: "এন্ডপয়েন্ট"
|
||||||
|
@ -495,7 +495,7 @@ deleteAllFilesConfirm: "সকল ফাইল ডিলিট করতে চ
|
||||||
removeAllFollowing: "সকল অনুসরণ বাতিল করুন"
|
removeAllFollowing: "সকল অনুসরণ বাতিল করুন"
|
||||||
removeAllFollowingDescription: "{host} এর সকল ব্যাবহারকারীকে আর ফলোও করবেন না । যদি\
|
removeAllFollowingDescription: "{host} এর সকল ব্যাবহারকারীকে আর ফলোও করবেন না । যদি\
|
||||||
\ ইন্সত্যান্সটির কোন সমস্যা (যেমনঃ ইন্সত্যান্সটি আর নেই) হয়ে থাকে তবে এটি ব্যাবহার\
|
\ ইন্সত্যান্সটির কোন সমস্যা (যেমনঃ ইন্সত্যান্সটি আর নেই) হয়ে থাকে তবে এটি ব্যাবহার\
|
||||||
\ করুন । "
|
\ করুন ।."
|
||||||
userSuspended: "এই ব্যাবহারকারির অ্যাকাউন্ট স্থগিত করা হয়েছে"
|
userSuspended: "এই ব্যাবহারকারির অ্যাকাউন্ট স্থগিত করা হয়েছে"
|
||||||
userSilenced: "এই ব্যাবহারকারিকে মিউট করা হয়েছে"
|
userSilenced: "এই ব্যাবহারকারিকে মিউট করা হয়েছে"
|
||||||
yourAccountSuspendedTitle: "এই অ্যাকাউন্টটি স্থগিত করা হয়েছে"
|
yourAccountSuspendedTitle: "এই অ্যাকাউন্টটি স্থগিত করা হয়েছে"
|
||||||
|
@ -625,7 +625,7 @@ driveFilesCount: "ড্রাইভে ফাইল এর সংখ্যা"
|
||||||
driveUsage: "ড্রাইভ এর ব্যাবহার"
|
driveUsage: "ড্রাইভ এর ব্যাবহার"
|
||||||
noCrawle: "ক্রলার ইন্ডেক্সিং বন্ধ করুন"
|
noCrawle: "ক্রলার ইন্ডেক্সিং বন্ধ করুন"
|
||||||
noCrawleDescription: "সার্চ ইঞ্জিনগুলিকে আপনার প্রোফাইল, নোট, পেজ ইত্যাদি ইনডেক্স\
|
noCrawleDescription: "সার্চ ইঞ্জিনগুলিকে আপনার প্রোফাইল, নোট, পেজ ইত্যাদি ইনডেক্স\
|
||||||
\ করতে নিষেধ করুন। "
|
\ করতে নিষেধ করুন।."
|
||||||
lockedAccountInfo: "এমনকি আপনি আপনার অনুসরণকারীদের বেছে বেছে অনুমোদন করলেও, যে কেউ\
|
lockedAccountInfo: "এমনকি আপনি আপনার অনুসরণকারীদের বেছে বেছে অনুমোদন করলেও, যে কেউ\
|
||||||
\ আপনার নোটগুলি দেখতে পাবে, যতক্ষণ না আপনি আপনার নোটগুলিকে \"অনুসারীদের জন্য\" হিসাবে\
|
\ আপনার নোটগুলি দেখতে পাবে, যতক্ষণ না আপনি আপনার নোটগুলিকে \"অনুসারীদের জন্য\" হিসাবে\
|
||||||
\ সেট না করেন৷"
|
\ সেট না করেন৷"
|
||||||
|
@ -640,7 +640,7 @@ pageLikesCount: "পেজ লাইক করেছেন"
|
||||||
pageLikedCount: "পেজ লাইক পেয়েছেন"
|
pageLikedCount: "পেজ লাইক পেয়েছেন"
|
||||||
contact: "পরিচিতি সমূহ"
|
contact: "পরিচিতি সমূহ"
|
||||||
useSystemFont: "সিস্টেম ফন্ট ব্যাবহার করুন"
|
useSystemFont: "সিস্টেম ফন্ট ব্যাবহার করুন"
|
||||||
clips: "ক্লিপগুলি "
|
clips: "ক্লিপগুলি"
|
||||||
makeExplorable: "অ্যাকাউন্ট \"ঘুরে দেখুন\" পৃষ্ঠায় দেখান"
|
makeExplorable: "অ্যাকাউন্ট \"ঘুরে দেখুন\" পৃষ্ঠায় দেখান"
|
||||||
makeExplorableDescription: "আপনি এটি বন্ধ করলে, আপনার অ্যাকাউন্ট \"ঘুরে দেখুন\" পৃষ্ঠায়\
|
makeExplorableDescription: "আপনি এটি বন্ধ করলে, আপনার অ্যাকাউন্ট \"ঘুরে দেখুন\" পৃষ্ঠায়\
|
||||||
\ প্রদর্শিত হবে না।"
|
\ প্রদর্শিত হবে না।"
|
||||||
|
@ -671,7 +671,6 @@ editCode: "কোড সম্পাদনা করুন"
|
||||||
apply: "প্রয়োগ করুন"
|
apply: "প্রয়োগ করুন"
|
||||||
receiveAnnouncementFromInstance: "এই ইন্সট্যান্স থেকে বিজ্ঞপ্তি পান"
|
receiveAnnouncementFromInstance: "এই ইন্সট্যান্স থেকে বিজ্ঞপ্তি পান"
|
||||||
emailNotification: "ইমেইল বিজ্ঞপ্তি"
|
emailNotification: "ইমেইল বিজ্ঞপ্তি"
|
||||||
publish: "প্রকাশ"
|
|
||||||
useReactionPickerForContextMenu: "রাইট ক্লিকের মাধ্যমে রিঅ্যাকশন পিকার খুলুন"
|
useReactionPickerForContextMenu: "রাইট ক্লিকের মাধ্যমে রিঅ্যাকশন পিকার খুলুন"
|
||||||
typingUsers: "{users} লেখছে"
|
typingUsers: "{users} লেখছে"
|
||||||
jumpToSpecifiedDate: "একটি নির্দিষ্ট তারিখে যান"
|
jumpToSpecifiedDate: "একটি নির্দিষ্ট তারিখে যান"
|
||||||
|
@ -710,10 +709,7 @@ switch: "পাল্টান"
|
||||||
noMaintainerInformationWarning: "প্রশাসকের তথ্য সেট করা হয়নি।"
|
noMaintainerInformationWarning: "প্রশাসকের তথ্য সেট করা হয়নি।"
|
||||||
noBotProtectionWarning: "বট প্রোটেকশন সেট করা হয়নি।"
|
noBotProtectionWarning: "বট প্রোটেকশন সেট করা হয়নি।"
|
||||||
configure: "কনফিগার করুন"
|
configure: "কনফিগার করুন"
|
||||||
postToGallery: "গ্যালারী পোস্ট তৈরি করুন"
|
|
||||||
gallery: "গ্যালারী"
|
|
||||||
recentPosts: "নতুন পোস্ট"
|
recentPosts: "নতুন পোস্ট"
|
||||||
popularPosts: "জনপ্রিয় পোস্ট"
|
|
||||||
shareWithNote: "নোটের মাধ্যমে শেয়ার করুন"
|
shareWithNote: "নোটের মাধ্যমে শেয়ার করুন"
|
||||||
emailNotConfiguredWarning: "ইমেইল অ্যাড্রেস সেট করা হয়নি।"
|
emailNotConfiguredWarning: "ইমেইল অ্যাড্রেস সেট করা হয়নি।"
|
||||||
ratio: "অনুপাত"
|
ratio: "অনুপাত"
|
||||||
|
@ -721,7 +717,7 @@ previewNoteText: "প্রিভিউ দেখান"
|
||||||
customCss: "কাস্টম CSS"
|
customCss: "কাস্টম CSS"
|
||||||
customCssWarn: "এই ব্যাপারে অভিজ্ঞতা না থাকলে এই সেটিংটি ব্যাবহার করবেন না। অনুপযুক্ত\
|
customCssWarn: "এই ব্যাপারে অভিজ্ঞতা না থাকলে এই সেটিংটি ব্যাবহার করবেন না। অনুপযুক্ত\
|
||||||
\ সেটিংস ক্লায়েন্টকে স্বাভাবিকভাবে ব্যবহার করতে বাধা দিতে পারে।"
|
\ সেটিংস ক্লায়েন্টকে স্বাভাবিকভাবে ব্যবহার করতে বাধা দিতে পারে।"
|
||||||
squareAvatars: "চারকোনা প্রোফাইল পিকচার দেখান "
|
squareAvatars: "চারকোনা প্রোফাইল পিকচার দেখান"
|
||||||
searchResult: "অনুসন্ধানের ফলাফল"
|
searchResult: "অনুসন্ধানের ফলাফল"
|
||||||
hashtags: "হ্যাশট্যাগ"
|
hashtags: "হ্যাশট্যাগ"
|
||||||
troubleshooting: "ট্রাবলশুটিং"
|
troubleshooting: "ট্রাবলশুটিং"
|
||||||
|
@ -765,7 +761,7 @@ hide: "লুকান"
|
||||||
leaveGroup: "গ্রুপ ছেড়ে চলে যান"
|
leaveGroup: "গ্রুপ ছেড়ে চলে যান"
|
||||||
leaveGroupConfirm: "\"{name}\" গ্রুপ ছেড়ে চলে যেতে চান?"
|
leaveGroupConfirm: "\"{name}\" গ্রুপ ছেড়ে চলে যেতে চান?"
|
||||||
useDrawerReactionPickerForMobile: "মোবাইলে রিঅ্যাকশন পিকারকে ড্রয়ারে প্রদর্শন করুন"
|
useDrawerReactionPickerForMobile: "মোবাইলে রিঅ্যাকশন পিকারকে ড্রয়ারে প্রদর্শন করুন"
|
||||||
clickToFinishEmailVerification: " [{ok}] ক্লিক করার মাধ্যমে আপনার ইমেল ঠিকানা নিশ্চিত\
|
clickToFinishEmailVerification: "[{ok}] ক্লিক করার মাধ্যমে আপনার ইমেল ঠিকানা নিশ্চিত\
|
||||||
\ করুন।"
|
\ করুন।"
|
||||||
overridedDeviceKind: "ডিভাইসের ধরন"
|
overridedDeviceKind: "ডিভাইসের ধরন"
|
||||||
smartphone: "স্মার্টফোন"
|
smartphone: "স্মার্টফোন"
|
||||||
|
@ -785,12 +781,12 @@ oneDay: "একদিন"
|
||||||
oneWeek: "এক সপ্তাহ"
|
oneWeek: "এক সপ্তাহ"
|
||||||
reflectMayTakeTime: "এটির কাজ দেখা যেতে কিছুটা সময় লাগতে পারে।"
|
reflectMayTakeTime: "এটির কাজ দেখা যেতে কিছুটা সময় লাগতে পারে।"
|
||||||
failedToFetchAccountInformation: "অ্যাকাউন্টের তথ্য উদ্ধার করা যায়নি"
|
failedToFetchAccountInformation: "অ্যাকাউন্টের তথ্য উদ্ধার করা যায়নি"
|
||||||
rateLimitExceeded: "রেট লিমিট ছাড়িয়ে গেছে "
|
rateLimitExceeded: "রেট লিমিট ছাড়িয়ে গেছে"
|
||||||
_emailUnavailable:
|
_emailUnavailable:
|
||||||
used: "এই ইমেইল ঠিকানাটি ইতোমধ্যে ব্যবহৃত হয়েছে"
|
used: "এই ইমেইল ঠিকানাটি ইতোমধ্যে ব্যবহৃত হয়েছে"
|
||||||
format: "এই ইমেল ঠিকানাটি সঠিকভাবে লিখা হয়নি"
|
format: "এই ইমেল ঠিকানাটি সঠিকভাবে লিখা হয়নি"
|
||||||
disposable: "অস্থায়ী ইমেইল ঠিকানা ব্যাবহার করা যাবে না"
|
disposable: "অস্থায়ী ইমেইল ঠিকানা ব্যাবহার করা যাবে না"
|
||||||
mx: "ইমেইল সার্ভারটি ঠিক নাই"
|
mx: "ইমেইল সার্ভারটি ঠিক না"
|
||||||
smtp: "ইমেইল সার্ভারটি সাড়া দিচ্ছে না"
|
smtp: "ইমেইল সার্ভারটি সাড়া দিচ্ছে না"
|
||||||
_ffVisibility:
|
_ffVisibility:
|
||||||
public: "প্রকাশ"
|
public: "প্রকাশ"
|
||||||
|
@ -819,11 +815,6 @@ _forgotPassword:
|
||||||
\ প্রশাসকের সাথে যোগাযোগ করুন।"
|
\ প্রশাসকের সাথে যোগাযোগ করুন।"
|
||||||
contactAdmin: "এই ইন্সট্যান্সটি ইমেইল ব্যাবহার করে না, তাই আপনার পাসওয়ার্ড পুনরায়\
|
contactAdmin: "এই ইন্সট্যান্সটি ইমেইল ব্যাবহার করে না, তাই আপনার পাসওয়ার্ড পুনরায়\
|
||||||
\ সেট করতে প্রশাসকের সাথে যোগাযোগ করুন৷"
|
\ সেট করতে প্রশাসকের সাথে যোগাযোগ করুন৷"
|
||||||
_gallery:
|
|
||||||
my: "আমার গ্যালারী"
|
|
||||||
liked: "পছন্দ করা পোস্ট"
|
|
||||||
like: "পছন্দ করা"
|
|
||||||
unlike: "পছন্দ সরান"
|
|
||||||
_email:
|
_email:
|
||||||
_follow:
|
_follow:
|
||||||
title: "আপনাকে অনুসরণ করছে"
|
title: "আপনাকে অনুসরণ করছে"
|
||||||
|
@ -867,8 +858,7 @@ _mfm:
|
||||||
center: "সেন্টার"
|
center: "সেন্টার"
|
||||||
centerDescription: "লেখা মাঝ বরাবর দেখানো হবে"
|
centerDescription: "লেখা মাঝ বরাবর দেখানো হবে"
|
||||||
inlineCode: "কোড (ইনলাইন)"
|
inlineCode: "কোড (ইনলাইন)"
|
||||||
inlineCodeDescription: " প্রোগ্রামের কোডের জন্য ইনলাইন সিনট্যাক্স হাইলাইটিং করা\
|
inlineCodeDescription: "প্রোগ্রামের কোডের জন্য ইনলাইন সিনট্যাক্স হাইলাইটিং করা হবে."
|
||||||
\ হবে"
|
|
||||||
blockCode: "কোড (ব্লক)"
|
blockCode: "কোড (ব্লক)"
|
||||||
blockCodeDescription: "মাল্টি-লাইন প্রোগ্রামের কোডের জন্য সিনট্যাক্স হাইলাইট করে।"
|
blockCodeDescription: "মাল্টি-লাইন প্রোগ্রামের কোডের জন্য সিনট্যাক্স হাইলাইট করে।"
|
||||||
inlineMath: "গাণিতিক সূত্র (ইনলাইন)"
|
inlineMath: "গাণিতিক সূত্র (ইনলাইন)"
|
||||||
|
@ -1015,7 +1005,7 @@ _tutorial:
|
||||||
\ পছন্দ করেন তাকে বেছে নিতে এবং অনুসরণ করতে পারেন, অথবা {explore}-এ জনপ্রিয় ব্যবহারকারীদের\
|
\ পছন্দ করেন তাকে বেছে নিতে এবং অনুসরণ করতে পারেন, অথবা {explore}-এ জনপ্রিয় ব্যবহারকারীদের\
|
||||||
\ দেখতে পারেন৷"
|
\ দেখতে পারেন৷"
|
||||||
step5_3: "একজন ব্যবহারকারীকে অনুসরণ করতে, ব্যবহারকারীর আইকনে ক্লিক করুন এবং ব্যবহারকারীর\
|
step5_3: "একজন ব্যবহারকারীকে অনুসরণ করতে, ব্যবহারকারীর আইকনে ক্লিক করুন এবং ব্যবহারকারীর\
|
||||||
\ পৃষ্ঠাতে \"অনুসরণ করুন\" বাটনে ক্লিক করুন।"
|
\ পৃষ্ঠাতে \"অনুসরণ করুন\" বাটনে ক্লিক করুন।"
|
||||||
step5_4: "যদি ব্যবহারকারীর নামের পাশে একটি লক আইকন থাকে তাহলে আপনার অনুসরণের অনুরোধ\
|
step5_4: "যদি ব্যবহারকারীর নামের পাশে একটি লক আইকন থাকে তাহলে আপনার অনুসরণের অনুরোধ\
|
||||||
\ গ্রহণ করার জন্য তারা কিছু সময় নিতে পারে।"
|
\ গ্রহণ করার জন্য তারা কিছু সময় নিতে পারে।"
|
||||||
step6_1: "সবকিছু ঠিক থাকলে আপনি টাইমলাইনে অন্য ব্যবহারকারীদের নোট দেখতে পাবেন।"
|
step6_1: "সবকিছু ঠিক থাকলে আপনি টাইমলাইনে অন্য ব্যবহারকারীদের নোট দেখতে পাবেন।"
|
||||||
|
@ -1055,7 +1045,6 @@ _permissions:
|
||||||
"write:notes": "নোট লিখা"
|
"write:notes": "নোট লিখা"
|
||||||
"read:notifications": "বিজ্ঞপ্তিগুলি দেখুন"
|
"read:notifications": "বিজ্ঞপ্তিগুলি দেখুন"
|
||||||
"write:notifications": "বিজ্ঞপ্তি নিয়ে কাজ করে"
|
"write:notifications": "বিজ্ঞপ্তি নিয়ে কাজ করে"
|
||||||
"read:reactions": "রিঅ্যাকশনগুলি দেখুন"
|
|
||||||
"write:reactions": "রিঅ্যাকশনগুলি সম্পাদনা করুন"
|
"write:reactions": "রিঅ্যাকশনগুলি সম্পাদনা করুন"
|
||||||
"write:votes": "ভোট দিন"
|
"write:votes": "ভোট দিন"
|
||||||
"read:pages": "আপনার পেজগুলি দেখুন"
|
"read:pages": "আপনার পেজগুলি দেখুন"
|
||||||
|
@ -1066,10 +1055,6 @@ _permissions:
|
||||||
"write:user-groups": "ব্যাবহারকারী গ্রুপগুলি সম্পাদনা করুন"
|
"write:user-groups": "ব্যাবহারকারী গ্রুপগুলি সম্পাদনা করুন"
|
||||||
"read:channels": "চ্যানেলগুলি দেখুন"
|
"read:channels": "চ্যানেলগুলি দেখুন"
|
||||||
"write:channels": "চ্যানেলগুলি সম্পাদনা করুন"
|
"write:channels": "চ্যানেলগুলি সম্পাদনা করুন"
|
||||||
"read:gallery": "গ্যালারী দেখুন"
|
|
||||||
"write:gallery": "গ্যালারী সম্পাদনা করুন"
|
|
||||||
"read:gallery-likes": "গ্যালারীর পছন্দগুলি দেখুন"
|
|
||||||
"write:gallery-likes": "গ্যালারীর পছন্দগুলি সম্পাদনা করুন"
|
|
||||||
_auth:
|
_auth:
|
||||||
shareAccess: "\"{name}\" কে অ্যাকাউন্টের অ্যাক্সেস দিবেন?"
|
shareAccess: "\"{name}\" কে অ্যাকাউন্টের অ্যাক্সেস দিবেন?"
|
||||||
shareAccessAsk: "অ্যাপ্লিকেশনটিকে অ্যাকাউন্টের অ্যাক্সেস দিবেন?"
|
shareAccessAsk: "অ্যাপ্লিকেশনটিকে অ্যাকাউন্টের অ্যাক্সেস দিবেন?"
|
||||||
|
|
|
@ -14,7 +14,7 @@ fetchingAsApObject: "Cercant en el Fediverse..."
|
||||||
ok: "OK"
|
ok: "OK"
|
||||||
gotIt: "Ho he entès!"
|
gotIt: "Ho he entès!"
|
||||||
cancel: "Cancel·lar"
|
cancel: "Cancel·lar"
|
||||||
renotedBy: "Resignat per {usuari}"
|
renotedBy: "Resignat per {user}"
|
||||||
noNotes: "Cap nota"
|
noNotes: "Cap nota"
|
||||||
noNotifications: "Cap notificació"
|
noNotifications: "Cap notificació"
|
||||||
instance: "Instàncies"
|
instance: "Instàncies"
|
||||||
|
|
|
@ -194,8 +194,8 @@ blockedInstances: "Blockierte Instanzen"
|
||||||
blockedInstancesDescription: "Gib die Hostnamen der Instanzen, welche blockiert werden\
|
blockedInstancesDescription: "Gib die Hostnamen der Instanzen, welche blockiert werden\
|
||||||
\ sollen, durch Zeilenumbrüche getrennt an. Blockierte Instanzen können mit dieser\
|
\ sollen, durch Zeilenumbrüche getrennt an. Blockierte Instanzen können mit dieser\
|
||||||
\ Instanz nicht mehr kommunizieren. Hostnamen, die nicht-ASCII-Zeichen enthalten,\
|
\ Instanz nicht mehr kommunizieren. Hostnamen, die nicht-ASCII-Zeichen enthalten,\
|
||||||
\ müssen zuvor in Punycode umgewandelt werden. Ein Asterisk (*) kann als Platzhalter\
|
\ müssen zuvor in Punycode umgewandelt werden. Subdomains der aufgelisteten Hostnamen\
|
||||||
\ für beliebig viele Zeichen verwendet werden."
|
\ werden ebenfalls blockiert."
|
||||||
muteAndBlock: "Stummschaltungen und Blockierungen"
|
muteAndBlock: "Stummschaltungen und Blockierungen"
|
||||||
mutedUsers: "Stummgeschaltete Benutzer"
|
mutedUsers: "Stummgeschaltete Benutzer"
|
||||||
blockedUsers: "Blockierte Benutzer"
|
blockedUsers: "Blockierte Benutzer"
|
||||||
|
@ -337,9 +337,9 @@ pinnedUsers: "Angeheftete Benutzer"
|
||||||
pinnedUsersDescription: "Gib durch Leerzeichen getrennte Benutzer an, die an die \"\
|
pinnedUsersDescription: "Gib durch Leerzeichen getrennte Benutzer an, die an die \"\
|
||||||
Erkunden\"-Seite angeheftet werden sollen."
|
Erkunden\"-Seite angeheftet werden sollen."
|
||||||
hcaptchaSiteKey: "Site key"
|
hcaptchaSiteKey: "Site key"
|
||||||
hcaptchaSecretKey: "Secret key"
|
hcaptchaSecretKey: "Geheimer Schlüssel"
|
||||||
recaptchaSiteKey: "Site key"
|
recaptchaSiteKey: "Site-Schlüssel"
|
||||||
recaptchaSecretKey: "Secret key"
|
recaptchaSecretKey: "Geheimer Schlüssel"
|
||||||
antennas: "Antennen"
|
antennas: "Antennen"
|
||||||
manageAntennas: "Antennen verwalten"
|
manageAntennas: "Antennen verwalten"
|
||||||
name: "Name"
|
name: "Name"
|
||||||
|
@ -693,7 +693,6 @@ editCode: "Code bearbeiten"
|
||||||
apply: "Anwenden"
|
apply: "Anwenden"
|
||||||
receiveAnnouncementFromInstance: "Benachrichtigungen von dieser Instanz empfangen"
|
receiveAnnouncementFromInstance: "Benachrichtigungen von dieser Instanz empfangen"
|
||||||
emailNotification: "Email-Benachrichtigungen"
|
emailNotification: "Email-Benachrichtigungen"
|
||||||
publish: "Veröffentlichen"
|
|
||||||
useReactionPickerForContextMenu: "Reaktionsauswahl durch Rechtsklick öffnen"
|
useReactionPickerForContextMenu: "Reaktionsauswahl durch Rechtsklick öffnen"
|
||||||
typingUsers: "{users} ist/sind am schreiben …"
|
typingUsers: "{users} ist/sind am schreiben …"
|
||||||
jumpToSpecifiedDate: "Zu bestimmtem Datum springen"
|
jumpToSpecifiedDate: "Zu bestimmtem Datum springen"
|
||||||
|
@ -732,11 +731,7 @@ switch: "Wechseln"
|
||||||
noMaintainerInformationWarning: "Betreiberinformationen sind nicht konfiguriert."
|
noMaintainerInformationWarning: "Betreiberinformationen sind nicht konfiguriert."
|
||||||
noBotProtectionWarning: "Schutz vor Bots ist nicht konfiguriert."
|
noBotProtectionWarning: "Schutz vor Bots ist nicht konfiguriert."
|
||||||
configure: "Konfigurieren"
|
configure: "Konfigurieren"
|
||||||
postToGallery: "Neuen Galeriebeitrag erstellen"
|
|
||||||
attachmentRequired: "Mindestens 1 Anhang ist erforderlich."
|
|
||||||
gallery: "Galerie"
|
|
||||||
recentPosts: "Neue Beiträge"
|
recentPosts: "Neue Beiträge"
|
||||||
popularPosts: "Beliebte Beiträge"
|
|
||||||
shareWithNote: "Mit Notiz teilen"
|
shareWithNote: "Mit Notiz teilen"
|
||||||
emailNotConfiguredWarning: "Keine Email-Adresse hinterlegt."
|
emailNotConfiguredWarning: "Keine Email-Adresse hinterlegt."
|
||||||
ratio: "Verhältnis"
|
ratio: "Verhältnis"
|
||||||
|
@ -851,11 +846,6 @@ _forgotPassword:
|
||||||
\ wende dich bitte an den Administrator."
|
\ wende dich bitte an den Administrator."
|
||||||
contactAdmin: "Diese Instanz unterstützt die Verwendung von Email-Adressen nicht.\
|
contactAdmin: "Diese Instanz unterstützt die Verwendung von Email-Adressen nicht.\
|
||||||
\ Wende dich an den Administrator, um dein Passwort zurückzusetzen."
|
\ Wende dich an den Administrator, um dein Passwort zurückzusetzen."
|
||||||
_gallery:
|
|
||||||
my: "Meine Galerie"
|
|
||||||
liked: "Mit \"Gefällt mir\" markierte Beiträge"
|
|
||||||
like: "Gefällt mir"
|
|
||||||
unlike: "\"Gefällt mir\" entfernen"
|
|
||||||
_email:
|
_email:
|
||||||
_follow:
|
_follow:
|
||||||
title: "Du hast einen neuen Follower"
|
title: "Du hast einen neuen Follower"
|
||||||
|
@ -979,9 +969,9 @@ _wordMute:
|
||||||
\ trennen."
|
\ trennen."
|
||||||
muteWordsDescription2: "Umgib Schlüsselworter mit Schrägstrichen, um Reguläre Ausdrücke\
|
muteWordsDescription2: "Umgib Schlüsselworter mit Schrägstrichen, um Reguläre Ausdrücke\
|
||||||
\ zu verwenden."
|
\ zu verwenden."
|
||||||
softDescription: "Notizen, die die angegebenen Konditionen erfüllen, in der Chronik\
|
softDescription: "Notizen, welche die angegebenen Konditionen erfüllen, in der Chronik\
|
||||||
\ ausblenden."
|
\ ausblenden."
|
||||||
hardDescription: "Verhindern, dass Notizen, die die angegebenen Konditionen erfüllen,\
|
hardDescription: "Verhindern, dass Notizen, welche die angegebenen Konditionen erfüllen,\
|
||||||
\ der Chronik hinzugefügt werden. Zudem werden diese Notizen auch nicht der Chronik\
|
\ der Chronik hinzugefügt werden. Zudem werden diese Notizen auch nicht der Chronik\
|
||||||
\ hinzugefügt, falls die Konditionen geändert werden."
|
\ hinzugefügt, falls die Konditionen geändert werden."
|
||||||
soft: "Leicht"
|
soft: "Leicht"
|
||||||
|
@ -1083,40 +1073,39 @@ _2fa:
|
||||||
\ deinem Gerät auch Anmeldung mit Hilfe eines FIDO2-kompatiblen Hardware-Sicherheitsschlüssels\
|
\ deinem Gerät auch Anmeldung mit Hilfe eines FIDO2-kompatiblen Hardware-Sicherheitsschlüssels\
|
||||||
\ einrichten."
|
\ einrichten."
|
||||||
_permissions:
|
_permissions:
|
||||||
"read:account": "Deine Benutzerkontoinformationen lesen"
|
"read:account": "Benutzerkonto-Informationen lesen"
|
||||||
"write:account": "Deine Benutzerkontoinformationen bearbeiten"
|
"write:account": "Benutzerkonto-Informationen bearbeiten"
|
||||||
"read:blocks": "Die Liste deiner blockierten Benutzer lesen"
|
"read:blocks": "Liste der blockierten Benutzer lesen"
|
||||||
"write:blocks": "Die Liste deiner blockierten Benutzer bearbeiten"
|
"write:blocks": "Liste der blockierten Benutzer bearbeiten"
|
||||||
"read:drive": "Deine Drive-Dateien und Ordner lesen"
|
"read:drive": "Drive-Dateien und -Ordner auflisten"
|
||||||
"write:drive": "Deine Drive-Dateien und Ordner bearbeiten oder löschen"
|
"write:drive": "Drive-Dateien und -Ordner erstellen, bearbeiten oder löschen"
|
||||||
"read:favorites": "Deine Favoriten-Liste lesen"
|
"read:favorites": "Favorisierte Notizen auflisten"
|
||||||
"write:favorites": "Deine Favoriten-Liste bearbeiten"
|
"write:favorites": "Favorisierung von Notizen hinzufügen oder entfernen"
|
||||||
"read:following": "Die Liste der Benutzer, denen du folgst, lesen"
|
"read:following": "Gefolgte und folgende Benutzer auflisten"
|
||||||
"write:following": "Anderen Benutzern folgen oder entfolgen"
|
"write:following": "Anderen Benutzern folgen oder entfolgen"
|
||||||
"read:messaging": "Chats lesen"
|
"read:messaging": "Chats und Chatverläufe lesen"
|
||||||
"write:messaging": "Chats bedienen"
|
"write:messaging": "Chatnachrichten erstellen oder löschen"
|
||||||
"read:mutes": "Stummschaltungen lesen"
|
"read:mutes": "Stummschaltungen und Renote-Stummschaltungen auflisten"
|
||||||
"write:mutes": "Stummschaltungen bearbeiten"
|
"write:mutes": "Stummschaltungen und Renote-Stummschaltungen bearbeiten"
|
||||||
"write:notes": "Notizen schreiben oder löschen"
|
"write:notes": "Notizen schreiben oder löschen"
|
||||||
"read:notifications": "Benachrichtigungen lesen"
|
"read:notifications": "Benachrichtigungen lesen"
|
||||||
"write:notifications": "Benachrichtigungen bedienen"
|
"write:notifications": "Benachrichtigungen als gelesen markieren oder App-Benachrichtigungen\
|
||||||
"read:reactions": "Reaktionen lesen"
|
\ erstellen"
|
||||||
"write:reactions": "Reaktionen bedienen"
|
"write:reactions": "Reaktionen erstellen oder löschen"
|
||||||
"write:votes": "Umfragen bedienen"
|
"write:votes": "In Umfragen abstimmen"
|
||||||
"read:pages": "Deine Seiten lesen"
|
"read:pages": "Deine Seiten auflisten und lesen"
|
||||||
"write:pages": "Deine Seiten bearbeiten oder löschen"
|
"write:pages": "Seiten erstellen, bearbeiten oder löschen"
|
||||||
"read:page-likes": "Liste der Seiten, die mir gefallen, lesen"
|
"read:page-likes": "Seiten, die mir gefallen, auflisten und auslesen"
|
||||||
"write:page-likes": "Liste der Seiten, die mir gefallen, bearbeiten"
|
"write:page-likes": "\"Gefällt mir\"-Markierung von Seiten bearbeiten"
|
||||||
"read:user-groups": "Benutzergruppen lesen"
|
"read:user-groups": "beigetretene, erstellte und eingeladene Benutzergruppen auflisten\
|
||||||
"write:user-groups": "Benutzergruppen bearbeiten oder löschen"
|
\ und lesen"
|
||||||
"read:channels": "Kanäle lesen"
|
"write:user-groups": "Benutzergruppen erstellen, bearbeiten, löschen, übertragen,\
|
||||||
"write:channels": "Kanäle bedienen"
|
\ zu diesen beitreten oder diese verlassen. Andere Benutzer zu diesen Einladen\
|
||||||
"read:gallery": "Beiträge deiner Galerie lesen"
|
\ oder Benutzer aus diesen Bannen. Einladungen zu Benutzergruppen annehmen oder\
|
||||||
"write:gallery": "Deine Galerie bearbeiten"
|
\ ablehnen."
|
||||||
"read:gallery-likes": "Liste deiner mit \"Gefällt mir\" markierten Galerie-Beiträge\
|
"read:channels": "gefolgte und beigetretene Kanäle auflisten und lesen"
|
||||||
\ lesen"
|
"write:channels": "Kanäle erstellen, bearbeiten, diesen folgen und entfolgen"
|
||||||
"write:gallery-likes": "Liste deiner mit \"Gefällt mir\" markierten Galerie-Beiträge\
|
"read:reactions": Reaktionen ansehen
|
||||||
\ bearbeiten"
|
|
||||||
_auth:
|
_auth:
|
||||||
shareAccess: "Möchtest du „{name}“ authorisieren, auf dieses Benutzerkonto zugreifen\
|
shareAccess: "Möchtest du „{name}“ authorisieren, auf dieses Benutzerkonto zugreifen\
|
||||||
\ zu können?"
|
\ zu können?"
|
||||||
|
@ -1289,7 +1278,7 @@ _pages:
|
||||||
hideTitleWhenPinned: "Seitentitel wenn angeheftet ausblenden"
|
hideTitleWhenPinned: "Seitentitel wenn angeheftet ausblenden"
|
||||||
font: "Schriftart"
|
font: "Schriftart"
|
||||||
fontSerif: "Serif"
|
fontSerif: "Serif"
|
||||||
fontSansSerif: "Sans Serif"
|
fontSansSerif: "serifenlos"
|
||||||
eyeCatchingImageSet: "Vorschaubild festlegen"
|
eyeCatchingImageSet: "Vorschaubild festlegen"
|
||||||
eyeCatchingImageRemove: "Vorschaubild entfernen"
|
eyeCatchingImageRemove: "Vorschaubild entfernen"
|
||||||
_relayStatus:
|
_relayStatus:
|
||||||
|
@ -1366,7 +1355,7 @@ confirmToUnclipAlreadyClippedNote: "Diese Notiz ist bereits im \"{name}\" Clip e
|
||||||
noEmailServerWarning: "Es ist kein Email-Server konfiguriert."
|
noEmailServerWarning: "Es ist kein Email-Server konfiguriert."
|
||||||
thereIsUnresolvedAbuseReportWarning: "Es liegen ungelöste Meldungen vor."
|
thereIsUnresolvedAbuseReportWarning: "Es liegen ungelöste Meldungen vor."
|
||||||
recommended: "Empfehlung"
|
recommended: "Empfehlung"
|
||||||
check: "Check"
|
check: "Überprüfen"
|
||||||
maxCustomEmojiPicker: Maximale Anzahl vorgeschlagener benutzerdefinierter Emoji
|
maxCustomEmojiPicker: Maximale Anzahl vorgeschlagener benutzerdefinierter Emoji
|
||||||
maxUnicodeEmojiPicker: Maximale Anzahl vorgeschlagener Unicode-Emoji
|
maxUnicodeEmojiPicker: Maximale Anzahl vorgeschlagener Unicode-Emoji
|
||||||
documentation: Dokumentation
|
documentation: Dokumentation
|
||||||
|
@ -1399,3 +1388,16 @@ selectAll: Alle auswählen
|
||||||
renoteUnmute: Renotes zeigen
|
renoteUnmute: Renotes zeigen
|
||||||
renoteMute: Renotes verstecken
|
renoteMute: Renotes verstecken
|
||||||
externalCssSnippets: Einige CSS-Schnipsel zur Inspiration (nicht durch FoundKey verwaltet)
|
externalCssSnippets: Einige CSS-Schnipsel zur Inspiration (nicht durch FoundKey verwaltet)
|
||||||
|
botFollowRequiresApproval: Follow-Anfragen von als Bot markierten Accounts benötigen
|
||||||
|
Bestätigung
|
||||||
|
unrenoteAll: alle Renotes zurücknehmen
|
||||||
|
unrenoteAllConfirm: Bist du sicher, dass du alle Renotes zurücknehmen möchtest?
|
||||||
|
deleteAllFiles: Alle Dateien löschen
|
||||||
|
cannotAttachFileWhenAccountSwitched: Kann keine Dateien anhängen, während ein anderer
|
||||||
|
Account eingestellt ist.
|
||||||
|
cannotSwitchAccountWhenFileAttached: Kann keinen anderen Account einstellen, solange
|
||||||
|
Dateien angehängt sind.
|
||||||
|
oauthErrorGoBack: Bei der Authentifizierung einer Drittanbieter-Anwendung ist ein
|
||||||
|
Fehler aufgetreten. Bitte geh zurück und versuche es erneut.
|
||||||
|
appAuthorization: Anwendungs-Authorisierung
|
||||||
|
noPermissionsRequested: (Keine Berechtigungen angefordert.)
|
||||||
|
|
|
@ -88,6 +88,7 @@ youShouldUpgradeClient: "To view this page, please refresh to update your client
|
||||||
enterListName: "Enter a name for the list"
|
enterListName: "Enter a name for the list"
|
||||||
privacy: "Privacy"
|
privacy: "Privacy"
|
||||||
makeFollowManuallyApprove: "Follow requests require approval"
|
makeFollowManuallyApprove: "Follow requests require approval"
|
||||||
|
botFollowRequiresApproval: "Follow requests from accounts marked as bots require approval"
|
||||||
defaultNoteVisibility: "Default visibility"
|
defaultNoteVisibility: "Default visibility"
|
||||||
follow: "Follow"
|
follow: "Follow"
|
||||||
followRequest: "Send follow request"
|
followRequest: "Send follow request"
|
||||||
|
@ -709,6 +710,8 @@ botProtection: "Bot Protection"
|
||||||
instanceBlocking: "Blocked Instances"
|
instanceBlocking: "Blocked Instances"
|
||||||
selectAccount: "Select account"
|
selectAccount: "Select account"
|
||||||
switchAccount: "Switch account"
|
switchAccount: "Switch account"
|
||||||
|
cannotAttachFileWhenAccountSwitched: "You cannot attach a file while switched to another account."
|
||||||
|
cannotSwitchAccountWhenFileAttached: "You cannot switch accounts while files are attached."
|
||||||
enabled: "Enabled"
|
enabled: "Enabled"
|
||||||
disabled: "Disabled"
|
disabled: "Disabled"
|
||||||
quickAction: "Quick actions"
|
quickAction: "Quick actions"
|
||||||
|
@ -1336,3 +1339,7 @@ _translationService:
|
||||||
_libreTranslate:
|
_libreTranslate:
|
||||||
endpoint: "LibreTranslate API Endpoint"
|
endpoint: "LibreTranslate API Endpoint"
|
||||||
authKey: "LibreTranslate Auth Key (optional)"
|
authKey: "LibreTranslate Auth Key (optional)"
|
||||||
|
_remoteInteract:
|
||||||
|
title: "I'm sorry, I'm afraid I can't do that."
|
||||||
|
description: "You cannot perform this action right now. You probably need to do it on your own instance, or sign in."
|
||||||
|
urlInstructions: "You can copy this URL. If you paste it into the search field on your instance, you should be taken to the right location."
|
||||||
|
|
|
@ -471,7 +471,7 @@ objectStorageUseSSLDesc: "Desactive esto si no va a usar HTTPS para la conexión
|
||||||
objectStorageUseProxy: "Conectarse a través de Proxy"
|
objectStorageUseProxy: "Conectarse a través de Proxy"
|
||||||
objectStorageUseProxyDesc: "Desactive esto si no va a usar Proxy para la conexión\
|
objectStorageUseProxyDesc: "Desactive esto si no va a usar Proxy para la conexión\
|
||||||
\ de Almacenamiento de objetos"
|
\ de Almacenamiento de objetos"
|
||||||
objectStorageSetPublicRead: "Seleccionar \"public-read\" al subir "
|
objectStorageSetPublicRead: "Seleccionar \"public-read\" al subir"
|
||||||
showFixedPostForm: "Mostrar el formulario de las entradas encima de la línea de tiempo"
|
showFixedPostForm: "Mostrar el formulario de las entradas encima de la línea de tiempo"
|
||||||
newNoteRecived: "Tienes una nota nuevo"
|
newNoteRecived: "Tienes una nota nuevo"
|
||||||
sounds: "Sonidos"
|
sounds: "Sonidos"
|
||||||
|
@ -675,7 +675,6 @@ editCode: "Editar código"
|
||||||
apply: "Aplicar"
|
apply: "Aplicar"
|
||||||
receiveAnnouncementFromInstance: "Recibir notificaciones de la instancia"
|
receiveAnnouncementFromInstance: "Recibir notificaciones de la instancia"
|
||||||
emailNotification: "Notificaciones por correo electrónico"
|
emailNotification: "Notificaciones por correo electrónico"
|
||||||
publish: "Publicar"
|
|
||||||
useReactionPickerForContextMenu: "Haga clic con el botón derecho para abrir el menu\
|
useReactionPickerForContextMenu: "Haga clic con el botón derecho para abrir el menu\
|
||||||
\ de reacciones"
|
\ de reacciones"
|
||||||
typingUsers: "{users} está escribiendo"
|
typingUsers: "{users} está escribiendo"
|
||||||
|
@ -713,10 +712,7 @@ switch: "Cambiar"
|
||||||
noMaintainerInformationWarning: "No se ha establecido la información del administrador"
|
noMaintainerInformationWarning: "No se ha establecido la información del administrador"
|
||||||
noBotProtectionWarning: "La protección contra los bots no está configurada"
|
noBotProtectionWarning: "La protección contra los bots no está configurada"
|
||||||
configure: "Configurar"
|
configure: "Configurar"
|
||||||
postToGallery: "Crear una nueva publicación en la galería"
|
|
||||||
gallery: "Galería"
|
|
||||||
recentPosts: "Posts recientes"
|
recentPosts: "Posts recientes"
|
||||||
popularPosts: "Más vistos"
|
|
||||||
shareWithNote: "Compartir con una nota"
|
shareWithNote: "Compartir con una nota"
|
||||||
emailNotConfiguredWarning: "No se ha configurado una dirección de correo electrónico."
|
emailNotConfiguredWarning: "No se ha configurado una dirección de correo electrónico."
|
||||||
ratio: "Proporción"
|
ratio: "Proporción"
|
||||||
|
@ -768,11 +764,6 @@ _forgotPassword:
|
||||||
contactAdmin: "Esta instancia no admite el uso de direcciones de correo electrónico,\
|
contactAdmin: "Esta instancia no admite el uso de direcciones de correo electrónico,\
|
||||||
\ póngase en contacto con el administrador de la instancia para restablecer su\
|
\ póngase en contacto con el administrador de la instancia para restablecer su\
|
||||||
\ contraseña"
|
\ contraseña"
|
||||||
_gallery:
|
|
||||||
my: "Mi galería"
|
|
||||||
liked: "Publicaciones que me gustan"
|
|
||||||
like: "¡Muy bien!"
|
|
||||||
unlike: "Quitar me gusta"
|
|
||||||
_email:
|
_email:
|
||||||
_follow:
|
_follow:
|
||||||
title: "te ha seguido"
|
title: "te ha seguido"
|
||||||
|
@ -794,7 +785,7 @@ _aboutMisskey:
|
||||||
source: "Código fuente"
|
source: "Código fuente"
|
||||||
_nsfw:
|
_nsfw:
|
||||||
respect: "Ocultar medios NSFW"
|
respect: "Ocultar medios NSFW"
|
||||||
ignore: "No esconder medios NSFW "
|
ignore: "No esconder medios NSFW"
|
||||||
force: "Ocultar todos los medios"
|
force: "Ocultar todos los medios"
|
||||||
_mfm:
|
_mfm:
|
||||||
cheatSheet: "Hoja de referencia de MFM"
|
cheatSheet: "Hoja de referencia de MFM"
|
||||||
|
@ -960,7 +951,6 @@ _permissions:
|
||||||
"write:notes": "Crear/borrar notas"
|
"write:notes": "Crear/borrar notas"
|
||||||
"read:notifications": "Ver notificaciones"
|
"read:notifications": "Ver notificaciones"
|
||||||
"write:notifications": "Administrar notificaciones"
|
"write:notifications": "Administrar notificaciones"
|
||||||
"read:reactions": "Ver reacciones"
|
|
||||||
"write:reactions": "Administrar reacciones"
|
"write:reactions": "Administrar reacciones"
|
||||||
"write:votes": "Votar"
|
"write:votes": "Votar"
|
||||||
"read:pages": "Ver páginas"
|
"read:pages": "Ver páginas"
|
||||||
|
|
|
@ -71,8 +71,8 @@ importRequested: "Vous avez initié un import. Cela pourrait prendre un peu de t
|
||||||
lists: "Listes"
|
lists: "Listes"
|
||||||
note: "Notes"
|
note: "Notes"
|
||||||
notes: "Notes"
|
notes: "Notes"
|
||||||
following: "Abonnements"
|
following: "Suivis"
|
||||||
followers: "Abonné·e·s"
|
followers: "Vous suivent"
|
||||||
followsYou: "Vous suit"
|
followsYou: "Vous suit"
|
||||||
createList: "Créer une liste"
|
createList: "Créer une liste"
|
||||||
manageLists: "Gérer les listes"
|
manageLists: "Gérer les listes"
|
||||||
|
@ -88,15 +88,15 @@ youShouldUpgradeClient: "Si la page ne s'affiche pas correctement, rechargez-la
|
||||||
\ mettre votre client à jour."
|
\ mettre votre client à jour."
|
||||||
enterListName: "Nom de la liste"
|
enterListName: "Nom de la liste"
|
||||||
privacy: "Confidentialité"
|
privacy: "Confidentialité"
|
||||||
makeFollowManuallyApprove: "Accepter manuellement les demandes d’abonnement"
|
makeFollowManuallyApprove: "Accepter manuellement les demandes de suivi"
|
||||||
defaultNoteVisibility: "Visibilité des notes par défaut"
|
defaultNoteVisibility: "Visibilité des notes par défaut"
|
||||||
follow: "S’abonner"
|
follow: "Suivre"
|
||||||
followRequest: "Demande d’abonnement"
|
followRequest: "Demande de suivi"
|
||||||
followRequests: "Demandes d’abonnement"
|
followRequests: "Demandes de suivi"
|
||||||
unfollow: "Se désabonner"
|
unfollow: "Ne plus suivre"
|
||||||
followRequestPending: "Demande d'abonnement en attente de confirmation"
|
followRequestPending: "Demande de suivi en attente de confirmation"
|
||||||
renote: "Renoter"
|
renote: "Renoter"
|
||||||
unrenote: "Annuler la Renote"
|
unrenote: "Retirer la renote"
|
||||||
quote: "Citer"
|
quote: "Citer"
|
||||||
pinnedNote: "Note épinglée"
|
pinnedNote: "Note épinglée"
|
||||||
you: "Vous"
|
you: "Vous"
|
||||||
|
@ -188,7 +188,9 @@ clearCachedFilesConfirm: "Êtes-vous sûr·e de vouloir vider tout le cache de f
|
||||||
\ distants ?"
|
\ distants ?"
|
||||||
blockedInstances: "Instances bloquées"
|
blockedInstances: "Instances bloquées"
|
||||||
blockedInstancesDescription: "Listez les instances que vous désirez bloquer, une par\
|
blockedInstancesDescription: "Listez les instances que vous désirez bloquer, une par\
|
||||||
\ ligne. Ces instances ne seront plus en capacité d'interagir avec votre instance."
|
\ ligne. Ces instances ne seront plus en capacité d'interagir avec votre instance.\
|
||||||
|
\ Les noms de domaine non-ASCII doivent être encodés en punycode. Les sous-domaines\
|
||||||
|
\ de ces instances seront aussi bloqués."
|
||||||
muteAndBlock: "Masqué·e·s / Bloqué·e·s"
|
muteAndBlock: "Masqué·e·s / Bloqué·e·s"
|
||||||
mutedUsers: "Utilisateur·rice·s en sourdine"
|
mutedUsers: "Utilisateur·rice·s en sourdine"
|
||||||
blockedUsers: "Utilisateur·rice·s bloqué·e·s"
|
blockedUsers: "Utilisateur·rice·s bloqué·e·s"
|
||||||
|
@ -683,7 +685,6 @@ editCode: "Modifier le code"
|
||||||
apply: "Appliquer"
|
apply: "Appliquer"
|
||||||
receiveAnnouncementFromInstance: "Recevoir les messages d'information de l'instance"
|
receiveAnnouncementFromInstance: "Recevoir les messages d'information de l'instance"
|
||||||
emailNotification: "Notifications par mail"
|
emailNotification: "Notifications par mail"
|
||||||
publish: "Public"
|
|
||||||
useReactionPickerForContextMenu: "Clic-droit pour ouvrir le panneau de réactions"
|
useReactionPickerForContextMenu: "Clic-droit pour ouvrir le panneau de réactions"
|
||||||
typingUsers: "{users} est en train d'écrire..."
|
typingUsers: "{users} est en train d'écrire..."
|
||||||
jumpToSpecifiedDate: "Se rendre à la date"
|
jumpToSpecifiedDate: "Se rendre à la date"
|
||||||
|
@ -722,10 +723,7 @@ switch: "Remplacer"
|
||||||
noMaintainerInformationWarning: "Informations administrateur non configurées."
|
noMaintainerInformationWarning: "Informations administrateur non configurées."
|
||||||
noBotProtectionWarning: "La protection contre les bots n'est pas configurée."
|
noBotProtectionWarning: "La protection contre les bots n'est pas configurée."
|
||||||
configure: "Configurer"
|
configure: "Configurer"
|
||||||
postToGallery: "Publier dans la galerie"
|
|
||||||
gallery: "Galerie"
|
|
||||||
recentPosts: "Les plus récentes"
|
recentPosts: "Les plus récentes"
|
||||||
popularPosts: "Les plus consultées"
|
|
||||||
shareWithNote: "Partager dans une note"
|
shareWithNote: "Partager dans une note"
|
||||||
emailNotConfiguredWarning: "Vous n'avez pas configuré d'adresse e-mail."
|
emailNotConfiguredWarning: "Vous n'avez pas configuré d'adresse e-mail."
|
||||||
ratio: "Ratio"
|
ratio: "Ratio"
|
||||||
|
@ -831,11 +829,6 @@ _forgotPassword:
|
||||||
contactAdmin: "Cette instance ne permettant pas l'utilisation d'adresses e-mail,\
|
contactAdmin: "Cette instance ne permettant pas l'utilisation d'adresses e-mail,\
|
||||||
\ prenez contact avec l'administrateur·rice pour procéder à la réinitialisation\
|
\ prenez contact avec l'administrateur·rice pour procéder à la réinitialisation\
|
||||||
\ de votre mot de passe."
|
\ de votre mot de passe."
|
||||||
_gallery:
|
|
||||||
my: "Mes publications"
|
|
||||||
liked: "Publications que j'ai aimées"
|
|
||||||
like: "J'aime"
|
|
||||||
unlike: "Je n’aime pas"
|
|
||||||
_email:
|
_email:
|
||||||
_follow:
|
_follow:
|
||||||
title: "Vous suit"
|
title: "Vous suit"
|
||||||
|
@ -1063,38 +1056,34 @@ _2fa:
|
||||||
step2Url: 'Vous pouvez aussi entrer cette URL si vous utilisez un client lourd sur
|
step2Url: 'Vous pouvez aussi entrer cette URL si vous utilisez un client lourd sur
|
||||||
ordinateur :'
|
ordinateur :'
|
||||||
_permissions:
|
_permissions:
|
||||||
"read:account": "Afficher les informations du compte"
|
"read:account": "Lire les informations du compte"
|
||||||
"write:account": "Mettre à jour les informations de votre compte"
|
"write:account": "Mettre à jour les informations du compte"
|
||||||
"read:blocks": "Voir les comptes bloqués"
|
"read:blocks": "Lire les utilisateurs bloqués"
|
||||||
"write:blocks": "Gérer les comptes bloqués"
|
"write:blocks": "Bloquer et Débloquer des comptes"
|
||||||
"read:drive": "Parcourir le Drive"
|
"read:drive": "Lister les fichiers et dossiers du drive"
|
||||||
"write:drive": "Écrire sur le Drive"
|
"write:drive": "Créer, changer et supprimer des fichiers du drive"
|
||||||
"read:favorites": "Afficher les favoris"
|
"read:favorites": "Lister les notes favorites"
|
||||||
"write:favorites": "Gérer les favoris"
|
"write:favorites": "Gérer les notes favorites"
|
||||||
"read:following": "Voir les informations de vos abonnements"
|
"read:following": "Lister les comptes suivis et les comptes qui vous suivent"
|
||||||
"write:following": "Abonnements/Se désabonner"
|
"write:following": "Abonner et désabonner autres comptes"
|
||||||
"read:messaging": "Voir vos discussions"
|
"read:messaging": "Voir vos discussions et leur historique"
|
||||||
"write:messaging": "Gérer les discussions"
|
"write:messaging": "Créer et supprimer les messages des discussions"
|
||||||
"read:mutes": "Voir les comptes masqués"
|
"read:mutes": "Lister les comptes desquels vous masquez les notes ou les renotes"
|
||||||
"write:mutes": "Gérer les comptes masqués"
|
"write:mutes": "Masquer et démasquer les notes ou les renotes des comptes"
|
||||||
"write:notes": "Créer / supprimer des notes"
|
"write:notes": "Gérer les notes"
|
||||||
"read:notifications": "Afficher les notifications"
|
"read:notifications": "Lire vos notifications"
|
||||||
"write:notifications": "Gérer vos notifications"
|
"write:notifications": "Gérer vos notifications et en créer"
|
||||||
"read:reactions": "Lire les réactions"
|
"write:reactions": "Gérer les réactions"
|
||||||
"write:reactions": "Gérer vos réactions"
|
"write:votes": "Voter dans les sondages"
|
||||||
"write:votes": "Voter"
|
"read:pages": "Lister et lire les pages"
|
||||||
"read:pages": "Voir vos pages"
|
|
||||||
"write:pages": "Gérer les pages"
|
"write:pages": "Gérer les pages"
|
||||||
"read:page-likes": "Voir les mentions « J'aime » des pages"
|
"read:page-likes": "Voir les mentions « J'aime » des pages"
|
||||||
"write:page-likes": "Gérer les mentions « J'aime » sur les pages"
|
"write:page-likes": "Gérer les mentions « J'aime » sur les pages"
|
||||||
"read:user-groups": "Voir les groupes d'utilisateur·rice·s"
|
"read:user-groups": "Voir les groupes d'utilisateur·rice·s"
|
||||||
"write:user-groups": "Éditer les groupes des utilisateur·rice·s"
|
"write:user-groups": "Éditer les groupes des utilisateur·rice·s"
|
||||||
"read:channels": "Lire les canaux"
|
"read:channels": "Lister et lire les canaux suivis et rejoints"
|
||||||
"write:channels": "Gérer les canaux"
|
"write:channels": "Gérer les canaux"
|
||||||
"read:gallery": "Voir la galerie"
|
"read:reactions": Lister les réactions
|
||||||
"write:gallery": "Éditer la galerie"
|
|
||||||
"read:gallery-likes": "Voir les mentions « J'aime » dans la galerie"
|
|
||||||
"write:gallery-likes": "Gérer les mentions « J'aime » dans la galerie"
|
|
||||||
_auth:
|
_auth:
|
||||||
shareAccess: "Autoriser \"{name}\" à accéder à votre compte ?"
|
shareAccess: "Autoriser \"{name}\" à accéder à votre compte ?"
|
||||||
shareAccessAsk: "Voulez-vous vraiment autoriser cette application à accéder à votre\
|
shareAccessAsk: "Voulez-vous vraiment autoriser cette application à accéder à votre\
|
||||||
|
@ -1393,6 +1382,19 @@ regexpErrorDescription: "Il y a une erreur dans l'expression régulière de la l
|
||||||
\ {line} de vos mots ignorées {tab} :"
|
\ {line} de vos mots ignorées {tab} :"
|
||||||
forwardReportIsAnonymous: Un compte système anonyme sera affiché, à la place de votre
|
forwardReportIsAnonymous: Un compte système anonyme sera affiché, à la place de votre
|
||||||
compte, lors du signalement à l'instance distante.
|
compte, lors du signalement à l'instance distante.
|
||||||
attachmentRequired: Un attachement au moins est nécessaire.
|
|
||||||
useDrawerReactionPickerForMobile: Sur mobile afficher un tiroir pour le panneau de
|
useDrawerReactionPickerForMobile: Sur mobile afficher un tiroir pour le panneau de
|
||||||
réaction
|
réaction
|
||||||
|
appAuthorization: Authorisation de l'application
|
||||||
|
noPermissionsRequested: (Aucune permission demandée.)
|
||||||
|
oauthErrorGoBack: Une erreur est survenue pendant l'authentification d'une application
|
||||||
|
tierce. Veuillez réessayer.
|
||||||
|
botFollowRequiresApproval: Accepter manuellement les demandes de suivi des comptes
|
||||||
|
marqués « robots »
|
||||||
|
unrenoteAllConfirm: Étes-vous certain·e de vouloir retirer toutes les renotes de cette
|
||||||
|
note ?
|
||||||
|
unrenoteAll: Retirer toutes les renotes
|
||||||
|
deleteAllFiles: Supprimer tous les fichiers
|
||||||
|
cannotAttachFileWhenAccountSwitched: Vous ne pouvez pas joindre un fichier à partir
|
||||||
|
d'un autre compte.
|
||||||
|
cannotSwitchAccountWhenFileAttached: Vous ne pouvez pas changer de compte tant qu'il
|
||||||
|
y a des pièces jointes.
|
||||||
|
|
|
@ -495,7 +495,7 @@ ascendingOrder: "Urutkan naik"
|
||||||
descendingOrder: "Urutkan menurun"
|
descendingOrder: "Urutkan menurun"
|
||||||
scratchpad: "Scratchpad"
|
scratchpad: "Scratchpad"
|
||||||
scratchpadDescription: "Scratchpad menyediakan lingkungan eksperimen untuk AiScript.\
|
scratchpadDescription: "Scratchpad menyediakan lingkungan eksperimen untuk AiScript.\
|
||||||
\ Kamu bisa menulis, mengeksuksi, serta mengecek hasil yang berinteraksi dengan\
|
\ Kamu bisa menulis, mengeksuksi, serta mengecek hasil yang berinteraksi dengan\
|
||||||
\ FoundKey."
|
\ FoundKey."
|
||||||
output: "Keluaran"
|
output: "Keluaran"
|
||||||
updateRemoteUser: "Perbaharui informasi pengguna luar"
|
updateRemoteUser: "Perbaharui informasi pengguna luar"
|
||||||
|
@ -678,7 +678,6 @@ editCode: "Sunting kode"
|
||||||
apply: "Terapkan"
|
apply: "Terapkan"
|
||||||
receiveAnnouncementFromInstance: "Terima pemberitahuan surel dari instansi ini"
|
receiveAnnouncementFromInstance: "Terima pemberitahuan surel dari instansi ini"
|
||||||
emailNotification: "Pemberitahuan surel"
|
emailNotification: "Pemberitahuan surel"
|
||||||
publish: "Terbitkan"
|
|
||||||
useReactionPickerForContextMenu: "Buka pemilih reaksi dengan klik-kanan"
|
useReactionPickerForContextMenu: "Buka pemilih reaksi dengan klik-kanan"
|
||||||
typingUsers: "{users} sedang mengetik..."
|
typingUsers: "{users} sedang mengetik..."
|
||||||
jumpToSpecifiedDate: "Loncat ke tanggal spesifik"
|
jumpToSpecifiedDate: "Loncat ke tanggal spesifik"
|
||||||
|
@ -717,10 +716,7 @@ switch: "Beralih"
|
||||||
noMaintainerInformationWarning: "Informasi pengelola belum disetel."
|
noMaintainerInformationWarning: "Informasi pengelola belum disetel."
|
||||||
noBotProtectionWarning: "Proteksi bot belum disetel."
|
noBotProtectionWarning: "Proteksi bot belum disetel."
|
||||||
configure: "Setel"
|
configure: "Setel"
|
||||||
postToGallery: "Posting ke galeri"
|
|
||||||
gallery: "Galeri"
|
|
||||||
recentPosts: "Postingan terbaru"
|
recentPosts: "Postingan terbaru"
|
||||||
popularPosts: "Postingan populer"
|
|
||||||
shareWithNote: "Bagikan dengan catatan"
|
shareWithNote: "Bagikan dengan catatan"
|
||||||
emailNotConfiguredWarning: "Alamat surel tidak disetel."
|
emailNotConfiguredWarning: "Alamat surel tidak disetel."
|
||||||
ratio: "Rasio"
|
ratio: "Rasio"
|
||||||
|
@ -829,11 +825,6 @@ _forgotPassword:
|
||||||
\ admin segera."
|
\ admin segera."
|
||||||
contactAdmin: "Instansi ini tidak mendukung menggunakan alamat surel, mohon kontak\
|
contactAdmin: "Instansi ini tidak mendukung menggunakan alamat surel, mohon kontak\
|
||||||
\ admin untuk mengatur ulang password kamu."
|
\ admin untuk mengatur ulang password kamu."
|
||||||
_gallery:
|
|
||||||
my: "Postingan saya"
|
|
||||||
liked: "Postingan yang disukai"
|
|
||||||
like: "Suka"
|
|
||||||
unlike: "Hapus suka"
|
|
||||||
_email:
|
_email:
|
||||||
_follow:
|
_follow:
|
||||||
title: "Mengikuti kamu"
|
title: "Mengikuti kamu"
|
||||||
|
@ -1076,7 +1067,6 @@ _permissions:
|
||||||
"write:notes": "Buat atau hapus catatan"
|
"write:notes": "Buat atau hapus catatan"
|
||||||
"read:notifications": "Lihat pemberitahuan"
|
"read:notifications": "Lihat pemberitahuan"
|
||||||
"write:notifications": "Sunting pemberitahuan"
|
"write:notifications": "Sunting pemberitahuan"
|
||||||
"read:reactions": "Lihat reaksi"
|
|
||||||
"write:reactions": "Sunting reaksi"
|
"write:reactions": "Sunting reaksi"
|
||||||
"write:votes": "Beri suara"
|
"write:votes": "Beri suara"
|
||||||
"read:pages": "Lihat halaman"
|
"read:pages": "Lihat halaman"
|
||||||
|
@ -1087,10 +1077,6 @@ _permissions:
|
||||||
"write:user-groups": "Sunting atau hapus grup pengguna"
|
"write:user-groups": "Sunting atau hapus grup pengguna"
|
||||||
"read:channels": "Lihat saluran"
|
"read:channels": "Lihat saluran"
|
||||||
"write:channels": "Sunting saluran"
|
"write:channels": "Sunting saluran"
|
||||||
"read:gallery": "Lihat galeri"
|
|
||||||
"write:gallery": "Sunting galeri"
|
|
||||||
"read:gallery-likes": "Lihat daftar postingan galeri yang disukai"
|
|
||||||
"write:gallery-likes": "Sunting daftar postingan galeri yang disukai"
|
|
||||||
_auth:
|
_auth:
|
||||||
shareAccess: "Apakah kamu ingin mengijinkan \"{name}\" untuk mengakses akun ini?"
|
shareAccess: "Apakah kamu ingin mengijinkan \"{name}\" untuk mengakses akun ini?"
|
||||||
shareAccessAsk: "Apakah kamu ingin mengijinkan aplikasi ini untuk mengakses akun\
|
shareAccessAsk: "Apakah kamu ingin mengijinkan aplikasi ini untuk mengakses akun\
|
||||||
|
@ -1239,7 +1225,7 @@ _pages:
|
||||||
editPage: "Sunting halaman"
|
editPage: "Sunting halaman"
|
||||||
readPage: "Lihat sumber kode aktif"
|
readPage: "Lihat sumber kode aktif"
|
||||||
created: "Halaman berhasil dibuat"
|
created: "Halaman berhasil dibuat"
|
||||||
updated: "Halaman berhasil diperbaharui!"
|
updated: "Halaman berhasil diperbaharui"
|
||||||
deleted: "Halaman telah dihapus"
|
deleted: "Halaman telah dihapus"
|
||||||
pageSetting: "Pengaturan Halaman"
|
pageSetting: "Pengaturan Halaman"
|
||||||
nameAlreadyExists: "URL Halaman yang ditentukan sudah ada"
|
nameAlreadyExists: "URL Halaman yang ditentukan sudah ada"
|
||||||
|
|
|
@ -66,7 +66,7 @@ driveFileDeleteConfirm: "Vuoi davvero eliminare il file「{name}? Anche gli alle
|
||||||
unfollowConfirm: "Vuoi davvero smettere di seguire {name}?"
|
unfollowConfirm: "Vuoi davvero smettere di seguire {name}?"
|
||||||
exportRequested: "Hai richiesto un'esportazione, e potrebbe volerci tempo. Quando\
|
exportRequested: "Hai richiesto un'esportazione, e potrebbe volerci tempo. Quando\
|
||||||
\ sarà compiuta, il file verrà aggiunto direttamente al Drive."
|
\ sarà compiuta, il file verrà aggiunto direttamente al Drive."
|
||||||
importRequested: "Hai richiesto un'importazione. Può volerci tempo. "
|
importRequested: "Hai richiesto un'importazione. Può volerci tempo."
|
||||||
lists: "Liste"
|
lists: "Liste"
|
||||||
note: "Nota"
|
note: "Nota"
|
||||||
notes: "Note"
|
notes: "Note"
|
||||||
|
@ -78,7 +78,7 @@ manageLists: "Gestisci liste"
|
||||||
error: "Errore"
|
error: "Errore"
|
||||||
somethingHappened: "Si è verificato un problema"
|
somethingHappened: "Si è verificato un problema"
|
||||||
retry: "Riprova"
|
retry: "Riprova"
|
||||||
pageLoadError: "Caricamento pagina non riuscito. "
|
pageLoadError: "Caricamento pagina non riuscito."
|
||||||
pageLoadErrorDescription: "Questo viene normalmente causato dalla rete o dalla cache\
|
pageLoadErrorDescription: "Questo viene normalmente causato dalla rete o dalla cache\
|
||||||
\ del browser. Si prega di pulire la cache, o di attendere e riprovare più tardi."
|
\ del browser. Si prega di pulire la cache, o di attendere e riprovare più tardi."
|
||||||
serverIsDead: "Il server non risponde. Si prega di attendere e riprovare più tardi."
|
serverIsDead: "Il server non risponde. Si prega di attendere e riprovare più tardi."
|
||||||
|
@ -190,7 +190,7 @@ blockedUsers: "Account bloccati"
|
||||||
noUsers: "Nessun utente trovato"
|
noUsers: "Nessun utente trovato"
|
||||||
editProfile: "Modifica profilo"
|
editProfile: "Modifica profilo"
|
||||||
noteDeleteConfirm: "Eliminare questo Nota?"
|
noteDeleteConfirm: "Eliminare questo Nota?"
|
||||||
pinLimitExceeded: "Non puoi fissare altre note "
|
pinLimitExceeded: "Non puoi fissare altre note."
|
||||||
intro: "L'installazione di FoundKey è finita! Si prega di creare un account amministratore."
|
intro: "L'installazione di FoundKey è finita! Si prega di creare un account amministratore."
|
||||||
done: "Fine"
|
done: "Fine"
|
||||||
processing: "In elaborazione"
|
processing: "In elaborazione"
|
||||||
|
@ -442,7 +442,7 @@ useObjectStorage: "Utilizza stoccaggio oggetti"
|
||||||
objectStorageBaseUrl: "Base URL"
|
objectStorageBaseUrl: "Base URL"
|
||||||
objectStorageBaseUrlDesc: "URL di riferimento. In caso di utilizzo di proxy o CDN\
|
objectStorageBaseUrlDesc: "URL di riferimento. In caso di utilizzo di proxy o CDN\
|
||||||
\ l'URL è 'https://<bucket>.s3.amazonaws.com' per S3, 'https://storage.googleapis.com/<bucket>'\
|
\ l'URL è 'https://<bucket>.s3.amazonaws.com' per S3, 'https://storage.googleapis.com/<bucket>'\
|
||||||
\ per GCS eccetera. "
|
\ per GCS eccetera."
|
||||||
objectStorageBucket: "Bucket"
|
objectStorageBucket: "Bucket"
|
||||||
objectStorageBucketDesc: "Specificare il nome del bucket utilizzato dal provider."
|
objectStorageBucketDesc: "Specificare il nome del bucket utilizzato dal provider."
|
||||||
objectStoragePrefix: "Prefix"
|
objectStoragePrefix: "Prefix"
|
||||||
|
@ -527,7 +527,7 @@ large: "Grande"
|
||||||
medium: "Predefinito"
|
medium: "Predefinito"
|
||||||
small: "Piccolo"
|
small: "Piccolo"
|
||||||
generateAccessToken: "Genera token di accesso"
|
generateAccessToken: "Genera token di accesso"
|
||||||
permission: "Autorizzazioni "
|
permission: "Autorizzazioni"
|
||||||
enableAll: "Abilita tutto"
|
enableAll: "Abilita tutto"
|
||||||
disableAll: "Disabilita tutto"
|
disableAll: "Disabilita tutto"
|
||||||
tokenRequested: "Autorizza accesso all'account"
|
tokenRequested: "Autorizza accesso all'account"
|
||||||
|
@ -661,11 +661,10 @@ editCode: "Modifica codice"
|
||||||
apply: "Applica"
|
apply: "Applica"
|
||||||
receiveAnnouncementFromInstance: "Ricevi i messaggi informativi dall'istanza"
|
receiveAnnouncementFromInstance: "Ricevi i messaggi informativi dall'istanza"
|
||||||
emailNotification: "Eventi per notifiche via mail"
|
emailNotification: "Eventi per notifiche via mail"
|
||||||
publish: "Pubblico"
|
|
||||||
useReactionPickerForContextMenu: "Cliccare sul tasto destro per aprire il pannello\
|
useReactionPickerForContextMenu: "Cliccare sul tasto destro per aprire il pannello\
|
||||||
\ di reazioni"
|
\ di reazioni"
|
||||||
typingUsers: "{users} sta(nno) scrivendo"
|
typingUsers: "{users} sta(nno) scrivendo"
|
||||||
jumpToSpecifiedDate: "Vai alla data "
|
jumpToSpecifiedDate: "Vai alla data"
|
||||||
clear: "Cancella"
|
clear: "Cancella"
|
||||||
markAllAsRead: "Segna tutti come già letti"
|
markAllAsRead: "Segna tutti come già letti"
|
||||||
goBack: "Indietro"
|
goBack: "Indietro"
|
||||||
|
@ -700,10 +699,7 @@ switch: "Sostituisci"
|
||||||
noMaintainerInformationWarning: "Le informazioni amministratore non sono impostate."
|
noMaintainerInformationWarning: "Le informazioni amministratore non sono impostate."
|
||||||
noBotProtectionWarning: "Nessuna protezione impostata contro i bot."
|
noBotProtectionWarning: "Nessuna protezione impostata contro i bot."
|
||||||
configure: "Imposta"
|
configure: "Imposta"
|
||||||
postToGallery: "Pubblicare nella galleria"
|
|
||||||
gallery: "Galleria"
|
|
||||||
recentPosts: "Le più recenti"
|
recentPosts: "Le più recenti"
|
||||||
popularPosts: "Le più visualizzate"
|
|
||||||
shareWithNote: "Condividere in nota"
|
shareWithNote: "Condividere in nota"
|
||||||
emailNotConfiguredWarning: "Non hai impostato nessun indirizzo e-mail."
|
emailNotConfiguredWarning: "Non hai impostato nessun indirizzo e-mail."
|
||||||
ratio: "Rapporto"
|
ratio: "Rapporto"
|
||||||
|
@ -780,11 +776,6 @@ _forgotPassword:
|
||||||
contactAdmin: "Poiché questa istanza non permette l'utilizzo di una mail, si prega\
|
contactAdmin: "Poiché questa istanza non permette l'utilizzo di una mail, si prega\
|
||||||
\ di contattare l'amministratore·trice dell'istanza per poter ripristinare la\
|
\ di contattare l'amministratore·trice dell'istanza per poter ripristinare la\
|
||||||
\ password."
|
\ password."
|
||||||
_gallery:
|
|
||||||
my: "Le mie pubblicazioni"
|
|
||||||
liked: "Pubblicazioni che mi piacciono"
|
|
||||||
like: "Mi piace!"
|
|
||||||
unlike: "Non mi piace più"
|
|
||||||
_email:
|
_email:
|
||||||
_follow:
|
_follow:
|
||||||
title: "Ha iniziato a seguirti"
|
title: "Ha iniziato a seguirti"
|
||||||
|
@ -907,7 +898,7 @@ _ago:
|
||||||
secondsAgo: "{n}s fa"
|
secondsAgo: "{n}s fa"
|
||||||
minutesAgo: "{n}min fa"
|
minutesAgo: "{n}min fa"
|
||||||
hoursAgo: "{n}h fa"
|
hoursAgo: "{n}h fa"
|
||||||
daysAgo: "{1} giorni fa"
|
daysAgo: "{n} giorni fa"
|
||||||
weeksAgo: "{n} settimane fa"
|
weeksAgo: "{n} settimane fa"
|
||||||
monthsAgo: "{n} mesi fa"
|
monthsAgo: "{n} mesi fa"
|
||||||
yearsAgo: "{n} anni fa"
|
yearsAgo: "{n} anni fa"
|
||||||
|
@ -925,22 +916,22 @@ _tutorial:
|
||||||
\ hai pubblicato alcuna nota ancora."
|
\ hai pubblicato alcuna nota ancora."
|
||||||
step2_1: "Prima di scrivere una nota o di seguire un account, imposta il tuo profilo!"
|
step2_1: "Prima di scrivere una nota o di seguire un account, imposta il tuo profilo!"
|
||||||
step2_2: "Aggiungere qualche informazione su di te aumenterà le tue possibilità\
|
step2_2: "Aggiungere qualche informazione su di te aumenterà le tue possibilità\
|
||||||
\ di essere seguit@ da altre persone. "
|
\ di essere seguit@ da altre persone."
|
||||||
step3_1: "Hai finito di impostare il tuo profilo?"
|
step3_1: "Hai finito di impostare il tuo profilo?"
|
||||||
step3_2: "Ora, puoi pubblicare una nota. Facciamo una prova! Premi il pulsante a\
|
step3_2: "Ora, puoi pubblicare una nota. Facciamo una prova! Premi il pulsante a\
|
||||||
\ forma di penna in cima allo schermo per aprire una finestra di dialogo. "
|
\ forma di penna in cima allo schermo per aprire una finestra di dialogo."
|
||||||
step3_3: "Scritto il testo della nota, puoi pubblicarla premendo il pulsante nella\
|
step3_3: "Scritto il testo della nota, puoi pubblicarla premendo il pulsante nella\
|
||||||
\ parte superiore destra della finestra di dialogo."
|
\ parte superiore destra della finestra di dialogo."
|
||||||
step3_4: "Non ti viene niente in mente? Perché non scrivi semplicemente \"Ho appena\
|
step3_4: "Non ti viene niente in mente? Perché non scrivi semplicemente \"Ho appena\
|
||||||
\ cominciato a usare FoundKey\"?"
|
\ cominciato a usare FoundKey\"?"
|
||||||
step4_1: "Hai pubblicato qualcosa?"
|
step4_1: "Hai pubblicato qualcosa?"
|
||||||
step4_2: "Se puoi visualizzare la tua nota sulla timeline, ce l'hai fatta!"
|
step4_2: "Se puoi visualizzare la tua nota sulla timeline, ce l'hai fatta!"
|
||||||
step5_1: "Adesso, cerca di seguire altre persone per vivacizzare la tua timeline. "
|
step5_1: "Adesso, cerca di seguire altre persone per vivacizzare la tua timeline."
|
||||||
step5_2: "La pagina {featured} mostra le note di tendenza su questa istanza, e magari\
|
step5_2: "La pagina {featured} mostra le note di tendenza su questa istanza, e magari\
|
||||||
\ ti aiuterà a trovare account che ti piacciono e che vorrai seguire. Oppure,\
|
\ ti aiuterà a trovare account che ti piacciono e che vorrai seguire. Oppure,\
|
||||||
\ potrai trovare utenti popolari usando {explore}."
|
\ potrai trovare utenti popolari usando {explore}."
|
||||||
step5_3: "Per seguire altrə utenti, clicca sul loro avatar per aprire la pagina\
|
step5_3: "Per seguire altrə utenti, clicca sul loro avatar per aprire la pagina\
|
||||||
\ di profilo dove puoi premere il pulsante \"Seguire\". "
|
\ di profilo dove puoi premere il pulsante \"Seguire\"."
|
||||||
step5_4: "Alcunə utenti scelgono di confermare manualmente le richieste di follow\
|
step5_4: "Alcunə utenti scelgono di confermare manualmente le richieste di follow\
|
||||||
\ che ricevono, quindi a seconda delle persone potrebbe volerci un pò prima che\
|
\ che ricevono, quindi a seconda delle persone potrebbe volerci un pò prima che\
|
||||||
\ la tua richiesta sia accolta."
|
\ la tua richiesta sia accolta."
|
||||||
|
@ -951,7 +942,7 @@ _tutorial:
|
||||||
step6_3: "Per inviare una reazione, premi l'icona + della nota e scegli l'emoji\
|
step6_3: "Per inviare una reazione, premi l'icona + della nota e scegli l'emoji\
|
||||||
\ che vuoi mandare."
|
\ che vuoi mandare."
|
||||||
step7_1: "Complimenti! Sei arrivat@ alla fine dell'esercitazione di base su come\
|
step7_1: "Complimenti! Sei arrivat@ alla fine dell'esercitazione di base su come\
|
||||||
\ usare FoundKey. "
|
\ usare FoundKey."
|
||||||
step7_2: "Se vuoi saperne di più su FoundKey, puoi dare un'occhiata alla sezione\
|
step7_2: "Se vuoi saperne di più su FoundKey, puoi dare un'occhiata alla sezione\
|
||||||
\ {help}."
|
\ {help}."
|
||||||
step7_3: "Da ultimo, buon divertimento su FoundKey! \U0001F680"
|
step7_3: "Da ultimo, buon divertimento su FoundKey! \U0001F680"
|
||||||
|
@ -975,7 +966,6 @@ _permissions:
|
||||||
"write:notes": "Creare / Eliminare note"
|
"write:notes": "Creare / Eliminare note"
|
||||||
"read:notifications": "Visualizza notifiche"
|
"read:notifications": "Visualizza notifiche"
|
||||||
"write:notifications": "Gerisci notifiche"
|
"write:notifications": "Gerisci notifiche"
|
||||||
"read:reactions": "Vedi reazioni"
|
|
||||||
"write:reactions": "Gerisci reazioni"
|
"write:reactions": "Gerisci reazioni"
|
||||||
"write:votes": "Votare"
|
"write:votes": "Votare"
|
||||||
"read:pages": "Visualizzare pagine"
|
"read:pages": "Visualizzare pagine"
|
||||||
|
@ -1128,9 +1118,9 @@ _timelines:
|
||||||
_pages:
|
_pages:
|
||||||
newPage: "Crea pagina"
|
newPage: "Crea pagina"
|
||||||
editPage: "Modifica pagina"
|
editPage: "Modifica pagina"
|
||||||
readPage: "Visualizzando fonte "
|
readPage: "Visualizzando fonte"
|
||||||
created: "Pagina creata!"
|
created: "Pagina creata"
|
||||||
updated: "Pagina aggiornata con successo!"
|
updated: "Pagina aggiornata con successo"
|
||||||
deleted: "Pagina eliminata"
|
deleted: "Pagina eliminata"
|
||||||
pageSetting: "Impostazioni pagina"
|
pageSetting: "Impostazioni pagina"
|
||||||
nameAlreadyExists: "Esiste già una pagina con lo stesso URL."
|
nameAlreadyExists: "Esiste già una pagina con lo stesso URL."
|
||||||
|
|
|
@ -623,7 +623,6 @@ editCode: "コードを編集"
|
||||||
apply: "適用"
|
apply: "適用"
|
||||||
receiveAnnouncementFromInstance: "インスタンスからのお知らせを受け取る"
|
receiveAnnouncementFromInstance: "インスタンスからのお知らせを受け取る"
|
||||||
emailNotification: "メール通知"
|
emailNotification: "メール通知"
|
||||||
publish: "公開"
|
|
||||||
useReactionPickerForContextMenu: "右クリックでリアクションピッカーを開く"
|
useReactionPickerForContextMenu: "右クリックでリアクションピッカーを開く"
|
||||||
typingUsers: "{users}が入力中"
|
typingUsers: "{users}が入力中"
|
||||||
jumpToSpecifiedDate: "特定の日付にジャンプ"
|
jumpToSpecifiedDate: "特定の日付にジャンプ"
|
||||||
|
@ -661,10 +660,7 @@ switch: "切り替え"
|
||||||
noMaintainerInformationWarning: "管理者情報が設定されていません。"
|
noMaintainerInformationWarning: "管理者情報が設定されていません。"
|
||||||
noBotProtectionWarning: "Botプロテクションが設定されていません。"
|
noBotProtectionWarning: "Botプロテクションが設定されていません。"
|
||||||
configure: "設定する"
|
configure: "設定する"
|
||||||
postToGallery: "ギャラリーへ投稿"
|
|
||||||
gallery: "ギャラリー"
|
|
||||||
recentPosts: "最近の投稿"
|
recentPosts: "最近の投稿"
|
||||||
popularPosts: "人気の投稿"
|
|
||||||
shareWithNote: "ノートで共有"
|
shareWithNote: "ノートで共有"
|
||||||
emailNotConfiguredWarning: "メールアドレスの設定がされていません。"
|
emailNotConfiguredWarning: "メールアドレスの設定がされていません。"
|
||||||
ratio: "比率"
|
ratio: "比率"
|
||||||
|
@ -776,12 +772,6 @@ _forgotPassword:
|
||||||
ifNoEmail: "メールアドレスを登録していない場合は、管理者までお問い合わせください。"
|
ifNoEmail: "メールアドレスを登録していない場合は、管理者までお問い合わせください。"
|
||||||
contactAdmin: "このインスタンスではメールがサポートされていないため、パスワードリセットを行う場合は管理者までお問い合わせください。"
|
contactAdmin: "このインスタンスではメールがサポートされていないため、パスワードリセットを行う場合は管理者までお問い合わせください。"
|
||||||
|
|
||||||
_gallery:
|
|
||||||
my: "自分の投稿"
|
|
||||||
liked: "いいねした投稿"
|
|
||||||
like: "いいね!"
|
|
||||||
unlike: "いいね解除"
|
|
||||||
|
|
||||||
_email:
|
_email:
|
||||||
_follow:
|
_follow:
|
||||||
title: "フォローされました"
|
title: "フォローされました"
|
||||||
|
@ -1006,7 +996,6 @@ _permissions:
|
||||||
"write:notes": "ノートを作成・削除する"
|
"write:notes": "ノートを作成・削除する"
|
||||||
"read:notifications": "通知を見る"
|
"read:notifications": "通知を見る"
|
||||||
"write:notifications": "通知を操作する"
|
"write:notifications": "通知を操作する"
|
||||||
"read:reactions": "リアクションを見る"
|
|
||||||
"write:reactions": "リアクションを操作する"
|
"write:reactions": "リアクションを操作する"
|
||||||
"write:votes": "投票する"
|
"write:votes": "投票する"
|
||||||
"read:pages": "ページを見る"
|
"read:pages": "ページを見る"
|
||||||
|
@ -1017,11 +1006,6 @@ _permissions:
|
||||||
"write:user-groups": "ユーザーグループを操作する"
|
"write:user-groups": "ユーザーグループを操作する"
|
||||||
"read:channels": "チャンネルを見る"
|
"read:channels": "チャンネルを見る"
|
||||||
"write:channels": "チャンネルを操作する"
|
"write:channels": "チャンネルを操作する"
|
||||||
"read:gallery": "ギャラリーを見る"
|
|
||||||
"write:gallery": "ギャラリーを操作する"
|
|
||||||
"read:gallery-likes": "ギャラリーのいいねを見る"
|
|
||||||
"write:gallery-likes": "ギャラリーのいいねを操作する"
|
|
||||||
|
|
||||||
_auth:
|
_auth:
|
||||||
shareAccess: "「{name}」がアカウントにアクセスすることを許可しますか?"
|
shareAccess: "「{name}」がアカウントにアクセスすることを許可しますか?"
|
||||||
shareAccessAsk: "アカウントへのアクセスを許可しますか?"
|
shareAccessAsk: "アカウントへのアクセスを許可しますか?"
|
||||||
|
|
|
@ -74,10 +74,6 @@ somethingHappened: "なんかアカンことが起こったで"
|
||||||
retry: "もっぺんやる?"
|
retry: "もっぺんやる?"
|
||||||
pageLoadError: "ページの読み込みに失敗してしもうたで…"
|
pageLoadError: "ページの読み込みに失敗してしもうたで…"
|
||||||
pageLoadErrorDescription: "これは普通、ネットワークかブラウザキャッシュが原因やからね。キャッシュをクリアするか、もうちっとだけ待ってくれへんか?"
|
pageLoadErrorDescription: "これは普通、ネットワークかブラウザキャッシュが原因やからね。キャッシュをクリアするか、もうちっとだけ待ってくれへんか?"
|
||||||
serverIsDead: "The server is not responding. Please wait for a while before trying\
|
|
||||||
\ again."
|
|
||||||
youShouldUpgradeClient: "To display this page, please reload and use a new version\
|
|
||||||
\ client. "
|
|
||||||
enterListName: "リスト名を入れてや"
|
enterListName: "リスト名を入れてや"
|
||||||
privacy: "プライバシー"
|
privacy: "プライバシー"
|
||||||
makeFollowManuallyApprove: "自分が認めた人だけがこのアカウントをフォローできるようにする"
|
makeFollowManuallyApprove: "自分が認めた人だけがこのアカウントをフォローできるようにする"
|
||||||
|
@ -126,9 +122,6 @@ flagAsBot: "Botやで"
|
||||||
flagAsBotDescription: "もしこのアカウントがプログラムによって運用されるんやったら、このフラグをオンにしてたのむで。オンにすると、反応の連鎖を防ぐためのフラグとして他の開発者に役立ったり、FoundKeyのシステム上での扱いがBotに合ったもんになるんやで。"
|
flagAsBotDescription: "もしこのアカウントがプログラムによって運用されるんやったら、このフラグをオンにしてたのむで。オンにすると、反応の連鎖を防ぐためのフラグとして他の開発者に役立ったり、FoundKeyのシステム上での扱いがBotに合ったもんになるんやで。"
|
||||||
flagAsCat: "Catやで"
|
flagAsCat: "Catやで"
|
||||||
flagAsCatDescription: "ワレ、猫ちゃんならこのフラグをつけてみ?"
|
flagAsCatDescription: "ワレ、猫ちゃんならこのフラグをつけてみ?"
|
||||||
flagShowTimelineReplies: "It will display the reply to the note in the timeline. "
|
|
||||||
flagShowTimelineRepliesDescription: "It will display the reply to notes other than\
|
|
||||||
\ the user notes in the timeline when you turn it on. "
|
|
||||||
autoAcceptFollowed: "フォローしとるユーザーからのフォローリクエストを勝手に許可しとく"
|
autoAcceptFollowed: "フォローしとるユーザーからのフォローリクエストを勝手に許可しとく"
|
||||||
addAccount: "アカウントを追加"
|
addAccount: "アカウントを追加"
|
||||||
loginFailed: "ログインに失敗してしもうた…"
|
loginFailed: "ログインに失敗してしもうた…"
|
||||||
|
@ -209,9 +202,6 @@ resetAreYouSure: "リセットしてええん?"
|
||||||
saved: "保存したで!"
|
saved: "保存したで!"
|
||||||
messaging: "チャット"
|
messaging: "チャット"
|
||||||
upload: "アップロード"
|
upload: "アップロード"
|
||||||
keepOriginalUploading: "Retain the original image. "
|
|
||||||
keepOriginalUploadingDescription: "When uploading the clip, the original version will\
|
|
||||||
\ be retained. Turning it of then uploading will produce images for public use. "
|
|
||||||
fromDrive: "ドライブから"
|
fromDrive: "ドライブから"
|
||||||
fromUrl: "URLから"
|
fromUrl: "URLから"
|
||||||
uploadFromUrl: "URLアップロード"
|
uploadFromUrl: "URLアップロード"
|
||||||
|
@ -380,7 +370,7 @@ onlyOneFileCanBeAttached: "すまん、メッセージに添付できるファ
|
||||||
signinRequired: "ログインしてくれへん?"
|
signinRequired: "ログインしてくれへん?"
|
||||||
invitationCode: "招待コード"
|
invitationCode: "招待コード"
|
||||||
checking: "確認しとるで"
|
checking: "確認しとるで"
|
||||||
available: "利用できる\n"
|
available: "利用できる"
|
||||||
unavailable: "利用できん"
|
unavailable: "利用できん"
|
||||||
usernameInvalidFormat: "a~z、A~Z、0~9、_が使えるで"
|
usernameInvalidFormat: "a~z、A~Z、0~9、_が使えるで"
|
||||||
tooShort: "短すぎやろ!"
|
tooShort: "短すぎやろ!"
|
||||||
|
@ -561,8 +551,6 @@ administration: "管理"
|
||||||
hashtags: "ハッシュタグ"
|
hashtags: "ハッシュタグ"
|
||||||
hide: "隠す"
|
hide: "隠す"
|
||||||
indefinitely: "無期限"
|
indefinitely: "無期限"
|
||||||
_gallery:
|
|
||||||
unlike: "良くないわ"
|
|
||||||
_email:
|
_email:
|
||||||
_follow:
|
_follow:
|
||||||
title: "フォローされたで"
|
title: "フォローされたで"
|
||||||
|
@ -656,7 +644,6 @@ _tutorial:
|
||||||
_2fa:
|
_2fa:
|
||||||
alreadyRegistered: "もう設定終わっとるわ。"
|
alreadyRegistered: "もう設定終わっとるわ。"
|
||||||
_permissions:
|
_permissions:
|
||||||
"read:reactions": "リアクションを見る"
|
|
||||||
"write:votes": "投票する"
|
"write:votes": "投票する"
|
||||||
"read:pages": "ページを見る"
|
"read:pages": "ページを見る"
|
||||||
"read:page-likes": "ページのええやんを見る"
|
"read:page-likes": "ページのええやんを見る"
|
||||||
|
@ -697,7 +684,7 @@ _widgets:
|
||||||
aiscript: "AiScriptコンソール"
|
aiscript: "AiScriptコンソール"
|
||||||
_cw:
|
_cw:
|
||||||
hide: "隠す"
|
hide: "隠す"
|
||||||
show: "続き見して!"
|
show: "続き見して"
|
||||||
chars: "{count}文字"
|
chars: "{count}文字"
|
||||||
files: "{count}ファイル"
|
files: "{count}ファイル"
|
||||||
_poll:
|
_poll:
|
||||||
|
|
|
@ -34,7 +34,6 @@ selectList: "Fren tabdart"
|
||||||
youHaveNoLists: "Ulac ɣur-k·m ula d yiwet n tabdart"
|
youHaveNoLists: "Ulac ɣur-k·m ula d yiwet n tabdart"
|
||||||
security: "Taɣellist"
|
security: "Taɣellist"
|
||||||
remove: "Kkes"
|
remove: "Kkes"
|
||||||
connectService: "Qqen"
|
|
||||||
userList: "Tibdarin"
|
userList: "Tibdarin"
|
||||||
securityKey: "Tasarutt n tɣellist"
|
securityKey: "Tasarutt n tɣellist"
|
||||||
securityKeyName: "Isem n tsarutt"
|
securityKeyName: "Isem n tsarutt"
|
||||||
|
|
|
@ -10,7 +10,7 @@ notifications: "Meldingen"
|
||||||
username: "Gebruikersnaam"
|
username: "Gebruikersnaam"
|
||||||
password: "Wachtwoord"
|
password: "Wachtwoord"
|
||||||
forgotPassword: "Wachtwoord vergeten"
|
forgotPassword: "Wachtwoord vergeten"
|
||||||
fetchingAsApObject: "Ophalen vanuit de Fediverse"
|
fetchingAsApObject: "Ophalen vanuit de Fediverse..."
|
||||||
ok: "Ok"
|
ok: "Ok"
|
||||||
gotIt: "Begrepen"
|
gotIt: "Begrepen"
|
||||||
cancel: "Annuleren"
|
cancel: "Annuleren"
|
||||||
|
@ -45,7 +45,7 @@ deleteAndEditConfirm: "Weet je zeker dat je deze notitie wilt verwijderen en dan
|
||||||
\ Je verliest alle reacties, herdelingen en antwoorden erop."
|
\ Je verliest alle reacties, herdelingen en antwoorden erop."
|
||||||
addToList: "Aan lijst toevoegen"
|
addToList: "Aan lijst toevoegen"
|
||||||
sendMessage: "Verstuur bericht"
|
sendMessage: "Verstuur bericht"
|
||||||
copyUsername: "Kopiëren gebruikersnaam "
|
copyUsername: "Kopiëren gebruikersnaam"
|
||||||
reply: "Antwoord"
|
reply: "Antwoord"
|
||||||
loadMore: "Laad meer"
|
loadMore: "Laad meer"
|
||||||
showMore: "Toon meer"
|
showMore: "Toon meer"
|
||||||
|
@ -222,7 +222,7 @@ keepOriginalUploadingDescription: "Bewaar de originele versie bij het uploaden v
|
||||||
\ afbeeldingen. Indien uitgeschakeld, wordt bij het uploaden een alternatieve versie\
|
\ afbeeldingen. Indien uitgeschakeld, wordt bij het uploaden een alternatieve versie\
|
||||||
\ voor webpublicatie genereert."
|
\ voor webpublicatie genereert."
|
||||||
fromDrive: "Van schijf"
|
fromDrive: "Van schijf"
|
||||||
fromUrl: "Van URL"
|
fromUrl: "Van URL"
|
||||||
uploadFromUrl: "Uploaden vanaf een URL"
|
uploadFromUrl: "Uploaden vanaf een URL"
|
||||||
uploadFromUrlDescription: "URL van het bestand dat je wil uploaden"
|
uploadFromUrlDescription: "URL van het bestand dat je wil uploaden"
|
||||||
uploadFromUrlRequested: "Uploadverzoek"
|
uploadFromUrlRequested: "Uploadverzoek"
|
||||||
|
@ -294,7 +294,7 @@ smtpUser: "Gebruikersnaam"
|
||||||
smtpPass: "Wachtwoord"
|
smtpPass: "Wachtwoord"
|
||||||
clearCache: "Cache opschonen"
|
clearCache: "Cache opschonen"
|
||||||
user: "Gebruikers"
|
user: "Gebruikers"
|
||||||
muteThread: "Discussies dempen "
|
muteThread: "Discussies dempen"
|
||||||
unmuteThread: "Dempen van discussie ongedaan maken"
|
unmuteThread: "Dempen van discussie ongedaan maken"
|
||||||
hide: "Verbergen"
|
hide: "Verbergen"
|
||||||
cropImage: "Afbeelding bijsnijden"
|
cropImage: "Afbeelding bijsnijden"
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
_lang_: "język polski"
|
_lang_: "Polski"
|
||||||
headlineMisskey: "Sieć połączona wpisami"
|
headlineMisskey: "Sieć połączona wpisami"
|
||||||
introMisskey: "FoundKey jest serwisem mikroblogowym typu open source.\nFoundKey to\
|
introMisskey: "Witaj! FoundKey jest otwartoźródłowym serwisem mikroblogowym.\nTwórz\
|
||||||
\ opensource'owy serwis mikroblogowy, w którym możesz tworzyć \"notatki\", aby dzielić\
|
\ \"wpisy\", aby dzielić się tym, co się dzieje i opowiadać wszystkim o sobie. \U0001F4E1\
|
||||||
\ się tym, co się dzieje i opowiadać wszystkim o sobie.\nMożesz również użyć funkcji\
|
\nMożesz również użyć \"reakcji\", aby szybko wyrazić swoje uczucia dotyczące wpisów\
|
||||||
\ \"Reakcje\", aby szybko dodać własne reakcje do notatek innych użytkowników\U0001F44D\
|
\ innych użytkowników. \U0001F44D\nOdkrywaj nowy świat! \U0001F680"
|
||||||
.\nOdkrywaj nowy świat\U0001F680!"
|
|
||||||
monthAndDay: "{month}-{day}"
|
monthAndDay: "{month}-{day}"
|
||||||
search: "Szukaj"
|
search: "Szukaj"
|
||||||
notifications: "Powiadomienia"
|
notifications: "Powiadomienia"
|
||||||
|
@ -15,7 +14,7 @@ fetchingAsApObject: "Pobieranie z Fediwersum…"
|
||||||
ok: "OK"
|
ok: "OK"
|
||||||
gotIt: "Rozumiem!"
|
gotIt: "Rozumiem!"
|
||||||
cancel: "Anuluj"
|
cancel: "Anuluj"
|
||||||
renotedBy: "Udostępniono przez {user}"
|
renotedBy: "Podbito przez {user}"
|
||||||
noNotes: "Brak wpisów"
|
noNotes: "Brak wpisów"
|
||||||
noNotifications: "Brak powiadomień"
|
noNotifications: "Brak powiadomień"
|
||||||
instance: "Instancja"
|
instance: "Instancja"
|
||||||
|
@ -43,7 +42,7 @@ copyLink: "Skopiuj odnośnik"
|
||||||
delete: "Usuń"
|
delete: "Usuń"
|
||||||
deleteAndEdit: "Usuń i edytuj"
|
deleteAndEdit: "Usuń i edytuj"
|
||||||
deleteAndEditConfirm: "Czy na pewno chcesz usunąć ten wpis i zedytować go? Utracisz\
|
deleteAndEditConfirm: "Czy na pewno chcesz usunąć ten wpis i zedytować go? Utracisz\
|
||||||
\ wszystkie reakcje, udostępnienia i odpowiedzi do tego wpisu."
|
\ wszystkie reakcje, podbicia i odpowiedzi do tego wpisu."
|
||||||
addToList: "Dodaj do listy"
|
addToList: "Dodaj do listy"
|
||||||
sendMessage: "Wyślij wiadomość"
|
sendMessage: "Wyślij wiadomość"
|
||||||
copyUsername: "Kopiuj nazwę użytkownika"
|
copyUsername: "Kopiuj nazwę użytkownika"
|
||||||
|
@ -92,8 +91,8 @@ followRequest: "Poproś o możliwość obserwacji"
|
||||||
followRequests: "Prośby o możliwość obserwacji"
|
followRequests: "Prośby o możliwość obserwacji"
|
||||||
unfollow: "Przestań obserwować"
|
unfollow: "Przestań obserwować"
|
||||||
followRequestPending: "Oczekująca prośba o możliwość obserwacji"
|
followRequestPending: "Oczekująca prośba o możliwość obserwacji"
|
||||||
renote: "Udostępnij"
|
renote: "Podbij"
|
||||||
unrenote: "Cofnij udostępnienie"
|
unrenote: "Cofnij podbicie"
|
||||||
quote: "Cytuj"
|
quote: "Cytuj"
|
||||||
pinnedNote: "Przypięty wpis"
|
pinnedNote: "Przypięty wpis"
|
||||||
you: "Ty"
|
you: "Ty"
|
||||||
|
@ -128,7 +127,7 @@ emojis: "Emoji"
|
||||||
addEmoji: "Dodaj emoji"
|
addEmoji: "Dodaj emoji"
|
||||||
cacheRemoteFiles: "Przechowuj zdalne pliki w pamięci podręcznej"
|
cacheRemoteFiles: "Przechowuj zdalne pliki w pamięci podręcznej"
|
||||||
cacheRemoteFilesDescription: "Gdy ta opcja jest wyłączona, zdalne pliki są ładowane\
|
cacheRemoteFilesDescription: "Gdy ta opcja jest wyłączona, zdalne pliki są ładowane\
|
||||||
\ bezpośrednio ze zdalnych instancji. Wyłączenie the opcji zmniejszy użycie powierzchni\
|
\ bezpośrednio ze zdalnych instancji. Wyłączenie tej opcji zmniejszy użycie powierzchni\
|
||||||
\ dyskowej, ale zwiększy transfer, ponieważ miniaturki nie będą generowane."
|
\ dyskowej, ale zwiększy transfer, ponieważ miniaturki nie będą generowane."
|
||||||
flagAsBot: "To konto jest botem"
|
flagAsBot: "To konto jest botem"
|
||||||
flagAsBotDescription: "Jeżeli ten kanał jest kontrolowany przez jakiś program, ustaw\
|
flagAsBotDescription: "Jeżeli ten kanał jest kontrolowany przez jakiś program, ustaw\
|
||||||
|
@ -579,9 +578,9 @@ manageAccessTokens: "Zarządzaj tokenami dostępu"
|
||||||
accountInfo: "Informacje o koncie"
|
accountInfo: "Informacje o koncie"
|
||||||
notesCount: "Liczba wpisów"
|
notesCount: "Liczba wpisów"
|
||||||
repliesCount: "Liczba wysłanych odpowiedzi"
|
repliesCount: "Liczba wysłanych odpowiedzi"
|
||||||
renotesCount: "Liczba wysłanych udostępnień"
|
renotesCount: "Liczba wysłanych podbić"
|
||||||
repliedCount: "Liczba otrzymanych odpowiedzi"
|
repliedCount: "Liczba otrzymanych odpowiedzi"
|
||||||
renotedCount: "Liczba otrzymanych udostępnień"
|
renotedCount: "Liczba otrzymanych podbić"
|
||||||
followingCount: "Liczba obserwowanych kont"
|
followingCount: "Liczba obserwowanych kont"
|
||||||
followersCount: "Liczba obserwujących"
|
followersCount: "Liczba obserwujących"
|
||||||
sentReactionsCount: "Liczba wysłanych reakcji"
|
sentReactionsCount: "Liczba wysłanych reakcji"
|
||||||
|
@ -639,7 +638,6 @@ editCode: "Edytuj kod"
|
||||||
apply: "Zastosuj"
|
apply: "Zastosuj"
|
||||||
receiveAnnouncementFromInstance: "Otrzymuj powiadomienia e-mail z tej instancji"
|
receiveAnnouncementFromInstance: "Otrzymuj powiadomienia e-mail z tej instancji"
|
||||||
emailNotification: "Powiadomienia e-mail"
|
emailNotification: "Powiadomienia e-mail"
|
||||||
publish: "Publikuj"
|
|
||||||
useReactionPickerForContextMenu: "Otwórz wybornik reakcji prawym kliknięciem"
|
useReactionPickerForContextMenu: "Otwórz wybornik reakcji prawym kliknięciem"
|
||||||
typingUsers: "{users} pisze(-ą)..."
|
typingUsers: "{users} pisze(-ą)..."
|
||||||
jumpToSpecifiedDate: "Przejdź do określonej daty"
|
jumpToSpecifiedDate: "Przejdź do określonej daty"
|
||||||
|
@ -677,10 +675,7 @@ switch: "Przełącz"
|
||||||
noMaintainerInformationWarning: "Informacje o administratorze nie są skonfigurowane."
|
noMaintainerInformationWarning: "Informacje o administratorze nie są skonfigurowane."
|
||||||
noBotProtectionWarning: "Zabezpieczenie przed botami nie jest skonfigurowane."
|
noBotProtectionWarning: "Zabezpieczenie przed botami nie jest skonfigurowane."
|
||||||
configure: "Skonfiguruj"
|
configure: "Skonfiguruj"
|
||||||
postToGallery: "Opublikuj w galerii"
|
|
||||||
gallery: "Galeria"
|
|
||||||
recentPosts: "Ostatnie wpisy"
|
recentPosts: "Ostatnie wpisy"
|
||||||
popularPosts: "Popularne wpisy"
|
|
||||||
shareWithNote: "Udostępnij z wpisem"
|
shareWithNote: "Udostępnij z wpisem"
|
||||||
emailNotConfiguredWarning: "Nie podano adresu e-mail"
|
emailNotConfiguredWarning: "Nie podano adresu e-mail"
|
||||||
ratio: "Stosunek"
|
ratio: "Stosunek"
|
||||||
|
@ -700,11 +695,6 @@ _forgotPassword:
|
||||||
\ z administratorem zamiast tego."
|
\ z administratorem zamiast tego."
|
||||||
contactAdmin: "Jeżeli Twoja instancja nie obsługuje adresów e-mail, skontaktuj się\
|
contactAdmin: "Jeżeli Twoja instancja nie obsługuje adresów e-mail, skontaktuj się\
|
||||||
\ zamiast tego z administratorem, aby zresetować hasło."
|
\ zamiast tego z administratorem, aby zresetować hasło."
|
||||||
_gallery:
|
|
||||||
my: "Moja galeria"
|
|
||||||
liked: "Polubione wpisy"
|
|
||||||
like: "Polub"
|
|
||||||
unlike: "Cofnij polubienie"
|
|
||||||
_email:
|
_email:
|
||||||
_follow:
|
_follow:
|
||||||
title: "Zaobserwował(a) Cię"
|
title: "Zaobserwował(a) Cię"
|
||||||
|
@ -859,7 +849,6 @@ _permissions:
|
||||||
"write:mutes": "Edycja listy osób, które wyciszyłeś(-aś)"
|
"write:mutes": "Edycja listy osób, które wyciszyłeś(-aś)"
|
||||||
"read:notifications": "Wyświetlanie powiadomień"
|
"read:notifications": "Wyświetlanie powiadomień"
|
||||||
"write:notifications": "Działanie na powiadomieniach"
|
"write:notifications": "Działanie na powiadomieniach"
|
||||||
"read:reactions": "Wyświetlanie reakcji"
|
|
||||||
"write:reactions": "Edycja reakcji"
|
"write:reactions": "Edycja reakcji"
|
||||||
"write:votes": "Głosowanie w ankiecie"
|
"write:votes": "Głosowanie w ankiecie"
|
||||||
"read:pages": "Wyświetlanie Twoich stron"
|
"read:pages": "Wyświetlanie Twoich stron"
|
||||||
|
@ -976,8 +965,8 @@ _pages:
|
||||||
newPage: "Utwórz stronę"
|
newPage: "Utwórz stronę"
|
||||||
editPage: "Edytuj tę stronę"
|
editPage: "Edytuj tę stronę"
|
||||||
readPage: "Aktywowano widok źródła"
|
readPage: "Aktywowano widok źródła"
|
||||||
created: "Pomyślnie utworzono stronę!"
|
created: "Pomyślnie utworzono stronę"
|
||||||
updated: "Pomyślnie zaktualizowano stronę!"
|
updated: "Pomyślnie zaktualizowano stronę"
|
||||||
deleted: "Strona została usunięta"
|
deleted: "Strona została usunięta"
|
||||||
pageSetting: "Ustawienia strony"
|
pageSetting: "Ustawienia strony"
|
||||||
nameAlreadyExists: "Określony adres URL strony już istnieje"
|
nameAlreadyExists: "Określony adres URL strony już istnieje"
|
||||||
|
@ -1056,3 +1045,12 @@ _deck:
|
||||||
mentions: "Wspomnienia"
|
mentions: "Wspomnienia"
|
||||||
direct: "Bezpośredni"
|
direct: "Bezpośredni"
|
||||||
_services: {}
|
_services: {}
|
||||||
|
exportAll: Eksportuj wszystko
|
||||||
|
exportSelected: Eksportuj wybrane
|
||||||
|
showLess: Pokaż mniej
|
||||||
|
botFollowRequiresApproval: Prośby o możliwość obserwacji z kont oznaczonych jako boty
|
||||||
|
wymagają zatwierdzenia
|
||||||
|
unrenoteAllConfirm: Czy na pewno chcesz cofnąć wszystkie podbicia tego wpisu?
|
||||||
|
renoteMute: Ukryj podbicia
|
||||||
|
renoteUnmute: Pokaż podbicia
|
||||||
|
unrenoteAll: Cofnij wszystkie podbicia
|
||||||
|
|
|
@ -341,7 +341,7 @@ connectedTo: "Вы подключены к следующим аккаунтам
|
||||||
notesAndReplies: "Заметки и ответы"
|
notesAndReplies: "Заметки и ответы"
|
||||||
withFiles: "Заметки с файлами"
|
withFiles: "Заметки с файлами"
|
||||||
silence: "Заглушить"
|
silence: "Заглушить"
|
||||||
silenceConfirm: " Заглушить этого пользователя? Уверены?"
|
silenceConfirm: "Заглушить этого пользователя? Уверены?"
|
||||||
unsilence: "Снять глушение"
|
unsilence: "Снять глушение"
|
||||||
unsilenceConfirm: "Снять глушение с этого пользователя? Уверены?"
|
unsilenceConfirm: "Снять глушение с этого пользователя? Уверены?"
|
||||||
popularUsers: "Популярные пользователи"
|
popularUsers: "Популярные пользователи"
|
||||||
|
@ -668,7 +668,6 @@ editCode: "Редактировать исходный текст"
|
||||||
apply: "Применить"
|
apply: "Применить"
|
||||||
receiveAnnouncementFromInstance: "Получать оповещения с инстанса"
|
receiveAnnouncementFromInstance: "Получать оповещения с инстанса"
|
||||||
emailNotification: "Уведомления по электронной почте"
|
emailNotification: "Уведомления по электронной почте"
|
||||||
publish: "Опубликовать"
|
|
||||||
useReactionPickerForContextMenu: "Открывать палитру реакций правой кнопкой"
|
useReactionPickerForContextMenu: "Открывать палитру реакций правой кнопкой"
|
||||||
typingUsers: "Стук клавиш. Это {users}…"
|
typingUsers: "Стук клавиш. Это {users}…"
|
||||||
jumpToSpecifiedDate: "Перейти к заданной дате"
|
jumpToSpecifiedDate: "Перейти к заданной дате"
|
||||||
|
@ -707,10 +706,7 @@ switch: "Переключение"
|
||||||
noMaintainerInformationWarning: "Не заполнены сведения об администраторах"
|
noMaintainerInformationWarning: "Не заполнены сведения об администраторах"
|
||||||
noBotProtectionWarning: "Ботозащита не настроена"
|
noBotProtectionWarning: "Ботозащита не настроена"
|
||||||
configure: "Настроить"
|
configure: "Настроить"
|
||||||
postToGallery: "Опубликовать в галерею"
|
|
||||||
gallery: "Галерея"
|
|
||||||
recentPosts: "Недавние публикации"
|
recentPosts: "Недавние публикации"
|
||||||
popularPosts: "Популярные публикации"
|
|
||||||
shareWithNote: "Поделиться заметкой"
|
shareWithNote: "Поделиться заметкой"
|
||||||
emailNotConfiguredWarning: "Не указан адрес электронной почты"
|
emailNotConfiguredWarning: "Не указан адрес электронной почты"
|
||||||
ratio: "Соотношение"
|
ratio: "Соотношение"
|
||||||
|
@ -805,11 +801,6 @@ _forgotPassword:
|
||||||
\ ресурса, чтобы сменить пароль."
|
\ ресурса, чтобы сменить пароль."
|
||||||
contactAdmin: "Здесь не используются адреса электронной почты, так что свяжитесь\
|
contactAdmin: "Здесь не используются адреса электронной почты, так что свяжитесь\
|
||||||
\ с администратором, чтобы поменять пароль."
|
\ с администратором, чтобы поменять пароль."
|
||||||
_gallery:
|
|
||||||
my: "Личная"
|
|
||||||
liked: "Понравившееся"
|
|
||||||
like: "Нравится!"
|
|
||||||
unlike: "Отменить «нравится»"
|
|
||||||
_email:
|
_email:
|
||||||
_follow:
|
_follow:
|
||||||
title: "Новый подписчик"
|
title: "Новый подписчик"
|
||||||
|
@ -1004,7 +995,7 @@ _tutorial:
|
||||||
step5_3: "Чтобы подписаться на кого-нибудь, щёлкните по его аватару и в открывшемся\
|
step5_3: "Чтобы подписаться на кого-нибудь, щёлкните по его аватару и в открывшемся\
|
||||||
\ профиле нажмите кнопку «Подписаться»."
|
\ профиле нажмите кнопку «Подписаться»."
|
||||||
step5_4: "Некоторые пользователи (около их имени «висит замок») вручную подтверждают\
|
step5_4: "Некоторые пользователи (около их имени «висит замок») вручную подтверждают\
|
||||||
\ чужие подписки. Так что иногда подписка начинает работать не сразу.\n"
|
\ чужие подписки. Так что иногда подписка начинает работать не сразу."
|
||||||
step6_1: "Если теперь в ленте видны и чужие заметки, значит у вас получилось."
|
step6_1: "Если теперь в ленте видны и чужие заметки, значит у вас получилось."
|
||||||
step6_2: "Здесь можно непринуждённо выразить свои чувства к чьей-то заметке, отметив\
|
step6_2: "Здесь можно непринуждённо выразить свои чувства к чьей-то заметке, отметив\
|
||||||
\ «реакцию» под ней."
|
\ «реакцию» под ней."
|
||||||
|
@ -1044,7 +1035,6 @@ _permissions:
|
||||||
"write:notes": "Писать и удалять заметки"
|
"write:notes": "Писать и удалять заметки"
|
||||||
"read:notifications": "Смотреть уведомления"
|
"read:notifications": "Смотреть уведомления"
|
||||||
"write:notifications": "Изменять уведомления"
|
"write:notifications": "Изменять уведомления"
|
||||||
"read:reactions": "Смотреть реакции"
|
|
||||||
"write:reactions": "Изменять реакции"
|
"write:reactions": "Изменять реакции"
|
||||||
"write:votes": "Голосовать"
|
"write:votes": "Голосовать"
|
||||||
"read:pages": "Смотреть страницы"
|
"read:pages": "Смотреть страницы"
|
||||||
|
@ -1055,10 +1045,6 @@ _permissions:
|
||||||
"write:user-groups": "Изменять и удалять группы пользователей"
|
"write:user-groups": "Изменять и удалять группы пользователей"
|
||||||
"read:channels": "Смотреть каналы"
|
"read:channels": "Смотреть каналы"
|
||||||
"write:channels": "Изменять каналы"
|
"write:channels": "Изменять каналы"
|
||||||
"read:gallery": "Просмотр галереи"
|
|
||||||
"write:gallery": "Редактирование галереи"
|
|
||||||
"read:gallery-likes": "Просмотр списка понравившегося в галерее"
|
|
||||||
"write:gallery-likes": "Изменение списка понравившегося в галерее"
|
|
||||||
_auth:
|
_auth:
|
||||||
shareAccess: "Дать доступ для «{name}» к вашей учётной записи?"
|
shareAccess: "Дать доступ для «{name}» к вашей учётной записи?"
|
||||||
shareAccessAsk: "Уверены, что хотите дать приложению доступ к своей учётной записи?"
|
shareAccessAsk: "Уверены, что хотите дать приложению доступ к своей учётной записи?"
|
||||||
|
@ -1162,7 +1148,7 @@ _profile:
|
||||||
changeAvatar: "Поменять аватар"
|
changeAvatar: "Поменять аватар"
|
||||||
changeBanner: "Поменять изображение в шапке"
|
changeBanner: "Поменять изображение в шапке"
|
||||||
_exportOrImport:
|
_exportOrImport:
|
||||||
allNotes: "Все записи\n"
|
allNotes: "Все записи"
|
||||||
followingList: "Подписки"
|
followingList: "Подписки"
|
||||||
muteList: "Скрытые"
|
muteList: "Скрытые"
|
||||||
blockingList: "Заблокированные"
|
blockingList: "Заблокированные"
|
||||||
|
|
|
@ -661,7 +661,6 @@ editCode: "Upraviť kód"
|
||||||
apply: "Použiť"
|
apply: "Použiť"
|
||||||
receiveAnnouncementFromInstance: "Prijať notifikácie z tohoto servera"
|
receiveAnnouncementFromInstance: "Prijať notifikácie z tohoto servera"
|
||||||
emailNotification: "Emailové upozornenia"
|
emailNotification: "Emailové upozornenia"
|
||||||
publish: "Zverejniť"
|
|
||||||
useReactionPickerForContextMenu: "Otvoriť výber reakcií na pravý klik"
|
useReactionPickerForContextMenu: "Otvoriť výber reakcií na pravý klik"
|
||||||
typingUsers: "{users} píše/u"
|
typingUsers: "{users} píše/u"
|
||||||
jumpToSpecifiedDate: "Skočiť na konkrétny dátum"
|
jumpToSpecifiedDate: "Skočiť na konkrétny dátum"
|
||||||
|
@ -700,10 +699,7 @@ switch: "Prepnúť"
|
||||||
noMaintainerInformationWarning: "Informácie správcu nie sú nastavené."
|
noMaintainerInformationWarning: "Informácie správcu nie sú nastavené."
|
||||||
noBotProtectionWarning: "Ochrana proti botom nie je nastavená."
|
noBotProtectionWarning: "Ochrana proti botom nie je nastavená."
|
||||||
configure: "Konfigurovať"
|
configure: "Konfigurovať"
|
||||||
postToGallery: "Vytvoriť nový príspevok v galérii"
|
|
||||||
gallery: "Galéria"
|
|
||||||
recentPosts: "Najnovšie príspevky"
|
recentPosts: "Najnovšie príspevky"
|
||||||
popularPosts: "Populárne príspevky"
|
|
||||||
shareWithNote: "Zdieľať s poznámkou"
|
shareWithNote: "Zdieľať s poznámkou"
|
||||||
emailNotConfiguredWarning: "Nie je nastavená emailová adresa."
|
emailNotConfiguredWarning: "Nie je nastavená emailová adresa."
|
||||||
ratio: "Pomer"
|
ratio: "Pomer"
|
||||||
|
@ -804,11 +800,6 @@ _forgotPassword:
|
||||||
ifNoEmail: "Ak ste pri registrácii nepoužili email, prosím kontaktujte administrátora."
|
ifNoEmail: "Ak ste pri registrácii nepoužili email, prosím kontaktujte administrátora."
|
||||||
contactAdmin: "Tento server nepodporuje používanie emailových adries, prosím kontaktuje\
|
contactAdmin: "Tento server nepodporuje používanie emailových adries, prosím kontaktuje\
|
||||||
\ administrátor, ktorý vám resetuje heslo."
|
\ administrátor, ktorý vám resetuje heslo."
|
||||||
_gallery:
|
|
||||||
my: "Moja galéria"
|
|
||||||
liked: "Obľúbené príspevky"
|
|
||||||
like: "Páči sa mi"
|
|
||||||
unlike: "Nepáči sa mi"
|
|
||||||
_email:
|
_email:
|
||||||
_follow:
|
_follow:
|
||||||
title: "Máte nového sledujúceho"
|
title: "Máte nového sledujúceho"
|
||||||
|
@ -1039,7 +1030,6 @@ _permissions:
|
||||||
"write:notes": "Písať alebo odstrániť poznámky"
|
"write:notes": "Písať alebo odstrániť poznámky"
|
||||||
"read:notifications": "Vidieť vaše oznámenia"
|
"read:notifications": "Vidieť vaše oznámenia"
|
||||||
"write:notifications": "Pracovať s vašimi notifikáciami"
|
"write:notifications": "Pracovať s vašimi notifikáciami"
|
||||||
"read:reactions": "Vidieť vaše reakcie"
|
|
||||||
"write:reactions": "Upravovať vaše reakcie"
|
"write:reactions": "Upravovať vaše reakcie"
|
||||||
"write:votes": "Hlasovať v hlasovaniach"
|
"write:votes": "Hlasovať v hlasovaniach"
|
||||||
"read:pages": "Vidieť vaše stránky"
|
"read:pages": "Vidieť vaše stránky"
|
||||||
|
@ -1050,10 +1040,6 @@ _permissions:
|
||||||
"write:user-groups": "Upraviť alebo odstrániť vaše skupiny"
|
"write:user-groups": "Upraviť alebo odstrániť vaše skupiny"
|
||||||
"read:channels": "Čítať vaše kanály"
|
"read:channels": "Čítať vaše kanály"
|
||||||
"write:channels": "Upravovať vaše kanály"
|
"write:channels": "Upravovať vaše kanály"
|
||||||
"read:gallery": "Vidieť vašu galériu"
|
|
||||||
"write:gallery": "Upravovať vašu galériu"
|
|
||||||
"read:gallery-likes": "Vidieť zoznam obľúbených príspevkov z galérie"
|
|
||||||
"write:gallery-likes": "Upraviť zoznam obľúbených príspevov z galérie"
|
|
||||||
_auth:
|
_auth:
|
||||||
shareAccess: "Prajete si povoliť \"{name}\", aby mal prístup k tomuto účtu?"
|
shareAccess: "Prajete si povoliť \"{name}\", aby mal prístup k tomuto účtu?"
|
||||||
shareAccessAsk: "Naozaj chcete povoliť tejto aplikácii prístup k tomuto účtu?"
|
shareAccessAsk: "Naozaj chcete povoliť tejto aplikácii prístup k tomuto účtu?"
|
||||||
|
@ -1257,7 +1243,7 @@ _notification:
|
||||||
groupInvited: "Pozvánky do skupín"
|
groupInvited: "Pozvánky do skupín"
|
||||||
app: "Oznámenia z prepojených aplikácií"
|
app: "Oznámenia z prepojených aplikácií"
|
||||||
_actions:
|
_actions:
|
||||||
followBack: "Sledovať späť\n"
|
followBack: "Sledovať späť"
|
||||||
reply: "Odpovedať"
|
reply: "Odpovedať"
|
||||||
renote: "Preposlať"
|
renote: "Preposlať"
|
||||||
_deck:
|
_deck:
|
||||||
|
|
|
@ -74,7 +74,7 @@ followers: "Följare"
|
||||||
followsYou: "Följer dig"
|
followsYou: "Följer dig"
|
||||||
createList: "Skapa lista"
|
createList: "Skapa lista"
|
||||||
manageLists: "Hantera lista"
|
manageLists: "Hantera lista"
|
||||||
error: "Fel!"
|
error: "Fel"
|
||||||
somethingHappened: "Ett fel har uppstått"
|
somethingHappened: "Ett fel har uppstått"
|
||||||
retry: "Försök igen"
|
retry: "Försök igen"
|
||||||
pageLoadError: "Det gick inte att ladda sidan."
|
pageLoadError: "Det gick inte att ladda sidan."
|
||||||
|
@ -183,15 +183,17 @@ clearQueueConfirmText: "Om någon not är olevererad i kön kommer den inte fede
|
||||||
clearCachedFiles: "Rensa cache"
|
clearCachedFiles: "Rensa cache"
|
||||||
clearCachedFilesConfirm: "Är du säker att du vill radera alla cachade externa filer?"
|
clearCachedFilesConfirm: "Är du säker att du vill radera alla cachade externa filer?"
|
||||||
blockedInstances: "Blockerade instanser"
|
blockedInstances: "Blockerade instanser"
|
||||||
blockedInstancesDescription: "Lista adressnamn av instanser som du vill blockera.\
|
blockedInstancesDescription: "Skriv de instansernas domäner som du vill blockera.\
|
||||||
\ Listade instanser kommer inte längre kommunicera med denna instans."
|
\ Uppradade instanser kommer inte längre kunna kommunicera med denna instans. Icke\
|
||||||
|
\ ASCII domännamn måste skrivas i punycode. Subdomäner till de uppradade instanserna\
|
||||||
|
\ kommer också blockeras."
|
||||||
muteAndBlock: "Tystningar och blockeringar"
|
muteAndBlock: "Tystningar och blockeringar"
|
||||||
mutedUsers: "Tystade användare"
|
mutedUsers: "Tystade användare"
|
||||||
blockedUsers: "Blockerade användare"
|
blockedUsers: "Blockerade användare"
|
||||||
noUsers: "Det finns inga användare"
|
noUsers: "Det finns inga användare"
|
||||||
editProfile: "Redigera profil"
|
editProfile: "Redigera profil"
|
||||||
noteDeleteConfirm: "Är du säker på att du vill ta bort denna not?"
|
noteDeleteConfirm: "Är du säker på att du vill ta bort denna not?"
|
||||||
pinLimitExceeded: "Du kan inte fästa fler noter"
|
pinLimitExceeded: "Du kan inte fästa fler noter."
|
||||||
intro: "FoundKey har installerats! Vänligen skapa en adminanvändare."
|
intro: "FoundKey har installerats! Vänligen skapa en adminanvändare."
|
||||||
done: "Klar"
|
done: "Klar"
|
||||||
processing: "Bearbetar..."
|
processing: "Bearbetar..."
|
||||||
|
@ -208,7 +210,7 @@ publishing: "Publiceras"
|
||||||
notResponding: "Svarar inte"
|
notResponding: "Svarar inte"
|
||||||
changePassword: "Ändra lösenord"
|
changePassword: "Ändra lösenord"
|
||||||
security: "Säkerhet"
|
security: "Säkerhet"
|
||||||
retypedNotMatch: "Inmatningen matchar inte"
|
retypedNotMatch: "Inmatningen matchar inte."
|
||||||
currentPassword: "Nuvarande lösenord"
|
currentPassword: "Nuvarande lösenord"
|
||||||
newPassword: "Nytt lösenord"
|
newPassword: "Nytt lösenord"
|
||||||
newPasswordRetype: "Bekräfta lösenord"
|
newPasswordRetype: "Bekräfta lösenord"
|
||||||
|
@ -284,3 +286,35 @@ _deck:
|
||||||
list: "Listor"
|
list: "Listor"
|
||||||
mentions: "Omnämningar"
|
mentions: "Omnämningar"
|
||||||
_services: {}
|
_services: {}
|
||||||
|
botFollowRequiresApproval: Följarförfrågningar från botmarkerade konton kräver manuellt
|
||||||
|
godkännande
|
||||||
|
home: Hem
|
||||||
|
activity: Akitivitet
|
||||||
|
images: Bilder
|
||||||
|
birthday: Födelsedag
|
||||||
|
yearsOld: '{age} år gammal'
|
||||||
|
stopActivityDeliveryDescription: Lokala aktiviteter kommer inte skickas till denna
|
||||||
|
instans. Mottagande av aktiviteter fungerar som innan.
|
||||||
|
remoteUserCaution: Eftersom användaren är ifrån en fjärran instans så kan informationen
|
||||||
|
vara inkomplett.
|
||||||
|
registeredDate: Blev medlem vid
|
||||||
|
location: Plats
|
||||||
|
theme: Teman
|
||||||
|
exportAll: Exportera alla
|
||||||
|
exportSelected: Exportera valda
|
||||||
|
showLess: Dölj
|
||||||
|
keepOriginalUploadingDescription: Sparar den ursprungliga bilden som den är. Om avstängd
|
||||||
|
så kommer en version som visas på webben genereras vid uppladning.
|
||||||
|
fromDrive: Från Drive
|
||||||
|
fromUrl: Från URL
|
||||||
|
uploadFromUrl: Ladda upp via en URL
|
||||||
|
uploadFromUrlDescription: URL till filen som du vill ladda upp
|
||||||
|
uploadFromUrlRequested: Förfrågade uppladningar
|
||||||
|
uploadFromUrlMayTakeTime: Det tar kanske ett tag innan uppladningen är färdig.
|
||||||
|
explore: Upptäck
|
||||||
|
messageRead: Läs
|
||||||
|
noMoreHistory: Det finns ingen mer historik
|
||||||
|
startMessaging: Inled en ny chatt
|
||||||
|
agreeTo: Jag godkänner användarvillkoren {0}
|
||||||
|
tos: Användarevillkoren
|
||||||
|
start: Börja
|
||||||
|
|
|
@ -23,7 +23,7 @@ openInWindow: "Bir pencere ile aç"
|
||||||
profile: "Profil"
|
profile: "Profil"
|
||||||
timeline: "Zaman çizelgesi"
|
timeline: "Zaman çizelgesi"
|
||||||
noAccountDescription: "Bu kullanıcı henüz biyografisini yazmadı"
|
noAccountDescription: "Bu kullanıcı henüz biyografisini yazmadı"
|
||||||
login: "Giriş Yap "
|
login: "Giriş Yap"
|
||||||
logout: "Çıkış Yap"
|
logout: "Çıkış Yap"
|
||||||
signup: "Kayıt Ol"
|
signup: "Kayıt Ol"
|
||||||
users: "Kullanıcı"
|
users: "Kullanıcı"
|
||||||
|
|
|
@ -183,14 +183,16 @@ clearCachedFiles: "Очистити кеш"
|
||||||
clearCachedFilesConfirm: "Ви впевнені, що хочете видалити всі кешовані файли?"
|
clearCachedFilesConfirm: "Ви впевнені, що хочете видалити всі кешовані файли?"
|
||||||
blockedInstances: "Заблоковані інстанси"
|
blockedInstances: "Заблоковані інстанси"
|
||||||
blockedInstancesDescription: "Вкажіть інстанси, які потрібно заблокувати. Перелічені\
|
blockedInstancesDescription: "Вкажіть інстанси, які потрібно заблокувати. Перелічені\
|
||||||
\ інстанси більше не зможуть спілкуватися з цим інстансом."
|
\ інстанси більше не зможуть спілкуватися з цим інстансом. Назви доменів не в ASCII\
|
||||||
|
\ кодуванні мають бути вказані в кодуванні punycode. Піддомени вказаних доменів\
|
||||||
|
\ також будуть заблоковані."
|
||||||
muteAndBlock: "Заглушення і блокування"
|
muteAndBlock: "Заглушення і блокування"
|
||||||
mutedUsers: "Заглушені користувачі"
|
mutedUsers: "Заглушені користувачі"
|
||||||
blockedUsers: "Заблоковані користувачі"
|
blockedUsers: "Заблоковані користувачі"
|
||||||
noUsers: "Немає користувачів"
|
noUsers: "Немає користувачів"
|
||||||
editProfile: "Редагувати обліковий запис"
|
editProfile: "Редагувати обліковий запис"
|
||||||
noteDeleteConfirm: "Ви дійсно хочете видалити цей запис?"
|
noteDeleteConfirm: "Ви дійсно хочете видалити цей запис?"
|
||||||
pinLimitExceeded: "Більше записів не можна закріпити"
|
pinLimitExceeded: "Більше записів закріпити не можна."
|
||||||
intro: "Встановлення FoundKey завершено! Будь ласка, створіть обліковий запис адміністратора."
|
intro: "Встановлення FoundKey завершено! Будь ласка, створіть обліковий запис адміністратора."
|
||||||
done: "Готово"
|
done: "Готово"
|
||||||
processing: "Обробка"
|
processing: "Обробка"
|
||||||
|
@ -548,7 +550,7 @@ smtpPass: "Пароль"
|
||||||
emptyToDisableSmtpAuth: "Залиште назву користувача і пароль пустими для вимкнення\
|
emptyToDisableSmtpAuth: "Залиште назву користувача і пароль пустими для вимкнення\
|
||||||
\ підтвердження SMTP"
|
\ підтвердження SMTP"
|
||||||
smtpSecure: "Використовувати безумовне шифрування SSL/TLS для з'єднань SMTP"
|
smtpSecure: "Використовувати безумовне шифрування SSL/TLS для з'єднань SMTP"
|
||||||
smtpSecureInfo: "Вимкніть при використанні STARTTLS "
|
smtpSecureInfo: "Вимкніть при використанні STARTTLS ."
|
||||||
testEmail: "Тестовий email"
|
testEmail: "Тестовий email"
|
||||||
wordMute: "Блокування слів"
|
wordMute: "Блокування слів"
|
||||||
regexpError: "Помилка регулярного виразу"
|
regexpError: "Помилка регулярного виразу"
|
||||||
|
@ -580,7 +582,7 @@ abuseReports: "Скарги"
|
||||||
reportAbuse: "Поскаржитись"
|
reportAbuse: "Поскаржитись"
|
||||||
reportAbuseOf: "Поскаржитись на {name}"
|
reportAbuseOf: "Поскаржитись на {name}"
|
||||||
fillAbuseReportDescription: "Будь ласка вкажіть подробиці скарги."
|
fillAbuseReportDescription: "Будь ласка вкажіть подробиці скарги."
|
||||||
abuseReported: "Дякуємо, вашу скаргу було відправлено. "
|
abuseReported: "Дякуємо, вашу скаргу було відправлено."
|
||||||
reporter: "Репортер"
|
reporter: "Репортер"
|
||||||
reporteeOrigin: "Про кого повідомлено"
|
reporteeOrigin: "Про кого повідомлено"
|
||||||
reporterOrigin: "Хто повідомив"
|
reporterOrigin: "Хто повідомив"
|
||||||
|
@ -666,7 +668,6 @@ editCode: "Редагувати вихідний текст"
|
||||||
apply: "Застосувати"
|
apply: "Застосувати"
|
||||||
receiveAnnouncementFromInstance: "Отримувати оповіщення з інстансу"
|
receiveAnnouncementFromInstance: "Отримувати оповіщення з інстансу"
|
||||||
emailNotification: "Сповіщення електронною поштою"
|
emailNotification: "Сповіщення електронною поштою"
|
||||||
publish: "Опублікувати"
|
|
||||||
useReactionPickerForContextMenu: "Відкривати палітру реакцій правою кнопкою"
|
useReactionPickerForContextMenu: "Відкривати палітру реакцій правою кнопкою"
|
||||||
typingUsers: "Стук клавіш. Це {users}…"
|
typingUsers: "Стук клавіш. Це {users}…"
|
||||||
goBack: "Назад"
|
goBack: "Назад"
|
||||||
|
@ -678,8 +679,6 @@ hide: "Сховати"
|
||||||
indefinitely: "Ніколи"
|
indefinitely: "Ніколи"
|
||||||
_ffVisibility:
|
_ffVisibility:
|
||||||
public: "Опублікувати"
|
public: "Опублікувати"
|
||||||
_gallery:
|
|
||||||
unlike: "Не вподобати"
|
|
||||||
_email:
|
_email:
|
||||||
_follow:
|
_follow:
|
||||||
title: "Новий підписник"
|
title: "Новий підписник"
|
||||||
|
@ -698,7 +697,7 @@ _nsfw:
|
||||||
ignore: "Не приховувати NSFW медіа"
|
ignore: "Не приховувати NSFW медіа"
|
||||||
force: "Приховувати всі медіа файли"
|
force: "Приховувати всі медіа файли"
|
||||||
_mfm:
|
_mfm:
|
||||||
cheatSheet: " Довідка MFM"
|
cheatSheet: "Довідка MFM"
|
||||||
intro: "MFM це ексклюзивна мова розмітки тексту в FoundKey, яку можна використовувати\
|
intro: "MFM це ексклюзивна мова розмітки тексту в FoundKey, яку можна використовувати\
|
||||||
\ в багатьох місцях. Тут ви можете переглянути приклади її синтаксису."
|
\ в багатьох місцях. Тут ви можете переглянути приклади її синтаксису."
|
||||||
dummy: "FoundKey розширює світ Федіверсу"
|
dummy: "FoundKey розширює світ Федіверсу"
|
||||||
|
@ -849,7 +848,7 @@ _tutorial:
|
||||||
step5_4: "Якщо користувач має замок при імені, то йому потрібно буде вручну підтвердити\
|
step5_4: "Якщо користувач має замок при імені, то йому потрібно буде вручну підтвердити\
|
||||||
\ вашу заявку на підписку."
|
\ вашу заявку на підписку."
|
||||||
step6_1: "Тепер ви повинні бачити записи інших користувачів на вашій стрічці подій."
|
step6_1: "Тепер ви повинні бачити записи інших користувачів на вашій стрічці подій."
|
||||||
step6_2: "Також ви можете швидко відповісти, або \"відреагувати\" на записи інших\
|
step6_2: "Також ви можете швидко відповісти, або \"відреагувати\" на записи інших\
|
||||||
\ користувачів."
|
\ користувачів."
|
||||||
step6_3: "Щоб \"відреагувати\", нажміть на знак плюс \"+\" на записі і виберіть\
|
step6_3: "Щоб \"відреагувати\", нажміть на знак плюс \"+\" на записі і виберіть\
|
||||||
\ емоджі яким ви хочете \"відреагувати\"."
|
\ емоджі яким ви хочете \"відреагувати\"."
|
||||||
|
@ -875,7 +874,6 @@ _permissions:
|
||||||
"write:mutes": "Змінювати список ігнорованих"
|
"write:mutes": "Змінювати список ігнорованих"
|
||||||
"write:notes": "Писати і видаляти нотатки"
|
"write:notes": "Писати і видаляти нотатки"
|
||||||
"read:notifications": "Переглядати сповіщення"
|
"read:notifications": "Переглядати сповіщення"
|
||||||
"read:reactions": "Переглядати реакції"
|
|
||||||
"write:reactions": "Змінювати реакції"
|
"write:reactions": "Змінювати реакції"
|
||||||
"write:votes": "Голосувати в опитуваннях"
|
"write:votes": "Голосувати в опитуваннях"
|
||||||
"read:pages": "Переглядати сторінки"
|
"read:pages": "Переглядати сторінки"
|
||||||
|
@ -918,7 +916,7 @@ _widgets:
|
||||||
button: "Кнопка"
|
button: "Кнопка"
|
||||||
onlineUsers: "Користувачі онлайн"
|
onlineUsers: "Користувачі онлайн"
|
||||||
jobQueue: "Черга завдань"
|
jobQueue: "Черга завдань"
|
||||||
serverMetric: "Показники сервера "
|
serverMetric: "Показники сервера"
|
||||||
aiscript: "Консоль AiScript"
|
aiscript: "Консоль AiScript"
|
||||||
_cw:
|
_cw:
|
||||||
hide: "Сховати"
|
hide: "Сховати"
|
||||||
|
@ -1095,3 +1093,26 @@ _deck:
|
||||||
mentions: "Згадки"
|
mentions: "Згадки"
|
||||||
direct: "Особисте"
|
direct: "Особисте"
|
||||||
_services: {}
|
_services: {}
|
||||||
|
exportAll: Експортувати все
|
||||||
|
exportSelected: Експортувати обране
|
||||||
|
signinHistoryExpires: Дані про минулі спроби входу автоматично видаляються через 60
|
||||||
|
днів з метою дотримання законодавства.
|
||||||
|
addDescription: Додати опис
|
||||||
|
userPagePinTip: Ви можете показувати тут дописи вибравши «Закріпити в профілі» в меню
|
||||||
|
окремих дописів.
|
||||||
|
unrenoteAllConfirm: Ви впевнені, що хочете скасувати всі поширення цього запису?
|
||||||
|
unrenoteAll: Скасувати всі поширення
|
||||||
|
renoteMute: Приховати поширення
|
||||||
|
renoteUnmute: Показати поширення
|
||||||
|
quitFullView: Вийти з повного перегляду
|
||||||
|
notSpecifiedMentionWarning: Цей допис містить згадки користувачів не вказаних як одержувачі
|
||||||
|
userInfo: Інформація про користувача
|
||||||
|
unknown: Невідомо
|
||||||
|
hideOnlineStatus: Приховати онлайн статус
|
||||||
|
deleteAllFiles: Видалити всі файли
|
||||||
|
clear: Повернутися
|
||||||
|
markAllAsRead: Позначити все як прочитане
|
||||||
|
unlikeConfirm: Дійсно видалити ваше вподобання?
|
||||||
|
fullView: Повний перегляд
|
||||||
|
showLess: Показати менше
|
||||||
|
jumpToSpecifiedDate: Перейти до вказаної дати
|
||||||
|
|
|
@ -528,7 +528,7 @@ large: "Lớn"
|
||||||
medium: "Vừa"
|
medium: "Vừa"
|
||||||
small: "Nhỏ"
|
small: "Nhỏ"
|
||||||
generateAccessToken: "Tạo mã truy cập"
|
generateAccessToken: "Tạo mã truy cập"
|
||||||
permission: "Cho phép "
|
permission: "Cho phép"
|
||||||
enableAll: "Bật toàn bộ"
|
enableAll: "Bật toàn bộ"
|
||||||
disableAll: "Tắt toàn bộ"
|
disableAll: "Tắt toàn bộ"
|
||||||
tokenRequested: "Cấp quyền truy cập vào tài khoản"
|
tokenRequested: "Cấp quyền truy cập vào tài khoản"
|
||||||
|
@ -666,7 +666,6 @@ editCode: "Chỉnh sửa mã"
|
||||||
apply: "Áp dụng"
|
apply: "Áp dụng"
|
||||||
receiveAnnouncementFromInstance: "Nhận thông báo từ máy chủ này"
|
receiveAnnouncementFromInstance: "Nhận thông báo từ máy chủ này"
|
||||||
emailNotification: "Thông báo email"
|
emailNotification: "Thông báo email"
|
||||||
publish: "Đăng"
|
|
||||||
useReactionPickerForContextMenu: "Nhấn chuột phải để mở bộ chọn biểu cảm"
|
useReactionPickerForContextMenu: "Nhấn chuột phải để mở bộ chọn biểu cảm"
|
||||||
typingUsers: "{users} đang nhập…"
|
typingUsers: "{users} đang nhập…"
|
||||||
jumpToSpecifiedDate: "Đến một ngày cụ thể"
|
jumpToSpecifiedDate: "Đến một ngày cụ thể"
|
||||||
|
@ -704,10 +703,7 @@ switch: "Chuyển đổi"
|
||||||
noMaintainerInformationWarning: "Chưa thiết lập thông tin vận hành."
|
noMaintainerInformationWarning: "Chưa thiết lập thông tin vận hành."
|
||||||
noBotProtectionWarning: "Bảo vệ Bot chưa thiết lập."
|
noBotProtectionWarning: "Bảo vệ Bot chưa thiết lập."
|
||||||
configure: "Thiết lập"
|
configure: "Thiết lập"
|
||||||
postToGallery: "Tạo tút có ảnh"
|
|
||||||
gallery: "Thư viện ảnh"
|
|
||||||
recentPosts: "Tút gần đây"
|
recentPosts: "Tút gần đây"
|
||||||
popularPosts: "Tút được xem nhiều nhất"
|
|
||||||
shareWithNote: "Chia sẻ kèm với tút"
|
shareWithNote: "Chia sẻ kèm với tút"
|
||||||
emailNotConfiguredWarning: "Chưa đặt địa chỉ email."
|
emailNotConfiguredWarning: "Chưa đặt địa chỉ email."
|
||||||
ratio: "Tỷ lệ"
|
ratio: "Tỷ lệ"
|
||||||
|
@ -810,11 +806,6 @@ _forgotPassword:
|
||||||
\ viên."
|
\ viên."
|
||||||
contactAdmin: "Máy chủ này không hỗ trợ sử dụng địa chỉ email, vui lòng liên hệ\
|
contactAdmin: "Máy chủ này không hỗ trợ sử dụng địa chỉ email, vui lòng liên hệ\
|
||||||
\ với quản trị viên để đặt lại mật khẩu của bạn."
|
\ với quản trị viên để đặt lại mật khẩu của bạn."
|
||||||
_gallery:
|
|
||||||
my: "Kho Ảnh"
|
|
||||||
liked: "Tút Đã Thích"
|
|
||||||
like: "Thích"
|
|
||||||
unlike: "Bỏ thích"
|
|
||||||
_email:
|
_email:
|
||||||
_follow:
|
_follow:
|
||||||
title: "đã theo dõi bạn"
|
title: "đã theo dõi bạn"
|
||||||
|
@ -942,7 +933,7 @@ _wordMute:
|
||||||
mutedNotes: "Những tút đã ẩn"
|
mutedNotes: "Những tút đã ẩn"
|
||||||
_instanceMute:
|
_instanceMute:
|
||||||
instanceMuteDescription: "Thao tác này sẽ ẩn mọi tút/lượt đăng lại từ các máy chủ\
|
instanceMuteDescription: "Thao tác này sẽ ẩn mọi tút/lượt đăng lại từ các máy chủ\
|
||||||
\ được liệt kê, bao gồm cả những tút dạng trả lời từ máy chủ bị ẩn."
|
\ được liệt kê, bao gồm cả những tút dạng trả lời từ máy chủ bị ẩn."
|
||||||
instanceMuteDescription2: "Tách bằng cách xuống dòng"
|
instanceMuteDescription2: "Tách bằng cách xuống dòng"
|
||||||
title: "Ẩn tút từ những máy chủ đã liệt kê."
|
title: "Ẩn tút từ những máy chủ đã liệt kê."
|
||||||
heading: "Danh sách những máy chủ bị ẩn"
|
heading: "Danh sách những máy chủ bị ẩn"
|
||||||
|
@ -1050,7 +1041,6 @@ _permissions:
|
||||||
"write:notes": "Soạn hoặc xóa tút"
|
"write:notes": "Soạn hoặc xóa tút"
|
||||||
"read:notifications": "Xem thông báo của tôi"
|
"read:notifications": "Xem thông báo của tôi"
|
||||||
"write:notifications": "Quản lý thông báo của tôi"
|
"write:notifications": "Quản lý thông báo của tôi"
|
||||||
"read:reactions": "Xem lượt biểu cảm của tôi"
|
|
||||||
"write:reactions": "Sửa lượt biểu cảm của tôi"
|
"write:reactions": "Sửa lượt biểu cảm của tôi"
|
||||||
"write:votes": "Bình chọn"
|
"write:votes": "Bình chọn"
|
||||||
"read:pages": "Xem trang của tôi"
|
"read:pages": "Xem trang của tôi"
|
||||||
|
@ -1061,10 +1051,6 @@ _permissions:
|
||||||
"write:user-groups": "Sửa hoặc xóa nhóm của tôi"
|
"write:user-groups": "Sửa hoặc xóa nhóm của tôi"
|
||||||
"read:channels": "Xem kênh của tôi"
|
"read:channels": "Xem kênh của tôi"
|
||||||
"write:channels": "Sửa kênh của tôi"
|
"write:channels": "Sửa kênh của tôi"
|
||||||
"read:gallery": "Xem kho ảnh của tôi"
|
|
||||||
"write:gallery": "Sửa kho ảnh của tôi"
|
|
||||||
"read:gallery-likes": "Xem danh sách các tút đã thích trong thư viện của tôi"
|
|
||||||
"write:gallery-likes": "Sửa danh sách các tút đã thích trong thư viện của tôi"
|
|
||||||
_auth:
|
_auth:
|
||||||
shareAccess: "Bạn có muốn cho phép \"{name}\" truy cập vào tài khoản này không?"
|
shareAccess: "Bạn có muốn cho phép \"{name}\" truy cập vào tài khoản này không?"
|
||||||
shareAccessAsk: "Bạn có chắc muốn cho phép ứng dụng này truy cập vào tài khoản của\
|
shareAccessAsk: "Bạn có chắc muốn cho phép ứng dụng này truy cập vào tài khoản của\
|
||||||
|
|
|
@ -619,7 +619,6 @@ editCode: "编辑代码"
|
||||||
apply: "应用"
|
apply: "应用"
|
||||||
receiveAnnouncementFromInstance: "从实例接收通知"
|
receiveAnnouncementFromInstance: "从实例接收通知"
|
||||||
emailNotification: "邮件通知"
|
emailNotification: "邮件通知"
|
||||||
publish: "发布"
|
|
||||||
useReactionPickerForContextMenu: "单击右键打开回应工具栏"
|
useReactionPickerForContextMenu: "单击右键打开回应工具栏"
|
||||||
typingUsers: "{users}正在输入"
|
typingUsers: "{users}正在输入"
|
||||||
jumpToSpecifiedDate: "跳转到特定日期"
|
jumpToSpecifiedDate: "跳转到特定日期"
|
||||||
|
@ -646,7 +645,7 @@ instanceBlocking: "被阻拦的实例"
|
||||||
selectAccount: "选择账户"
|
selectAccount: "选择账户"
|
||||||
switchAccount: "切换账户"
|
switchAccount: "切换账户"
|
||||||
enabled: "已启用"
|
enabled: "已启用"
|
||||||
disabled: "已禁用 "
|
disabled: "已禁用"
|
||||||
quickAction: "快捷操作"
|
quickAction: "快捷操作"
|
||||||
user: "用户"
|
user: "用户"
|
||||||
administration: "管理"
|
administration: "管理"
|
||||||
|
@ -655,10 +654,7 @@ switch: "切换"
|
||||||
noMaintainerInformationWarning: "管理人员信息未设置。"
|
noMaintainerInformationWarning: "管理人员信息未设置。"
|
||||||
noBotProtectionWarning: "Bot保护未设置。"
|
noBotProtectionWarning: "Bot保护未设置。"
|
||||||
configure: "设置"
|
configure: "设置"
|
||||||
postToGallery: "发送到图库"
|
|
||||||
gallery: "图库"
|
|
||||||
recentPosts: "最新发布"
|
recentPosts: "最新发布"
|
||||||
popularPosts: "热门投稿"
|
|
||||||
shareWithNote: "在帖子中分享"
|
shareWithNote: "在帖子中分享"
|
||||||
emailNotConfiguredWarning: "电子邮件地址未设置。"
|
emailNotConfiguredWarning: "电子邮件地址未设置。"
|
||||||
ratio: "比率"
|
ratio: "比率"
|
||||||
|
@ -749,11 +745,6 @@ _forgotPassword:
|
||||||
enterEmail: "请输入您验证账号时用的电子邮箱地址,密码重置链接将发送至该邮箱上。"
|
enterEmail: "请输入您验证账号时用的电子邮箱地址,密码重置链接将发送至该邮箱上。"
|
||||||
ifNoEmail: "如果您没有使用电子邮件地址进行验证,请联系管理员。"
|
ifNoEmail: "如果您没有使用电子邮件地址进行验证,请联系管理员。"
|
||||||
contactAdmin: "该实例不支持发送电子邮件。如果您想重设密码,请联系管理员。"
|
contactAdmin: "该实例不支持发送电子邮件。如果您想重设密码,请联系管理员。"
|
||||||
_gallery:
|
|
||||||
my: "我的图库"
|
|
||||||
liked: "喜欢的图片"
|
|
||||||
like: "喜欢"
|
|
||||||
unlike: "取消喜欢"
|
|
||||||
_email:
|
_email:
|
||||||
_follow:
|
_follow:
|
||||||
title: "你有新的关注者"
|
title: "你有新的关注者"
|
||||||
|
@ -963,7 +954,6 @@ _permissions:
|
||||||
"write:notes": "撰写或删除帖子"
|
"write:notes": "撰写或删除帖子"
|
||||||
"read:notifications": "查看通知"
|
"read:notifications": "查看通知"
|
||||||
"write:notifications": "管理通知"
|
"write:notifications": "管理通知"
|
||||||
"read:reactions": "查看回应"
|
|
||||||
"write:reactions": "回应操作"
|
"write:reactions": "回应操作"
|
||||||
"write:votes": "投票"
|
"write:votes": "投票"
|
||||||
"read:pages": "查看页面"
|
"read:pages": "查看页面"
|
||||||
|
@ -974,10 +964,6 @@ _permissions:
|
||||||
"write:user-groups": "操作用户组"
|
"write:user-groups": "操作用户组"
|
||||||
"read:channels": "查看频道"
|
"read:channels": "查看频道"
|
||||||
"write:channels": "管理频道"
|
"write:channels": "管理频道"
|
||||||
"read:gallery": "浏览图库"
|
|
||||||
"write:gallery": "操作图库"
|
|
||||||
"read:gallery-likes": "读取喜欢的图片"
|
|
||||||
"write:gallery-likes": "操作喜欢的图片"
|
|
||||||
_auth:
|
_auth:
|
||||||
shareAccess: "您要授权允许“{name}”访问您的帐户吗?"
|
shareAccess: "您要授权允许“{name}”访问您的帐户吗?"
|
||||||
shareAccessAsk: "您确定要授权此应用程序访问您的帐户吗?"
|
shareAccessAsk: "您确定要授权此应用程序访问您的帐户吗?"
|
||||||
|
|
|
@ -57,7 +57,7 @@ import: "匯入"
|
||||||
export: "匯出"
|
export: "匯出"
|
||||||
files: "檔案"
|
files: "檔案"
|
||||||
download: "下載"
|
download: "下載"
|
||||||
driveFileDeleteConfirm: "確定要刪除檔案「{name}」嗎?使用此附件的貼文也會跟著消失。\n"
|
driveFileDeleteConfirm: "確定要刪除檔案「{name}」嗎?使用此附件的貼文也會跟著消失。"
|
||||||
unfollowConfirm: "確定要取消追隨{name}嗎?"
|
unfollowConfirm: "確定要取消追隨{name}嗎?"
|
||||||
exportRequested: "已請求匯出。這可能會花一點時間。結束後檔案將會被放到雲端裡。"
|
exportRequested: "已請求匯出。這可能會花一點時間。結束後檔案將會被放到雲端裡。"
|
||||||
importRequested: "已請求匯入。這可能會花一點時間"
|
importRequested: "已請求匯入。這可能會花一點時間"
|
||||||
|
@ -253,7 +253,7 @@ emptyDrive: "雲端硬碟為空"
|
||||||
emptyFolder: "資料夾為空"
|
emptyFolder: "資料夾為空"
|
||||||
unableToDelete: "無法刪除"
|
unableToDelete: "無法刪除"
|
||||||
inputNewFileName: "輸入檔案名稱"
|
inputNewFileName: "輸入檔案名稱"
|
||||||
inputNewDescription: "請輸入新標題 "
|
inputNewDescription: "請輸入新標題"
|
||||||
inputNewFolderName: "輸入新資料夾的名稱"
|
inputNewFolderName: "輸入新資料夾的名稱"
|
||||||
circularReferenceFolder: "目標文件夾是您要移動的文件夾的子文件夾。"
|
circularReferenceFolder: "目標文件夾是您要移動的文件夾的子文件夾。"
|
||||||
hasChildFilesOrFolders: "此文件夾不是空的,無法刪除。"
|
hasChildFilesOrFolders: "此文件夾不是空的,無法刪除。"
|
||||||
|
@ -294,7 +294,7 @@ driveCapacityPerRemoteAccount: "每個非本地用戶的雲端容量"
|
||||||
inMb: "以Mbps為單位"
|
inMb: "以Mbps為單位"
|
||||||
iconUrl: "圖像URL"
|
iconUrl: "圖像URL"
|
||||||
bannerUrl: "橫幅圖像URL"
|
bannerUrl: "橫幅圖像URL"
|
||||||
backgroundImageUrl: "背景圖片的來源網址 "
|
backgroundImageUrl: "背景圖片的來源網址"
|
||||||
pinnedUsers: "置頂用戶"
|
pinnedUsers: "置頂用戶"
|
||||||
pinnedUsersDescription: "在「發現」頁面中使用換行標記想要置頂的使用者。"
|
pinnedUsersDescription: "在「發現」頁面中使用換行標記想要置頂的使用者。"
|
||||||
hcaptchaSiteKey: "網站金鑰"
|
hcaptchaSiteKey: "網站金鑰"
|
||||||
|
@ -419,7 +419,7 @@ useObjectStorage: "使用Object Storage"
|
||||||
objectStorageBaseUrl: "Base URL"
|
objectStorageBaseUrl: "Base URL"
|
||||||
objectStorageBaseUrlDesc: "引用時的URL。如果您使用的是CDN或反向代理,请指定其URL,例如S3:“https://<bucket>.s3.amazonaws.com”,GCS:“https://storage.googleapis.com/<bucket>”"
|
objectStorageBaseUrlDesc: "引用時的URL。如果您使用的是CDN或反向代理,请指定其URL,例如S3:“https://<bucket>.s3.amazonaws.com”,GCS:“https://storage.googleapis.com/<bucket>”"
|
||||||
objectStorageBucket: "儲存空間(Bucket)"
|
objectStorageBucket: "儲存空間(Bucket)"
|
||||||
objectStorageBucketDesc: "請指定您正在使用的服務的存儲桶名稱。 "
|
objectStorageBucketDesc: "請指定您正在使用的服務的存儲桶名稱。"
|
||||||
objectStoragePrefix: "前綴"
|
objectStoragePrefix: "前綴"
|
||||||
objectStoragePrefixDesc: "它存儲在此前綴目錄下。"
|
objectStoragePrefixDesc: "它存儲在此前綴目錄下。"
|
||||||
objectStorageEndpoint: "端點(Endpoint)"
|
objectStorageEndpoint: "端點(Endpoint)"
|
||||||
|
@ -479,7 +479,7 @@ enablePlayer: "打開播放器"
|
||||||
disablePlayer: "關閉播放器"
|
disablePlayer: "關閉播放器"
|
||||||
themeEditor: "主題編輯器"
|
themeEditor: "主題編輯器"
|
||||||
description: "描述"
|
description: "描述"
|
||||||
describeFile: "添加標題 "
|
describeFile: "添加標題"
|
||||||
author: "作者"
|
author: "作者"
|
||||||
leaveConfirm: "有未保存的更改。要放棄嗎?"
|
leaveConfirm: "有未保存的更改。要放棄嗎?"
|
||||||
manage: "管理"
|
manage: "管理"
|
||||||
|
@ -618,7 +618,6 @@ editCode: "編輯代碼"
|
||||||
apply: "套用"
|
apply: "套用"
|
||||||
receiveAnnouncementFromInstance: "接收由本實例發出的電郵通知"
|
receiveAnnouncementFromInstance: "接收由本實例發出的電郵通知"
|
||||||
emailNotification: "郵件通知"
|
emailNotification: "郵件通知"
|
||||||
publish: "發佈"
|
|
||||||
useReactionPickerForContextMenu: "點擊右鍵開啟回應工具欄"
|
useReactionPickerForContextMenu: "點擊右鍵開啟回應工具欄"
|
||||||
typingUsers: "{users}輸入中..."
|
typingUsers: "{users}輸入中..."
|
||||||
jumpToSpecifiedDate: "跳轉到特定日期"
|
jumpToSpecifiedDate: "跳轉到特定日期"
|
||||||
|
@ -654,10 +653,7 @@ switch: "切換"
|
||||||
noMaintainerInformationWarning: "尚未設定管理員信息。"
|
noMaintainerInformationWarning: "尚未設定管理員信息。"
|
||||||
noBotProtectionWarning: "尚未設定Bot防護。"
|
noBotProtectionWarning: "尚未設定Bot防護。"
|
||||||
configure: "設定"
|
configure: "設定"
|
||||||
postToGallery: "發佈到相簿"
|
|
||||||
gallery: "相簿"
|
|
||||||
recentPosts: "最新貼文"
|
recentPosts: "最新貼文"
|
||||||
popularPosts: "熱門的貼文"
|
|
||||||
shareWithNote: "在貼文中分享"
|
shareWithNote: "在貼文中分享"
|
||||||
emailNotConfiguredWarning: "沒有設定電子郵件地址"
|
emailNotConfiguredWarning: "沒有設定電子郵件地址"
|
||||||
ratio: "%"
|
ratio: "%"
|
||||||
|
@ -746,13 +742,8 @@ _accountDelete:
|
||||||
inProgress: "正在刪除"
|
inProgress: "正在刪除"
|
||||||
_forgotPassword:
|
_forgotPassword:
|
||||||
enterEmail: "請輸入您的帳戶註冊的電子郵件地址。 密碼重置連結將被發送到該電子郵件地址。"
|
enterEmail: "請輸入您的帳戶註冊的電子郵件地址。 密碼重置連結將被發送到該電子郵件地址。"
|
||||||
ifNoEmail: "如果您還沒有註冊您的電子郵件地址,請聯繫管理員。 "
|
ifNoEmail: "如果您還沒有註冊您的電子郵件地址,請聯繫管理員。"
|
||||||
contactAdmin: "此實例不支持電子郵件,請聯繫您的管理員重置您的密碼。 "
|
contactAdmin: "此實例不支持電子郵件,請聯繫您的管理員重置您的密碼。"
|
||||||
_gallery:
|
|
||||||
my: "我的貼文"
|
|
||||||
liked: "喜歡的貼文"
|
|
||||||
like: "讚"
|
|
||||||
unlike: "收回喜歡"
|
|
||||||
_email:
|
_email:
|
||||||
_follow:
|
_follow:
|
||||||
title: "您有新的追隨者"
|
title: "您有新的追隨者"
|
||||||
|
@ -786,7 +777,7 @@ _mfm:
|
||||||
url: "URL"
|
url: "URL"
|
||||||
urlDescription: "可以展示URL位址。"
|
urlDescription: "可以展示URL位址。"
|
||||||
link: "鏈接"
|
link: "鏈接"
|
||||||
linkDescription: "您可以將特定範圍的文章與 URL 相關聯。 "
|
linkDescription: "您可以將特定範圍的文章與 URL 相關聯。"
|
||||||
bold: "粗體"
|
bold: "粗體"
|
||||||
boldDescription: "可以將文字顯示为粗體来強調。"
|
boldDescription: "可以將文字顯示为粗體来強調。"
|
||||||
small: "縮小"
|
small: "縮小"
|
||||||
|
@ -804,7 +795,7 @@ _mfm:
|
||||||
quote: "引用"
|
quote: "引用"
|
||||||
quoteDescription: "可以用來表示引用的内容。"
|
quoteDescription: "可以用來表示引用的内容。"
|
||||||
emoji: "自訂表情符號"
|
emoji: "自訂表情符號"
|
||||||
emojiDescription: "您可以通過將自定義表情符號名稱括在冒號中來顯示自定義表情符號。 "
|
emojiDescription: "您可以通過將自定義表情符號名稱括在冒號中來顯示自定義表情符號。"
|
||||||
search: "搜尋"
|
search: "搜尋"
|
||||||
searchDescription: "您可以顯示所輸入的搜索框。"
|
searchDescription: "您可以顯示所輸入的搜索框。"
|
||||||
flip: "翻轉"
|
flip: "翻轉"
|
||||||
|
@ -962,7 +953,6 @@ _permissions:
|
||||||
"write:notes": "撰寫或刪除貼文"
|
"write:notes": "撰寫或刪除貼文"
|
||||||
"read:notifications": "查看通知"
|
"read:notifications": "查看通知"
|
||||||
"write:notifications": "編輯通知"
|
"write:notifications": "編輯通知"
|
||||||
"read:reactions": "查看情感"
|
|
||||||
"write:reactions": "編輯情感"
|
"write:reactions": "編輯情感"
|
||||||
"write:votes": "投票"
|
"write:votes": "投票"
|
||||||
"read:pages": "顯示頁面"
|
"read:pages": "顯示頁面"
|
||||||
|
@ -973,10 +963,6 @@ _permissions:
|
||||||
"write:user-groups": "編輯使用者群組"
|
"write:user-groups": "編輯使用者群組"
|
||||||
"read:channels": "已查看的頻道"
|
"read:channels": "已查看的頻道"
|
||||||
"write:channels": "編輯頻道"
|
"write:channels": "編輯頻道"
|
||||||
"read:gallery": "瀏覽圖庫"
|
|
||||||
"write:gallery": "操作圖庫"
|
|
||||||
"read:gallery-likes": "讀取喜歡的圖片"
|
|
||||||
"write:gallery-likes": "操作喜歡的圖片"
|
|
||||||
_auth:
|
_auth:
|
||||||
shareAccess: "要授權「“{name}”」存取您的帳戶嗎?"
|
shareAccess: "要授權「“{name}”」存取您的帳戶嗎?"
|
||||||
shareAccessAsk: "您確定要授權這個應用程式使用您的帳戶嗎?"
|
shareAccessAsk: "您確定要授權這個應用程式使用您的帳戶嗎?"
|
||||||
|
@ -1015,7 +1001,7 @@ _widgets:
|
||||||
button: "按鈕"
|
button: "按鈕"
|
||||||
onlineUsers: "線上的用戶"
|
onlineUsers: "線上的用戶"
|
||||||
jobQueue: "佇列"
|
jobQueue: "佇列"
|
||||||
serverMetric: "服務器指標 "
|
serverMetric: "服務器指標"
|
||||||
aiscript: "AiScript控制台"
|
aiscript: "AiScript控制台"
|
||||||
aichan: "小藍"
|
aichan: "小藍"
|
||||||
_cw:
|
_cw:
|
||||||
|
@ -1031,7 +1017,7 @@ _poll:
|
||||||
expiration: "期限"
|
expiration: "期限"
|
||||||
infinite: "無期限"
|
infinite: "無期限"
|
||||||
at: "結束時間"
|
at: "結束時間"
|
||||||
after: "進度指定 "
|
after: "進度指定"
|
||||||
deadlineDate: "截止日期"
|
deadlineDate: "截止日期"
|
||||||
deadlineTime: "小時"
|
deadlineTime: "小時"
|
||||||
duration: "時長"
|
duration: "時長"
|
||||||
|
@ -1047,7 +1033,7 @@ _poll:
|
||||||
remainingSeconds: "{s}秒後截止"
|
remainingSeconds: "{s}秒後截止"
|
||||||
_visibility:
|
_visibility:
|
||||||
public: "公開"
|
public: "公開"
|
||||||
publicDescription: "發布給所有用戶 "
|
publicDescription: "發布給所有用戶"
|
||||||
home: "首頁"
|
home: "首頁"
|
||||||
homeDescription: "僅發送至首頁的時間軸"
|
homeDescription: "僅發送至首頁的時間軸"
|
||||||
followers: "追隨者"
|
followers: "追隨者"
|
||||||
|
|
|
@ -54,5 +54,5 @@
|
||||||
"start-server-and-test": "1.14.0",
|
"start-server-and-test": "1.14.0",
|
||||||
"typescript": "^4.9.4"
|
"typescript": "^4.9.4"
|
||||||
},
|
},
|
||||||
"packageManager": "yarn@3.3.0"
|
"packageManager": "yarn@3.4.1"
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
export class noteVisibilityFunction1662132062000 {
|
||||||
|
name = 'noteVisibilityFunction1662132062000';
|
||||||
|
|
||||||
|
async up(queryRunner) {
|
||||||
|
await queryRunner.query(`
|
||||||
|
CREATE OR REPLACE FUNCTION note_visible(note_id varchar, user_id varchar) RETURNS BOOLEAN
|
||||||
|
LANGUAGE SQL
|
||||||
|
STABLE
|
||||||
|
CALLED ON NULL INPUT
|
||||||
|
AS $$
|
||||||
|
SELECT CASE
|
||||||
|
WHEN note_id IS NULL THEN TRUE
|
||||||
|
WHEN NOT EXISTS (SELECT 1 FROM note WHERE id = note_id) THEN FALSE
|
||||||
|
WHEN user_id IS NULL THEN (
|
||||||
|
-- simplified check without logged in user
|
||||||
|
SELECT
|
||||||
|
visibility IN ('public', 'home')
|
||||||
|
-- check reply / renote recursively
|
||||||
|
AND note_visible("replyId", NULL)
|
||||||
|
AND note_visible("renoteId", NULL)
|
||||||
|
FROM note WHERE note.id = note_id
|
||||||
|
) ELSE (
|
||||||
|
SELECT
|
||||||
|
(
|
||||||
|
visibility IN ('public', 'home')
|
||||||
|
OR
|
||||||
|
user_id = "userId"
|
||||||
|
OR
|
||||||
|
user_id = ANY("visibleUserIds")
|
||||||
|
OR
|
||||||
|
user_id = ANY("mentions")
|
||||||
|
OR (
|
||||||
|
visibility = 'followers'
|
||||||
|
AND
|
||||||
|
EXISTS (
|
||||||
|
SELECT 1 FROM following WHERE "followeeId" = "userId" AND "followerId" = user_id
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
-- check reply / renote recursively
|
||||||
|
AND note_visible("replyId", user_id)
|
||||||
|
AND note_visible("renoteId", user_id)
|
||||||
|
FROM note WHERE note.id = note_id
|
||||||
|
)
|
||||||
|
END;
|
||||||
|
$$;
|
||||||
|
`);
|
||||||
|
}
|
||||||
|
|
||||||
|
async down(queryRunner) {
|
||||||
|
await queryRunner.query('DROP FUNCTION note_visible');
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,8 +5,8 @@ export class registryRemoveDomain1675375940759 {
|
||||||
await queryRunner.query(`DROP INDEX "public"."IDX_0a72bdfcdb97c0eca11fe7ecad"`);
|
await queryRunner.query(`DROP INDEX "public"."IDX_0a72bdfcdb97c0eca11fe7ecad"`);
|
||||||
await queryRunner.query(`ALTER TABLE "registry_item" DROP COLUMN "domain"`);
|
await queryRunner.query(`ALTER TABLE "registry_item" DROP COLUMN "domain"`);
|
||||||
await queryRunner.query(`ALTER TABLE "registry_item" ALTER COLUMN "key" TYPE text USING "key"::text`);
|
await queryRunner.query(`ALTER TABLE "registry_item" ALTER COLUMN "key" TYPE text USING "key"::text`);
|
||||||
// delete existing duplicated entries, keeping the latest updated one
|
// delete existing duplicated entries, keeping the latest created one
|
||||||
await queryRunner.query(`DELETE FROM "registry_item" AS "a" WHERE "updatedAt" != (SELECT MAX("updatedAt") FROM "registry_item" AS "b" WHERE "a"."userId" = "b"."userId" AND "a"."key" = "b"."key" AND "a"."scope" = "b"."scope" GROUP BY "userId", "key", "scope")`);
|
await queryRunner.query(`DELETE FROM "registry_item" AS "a" WHERE "id" != (SELECT MAX("id") FROM "registry_item" AS "b" WHERE "a"."userId" = "b"."userId" AND "a"."key" = "b"."key" AND "a"."scope" = "b"."scope" GROUP BY "userId", "key", "scope")`);
|
||||||
await queryRunner.query(`ALTER TABLE "registry_item" ADD CONSTRAINT "UQ_b8d6509f847331273ab99daccc7" UNIQUE ("userId", "key", "scope")`);
|
await queryRunner.query(`ALTER TABLE "registry_item" ADD CONSTRAINT "UQ_b8d6509f847331273ab99daccc7" UNIQUE ("userId", "key", "scope")`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
13
packages/backend/migration/1678427401214-remove-unused.js
Normal file
13
packages/backend/migration/1678427401214-remove-unused.js
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
export class removeUnused1678427401214 {
|
||||||
|
name = 'removeUnused1678427401214'
|
||||||
|
|
||||||
|
async up(queryRunner) {
|
||||||
|
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "pinnedPages"`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "pinnedClipId"`);
|
||||||
|
}
|
||||||
|
|
||||||
|
async down(queryRunner) {
|
||||||
|
await queryRunner.query(`ALTER TABLE "meta" ADD "pinnedClipId" character varying(32)`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "meta" ADD "pinnedPages" character varying(512) array NOT NULL DEFAULT '{/featured,/channels,/explore,/pages,/about-misskey}'`);
|
||||||
|
}
|
||||||
|
}
|
|
@ -18,7 +18,13 @@ const ev = new Xev();
|
||||||
* Init process
|
* Init process
|
||||||
*/
|
*/
|
||||||
export async function boot(): Promise<void> {
|
export async function boot(): Promise<void> {
|
||||||
process.title = `FoundKey (${cluster.isPrimary ? 'master' : 'worker'})`;
|
if (envOption.disableClustering) {
|
||||||
|
process.title = "Foundkey";
|
||||||
|
} else if (cluster.isPrimary) {
|
||||||
|
process.title = "Foundkey (master)";
|
||||||
|
} else if (cluster.isWorker) {
|
||||||
|
process.title = `Foundkey (${process.env.mode})`;
|
||||||
|
}
|
||||||
|
|
||||||
if (cluster.isPrimary || envOption.disableClustering) {
|
if (cluster.isPrimary || envOption.disableClustering) {
|
||||||
await masterMain();
|
await masterMain();
|
||||||
|
|
|
@ -22,6 +22,7 @@ import { packedNoteReactionSchema } from '@/models/schema/note-reaction.js';
|
||||||
import { packedHashtagSchema } from '@/models/schema/hashtag.js';
|
import { packedHashtagSchema } from '@/models/schema/hashtag.js';
|
||||||
import { packedPageSchema } from '@/models/schema/page.js';
|
import { packedPageSchema } from '@/models/schema/page.js';
|
||||||
import { packedUserGroupSchema } from '@/models/schema/user-group.js';
|
import { packedUserGroupSchema } from '@/models/schema/user-group.js';
|
||||||
|
import { packedUserGroupInvitationSchema } from '@/models/schema/user-group-invitation.js';
|
||||||
import { packedNoteFavoriteSchema } from '@/models/schema/note-favorite.js';
|
import { packedNoteFavoriteSchema } from '@/models/schema/note-favorite.js';
|
||||||
import { packedChannelSchema } from '@/models/schema/channel.js';
|
import { packedChannelSchema } from '@/models/schema/channel.js';
|
||||||
import { packedAntennaSchema } from '@/models/schema/antenna.js';
|
import { packedAntennaSchema } from '@/models/schema/antenna.js';
|
||||||
|
@ -41,6 +42,7 @@ export const refs = {
|
||||||
|
|
||||||
UserList: packedUserListSchema,
|
UserList: packedUserListSchema,
|
||||||
UserGroup: packedUserGroupSchema,
|
UserGroup: packedUserGroupSchema,
|
||||||
|
UserGroupInvitation: packedUserGroupInvitationSchema,
|
||||||
App: packedAppSchema,
|
App: packedAppSchema,
|
||||||
MessagingMessage: packedMessagingMessageSchema,
|
MessagingMessage: packedMessagingMessageSchema,
|
||||||
Note: packedNoteSchema,
|
Note: packedNoteSchema,
|
||||||
|
|
|
@ -78,7 +78,7 @@ export class DriveFile {
|
||||||
default: {},
|
default: {},
|
||||||
comment: 'The any properties of the DriveFile. For example, it includes image width/height.',
|
comment: 'The any properties of the DriveFile. For example, it includes image width/height.',
|
||||||
})
|
})
|
||||||
public properties: { width?: number; height?: number; orientation?: number; avgColor?: string };
|
public properties: { width?: number; height?: number; orientation?: number; };
|
||||||
|
|
||||||
@Column('boolean')
|
@Column('boolean')
|
||||||
public storedInternal: boolean;
|
public storedInternal: boolean;
|
||||||
|
|
|
@ -82,17 +82,6 @@ export class Meta {
|
||||||
})
|
})
|
||||||
public blockedHosts: string[];
|
public blockedHosts: string[];
|
||||||
|
|
||||||
@Column('varchar', {
|
|
||||||
length: 512, array: true, default: '{/featured,/channels,/explore,/pages,/about-foundkey}',
|
|
||||||
})
|
|
||||||
public pinnedPages: string[];
|
|
||||||
|
|
||||||
@Column({
|
|
||||||
...id(),
|
|
||||||
nullable: true,
|
|
||||||
})
|
|
||||||
public pinnedClipId: Clip['id'] | null;
|
|
||||||
|
|
||||||
@Column('varchar', {
|
@Column('varchar', {
|
||||||
length: 512,
|
length: 512,
|
||||||
nullable: true,
|
nullable: true,
|
||||||
|
|
|
@ -11,6 +11,7 @@ import { NoteReaction } from '@/models/entities/note-reaction.js';
|
||||||
import { User } from '@/models/entities/user.js';
|
import { User } from '@/models/entities/user.js';
|
||||||
import { awaitAll } from '@/prelude/await-all.js';
|
import { awaitAll } from '@/prelude/await-all.js';
|
||||||
import { Users, PollVotes, DriveFiles, NoteReactions, Followings, Polls, Channels } from '../index.js';
|
import { Users, PollVotes, DriveFiles, NoteReactions, Followings, Polls, Channels } from '../index.js';
|
||||||
|
import { apiLogger } from '@/server/api/logger.js';
|
||||||
|
|
||||||
async function populatePoll(note: Note, meId: User['id'] | null) {
|
async function populatePoll(note: Note, meId: User['id'] | null) {
|
||||||
const poll = await Polls.findOneByOrFail({ noteId: note.id });
|
const poll = await Polls.findOneByOrFail({ noteId: note.id });
|
||||||
|
@ -77,7 +78,7 @@ async function populateMyReaction(note: Note, meId: User['id'], _hint_?: {
|
||||||
|
|
||||||
export const NoteRepository = db.getRepository(Note).extend({
|
export const NoteRepository = db.getRepository(Note).extend({
|
||||||
async isVisibleForMe(note: Note, meId: User['id'] | null): Promise<boolean> {
|
async isVisibleForMe(note: Note, meId: User['id'] | null): Promise<boolean> {
|
||||||
// This code must always be synchronized with the checks in generateVisibilityQuery.
|
// This code must always be synchronized with the `note_visible` SQL function.
|
||||||
// visibility が specified かつ自分が指定されていなかったら非表示
|
// visibility が specified かつ自分が指定されていなかったら非表示
|
||||||
if (note.visibility === 'specified') {
|
if (note.visibility === 'specified') {
|
||||||
if (meId == null) {
|
if (meId == null) {
|
||||||
|
@ -270,6 +271,13 @@ export const NoteRepository = db.getRepository(Note).extend({
|
||||||
})));
|
})));
|
||||||
|
|
||||||
// filter out rejected promises, only keep fulfilled values
|
// filter out rejected promises, only keep fulfilled values
|
||||||
return promises.flatMap(result => result.status === 'fulfilled' ? [result.value] : []);
|
return promises.flatMap((result, i) => {
|
||||||
|
if (result.status === 'fulfilled') {
|
||||||
|
return [result.value];
|
||||||
|
} else {
|
||||||
|
apiLogger.error(`dropping note due to violating visibility restrictions, note ${notes[i].id} user ${meId}`);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
});
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
|
@ -270,16 +270,14 @@ export const UserRepository = db.getRepository(User).extend({
|
||||||
|
|
||||||
const followingCount = profile == null ? null :
|
const followingCount = profile == null ? null :
|
||||||
(profile.ffVisibility === 'public') || isMe ? user.followingCount :
|
(profile.ffVisibility === 'public') || isMe ? user.followingCount :
|
||||||
(profile.ffVisibility === 'followers') && (relation && relation.isFollowing) ? user.followingCount :
|
(profile.ffVisibility === 'followers') && relation?.isFollowing ? user.followingCount :
|
||||||
null;
|
null;
|
||||||
|
|
||||||
const followersCount = profile == null ? null :
|
const followersCount = profile == null ? null :
|
||||||
(profile.ffVisibility === 'public') || isMe ? user.followersCount :
|
(profile.ffVisibility === 'public') || isMe ? user.followersCount :
|
||||||
(profile.ffVisibility === 'followers') && (relation && relation.isFollowing) ? user.followersCount :
|
(profile.ffVisibility === 'followers') && relation?.isFollowing ? user.followersCount :
|
||||||
null;
|
null;
|
||||||
|
|
||||||
const falsy = opts.detail ? false : undefined;
|
|
||||||
|
|
||||||
const packed = {
|
const packed = {
|
||||||
id: user.id,
|
id: user.id,
|
||||||
name: user.name,
|
name: user.name,
|
||||||
|
@ -287,10 +285,10 @@ export const UserRepository = db.getRepository(User).extend({
|
||||||
host: user.host,
|
host: user.host,
|
||||||
avatarUrl: this.getAvatarUrlSync(user),
|
avatarUrl: this.getAvatarUrlSync(user),
|
||||||
avatarBlurhash: user.avatar?.blurhash || null,
|
avatarBlurhash: user.avatar?.blurhash || null,
|
||||||
isAdmin: user.isAdmin || falsy,
|
isAdmin: user.isAdmin,
|
||||||
isModerator: user.isModerator || falsy,
|
isModerator: user.isModerator,
|
||||||
isBot: user.isBot || falsy,
|
isBot: user.isBot,
|
||||||
isCat: user.isCat || falsy,
|
isCat: user.isCat,
|
||||||
instance: !user.host ? undefined : userInstanceCache.fetch(user.host)
|
instance: !user.host ? undefined : userInstanceCache.fetch(user.host)
|
||||||
.then(instance => !instance ? undefined : {
|
.then(instance => !instance ? undefined : {
|
||||||
name: instance.name,
|
name: instance.name,
|
||||||
|
@ -312,8 +310,8 @@ export const UserRepository = db.getRepository(User).extend({
|
||||||
bannerUrl: user.banner ? DriveFiles.getPublicUrl(user.banner, false) : null,
|
bannerUrl: user.banner ? DriveFiles.getPublicUrl(user.banner, false) : null,
|
||||||
bannerBlurhash: user.banner?.blurhash || null,
|
bannerBlurhash: user.banner?.blurhash || null,
|
||||||
isLocked: user.isLocked,
|
isLocked: user.isLocked,
|
||||||
isSilenced: user.isSilenced || falsy,
|
isSilenced: user.isSilenced,
|
||||||
isSuspended: user.isSuspended || falsy,
|
isSuspended: user.isSuspended,
|
||||||
description: profile!.description,
|
description: profile!.description,
|
||||||
location: profile!.location,
|
location: profile!.location,
|
||||||
birthday: profile!.birthday,
|
birthday: profile!.birthday,
|
||||||
|
@ -369,7 +367,7 @@ export const UserRepository = db.getRepository(User).extend({
|
||||||
mutedInstances: profile!.mutedInstances,
|
mutedInstances: profile!.mutedInstances,
|
||||||
mutingNotificationTypes: profile!.mutingNotificationTypes,
|
mutingNotificationTypes: profile!.mutingNotificationTypes,
|
||||||
emailNotificationTypes: profile!.emailNotificationTypes,
|
emailNotificationTypes: profile!.emailNotificationTypes,
|
||||||
showTimelineReplies: user.showTimelineReplies || falsy,
|
showTimelineReplies: user.showTimelineReplies,
|
||||||
federateBlocks: user!.federateBlocks,
|
federateBlocks: user!.federateBlocks,
|
||||||
} : {}),
|
} : {}),
|
||||||
|
|
||||||
|
|
|
@ -60,11 +60,6 @@ export const packedDriveFileSchema = {
|
||||||
optional: true, nullable: false,
|
optional: true, nullable: false,
|
||||||
example: 8,
|
example: 8,
|
||||||
},
|
},
|
||||||
avgColor: {
|
|
||||||
type: 'string',
|
|
||||||
optional: true, nullable: false,
|
|
||||||
example: 'rgb(40,65,87)',
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
url: {
|
url: {
|
||||||
|
|
|
@ -163,16 +163,20 @@ export const packedNoteSchema = {
|
||||||
optional: false, nullable: false,
|
optional: false, nullable: false,
|
||||||
},
|
},
|
||||||
uri: {
|
uri: {
|
||||||
|
description: 'ActivityPub `id` of this Note',
|
||||||
type: 'string',
|
type: 'string',
|
||||||
optional: true, nullable: false,
|
optional: true, nullable: false,
|
||||||
},
|
},
|
||||||
url: {
|
url: {
|
||||||
|
description: 'URL to a presentation form intended for humans, if available',
|
||||||
type: 'string',
|
type: 'string',
|
||||||
optional: true, nullable: false,
|
optional: true, nullable: false,
|
||||||
},
|
},
|
||||||
|
|
||||||
myReaction: {
|
myReaction: {
|
||||||
type: 'object',
|
description: 'Textual representation of the authenticated users reaction, if they reacted.',
|
||||||
|
example: ':blobfox@.:',
|
||||||
|
type: 'string',
|
||||||
optional: true, nullable: true,
|
optional: true, nullable: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
@ -48,6 +48,7 @@ export const packedNotificationSchema = {
|
||||||
},
|
},
|
||||||
invitation: {
|
invitation: {
|
||||||
type: 'object',
|
type: 'object',
|
||||||
|
ref: 'UserGroupInvitation',
|
||||||
optional: true, nullable: true,
|
optional: true, nullable: true,
|
||||||
},
|
},
|
||||||
body: {
|
body: {
|
||||||
|
|
16
packages/backend/src/models/schema/user-group-invitation.ts
Normal file
16
packages/backend/src/models/schema/user-group-invitation.ts
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
export const packedUserGroupInvitationSchema = {
|
||||||
|
type: 'object',
|
||||||
|
properties: {
|
||||||
|
id: {
|
||||||
|
type: 'string',
|
||||||
|
optional: false, nullable: false,
|
||||||
|
format: 'id',
|
||||||
|
example: 'xxxxxxxxxx',
|
||||||
|
},
|
||||||
|
group: {
|
||||||
|
type: 'object',
|
||||||
|
optional: false, nullable: false,
|
||||||
|
ref: 'UserGroup',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
} as const;
|
|
@ -87,11 +87,13 @@ export const packedUserDetailedNotMeOnlySchema = {
|
||||||
type: 'object',
|
type: 'object',
|
||||||
properties: {
|
properties: {
|
||||||
url: {
|
url: {
|
||||||
|
description: 'URL to a presentation form intended for humans, if available',
|
||||||
type: 'string',
|
type: 'string',
|
||||||
format: 'url',
|
format: 'url',
|
||||||
nullable: true, optional: false,
|
nullable: true, optional: false,
|
||||||
},
|
},
|
||||||
uri: {
|
uri: {
|
||||||
|
description: 'ActivityPub `id` of this User',
|
||||||
type: 'string',
|
type: 'string',
|
||||||
format: 'uri',
|
format: 'uri',
|
||||||
nullable: true, optional: false,
|
nullable: true, optional: false,
|
||||||
|
@ -403,6 +405,24 @@ export const packedMeDetailedOnlySchema = {
|
||||||
items: {
|
items: {
|
||||||
type: 'object',
|
type: 'object',
|
||||||
nullable: false, optional: false,
|
nullable: false, optional: false,
|
||||||
|
properties: {
|
||||||
|
id: {
|
||||||
|
type: 'string',
|
||||||
|
optional: false,
|
||||||
|
nullable: false,
|
||||||
|
},
|
||||||
|
name: {
|
||||||
|
type: 'string',
|
||||||
|
optional: false,
|
||||||
|
nullable: false,
|
||||||
|
},
|
||||||
|
lastUsed: {
|
||||||
|
type: 'string',
|
||||||
|
optional: false,
|
||||||
|
nullable: false,
|
||||||
|
example: '1970-01-01T00:00:00Z',
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
|
@ -4,7 +4,6 @@ import { request } from '@/remote/activitypub/request.js';
|
||||||
import { registerOrFetchInstanceDoc } from '@/services/register-or-fetch-instance-doc.js';
|
import { registerOrFetchInstanceDoc } from '@/services/register-or-fetch-instance-doc.js';
|
||||||
import Logger from '@/services/logger.js';
|
import Logger from '@/services/logger.js';
|
||||||
import { Instances } from '@/models/index.js';
|
import { Instances } from '@/models/index.js';
|
||||||
import { apRequestChart, federationChart, instanceChart } from '@/services/chart/index.js';
|
|
||||||
import { fetchInstanceMetadata } from '@/services/fetch-instance-metadata.js';
|
import { fetchInstanceMetadata } from '@/services/fetch-instance-metadata.js';
|
||||||
import { toPuny } from '@/misc/convert-host.js';
|
import { toPuny } from '@/misc/convert-host.js';
|
||||||
import { StatusError } from '@/misc/fetch.js';
|
import { StatusError } from '@/misc/fetch.js';
|
||||||
|
@ -13,8 +12,6 @@ import { DeliverJobData } from '@/queue/types.js';
|
||||||
|
|
||||||
const logger = new Logger('deliver');
|
const logger = new Logger('deliver');
|
||||||
|
|
||||||
let latest: string | null = null;
|
|
||||||
|
|
||||||
export default async (job: Bull.Job<DeliverJobData>) => {
|
export default async (job: Bull.Job<DeliverJobData>) => {
|
||||||
const { host } = new URL(job.data.to);
|
const { host } = new URL(job.data.to);
|
||||||
const puny = toPuny(host);
|
const puny = toPuny(host);
|
||||||
|
@ -22,12 +19,14 @@ export default async (job: Bull.Job<DeliverJobData>) => {
|
||||||
if (await shouldSkipInstance(puny)) return 'skip';
|
if (await shouldSkipInstance(puny)) return 'skip';
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (latest !== (latest = JSON.stringify(job.data.content, null, 2))) {
|
if (Array.isArray(job.data.content)) {
|
||||||
logger.debug(`delivering ${latest}`);
|
await Promise.all(
|
||||||
|
job.data.content.map(x => request(job.data.user, job.data.to, x))
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
await request(job.data.user, job.data.to, job.data.content);
|
||||||
}
|
}
|
||||||
|
|
||||||
await request(job.data.user, job.data.to, job.data.content);
|
|
||||||
|
|
||||||
// Update stats
|
// Update stats
|
||||||
registerOrFetchInstanceDoc(host).then(i => {
|
registerOrFetchInstanceDoc(host).then(i => {
|
||||||
Instances.update(i.id, {
|
Instances.update(i.id, {
|
||||||
|
@ -38,13 +37,7 @@ export default async (job: Bull.Job<DeliverJobData>) => {
|
||||||
});
|
});
|
||||||
|
|
||||||
fetchInstanceMetadata(i);
|
fetchInstanceMetadata(i);
|
||||||
|
|
||||||
instanceChart.requestSent(i.host, true);
|
|
||||||
apRequestChart.deliverSucc();
|
|
||||||
federationChart.deliverd(i.host, true);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return 'Success';
|
|
||||||
} catch (res) {
|
} catch (res) {
|
||||||
// Update stats
|
// Update stats
|
||||||
registerOrFetchInstanceDoc(host).then(i => {
|
registerOrFetchInstanceDoc(host).then(i => {
|
||||||
|
@ -53,10 +46,6 @@ export default async (job: Bull.Job<DeliverJobData>) => {
|
||||||
latestStatus: res instanceof StatusError ? res.statusCode : null,
|
latestStatus: res instanceof StatusError ? res.statusCode : null,
|
||||||
isNotResponding: true,
|
isNotResponding: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
instanceChart.requestSent(i.host, false);
|
|
||||||
apRequestChart.deliverFail();
|
|
||||||
federationChart.deliverd(i.host, false);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
if (res instanceof StatusError) {
|
if (res instanceof StatusError) {
|
||||||
|
@ -67,7 +56,7 @@ export default async (job: Bull.Job<DeliverJobData>) => {
|
||||||
return `${res.statusCode} ${res.statusMessage}`;
|
return `${res.statusCode} ${res.statusMessage}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 5xx etc.
|
// 5xx etc., throwing an Error will make Bull retry
|
||||||
throw new Error(`${res.statusCode} ${res.statusMessage}`);
|
throw new Error(`${res.statusCode} ${res.statusMessage}`);
|
||||||
} else {
|
} else {
|
||||||
// DNS error, socket error, timeout ...
|
// DNS error, socket error, timeout ...
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { CacheableRemoteUser } from '@/models/entities/user.js';
|
import { CacheableRemoteUser } from '@/models/entities/user.js';
|
||||||
import deleteNode from '@/services/note/delete.js';
|
import { deleteNotes } from '@/services/note/delete.js';
|
||||||
import { getApLock } from '@/misc/app-lock.js';
|
import { getApLock } from '@/misc/app-lock.js';
|
||||||
import { deleteMessage } from '@/services/messages/delete.js';
|
import { deleteMessage } from '@/services/messages/delete.js';
|
||||||
import { DbResolver } from '@/remote/activitypub/db-resolver.js';
|
import { DbResolver } from '@/remote/activitypub/db-resolver.js';
|
||||||
|
@ -29,7 +29,7 @@ export default async function(actor: CacheableRemoteUser, uri: string): Promise<
|
||||||
return 'skip: cant delete other actors note';
|
return 'skip: cant delete other actors note';
|
||||||
}
|
}
|
||||||
|
|
||||||
await deleteNode(actor, note);
|
await deleteNotes([note], actor);
|
||||||
return 'ok: note deleted';
|
return 'ok: note deleted';
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
|
|
|
@ -11,7 +11,7 @@ export default async (actor: CacheableRemoteUser, activity: ILike) => {
|
||||||
|
|
||||||
await extractEmojis(activity.tag || [], actor.host).catch(() => null);
|
await extractEmojis(activity.tag || [], actor.host).catch(() => null);
|
||||||
|
|
||||||
return await createReaction(actor, note, activity._misskey_reaction || activity.content || activity.name).catch(e => {
|
return await createReaction(actor, note, activity.content || activity.name).catch(e => {
|
||||||
if (e.id === '51c42bb4-931a-456b-bff7-e5a8a70dd298') {
|
if (e.id === '51c42bb4-931a-456b-bff7-e5a8a70dd298') {
|
||||||
return 'skip: already reacted';
|
return 'skip: already reacted';
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { Notes } from '@/models/index.js';
|
import { Notes } from '@/models/index.js';
|
||||||
import { CacheableRemoteUser } from '@/models/entities/user.js';
|
import { CacheableRemoteUser } from '@/models/entities/user.js';
|
||||||
import deleteNote from '@/services/note/delete.js';
|
import { deleteNotes } from '@/services/note/delete.js';
|
||||||
import { IAnnounce, getApId } from '@/remote/activitypub/type.js';
|
import { IAnnounce, getApId } from '@/remote/activitypub/type.js';
|
||||||
|
|
||||||
export const undoAnnounce = async (actor: CacheableRemoteUser, activity: IAnnounce): Promise<string> => {
|
export const undoAnnounce = async (actor: CacheableRemoteUser, activity: IAnnounce): Promise<string> => {
|
||||||
|
@ -13,6 +13,6 @@ export const undoAnnounce = async (actor: CacheableRemoteUser, activity: IAnnoun
|
||||||
|
|
||||||
if (!note) return 'skip: no such Announce';
|
if (!note) return 'skip: no such Announce';
|
||||||
|
|
||||||
await deleteNote(actor, note);
|
await deleteNotes([note], actor);
|
||||||
return 'ok: deleted';
|
return 'ok: deleted';
|
||||||
};
|
};
|
||||||
|
|
|
@ -185,19 +185,21 @@ export async function createNote(value: string | IObject, resolver: Resolver, si
|
||||||
};
|
};
|
||||||
|
|
||||||
const uris = unique([quoteUrl, note._misskey_quote, note.quoteUri].filter((x): x is string => typeof x === 'string'));
|
const uris = unique([quoteUrl, note._misskey_quote, note.quoteUri].filter((x): x is string => typeof x === 'string'));
|
||||||
|
let temperror = false;
|
||||||
// check the urls sequentially and abort early to not do unnecessary HTTP requests
|
// check the urls sequentially and abort early to not do unnecessary HTTP requests
|
||||||
// picks the first one that works
|
// picks the first one that works
|
||||||
for (const uri in uris) {
|
for (const uri of uris) {
|
||||||
const res = await tryResolveNote(uri);
|
const res = await tryResolveNote(uri);
|
||||||
if (res.status === 'ok') {
|
if (res.status === 'ok') {
|
||||||
quote = res.res;
|
quote = res.res;
|
||||||
break;
|
break;
|
||||||
|
} else if (res.status === 'temperror') {
|
||||||
|
temperror = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!quote) {
|
if (!quote && temperror) {
|
||||||
if (results.some(x => x.status === 'temperror')) {
|
// could not resolve quote, try again later
|
||||||
throw new Error('quote resolve failed');
|
throw new Error('quote resolve failed');
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -207,8 +209,6 @@ export async function createNote(value: string | IObject, resolver: Resolver, si
|
||||||
let text: string | null = null;
|
let text: string | null = null;
|
||||||
if (note.source?.mediaType === 'text/x.misskeymarkdown' && typeof note.source.content === 'string') {
|
if (note.source?.mediaType === 'text/x.misskeymarkdown' && typeof note.source.content === 'string') {
|
||||||
text = note.source.content;
|
text = note.source.content;
|
||||||
} else if (typeof note._misskey_content !== 'undefined') {
|
|
||||||
text = note._misskey_content;
|
|
||||||
} else if (typeof note.content === 'string') {
|
} else if (typeof note.content === 'string') {
|
||||||
text = fromHtml(note.content, quote?.uri);
|
text = fromHtml(note.content, quote?.uri);
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ export async function extractPollFromQuestion(source: string | IObject, resolver
|
||||||
.map(x => x.name!);
|
.map(x => x.name!);
|
||||||
|
|
||||||
const votes = question[multiple ? 'anyOf' : 'oneOf']!
|
const votes = question[multiple ? 'anyOf' : 'oneOf']!
|
||||||
.map(x => x.replies && x.replies.totalItems || x._misskey_votes || 0);
|
.map(x => x.replies && x.replies.totalItems || 0);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
choices,
|
choices,
|
||||||
|
|
|
@ -35,10 +35,7 @@ export const renderActivity = (x: any): IActivity | null => {
|
||||||
value: 'schema:value',
|
value: 'schema:value',
|
||||||
// Misskey
|
// Misskey
|
||||||
misskey: 'https://misskey-hub.net/ns#',
|
misskey: 'https://misskey-hub.net/ns#',
|
||||||
'_misskey_content': 'misskey:_misskey_content',
|
|
||||||
'_misskey_quote': 'misskey:_misskey_quote',
|
'_misskey_quote': 'misskey:_misskey_quote',
|
||||||
'_misskey_reaction': 'misskey:_misskey_reaction',
|
|
||||||
'_misskey_votes': 'misskey:_misskey_votes',
|
|
||||||
'_misskey_talk': 'misskey:_misskey_talk',
|
'_misskey_talk': 'misskey:_misskey_talk',
|
||||||
'isCat': 'misskey:isCat',
|
'isCat': 'misskey:isCat',
|
||||||
// vcard
|
// vcard
|
||||||
|
|
|
@ -15,7 +15,6 @@ export const renderLike = async (noteReaction: NoteReaction, note: Note) => {
|
||||||
object: note.uri ? note.uri : `${config.url}/notes/${noteReaction.noteId}`,
|
object: note.uri ? note.uri : `${config.url}/notes/${noteReaction.noteId}`,
|
||||||
... (reaction !== '\u2b50' ? {
|
... (reaction !== '\u2b50' ? {
|
||||||
content: reaction,
|
content: reaction,
|
||||||
_misskey_reaction: reaction,
|
|
||||||
} : {}),
|
} : {}),
|
||||||
} as any;
|
} as any;
|
||||||
|
|
||||||
|
|
|
@ -145,7 +145,6 @@ export default async function renderNote(note: Note, dive = true, isTalk = false
|
||||||
attributedTo,
|
attributedTo,
|
||||||
summary,
|
summary,
|
||||||
content,
|
content,
|
||||||
_misskey_content: text,
|
|
||||||
source: {
|
source: {
|
||||||
content: text,
|
content: text,
|
||||||
mediaType: 'text/x.misskeymarkdown',
|
mediaType: 'text/x.misskeymarkdown',
|
||||||
|
|
|
@ -11,7 +11,6 @@ export default async function renderQuestion(user: { id: User['id'] }, note: Not
|
||||||
content: note.text || '',
|
content: note.text || '',
|
||||||
[poll.multiple ? 'anyOf' : 'oneOf']: poll.choices.map((text, i) => ({
|
[poll.multiple ? 'anyOf' : 'oneOf']: poll.choices.map((text, i) => ({
|
||||||
name: text,
|
name: text,
|
||||||
_misskey_votes: poll.votes[i],
|
|
||||||
replies: {
|
replies: {
|
||||||
type: 'Collection',
|
type: 'Collection',
|
||||||
totalItems: poll.votes[i],
|
totalItems: poll.votes[i],
|
||||||
|
|
|
@ -4,7 +4,16 @@ import { getUserKeypair } from '@/misc/keypair-store.js';
|
||||||
import { User } from '@/models/entities/user.js';
|
import { User } from '@/models/entities/user.js';
|
||||||
import { getResponse } from '@/misc/fetch.js';
|
import { getResponse } from '@/misc/fetch.js';
|
||||||
import { createSignedPost, createSignedGet } from './ap-request.js';
|
import { createSignedPost, createSignedGet } from './ap-request.js';
|
||||||
|
import { apRequestChart, federationChart, instanceChart } from '@/services/chart/index.js';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Post an activity to an inbox. Automatically updates the statistics
|
||||||
|
* on succeeded or failed delivery attempts.
|
||||||
|
*
|
||||||
|
* @param user http-signature user
|
||||||
|
* @param url The URL of the inbox.
|
||||||
|
* @param object The Activity or other object to be posted to the inbox.
|
||||||
|
*/
|
||||||
export async function request(user: { id: User['id'] }, url: string, object: any): Promise<void> {
|
export async function request(user: { id: User['id'] }, url: string, object: any): Promise<void> {
|
||||||
const body = JSON.stringify(object);
|
const body = JSON.stringify(object);
|
||||||
|
|
||||||
|
@ -22,14 +31,28 @@ export async function request(user: { id: User['id'] }, url: string, object: any
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
await getResponse({
|
const { host } = new URL(url);
|
||||||
url,
|
|
||||||
method: req.request.method,
|
try {
|
||||||
headers: req.request.headers,
|
await getResponse({
|
||||||
body,
|
url,
|
||||||
// don't allow redirects on the inbox
|
method: req.request.method,
|
||||||
redirect: 'error',
|
headers: req.request.headers,
|
||||||
});
|
body,
|
||||||
|
// don't allow redirects on the inbox
|
||||||
|
redirect: 'error',
|
||||||
|
});
|
||||||
|
|
||||||
|
instanceChart.requestSent(host, true);
|
||||||
|
apRequestChart.deliverSucc();
|
||||||
|
federationChart.deliverd(host, true);
|
||||||
|
} catch (err) {
|
||||||
|
instanceChart.requestSent(host, false);
|
||||||
|
apRequestChart.deliverFail();
|
||||||
|
federationChart.deliverd(host, false);
|
||||||
|
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -55,7 +55,7 @@ export function getApId(value: string | Object): string {
|
||||||
export function getOneApId(value: ApObject): string {
|
export function getOneApId(value: ApObject): string {
|
||||||
if (Array.isArray(value)) {
|
if (Array.isArray(value)) {
|
||||||
// find the first valid ID
|
// find the first valid ID
|
||||||
for (const id of value) {
|
for (const x of value) {
|
||||||
try {
|
try {
|
||||||
return getApId(x);
|
return getApId(x);
|
||||||
} catch {
|
} catch {
|
||||||
|
@ -171,7 +171,6 @@ export const isQuestion = (object: IObject): object is IQuestion =>
|
||||||
interface IQuestionChoice {
|
interface IQuestionChoice {
|
||||||
name?: string;
|
name?: string;
|
||||||
replies?: ICollection;
|
replies?: ICollection;
|
||||||
_misskey_votes?: number;
|
|
||||||
}
|
}
|
||||||
export interface ITombstone extends IObject {
|
export interface ITombstone extends IObject {
|
||||||
type: 'Tombstone';
|
type: 'Tombstone';
|
||||||
|
@ -282,7 +281,7 @@ export interface IRemove extends IActivity {
|
||||||
|
|
||||||
export interface ILike extends IActivity {
|
export interface ILike extends IActivity {
|
||||||
type: 'Like' | 'EmojiReaction' | 'EmojiReact';
|
type: 'Like' | 'EmojiReaction' | 'EmojiReact';
|
||||||
_misskey_reaction?: string;
|
content?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IAnnounce extends IActivity {
|
export interface IAnnounce extends IActivity {
|
||||||
|
|
|
@ -1,42 +1,17 @@
|
||||||
import { Brackets, SelectQueryBuilder } from 'typeorm';
|
import { SelectQueryBuilder } from 'typeorm';
|
||||||
import { User } from '@/models/entities/user.js';
|
import { User } from '@/models/entities/user.js';
|
||||||
import { Followings } from '@/models/index.js';
|
import { Note } from '@/models/entities/note.js';
|
||||||
|
import { Notes } from '@/models/index.js';
|
||||||
|
|
||||||
export function generateVisibilityQuery(q: SelectQueryBuilder<any>, me?: { id: User['id'] } | null) {
|
export function visibilityQuery(q: SelectQueryBuilder<Note>, meId?: User['id'] | null = null): SelectQueryBuilder<Note> {
|
||||||
// This code must always be synchronized with the checks in Notes.isVisibleForMe.
|
const superQuery = Notes.createQueryBuilder()
|
||||||
if (me == null) {
|
.from(() => q, 'note');
|
||||||
q.andWhere(new Brackets(qb => { qb
|
|
||||||
.where("note.visibility = 'public'")
|
if (meId == null) {
|
||||||
.orWhere("note.visibility = 'home'");
|
superQuery.where('note_visible(note.id, null);');
|
||||||
}));
|
|
||||||
} else {
|
} else {
|
||||||
const followingQuery = Followings.createQueryBuilder('following')
|
superQuery.where('note_visible(note.id, :meId)', { meId });
|
||||||
.select('following.followeeId')
|
|
||||||
.where('following.followerId = :meId');
|
|
||||||
|
|
||||||
q.andWhere(new Brackets(qb => { qb
|
|
||||||
// 公開投稿である
|
|
||||||
.where(new Brackets(qb => { qb
|
|
||||||
.where("note.visibility = 'public'")
|
|
||||||
.orWhere("note.visibility = 'home'");
|
|
||||||
}))
|
|
||||||
// または 自分自身
|
|
||||||
.orWhere('note.userId = :meId')
|
|
||||||
// または 自分宛て
|
|
||||||
.orWhere(':meId = ANY(note.visibleUserIds)')
|
|
||||||
.orWhere(':meId = ANY(note.mentions)')
|
|
||||||
.orWhere(new Brackets(qb => { qb
|
|
||||||
// または フォロワー宛ての投稿であり、
|
|
||||||
.where("note.visibility = 'followers'")
|
|
||||||
.andWhere(new Brackets(qb => { qb
|
|
||||||
// 自分がフォロワーである
|
|
||||||
.where(`note.userId IN (${ followingQuery.getQuery() })`)
|
|
||||||
// または 自分の投稿へのリプライ
|
|
||||||
.orWhere('note.replyUserId = :meId');
|
|
||||||
}));
|
|
||||||
}));
|
|
||||||
}));
|
|
||||||
|
|
||||||
q.setParameters({ meId: me.id });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return q;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,8 @@ import { IdentifiableError } from '@/misc/identifiable-error.js';
|
||||||
import { User } from '@/models/entities/user.js';
|
import { User } from '@/models/entities/user.js';
|
||||||
import { Note } from '@/models/entities/note.js';
|
import { Note } from '@/models/entities/note.js';
|
||||||
import { Notes, Users } from '@/models/index.js';
|
import { Notes, Users } from '@/models/index.js';
|
||||||
import { generateVisibilityQuery } from './generate-visibility-query.js';
|
import { apiLogger } from '@/server/api/logger.js';
|
||||||
|
import { visibilityQuery } from './generate-visibility-query.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get note for API processing, taking into account visibility.
|
* Get note for API processing, taking into account visibility.
|
||||||
|
@ -13,11 +14,10 @@ export async function getNote(noteId: Note['id'], me: { id: User['id'] } | null)
|
||||||
id: noteId,
|
id: noteId,
|
||||||
});
|
});
|
||||||
|
|
||||||
generateVisibilityQuery(query, me);
|
const note = await visibilityQuery(query, me).getOne();
|
||||||
|
|
||||||
const note = await query.getOne();
|
|
||||||
|
|
||||||
if (note == null) {
|
if (note == null) {
|
||||||
|
apiLogger.error(`user ${me.id} tried to view note ${noteId} violating visibility restrictions`);
|
||||||
throw new IdentifiableError('9725d0ce-ba28-4dde-95a7-2cbb2c15de24', 'No such note.');
|
throw new IdentifiableError('9725d0ce-ba28-4dde-95a7-2cbb2c15de24', 'No such note.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,14 +2,10 @@ import { Schema } from '@/misc/schema.js';
|
||||||
import { errors } from './error.js';
|
import { errors } from './error.js';
|
||||||
|
|
||||||
import * as ep___admin_meta from './endpoints/admin/meta.js';
|
import * as ep___admin_meta from './endpoints/admin/meta.js';
|
||||||
import * as ep___admin_abuseUserReports from './endpoints/admin/abuse-user-reports.js';
|
|
||||||
import * as ep___admin_accounts_create from './endpoints/admin/accounts/create.js';
|
|
||||||
import * as ep___admin_accounts_delete from './endpoints/admin/accounts/delete.js';
|
|
||||||
import * as ep___admin_announcements_create from './endpoints/admin/announcements/create.js';
|
import * as ep___admin_announcements_create from './endpoints/admin/announcements/create.js';
|
||||||
import * as ep___admin_announcements_delete from './endpoints/admin/announcements/delete.js';
|
import * as ep___admin_announcements_delete from './endpoints/admin/announcements/delete.js';
|
||||||
import * as ep___admin_announcements_list from './endpoints/admin/announcements/list.js';
|
import * as ep___admin_announcements_list from './endpoints/admin/announcements/list.js';
|
||||||
import * as ep___admin_announcements_update from './endpoints/admin/announcements/update.js';
|
import * as ep___admin_announcements_update from './endpoints/admin/announcements/update.js';
|
||||||
import * as ep___admin_deleteAllFilesOfAUser from './endpoints/admin/delete-all-files-of-a-user.js';
|
|
||||||
import * as ep___admin_drive_cleanRemoteFiles from './endpoints/admin/drive/clean-remote-files.js';
|
import * as ep___admin_drive_cleanRemoteFiles from './endpoints/admin/drive/clean-remote-files.js';
|
||||||
import * as ep___admin_drive_files from './endpoints/admin/drive/files.js';
|
import * as ep___admin_drive_files from './endpoints/admin/drive/files.js';
|
||||||
import * as ep___admin_drive_showFile from './endpoints/admin/drive/show-file.js';
|
import * as ep___admin_drive_showFile from './endpoints/admin/drive/show-file.js';
|
||||||
|
@ -41,17 +37,21 @@ import * as ep___admin_queue_stats from './endpoints/admin/queue/stats.js';
|
||||||
import * as ep___admin_relays_add from './endpoints/admin/relays/add.js';
|
import * as ep___admin_relays_add from './endpoints/admin/relays/add.js';
|
||||||
import * as ep___admin_relays_list from './endpoints/admin/relays/list.js';
|
import * as ep___admin_relays_list from './endpoints/admin/relays/list.js';
|
||||||
import * as ep___admin_relays_remove from './endpoints/admin/relays/remove.js';
|
import * as ep___admin_relays_remove from './endpoints/admin/relays/remove.js';
|
||||||
import * as ep___admin_resetPassword from './endpoints/admin/reset-password.js';
|
import * as ep___admin_reports_list from './endpoints/admin/reports/list.js';
|
||||||
import * as ep___admin_resolveAbuseUserReport from './endpoints/admin/resolve-abuse-user-report.js';
|
import * as ep___admin_reports_resolve from './endpoints/admin/reports/resolve.js';
|
||||||
import * as ep___admin_sendEmail from './endpoints/admin/send-email.js';
|
import * as ep___admin_sendEmail from './endpoints/admin/send-email.js';
|
||||||
import * as ep___admin_serverInfo from './endpoints/admin/server-info.js';
|
import * as ep___admin_serverInfo from './endpoints/admin/server-info.js';
|
||||||
import * as ep___admin_showModerationLogs from './endpoints/admin/show-moderation-logs.js';
|
import * as ep___admin_showModerationLogs from './endpoints/admin/show-moderation-logs.js';
|
||||||
import * as ep___admin_showUser from './endpoints/admin/show-user.js';
|
import * as ep___admin_users from './endpoints/admin/users.js';
|
||||||
import * as ep___admin_showUsers from './endpoints/admin/show-users.js';
|
import * as ep___admin_users_create from './endpoints/admin/users/create.js';
|
||||||
import * as ep___admin_silenceUser from './endpoints/admin/silence-user.js';
|
import * as ep___admin_users_delete from './endpoints/admin/users/delete.js';
|
||||||
import * as ep___admin_suspendUser from './endpoints/admin/suspend-user.js';
|
import * as ep___admin_users_deleteAllFiles from './endpoints/admin/users/delete-all-files.js';
|
||||||
import * as ep___admin_unsilenceUser from './endpoints/admin/unsilence-user.js';
|
import * as ep___admin_users_resetPassword from './endpoints/admin/users/reset-password.js';
|
||||||
import * as ep___admin_unsuspendUser from './endpoints/admin/unsuspend-user.js';
|
import * as ep___admin_users_show from './endpoints/admin/users/show.js';
|
||||||
|
import * as ep___admin_users_silence from './endpoints/admin/users/silence.js';
|
||||||
|
import * as ep___admin_users_suspend from './endpoints/admin/users/suspend.js';
|
||||||
|
import * as ep___admin_users_unsilence from './endpoints/admin/users/unsilence.js';
|
||||||
|
import * as ep___admin_users_unsuspend from './endpoints/admin/users/unsuspend.js';
|
||||||
import * as ep___admin_updateMeta from './endpoints/admin/update-meta.js';
|
import * as ep___admin_updateMeta from './endpoints/admin/update-meta.js';
|
||||||
import * as ep___admin_vacuum from './endpoints/admin/vacuum.js';
|
import * as ep___admin_vacuum from './endpoints/admin/vacuum.js';
|
||||||
import * as ep___announcements from './endpoints/announcements.js';
|
import * as ep___announcements from './endpoints/announcements.js';
|
||||||
|
@ -104,6 +104,7 @@ import * as ep___clips_show from './endpoints/clips/show.js';
|
||||||
import * as ep___clips_update from './endpoints/clips/update.js';
|
import * as ep___clips_update from './endpoints/clips/update.js';
|
||||||
import * as ep___drive from './endpoints/drive.js';
|
import * as ep___drive from './endpoints/drive.js';
|
||||||
import * as ep___drive_files from './endpoints/drive/files.js';
|
import * as ep___drive_files from './endpoints/drive/files.js';
|
||||||
|
import * as ep___drive_show from './endpoints/drive/show.js';
|
||||||
import * as ep___drive_files_attachedNotes from './endpoints/drive/files/attached-notes.js';
|
import * as ep___drive_files_attachedNotes from './endpoints/drive/files/attached-notes.js';
|
||||||
import * as ep___drive_files_checkExistence from './endpoints/drive/files/check-existence.js';
|
import * as ep___drive_files_checkExistence from './endpoints/drive/files/check-existence.js';
|
||||||
import * as ep___drive_files_create from './endpoints/drive/files/create.js';
|
import * as ep___drive_files_create from './endpoints/drive/files/create.js';
|
||||||
|
@ -298,14 +299,10 @@ import * as ep___fetchRss from './endpoints/fetch-rss.js';
|
||||||
|
|
||||||
const eps = [
|
const eps = [
|
||||||
['admin/meta', ep___admin_meta],
|
['admin/meta', ep___admin_meta],
|
||||||
['admin/abuse-user-reports', ep___admin_abuseUserReports],
|
|
||||||
['admin/accounts/create', ep___admin_accounts_create],
|
|
||||||
['admin/accounts/delete', ep___admin_accounts_delete],
|
|
||||||
['admin/announcements/create', ep___admin_announcements_create],
|
['admin/announcements/create', ep___admin_announcements_create],
|
||||||
['admin/announcements/delete', ep___admin_announcements_delete],
|
['admin/announcements/delete', ep___admin_announcements_delete],
|
||||||
['admin/announcements/list', ep___admin_announcements_list],
|
['admin/announcements/list', ep___admin_announcements_list],
|
||||||
['admin/announcements/update', ep___admin_announcements_update],
|
['admin/announcements/update', ep___admin_announcements_update],
|
||||||
['admin/delete-all-files-of-a-user', ep___admin_deleteAllFilesOfAUser],
|
|
||||||
['admin/drive/clean-remote-files', ep___admin_drive_cleanRemoteFiles],
|
['admin/drive/clean-remote-files', ep___admin_drive_cleanRemoteFiles],
|
||||||
['admin/drive/files', ep___admin_drive_files],
|
['admin/drive/files', ep___admin_drive_files],
|
||||||
['admin/drive/show-file', ep___admin_drive_showFile],
|
['admin/drive/show-file', ep___admin_drive_showFile],
|
||||||
|
@ -337,17 +334,21 @@ const eps = [
|
||||||
['admin/relays/add', ep___admin_relays_add],
|
['admin/relays/add', ep___admin_relays_add],
|
||||||
['admin/relays/list', ep___admin_relays_list],
|
['admin/relays/list', ep___admin_relays_list],
|
||||||
['admin/relays/remove', ep___admin_relays_remove],
|
['admin/relays/remove', ep___admin_relays_remove],
|
||||||
['admin/reset-password', ep___admin_resetPassword],
|
['admin/reports/list', ep___admin_reports_list],
|
||||||
['admin/resolve-abuse-user-report', ep___admin_resolveAbuseUserReport],
|
['admin/reports/resolve', ep___admin_reports_resolve],
|
||||||
['admin/send-email', ep___admin_sendEmail],
|
['admin/send-email', ep___admin_sendEmail],
|
||||||
['admin/server-info', ep___admin_serverInfo],
|
['admin/server-info', ep___admin_serverInfo],
|
||||||
['admin/show-moderation-logs', ep___admin_showModerationLogs],
|
['admin/show-moderation-logs', ep___admin_showModerationLogs],
|
||||||
['admin/show-user', ep___admin_showUser],
|
['admin/users', ep___admin_users],
|
||||||
['admin/show-users', ep___admin_showUsers],
|
['admin/users/create', ep___admin_users_create],
|
||||||
['admin/silence-user', ep___admin_silenceUser],
|
['admin/users/delete', ep___admin_users_delete],
|
||||||
['admin/suspend-user', ep___admin_suspendUser],
|
['admin/users/delete-all-files', ep___admin_users_deleteAllFiles],
|
||||||
['admin/unsilence-user', ep___admin_unsilenceUser],
|
['admin/users/reset-password', ep___admin_users_resetPassword],
|
||||||
['admin/unsuspend-user', ep___admin_unsuspendUser],
|
['admin/users/show', ep___admin_users_show],
|
||||||
|
['admin/users/silence', ep___admin_users_silence],
|
||||||
|
['admin/users/suspend', ep___admin_users_suspend],
|
||||||
|
['admin/users/unsilence', ep___admin_users_unsilence],
|
||||||
|
['admin/users/unsuspend', ep___admin_users_unsuspend],
|
||||||
['admin/update-meta', ep___admin_updateMeta],
|
['admin/update-meta', ep___admin_updateMeta],
|
||||||
['admin/vacuum', ep___admin_vacuum],
|
['admin/vacuum', ep___admin_vacuum],
|
||||||
['announcements', ep___announcements],
|
['announcements', ep___announcements],
|
||||||
|
@ -400,6 +401,7 @@ const eps = [
|
||||||
['clips/update', ep___clips_update],
|
['clips/update', ep___clips_update],
|
||||||
['drive', ep___drive],
|
['drive', ep___drive],
|
||||||
['drive/files', ep___drive_files],
|
['drive/files', ep___drive_files],
|
||||||
|
['drive/show', ep___drive_show],
|
||||||
['drive/files/attached-notes', ep___drive_files_attachedNotes],
|
['drive/files/attached-notes', ep___drive_files_attachedNotes],
|
||||||
['drive/files/check-existence', ep___drive_files_checkExistence],
|
['drive/files/check-existence', ep___drive_files_checkExistence],
|
||||||
['drive/files/create', ep___drive_files_create],
|
['drive/files/create', ep___drive_files_create],
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { Announcements } from '@/models/index.js';
|
import { Announcements } from '@/models/index.js';
|
||||||
import { genId } from '@/misc/gen-id.js';
|
import { genId } from '@/misc/gen-id.js';
|
||||||
import define from '../../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { Announcements } from '@/models/index.js';
|
import { Announcements } from '@/models/index.js';
|
||||||
import define from '../../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
import { ApiError } from '../../../error.js';
|
import { ApiError } from '@/server/api/error.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { Announcements, AnnouncementReads } from '@/models/index.js';
|
import { Announcements, AnnouncementReads } from '@/models/index.js';
|
||||||
import { Announcement } from '@/models/entities/announcement.js';
|
import { Announcement } from '@/models/entities/announcement.js';
|
||||||
import define from '../../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
import { makePaginationQuery } from '../../../common/make-pagination-query.js';
|
import { makePaginationQuery } from '@/server/api/common/make-pagination-query.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { Announcements } from '@/models/index.js';
|
import { Announcements } from '@/models/index.js';
|
||||||
import define from '../../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
import { ApiError } from '../../../error.js';
|
import { ApiError } from '@/server/api/error.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { createCleanRemoteFilesJob } from '@/queue/index.js';
|
import { createCleanRemoteFilesJob } from '@/queue/index.js';
|
||||||
import define from '../../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { DriveFiles } from '@/models/index.js';
|
import { DriveFiles } from '@/models/index.js';
|
||||||
import define from '../../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
import { makePaginationQuery } from '../../../common/make-pagination-query.js';
|
import { makePaginationQuery } from '@/server/api/common/make-pagination-query.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { DriveFiles } from '@/models/index.js';
|
import { DriveFiles } from '@/models/index.js';
|
||||||
import define from '../../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
import { ApiError } from '../../../error.js';
|
import { ApiError } from '@/server/api/error.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
@ -79,11 +79,6 @@ export const meta = {
|
||||||
optional: false, nullable: false,
|
optional: false, nullable: false,
|
||||||
example: 720,
|
example: 720,
|
||||||
},
|
},
|
||||||
avgColor: {
|
|
||||||
type: 'string',
|
|
||||||
optional: true, nullable: false,
|
|
||||||
example: 'rgb(40,65,87)',
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
storedInternal: {
|
storedInternal: {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { In } from 'typeorm';
|
import { In } from 'typeorm';
|
||||||
import { Emojis } from '@/models/index.js';
|
import { Emojis } from '@/models/index.js';
|
||||||
import { db } from '@/db/postgre.js';
|
import { db } from '@/db/postgre.js';
|
||||||
import define from '../../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
|
@ -3,8 +3,8 @@ import { db } from '@/db/postgre.js';
|
||||||
import { Emojis, DriveFiles } from '@/models/index.js';
|
import { Emojis, DriveFiles } from '@/models/index.js';
|
||||||
import { genId } from '@/misc/gen-id.js';
|
import { genId } from '@/misc/gen-id.js';
|
||||||
import { insertModerationLog } from '@/services/insert-moderation-log.js';
|
import { insertModerationLog } from '@/services/insert-moderation-log.js';
|
||||||
import define from '../../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
import { ApiError } from '../../../error.js';
|
import { ApiError } from '@/server/api/error.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
|
@ -4,8 +4,8 @@ import { DriveFile } from '@/models/entities/drive-file.js';
|
||||||
import { uploadFromUrl } from '@/services/drive/upload-from-url.js';
|
import { uploadFromUrl } from '@/services/drive/upload-from-url.js';
|
||||||
import { publishBroadcastStream } from '@/services/stream.js';
|
import { publishBroadcastStream } from '@/services/stream.js';
|
||||||
import { db } from '@/db/postgre.js';
|
import { db } from '@/db/postgre.js';
|
||||||
import define from '../../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
import { ApiError } from '../../../error.js';
|
import { ApiError } from '@/server/api/error.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
|
@ -2,7 +2,7 @@ import { In } from 'typeorm';
|
||||||
import { Emojis } from '@/models/index.js';
|
import { Emojis } from '@/models/index.js';
|
||||||
import { insertModerationLog } from '@/services/insert-moderation-log.js';
|
import { insertModerationLog } from '@/services/insert-moderation-log.js';
|
||||||
import { db } from '@/db/postgre.js';
|
import { db } from '@/db/postgre.js';
|
||||||
import define from '../../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
import { Emojis } from '@/models/index.js';
|
import { Emojis } from '@/models/index.js';
|
||||||
import { insertModerationLog } from '@/services/insert-moderation-log.js';
|
import { insertModerationLog } from '@/services/insert-moderation-log.js';
|
||||||
import { db } from '@/db/postgre.js';
|
import { db } from '@/db/postgre.js';
|
||||||
import define from '../../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
import { ApiError } from '../../../error.js';
|
import { ApiError } from '@/server/api/error.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { createImportCustomEmojisJob } from '@/queue/index.js';
|
import { createImportCustomEmojisJob } from '@/queue/index.js';
|
||||||
import define from '../../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
secure: true,
|
secure: true,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { Emojis } from '@/models/index.js';
|
import { Emojis } from '@/models/index.js';
|
||||||
import { toPuny } from '@/misc/convert-host.js';
|
import { toPuny } from '@/misc/convert-host.js';
|
||||||
import define from '../../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
import { makePaginationQuery } from '../../../common/make-pagination-query.js';
|
import { makePaginationQuery } from '@/server/api/common/make-pagination-query.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { Emoji } from '@/models/entities/emoji.js';
|
import { Emoji } from '@/models/entities/emoji.js';
|
||||||
import { Emojis } from '@/models/index.js';
|
import { Emojis } from '@/models/index.js';
|
||||||
import define from '../../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
import { makePaginationQuery } from '../../../common/make-pagination-query.js';
|
import { makePaginationQuery } from '@/server/api/common/make-pagination-query.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { In } from 'typeorm';
|
import { In } from 'typeorm';
|
||||||
import { db } from '@/db/postgre.js';
|
import { db } from '@/db/postgre.js';
|
||||||
import { Emojis } from '@/models/index.js';
|
import { Emojis } from '@/models/index.js';
|
||||||
import define from '../../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { In } from 'typeorm';
|
import { In } from 'typeorm';
|
||||||
import { Emojis } from '@/models/index.js';
|
import { Emojis } from '@/models/index.js';
|
||||||
import { db } from '@/db/postgre.js';
|
import { db } from '@/db/postgre.js';
|
||||||
import define from '../../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { In } from 'typeorm';
|
import { In } from 'typeorm';
|
||||||
import { db } from '@/db/postgre.js';
|
import { db } from '@/db/postgre.js';
|
||||||
import { Emojis } from '@/models/index.js';
|
import { Emojis } from '@/models/index.js';
|
||||||
import define from '../../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { db } from '@/db/postgre.js';
|
import { db } from '@/db/postgre.js';
|
||||||
import { Emojis } from '@/models/index.js';
|
import { Emojis } from '@/models/index.js';
|
||||||
import define from '../../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
import { ApiError } from '../../../error.js';
|
import { ApiError } from '@/server/api/error.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { deleteFile } from '@/services/drive/delete-file.js';
|
import { deleteFile } from '@/services/drive/delete-file.js';
|
||||||
import { DriveFiles } from '@/models/index.js';
|
import { DriveFiles } from '@/models/index.js';
|
||||||
import define from '../../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
|
@ -2,7 +2,7 @@ import { Instances } from '@/models/index.js';
|
||||||
import { toPuny } from '@/misc/convert-host.js';
|
import { toPuny } from '@/misc/convert-host.js';
|
||||||
import { ApiError } from '@/server/api/error.js';
|
import { ApiError } from '@/server/api/error.js';
|
||||||
import { fetchInstanceMetadata } from '@/services/fetch-instance-metadata.js';
|
import { fetchInstanceMetadata } from '@/services/fetch-instance-metadata.js';
|
||||||
import define from '../../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import deleteFollowing from '@/services/following/delete.js';
|
import deleteFollowing from '@/services/following/delete.js';
|
||||||
import { Followings, Users } from '@/models/index.js';
|
import { Followings, Users } from '@/models/index.js';
|
||||||
import define from '../../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { Instances } from '@/models/index.js';
|
import { Instances } from '@/models/index.js';
|
||||||
import { toPuny } from '@/misc/convert-host.js';
|
import { toPuny } from '@/misc/convert-host.js';
|
||||||
import { ApiError } from '@/server/api/error.js';
|
import { ApiError } from '@/server/api/error.js';
|
||||||
import define from '../../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { db } from '@/db/postgre.js';
|
import { db } from '@/db/postgre.js';
|
||||||
import define from '../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { db } from '@/db/postgre.js';
|
import { db } from '@/db/postgre.js';
|
||||||
import define from '../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
requireCredential: true,
|
requireCredential: true,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { RegistrationTickets } from '@/models/index.js';
|
import { RegistrationTickets } from '@/models/index.js';
|
||||||
import { genId } from '@/misc/gen-id.js';
|
import { genId } from '@/misc/gen-id.js';
|
||||||
import { secureRndstrCustom } from '@/misc/secure-rndstr.js';
|
import { secureRndstrCustom } from '@/misc/secure-rndstr.js';
|
||||||
import define from '../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
import config from '@/config/index.js';
|
import config from '@/config/index.js';
|
||||||
import { fetchMeta } from '@/misc/fetch-meta.js';
|
import { fetchMeta } from '@/misc/fetch-meta.js';
|
||||||
import { TranslationService } from '@/models/entities/meta.js';
|
import { TranslationService } from '@/models/entities/meta.js';
|
||||||
import { translatorAvailable } from '../../common/translator.js';
|
import { translatorAvailable } from '@/server/api/common/translator.js';
|
||||||
import define from '../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['meta'],
|
tags: ['meta'],
|
||||||
|
@ -52,7 +52,7 @@ export const meta = {
|
||||||
},
|
},
|
||||||
bannerUrl: {
|
bannerUrl: {
|
||||||
type: 'string',
|
type: 'string',
|
||||||
optional: false, nullable: false,
|
optional: false, nullable: true,
|
||||||
},
|
},
|
||||||
iconUrl: {
|
iconUrl: {
|
||||||
type: 'string',
|
type: 'string',
|
||||||
|
@ -288,8 +288,6 @@ export default define(meta, paramDef, async () => {
|
||||||
defaultLightTheme: instance.defaultLightTheme,
|
defaultLightTheme: instance.defaultLightTheme,
|
||||||
defaultDarkTheme: instance.defaultDarkTheme,
|
defaultDarkTheme: instance.defaultDarkTheme,
|
||||||
enableEmail: instance.enableEmail,
|
enableEmail: instance.enableEmail,
|
||||||
pinnedPages: instance.pinnedPages,
|
|
||||||
pinnedClipId: instance.pinnedClipId,
|
|
||||||
cacheRemoteFiles: instance.cacheRemoteFiles,
|
cacheRemoteFiles: instance.cacheRemoteFiles,
|
||||||
|
|
||||||
useStarForReactionFallback: instance.useStarForReactionFallback,
|
useStarForReactionFallback: instance.useStarForReactionFallback,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { Users } from '@/models/index.js';
|
import { Users } from '@/models/index.js';
|
||||||
import { ApiError } from '@/server/api/error.js';
|
import { ApiError } from '@/server/api/error.js';
|
||||||
import { publishInternalEvent } from '@/services/stream.js';
|
import { publishInternalEvent } from '@/services/stream.js';
|
||||||
import define from '../../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { Users } from '@/models/index.js';
|
import { Users } from '@/models/index.js';
|
||||||
import { ApiError } from '@/server/api/error.js';
|
import { ApiError } from '@/server/api/error.js';
|
||||||
import { publishInternalEvent } from '@/services/stream.js';
|
import { publishInternalEvent } from '@/services/stream.js';
|
||||||
import define from '../../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { destroy } from '@/queue/index.js';
|
import { destroy } from '@/queue/index.js';
|
||||||
import { insertModerationLog } from '@/services/insert-moderation-log.js';
|
import { insertModerationLog } from '@/services/insert-moderation-log.js';
|
||||||
import define from '../../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { URL } from 'node:url';
|
import { URL } from 'node:url';
|
||||||
import { deliverQueue } from '@/queue/queues.js';
|
import { deliverQueue } from '@/queue/queues.js';
|
||||||
import define from '../../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { URL } from 'node:url';
|
import { URL } from 'node:url';
|
||||||
import { inboxQueue } from '@/queue/queues.js';
|
import { inboxQueue } from '@/queue/queues.js';
|
||||||
import define from '../../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { deliverQueue, inboxQueue, dbQueue, objectStorageQueue } from '@/queue/queues.js';
|
import { deliverQueue, inboxQueue, dbQueue, objectStorageQueue } from '@/queue/queues.js';
|
||||||
import define from '../../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { URL } from 'node:url';
|
import { URL } from 'node:url';
|
||||||
import { addRelay } from '@/services/relay.js';
|
import { addRelay } from '@/services/relay.js';
|
||||||
import define from '../../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
import { ApiError } from '../../../error.js';
|
import { ApiError } from '@/server/api/error.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { listRelay } from '@/services/relay.js';
|
import { listRelay } from '@/services/relay.js';
|
||||||
import define from '../../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { removeRelay } from '@/services/relay.js';
|
import { removeRelay } from '@/services/relay.js';
|
||||||
import define from '../../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { AbuseUserReports } from '@/models/index.js';
|
import { AbuseUserReports } from '@/models/index.js';
|
||||||
import { makePaginationQuery } from '../../common/make-pagination-query.js';
|
import { makePaginationQuery } from '@/server/api/common/make-pagination-query.js';
|
||||||
import define from '../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
|
@ -3,7 +3,7 @@ import { getInstanceActor } from '@/services/instance-actor.js';
|
||||||
import { deliver } from '@/queue/index.js';
|
import { deliver } from '@/queue/index.js';
|
||||||
import { renderActivity } from '@/remote/activitypub/renderer/index.js';
|
import { renderActivity } from '@/remote/activitypub/renderer/index.js';
|
||||||
import { renderFlag } from '@/remote/activitypub/renderer/flag.js';
|
import { renderFlag } from '@/remote/activitypub/renderer/flag.js';
|
||||||
import define from '../../define.js';
|
import define from '@/server/api/define.js';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['admin'],
|
tags: ['admin'],
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue