mirror of
https://github.com/fluxerapp/fluxer
synced 2026-10-09 04:02:41 +09:00
Compare commits
13
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cdcaba34ce | ||
|
|
09b9a57e38 | ||
|
|
79d7c85832 | ||
|
|
eb0e8366bc | ||
|
|
cf9752db4f | ||
|
|
d6fb3b2c50 | ||
|
|
b04fdc68df | ||
|
|
706c41aad9 | ||
|
|
db9ec0605e | ||
|
|
a95172bf88 | ||
|
|
597116a0b4 | ||
|
|
811341bc2f | ||
|
|
98fa41dcf0 |
@@ -309,6 +309,7 @@ FLUXER_EMAIL_ENABLED=false
|
||||
FLUXER_EMAIL_PROVIDER=none
|
||||
FLUXER_EMAIL_FROM_EMAIL=[email protected]
|
||||
FLUXER_EMAIL_FROM_NAME=Fluxer
|
||||
#[email protected]
|
||||
FLUXER_EMAIL_APP_BASE_URL=
|
||||
FLUXER_EMAIL_SMTP_HOST=
|
||||
FLUXER_EMAIL_SMTP_PORT=587
|
||||
@@ -411,7 +412,7 @@ FLUXER_DISCOVERY_ENABLED=true
|
||||
#FLUXER_POSTGRES_MEMORY_RESERVATION=3gb
|
||||
#FLUXER_VALKEY_MEMORY_LIMIT=256mb
|
||||
#FLUXER_NATS_MEMORY_LIMIT=256mb
|
||||
#FLUXER_MEILISEARCH_MEMORY_LIMIT=768mb
|
||||
#FLUXER_MEILISEARCH_MEMORY_LIMIT=1536mb
|
||||
#FLUXER_SEAWEEDFS_MEMORY_LIMIT=2gb
|
||||
#FLUXER_SEAWEEDFS_INIT_MEMORY_LIMIT=128mb
|
||||
#FLUXER_LIVEKIT_MEMORY_LIMIT=512mb
|
||||
@@ -437,8 +438,11 @@ FLUXER_DISCOVERY_ENABLED=true
|
||||
#FLUXER_UNFURL_SHARD_MEMORY_LIMIT=256mb
|
||||
#FLUXER_ADMIN_MEMORY_LIMIT=256mb
|
||||
|
||||
# Meilisearch indexing memory. Keep it well under the container limit above.
|
||||
#FLUXER_MEILISEARCH_MAX_INDEXING_MEMORY=384mb
|
||||
# Meilisearch indexing memory and threads. Each indexing thread needs its own
|
||||
# buffers on top of the indexing memory, so raise the threads only together with
|
||||
# the container limit above.
|
||||
#FLUXER_MEILISEARCH_MAX_INDEXING_MEMORY=256mb
|
||||
#FLUXER_MEILISEARCH_MAX_INDEXING_THREADS=2
|
||||
#FLUXER_MEILISEARCH_ENV=production
|
||||
#FLUXER_MEILISEARCH_NO_ANALYTICS=true
|
||||
|
||||
|
||||
@@ -113,6 +113,7 @@ x-fluxer-env: &fluxer-env
|
||||
FLUXER_EMAIL_PROVIDER: ${FLUXER_EMAIL_PROVIDER:-}
|
||||
FLUXER_EMAIL_FROM_EMAIL: ${FLUXER_EMAIL_FROM_EMAIL:-noreply@localhost}
|
||||
FLUXER_EMAIL_FROM_NAME: ${FLUXER_EMAIL_FROM_NAME:-}
|
||||
FLUXER_EMAIL_REPLY_TO_EMAIL: ${FLUXER_EMAIL_REPLY_TO_EMAIL:-}
|
||||
FLUXER_EMAIL_APP_BASE_URL: ${FLUXER_EMAIL_APP_BASE_URL:-}
|
||||
FLUXER_EMAIL_WEBHOOK_SECRET: ${FLUXER_EMAIL_WEBHOOK_SECRET:-}
|
||||
FLUXER_EMAIL_SMTP_HOST: ${FLUXER_EMAIL_SMTP_HOST:-}
|
||||
@@ -329,12 +330,13 @@ services:
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: ${FLUXER_MEILISEARCH_MEMORY_LIMIT:-768mb}
|
||||
memory: ${FLUXER_MEILISEARCH_MEMORY_LIMIT:-1536mb}
|
||||
environment:
|
||||
MEILI_ENV: ${FLUXER_MEILISEARCH_ENV:-production}
|
||||
MEILI_NO_ANALYTICS: "${FLUXER_MEILISEARCH_NO_ANALYTICS:-true}"
|
||||
MEILI_UPGRADE_DB: "true"
|
||||
MEILI_MAX_INDEXING_MEMORY: ${FLUXER_MEILISEARCH_MAX_INDEXING_MEMORY:-384mb}
|
||||
MEILI_MAX_INDEXING_MEMORY: ${FLUXER_MEILISEARCH_MAX_INDEXING_MEMORY:-256mb}
|
||||
MEILI_MAX_INDEXING_THREADS: ${FLUXER_MEILISEARCH_MAX_INDEXING_THREADS:-2}
|
||||
MEILI_MASTER_KEY: ${MEILI_MASTER_KEY:?set MEILI_MASTER_KEY in .env}
|
||||
volumes:
|
||||
- meilisearch-data:/meili_data
|
||||
|
||||
@@ -4,6 +4,7 @@ export interface EmailConfig {
|
||||
enabled: boolean;
|
||||
fromEmail: string;
|
||||
fromName: string;
|
||||
replyTo?: string | null;
|
||||
appBaseUrl: string;
|
||||
marketingBaseUrl: string;
|
||||
}
|
||||
@@ -14,6 +15,7 @@ export interface EmailMessage {
|
||||
email: string;
|
||||
name: string;
|
||||
};
|
||||
replyTo?: string;
|
||||
subject: string;
|
||||
text: string;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {EmailI18nService} from '@pkgs/email/src/EmailI18nService';
|
||||
import type {EmailConfig, EmailMessage, IEmailProvider} from '@pkgs/email/src/EmailProviderTypes';
|
||||
import {EmailService} from '@pkgs/email/src/EmailService';
|
||||
import {describe, expect, it} from 'vitest';
|
||||
|
||||
const CONFIG: EmailConfig = {
|
||||
enabled: true,
|
||||
fromEmail: '[email protected]',
|
||||
fromName: 'Fluxer',
|
||||
appBaseUrl: 'https://example.com',
|
||||
marketingBaseUrl: 'https://example.com',
|
||||
};
|
||||
|
||||
async function sendWith(config: EmailConfig): Promise<EmailMessage> {
|
||||
const sent: Array<EmailMessage> = [];
|
||||
const provider: IEmailProvider = {
|
||||
sendEmail: async (message) => {
|
||||
sent.push(message);
|
||||
return true;
|
||||
},
|
||||
};
|
||||
const service = new EmailService(config, new EmailI18nService(), provider);
|
||||
await expect(service.sendRegistrationApprovedEmail('[email protected]', 'testuser', 'en-US')).resolves.toBe(true);
|
||||
expect(sent).toHaveLength(1);
|
||||
return sent[0];
|
||||
}
|
||||
|
||||
describe('EmailService reply-to', () => {
|
||||
it('sets the configured reply-to address on every message', async () => {
|
||||
const message = await sendWith({...CONFIG, replyTo: '[email protected]'});
|
||||
expect(message.replyTo).toBe('[email protected]');
|
||||
expect(message.from).toEqual({email: '[email protected]', name: 'Fluxer'});
|
||||
});
|
||||
|
||||
it.each([undefined, null, ''])('omits the reply-to address when it is %j', async (replyTo) => {
|
||||
const message = await sendWith({...CONFIG, replyTo});
|
||||
expect(message).not.toHaveProperty('replyTo');
|
||||
});
|
||||
});
|
||||
@@ -375,6 +375,7 @@ export class EmailService implements IEmailService {
|
||||
return this.provider.sendEmail({
|
||||
to: email,
|
||||
from: {email: this.config.fromEmail, name: this.config.fromName},
|
||||
...(this.config.replyTo ? {replyTo: this.config.replyTo} : {}),
|
||||
subject,
|
||||
text: body,
|
||||
});
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {SmtpEmailProvider} from '@pkgs/email/src/SmtpEmailProvider';
|
||||
import {beforeEach, describe, expect, it, vi} from 'vitest';
|
||||
|
||||
const {sendMail} = vi.hoisted(() => ({sendMail: vi.fn()}));
|
||||
|
||||
vi.mock('nodemailer', () => ({
|
||||
default: {createTransport: () => ({sendMail, verify: vi.fn()})},
|
||||
}));
|
||||
|
||||
const MESSAGE = {
|
||||
to: '[email protected]',
|
||||
from: {email: '[email protected]', name: 'Fluxer'},
|
||||
subject: 'Subject',
|
||||
text: 'Body',
|
||||
};
|
||||
|
||||
function createProvider(): SmtpEmailProvider {
|
||||
return new SmtpEmailProvider({host: 'smtp.example.com', port: 587, username: 'user', password: 'pass'});
|
||||
}
|
||||
|
||||
describe('SmtpEmailProvider', () => {
|
||||
beforeEach(() => {
|
||||
sendMail.mockReset();
|
||||
sendMail.mockResolvedValue({});
|
||||
});
|
||||
|
||||
it('passes the reply-to address to nodemailer', async () => {
|
||||
await expect(createProvider().sendEmail({...MESSAGE, replyTo: '[email protected]'})).resolves.toBe(true);
|
||||
expect(sendMail).toHaveBeenCalledWith({
|
||||
to: '[email protected]',
|
||||
from: 'Fluxer <[email protected]>',
|
||||
replyTo: '[email protected]',
|
||||
subject: 'Subject',
|
||||
text: 'Body',
|
||||
});
|
||||
});
|
||||
|
||||
it('omits the reply-to address when the message has none', async () => {
|
||||
await expect(createProvider().sendEmail(MESSAGE)).resolves.toBe(true);
|
||||
expect(sendMail.mock.calls[0][0]).not.toHaveProperty('replyTo');
|
||||
});
|
||||
});
|
||||
@@ -45,6 +45,7 @@ export class SmtpEmailProvider implements IEmailProvider {
|
||||
await this.transporter.sendMail({
|
||||
to: message.to,
|
||||
from: `${message.from.name} <${message.from.email}>`,
|
||||
...(message.replyTo ? {replyTo: message.replyTo} : {}),
|
||||
subject: message.subject,
|
||||
text: message.text,
|
||||
});
|
||||
|
||||
@@ -248,6 +248,7 @@ export function buildAPIConfigFromMaster(master: MasterConfig): APIConfig {
|
||||
webhookSecret: master.integrations.email.webhook_secret ?? undefined,
|
||||
fromEmail: master.integrations.email.from_email,
|
||||
fromName: master.integrations.email.from_name,
|
||||
replyToEmail: master.integrations.email.reply_to_email,
|
||||
appBaseUrl: resolveEmailAppBaseUrl(master),
|
||||
smtp: master.integrations.email.smtp
|
||||
? {
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {createAuthHarness, createTestAccount, createTotpSecret, totpCodeNow} from '@app/api/auth/tests/AuthTestUtils';
|
||||
import type {ApiTestHarness} from '@app/api/test/ApiTestHarness';
|
||||
import {HTTP_STATUS} from '@app/api/test/TestConstants';
|
||||
import {createBuilder} from '@app/api/test/TestRequestBuilder';
|
||||
import {ValidationErrorCodes} from '@fluxer/constants/src/ValidationErrorCodes';
|
||||
import {afterAll, beforeAll, beforeEach, describe, expect, it} from 'vitest';
|
||||
|
||||
interface ValidationErrorBody {
|
||||
code: string;
|
||||
errors: Array<{path: string; code: string}>;
|
||||
}
|
||||
|
||||
function wrongCodeFor(code: string): string {
|
||||
return ((Number(code) + 500_000) % 1_000_000).toString().padStart(6, '0');
|
||||
}
|
||||
|
||||
describe('Enabling TOTP checks the setup code before sudo', () => {
|
||||
let harness: ApiTestHarness;
|
||||
beforeAll(async () => {
|
||||
harness = await createAuthHarness();
|
||||
});
|
||||
beforeEach(async () => {
|
||||
await harness.reset();
|
||||
});
|
||||
afterAll(async () => {
|
||||
await harness?.shutdown();
|
||||
});
|
||||
it('rejects a wrong setup code on the code field without asking for a password', async () => {
|
||||
const account = await createTestAccount(harness);
|
||||
const secret = createTotpSecret();
|
||||
const error = await createBuilder<ValidationErrorBody>(harness, account.token)
|
||||
.post('/users/@me/mfa/totp/enable')
|
||||
.body({secret, code: wrongCodeFor(totpCodeNow(secret))})
|
||||
.expect(HTTP_STATUS.BAD_REQUEST, 'INVALID_FORM_BODY')
|
||||
.execute();
|
||||
expect(error.errors[0]?.path).toBe('code');
|
||||
expect(error.errors[0]?.code).toBe(ValidationErrorCodes.INVALID_CODE);
|
||||
});
|
||||
it('asks for sudo for a valid setup code, then enables with the password', async () => {
|
||||
const account = await createTestAccount(harness);
|
||||
const secret = createTotpSecret();
|
||||
const code = totpCodeNow(secret);
|
||||
await createBuilder(harness, account.token)
|
||||
.post('/users/@me/mfa/totp/enable')
|
||||
.body({secret, code})
|
||||
.expect(HTTP_STATUS.FORBIDDEN, 'SUDO_MODE_REQUIRED')
|
||||
.execute();
|
||||
const enabled = await createBuilder<{backup_codes: Array<{code: string}>}>(harness, account.token)
|
||||
.post('/users/@me/mfa/totp/enable')
|
||||
.body({secret, code, password: account.password})
|
||||
.expect(HTTP_STATUS.OK)
|
||||
.execute();
|
||||
expect(enabled.backup_codes.length).toBeGreaterThan(0);
|
||||
});
|
||||
});
|
||||
@@ -155,6 +155,7 @@ export interface APIConfig {
|
||||
webhookSecret?: string;
|
||||
fromEmail: string;
|
||||
fromName: string;
|
||||
replyToEmail: string;
|
||||
appBaseUrl: string;
|
||||
smtp?: {
|
||||
host: string;
|
||||
|
||||
@@ -108,6 +108,22 @@ function extractStreamFromGet(out: GetObjectCommandOutput): Readable {
|
||||
return wrapped;
|
||||
}
|
||||
|
||||
const REJECTED_SERVER_SIDE_COPY_ERRORS = new Set([
|
||||
'NoSuchKey',
|
||||
'NotFound',
|
||||
'NotImplemented',
|
||||
'AccessDenied',
|
||||
'InvalidRequest',
|
||||
'MethodNotAllowed',
|
||||
]);
|
||||
|
||||
function isRejectedServerSideCopy(error: unknown): boolean {
|
||||
return (
|
||||
error instanceof S3ServiceException &&
|
||||
(REJECTED_SERVER_SIDE_COPY_ERRORS.has(error.name) || error.$metadata?.httpStatusCode === 501)
|
||||
);
|
||||
}
|
||||
|
||||
export class StorageService implements IStorageService {
|
||||
private readonly client: S3Client;
|
||||
private readonly presignClient: S3Client;
|
||||
@@ -473,15 +489,76 @@ export class StorageService implements IStorageService {
|
||||
if (isSameObject && !newContentType) {
|
||||
return;
|
||||
}
|
||||
await this.client.send(
|
||||
new CopyObjectCommand({
|
||||
try {
|
||||
await this.client.send(
|
||||
new CopyObjectCommand({
|
||||
Bucket: destinationBucket,
|
||||
Key: destinationKey,
|
||||
CopySource: `${encodeURIComponent(sourceBucket)}/${sourceKey.split('/').map(encodeURIComponent).join('/')}`,
|
||||
ContentType: newContentType,
|
||||
MetadataDirective: newContentType ? 'REPLACE' : undefined,
|
||||
}),
|
||||
);
|
||||
} catch (copyError) {
|
||||
if (sourceBucket === destinationBucket || !isRejectedServerSideCopy(copyError)) {
|
||||
throw copyError;
|
||||
}
|
||||
await this.copyObjectThroughApi(
|
||||
{sourceBucket, sourceKey, destinationBucket, destinationKey, newContentType},
|
||||
copyError,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private async copyObjectThroughApi(
|
||||
{
|
||||
sourceBucket,
|
||||
sourceKey,
|
||||
destinationBucket,
|
||||
destinationKey,
|
||||
newContentType,
|
||||
}: {
|
||||
sourceBucket: string;
|
||||
sourceKey: string;
|
||||
destinationBucket: string;
|
||||
destinationKey: string;
|
||||
newContentType?: string;
|
||||
},
|
||||
copyError: unknown,
|
||||
): Promise<void> {
|
||||
const source = await this.streamObject({bucket: sourceBucket, key: sourceKey});
|
||||
if (!source) {
|
||||
throw copyError;
|
||||
}
|
||||
Logger.warn(
|
||||
{sourceBucket, destinationBucket, error: copyError},
|
||||
'Object storage rejected a cross-bucket copy, copying through the API instead',
|
||||
);
|
||||
const upload = new Upload({
|
||||
client: this.client,
|
||||
params: {
|
||||
Bucket: destinationBucket,
|
||||
Key: destinationKey,
|
||||
CopySource: `${encodeURIComponent(sourceBucket)}/${sourceKey.split('/').map(encodeURIComponent).join('/')}`,
|
||||
ContentType: newContentType,
|
||||
MetadataDirective: newContentType ? 'REPLACE' : undefined,
|
||||
}),
|
||||
);
|
||||
Body: source.body,
|
||||
ContentType: newContentType ?? source.contentType ?? undefined,
|
||||
...(newContentType
|
||||
? {}
|
||||
: {
|
||||
CacheControl: source.cacheControl ?? undefined,
|
||||
ContentDisposition: source.contentDisposition ?? undefined,
|
||||
Expires: source.expires ?? undefined,
|
||||
}),
|
||||
},
|
||||
partSize: STREAM_UPLOAD_PART_BYTES,
|
||||
queueSize: STREAM_UPLOAD_CONCURRENCY,
|
||||
leavePartsOnError: false,
|
||||
});
|
||||
try {
|
||||
await upload.done();
|
||||
} catch (error) {
|
||||
source.body.destroy();
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
async copyObjectWithMetadataStripping({
|
||||
|
||||
@@ -0,0 +1,202 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {StorageService} from '@app/api/infrastructure/StorageService';
|
||||
import {server} from '@app/api/test/msw/server';
|
||||
import {HttpResponse, http} from 'msw';
|
||||
import {beforeEach, describe, expect, it} from 'vitest';
|
||||
|
||||
const ENDPOINT = 'https://objects.ceph-rgw.test';
|
||||
const UPLOADS = 'fluxer-uploads';
|
||||
const CDN = 'fluxer-cdn';
|
||||
|
||||
interface StoredObject {
|
||||
body: Uint8Array;
|
||||
contentType: string;
|
||||
cacheControl?: string;
|
||||
contentDisposition?: string;
|
||||
}
|
||||
|
||||
const NO_SUCH_KEY = (bucket: string) =>
|
||||
new HttpResponse(
|
||||
`<?xml version="1.0" encoding="UTF-8"?><Error><Code>NoSuchKey</Code><Message></Message><BucketName>${bucket}</BucketName><RequestId>tx0</RequestId><HostId>ceph</HostId></Error>`,
|
||||
{status: 404, headers: {'Content-Type': 'application/xml'}},
|
||||
);
|
||||
|
||||
function cephWithoutCrossBucketCopy() {
|
||||
const objects = new Map<string, StoredObject>();
|
||||
const copies: Array<{source: string; destination: string}> = [];
|
||||
const locate = (params: {bucket?: string | ReadonlyArray<string>; key?: string | ReadonlyArray<string>}) => {
|
||||
const bucket = String(params.bucket);
|
||||
const key = Array.isArray(params.key) ? params.key.join('/') : String(params.key);
|
||||
return {bucket, key, id: `${bucket}/${key}`};
|
||||
};
|
||||
server.use(
|
||||
http.put(`${ENDPOINT}/:bucket/*`, async ({request, params}) => {
|
||||
const target = locate({bucket: params.bucket, key: params[0] as string});
|
||||
const copySource = request.headers.get('x-amz-copy-source');
|
||||
if (copySource) {
|
||||
const decoded = decodeURIComponent(copySource.replace(/^\//u, ''));
|
||||
const sourceBucket = decoded.split('/')[0];
|
||||
copies.push({source: decoded, destination: target.id});
|
||||
if (sourceBucket !== target.bucket) {
|
||||
return NO_SUCH_KEY(target.bucket);
|
||||
}
|
||||
const source = objects.get(decoded);
|
||||
if (!source) {
|
||||
return NO_SUCH_KEY(target.bucket);
|
||||
}
|
||||
objects.set(target.id, {
|
||||
...source,
|
||||
contentType: request.headers.get('content-type') ?? source.contentType,
|
||||
});
|
||||
return new HttpResponse(
|
||||
'<?xml version="1.0" encoding="UTF-8"?><CopyObjectResult><ETag>"x"</ETag></CopyObjectResult>',
|
||||
{status: 200, headers: {'Content-Type': 'application/xml'}},
|
||||
);
|
||||
}
|
||||
const body = new Uint8Array(await request.arrayBuffer());
|
||||
objects.set(target.id, {
|
||||
body,
|
||||
contentType: request.headers.get('content-type') ?? 'application/octet-stream',
|
||||
...(request.headers.get('cache-control') ? {cacheControl: request.headers.get('cache-control')!} : {}),
|
||||
...(request.headers.get('content-disposition')
|
||||
? {contentDisposition: request.headers.get('content-disposition')!}
|
||||
: {}),
|
||||
});
|
||||
return new HttpResponse(null, {status: 200, headers: {ETag: '"x"'}});
|
||||
}),
|
||||
http.get(`${ENDPOINT}/:bucket/*`, ({params}) => {
|
||||
const target = locate({bucket: params.bucket, key: params[0] as string});
|
||||
const object = objects.get(target.id);
|
||||
if (!object) {
|
||||
return NO_SUCH_KEY(target.bucket);
|
||||
}
|
||||
return new HttpResponse(object.body, {
|
||||
status: 200,
|
||||
headers: {
|
||||
'Content-Type': object.contentType,
|
||||
'Content-Length': String(object.body.length),
|
||||
...(object.cacheControl ? {'Cache-Control': object.cacheControl} : {}),
|
||||
...(object.contentDisposition ? {'Content-Disposition': object.contentDisposition} : {}),
|
||||
},
|
||||
});
|
||||
}),
|
||||
http.head(`${ENDPOINT}/:bucket/*`, ({params}) => {
|
||||
const target = locate({bucket: params.bucket, key: params[0] as string});
|
||||
const object = objects.get(target.id);
|
||||
if (!object) {
|
||||
return new HttpResponse(null, {status: 404});
|
||||
}
|
||||
return new HttpResponse(null, {
|
||||
status: 200,
|
||||
headers: {'Content-Type': object.contentType, 'Content-Length': String(object.body.length)},
|
||||
});
|
||||
}),
|
||||
);
|
||||
return {objects, copies};
|
||||
}
|
||||
|
||||
function storage(): StorageService {
|
||||
return new StorageService({
|
||||
endpoint: ENDPOINT,
|
||||
forcePathStyle: true,
|
||||
region: 'nbg1',
|
||||
accessKeyId: 'TEST',
|
||||
secretAccessKey: 'TEST',
|
||||
});
|
||||
}
|
||||
|
||||
const PDF = new TextEncoder().encode('%PDF-1.7\n1 0 obj << /Type /Catalog >> endobj\n%%EOF\n');
|
||||
|
||||
describe('StorageService copies on providers that reject cross-bucket CopyObject', () => {
|
||||
let ceph: ReturnType<typeof cephWithoutCrossBucketCopy>;
|
||||
|
||||
beforeEach(() => {
|
||||
ceph = cephWithoutCrossBucketCopy();
|
||||
});
|
||||
|
||||
it('stores a non-media attachment in the CDN bucket', async () => {
|
||||
ceph.objects.set(`${UPLOADS}/upload-1`, {body: PDF, contentType: 'application/octet-stream'});
|
||||
|
||||
await expect(
|
||||
storage().copyObjectWithMetadataStripping({
|
||||
sourceBucket: UPLOADS,
|
||||
sourceKey: 'upload-1',
|
||||
destinationBucket: CDN,
|
||||
destinationKey: 'attachments/1/2/file.pdf',
|
||||
contentType: 'application/pdf',
|
||||
}),
|
||||
).resolves.toBeNull();
|
||||
|
||||
const stored = ceph.objects.get(`${CDN}/attachments/1/2/file.pdf`);
|
||||
expect(stored?.contentType).toBe('application/pdf');
|
||||
expect(Buffer.from(stored!.body).equals(Buffer.from(PDF))).toBe(true);
|
||||
});
|
||||
|
||||
it('keeps the original file when media processing fails', async () => {
|
||||
const brokenHeic = new Uint8Array(4096).fill(7);
|
||||
ceph.objects.set(`${UPLOADS}/upload-2`, {body: brokenHeic, contentType: 'application/octet-stream'});
|
||||
|
||||
await expect(
|
||||
storage().copyObjectWithMetadataStripping({
|
||||
sourceBucket: UPLOADS,
|
||||
sourceKey: 'upload-2',
|
||||
destinationBucket: CDN,
|
||||
destinationKey: 'attachments/1/3/photo.heic',
|
||||
contentType: 'image/heic',
|
||||
}),
|
||||
).resolves.toBeNull();
|
||||
|
||||
const stored = ceph.objects.get(`${CDN}/attachments/1/3/photo.heic`);
|
||||
expect(stored?.contentType).toBe('image/heic');
|
||||
expect(Buffer.from(stored!.body).equals(Buffer.from(brokenHeic))).toBe(true);
|
||||
});
|
||||
|
||||
it('keeps the source headers when no new content type is given', async () => {
|
||||
ceph.objects.set(`${CDN}/avatars/1/a.png`, {
|
||||
body: PDF,
|
||||
contentType: 'image/png',
|
||||
cacheControl: 'public, max-age=31536000, immutable',
|
||||
contentDisposition: 'inline',
|
||||
});
|
||||
|
||||
await storage().copyObject({
|
||||
sourceBucket: CDN,
|
||||
sourceKey: 'avatars/1/a.png',
|
||||
destinationBucket: 'fluxer-reports',
|
||||
destinationKey: 'evidence/a.png',
|
||||
});
|
||||
|
||||
expect(ceph.objects.get('fluxer-reports/evidence/a.png')).toMatchObject({
|
||||
contentType: 'image/png',
|
||||
cacheControl: 'public, max-age=31536000, immutable',
|
||||
contentDisposition: 'inline',
|
||||
});
|
||||
});
|
||||
|
||||
it('still fails when the source object does not exist', async () => {
|
||||
await expect(
|
||||
storage().copyObject({
|
||||
sourceBucket: UPLOADS,
|
||||
sourceKey: 'missing',
|
||||
destinationBucket: CDN,
|
||||
destinationKey: 'attachments/1/4/missing.pdf',
|
||||
newContentType: 'application/pdf',
|
||||
}),
|
||||
).rejects.toMatchObject({name: 'NoSuchKey'});
|
||||
expect(ceph.objects.has(`${CDN}/attachments/1/4/missing.pdf`)).toBe(false);
|
||||
});
|
||||
|
||||
it('does not retry a failed same-bucket copy through the API', async () => {
|
||||
await expect(
|
||||
storage().copyObject({
|
||||
sourceBucket: CDN,
|
||||
sourceKey: 'missing',
|
||||
destinationBucket: CDN,
|
||||
destinationKey: 'other',
|
||||
newContentType: 'image/png',
|
||||
}),
|
||||
).rejects.toMatchObject({name: 'NoSuchKey'});
|
||||
expect(ceph.copies).toEqual([{source: `${CDN}/missing`, destination: `${CDN}/other`}]);
|
||||
});
|
||||
});
|
||||
@@ -187,6 +187,7 @@ function createEmailServiceForConfig(
|
||||
enabled: emailConfigSource.enabled,
|
||||
fromEmail: emailConfigSource.fromEmail,
|
||||
fromName: emailConfigSource.fromName,
|
||||
replyTo: emailConfigSource.replyToEmail || null,
|
||||
appBaseUrl: emailConfigSource.appBaseUrl,
|
||||
marketingBaseUrl: Config.endpoints.marketing,
|
||||
};
|
||||
|
||||
@@ -12,6 +12,7 @@ import {OpenAPI} from '@app/api/middleware/ResponseTypeMiddleware';
|
||||
import {SudoModeMiddleware} from '@app/api/middleware/SudoModeMiddleware';
|
||||
import {RateLimitConfigs} from '@app/api/RateLimitConfig';
|
||||
import type {HonoApp} from '@app/api/types/HonoEnv';
|
||||
import {assertValidTotpSetupCode} from '@app/api/user/services/UserAuth';
|
||||
import {Validator} from '@app/api/Validator';
|
||||
import {
|
||||
DisableTotpRequest,
|
||||
@@ -60,6 +61,7 @@ export function UserAuthController(app: HonoApp) {
|
||||
async (ctx) => {
|
||||
const body = ctx.req.valid('json');
|
||||
const user = ctx.get('user');
|
||||
await assertValidTotpSetupCode(body.secret, body.code);
|
||||
const sudoResult = await requireSudoMode(ctx, user, body);
|
||||
return ctx.json(
|
||||
await ctx.get('userAuthRequestService').enableTotp({
|
||||
|
||||
@@ -8,6 +8,7 @@ import type {SudoVerificationResult} from '@app/api/auth/services/SudoVerificati
|
||||
import type {MfaBackupCode} from '@app/api/models/MfaBackupCode';
|
||||
import type {User} from '@app/api/models/User';
|
||||
import {mapUserToPrivateResponse} from '@app/api/user/UserMappers';
|
||||
import {TotpGenerator} from '@app/api/utils/TotpGenerator';
|
||||
import {UserAuthenticatorTypes} from '@fluxer/constants/src/UserConstants';
|
||||
import {ValidationErrorCodes} from '@fluxer/constants/src/ValidationErrorCodes';
|
||||
import {MfaNotDisabledError} from '@fluxer/errors/src/domains/auth/MfaNotDisabledError';
|
||||
@@ -55,6 +56,20 @@ async function assertSudoVerifiedForMfa(
|
||||
);
|
||||
}
|
||||
|
||||
async function isValidTotpSetupCode(secret: string, code: string): Promise<boolean> {
|
||||
try {
|
||||
return await new TotpGenerator(secret).validateTotp(code);
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
export async function assertValidTotpSetupCode(secret: string, code: string): Promise<void> {
|
||||
if (!(await isValidTotpSetupCode(secret, code))) {
|
||||
throw InputValidationError.fromCode('code', ValidationErrorCodes.INVALID_CODE);
|
||||
}
|
||||
}
|
||||
|
||||
export async function enableMfaTotp(
|
||||
ctx: ApiContext,
|
||||
{user, secret, code, sudoContext}: EnableMfaTotpParams,
|
||||
|
||||
@@ -29,7 +29,6 @@ import {GuildIcon} from '@app/features/guild/components/popouts/GuildIcon';
|
||||
import * as InviteUtils from '@app/features/invite/utils/InviteUtils';
|
||||
import {SafeMarkdown} from '@app/features/messaging/components/markdown';
|
||||
import {MarkdownContext} from '@app/features/messaging/components/markdown/renderers/RendererTypes';
|
||||
import {useMatureMedia} from '@app/features/messaging/hooks/useMatureMedia';
|
||||
import {useMessageReactions as useMessageReactionsSnapshot} from '@app/features/messaging/hooks/useMessageReactionStore';
|
||||
import type {Message} from '@app/features/messaging/models/MessagingMessage';
|
||||
import {extractEmbeddableCodeLinkContent} from '@app/features/messaging/utils/EmbeddableCodeLinkContent';
|
||||
@@ -38,7 +37,6 @@ import {buildMessageSnapshotCopyText} from '@app/features/messaging/utils/Messag
|
||||
import {goToMessage} from '@app/features/messaging/utils/MessageNavigator';
|
||||
import {canonicalizeMediaUrl, useSpoilerState} from '@app/features/messaging/utils/SpoilerUtils';
|
||||
import markupStyles from '@app/features/theme/styles/Markup.module.css';
|
||||
import matureStyles from '@app/features/theme/styles/MatureBlur.module.css';
|
||||
import messageStyles from '@app/features/theme/styles/Message.module.css';
|
||||
import * as ThemeUtils from '@app/features/theme/utils/ThemeUtils';
|
||||
import {StickerInlineMenuItems} from '@app/features/ui/action_menu/items/StickerContextMenuItems';
|
||||
@@ -507,7 +505,6 @@ const StickerItem = observer(({sticker, message, sourceChannel, handleDelete}: S
|
||||
const stickerRecord = Sticker.getStickerById(sticker.id);
|
||||
const isMobile = MobileLayout.enabled;
|
||||
const [isBottomSheetOpen, setIsBottomSheetOpen] = useState(false);
|
||||
const {shouldBlur, shouldBlock, canReveal, reveal} = useMatureMedia(false, message.channelId);
|
||||
const handleContextMenu = (e: React.MouseEvent) => {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
@@ -538,37 +535,17 @@ const StickerItem = observer(({sticker, message, sourceChannel, handleDelete}: S
|
||||
/>
|
||||
));
|
||||
};
|
||||
const handleRevealClick = useCallback(
|
||||
(e: React.MouseEvent) => {
|
||||
if (shouldBlur && canReveal) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
reveal();
|
||||
}
|
||||
},
|
||||
[shouldBlur, canReveal, reveal],
|
||||
);
|
||||
const handleMobileClick = useCallback(
|
||||
(e: React.MouseEvent) => {
|
||||
if (shouldBlur) {
|
||||
handleRevealClick(e);
|
||||
return;
|
||||
}
|
||||
setIsBottomSheetOpen(true);
|
||||
},
|
||||
[shouldBlur, handleRevealClick],
|
||||
);
|
||||
const handleMobileClick = useCallback(() => {
|
||||
setIsBottomSheetOpen(true);
|
||||
}, []);
|
||||
const handleCloseBottomSheet = useCallback(() => {
|
||||
setIsBottomSheetOpen(false);
|
||||
}, []);
|
||||
if (shouldBlock) {
|
||||
return null;
|
||||
}
|
||||
const stickerImage = (
|
||||
<img
|
||||
src={stickerUrl}
|
||||
alt={stickerRecord?.description || sticker.name}
|
||||
className={clsx(styles.stickerImage, shouldBlur && matureStyles.matureStickerBlurred)}
|
||||
className={styles.stickerImage}
|
||||
width="160"
|
||||
height="160"
|
||||
data-flx="channel.message-attachments.sticker-item.sticker-image"
|
||||
@@ -601,16 +578,13 @@ const StickerItem = observer(({sticker, message, sourceChannel, handleDelete}: S
|
||||
</>
|
||||
);
|
||||
}
|
||||
const renderHoverTooltip = () =>
|
||||
shouldBlur ? (
|
||||
sticker.name
|
||||
) : (
|
||||
<ExpressionHoverTooltipContent
|
||||
displayName={sticker.name}
|
||||
previewUrl={previewUrl}
|
||||
data-flx="channel.message-attachments.sticker-item.expression-hover-tooltip-content"
|
||||
/>
|
||||
);
|
||||
const renderHoverTooltip = () => (
|
||||
<ExpressionHoverTooltipContent
|
||||
displayName={sticker.name}
|
||||
previewUrl={previewUrl}
|
||||
data-flx="channel.message-attachments.sticker-item.expression-hover-tooltip-content"
|
||||
/>
|
||||
);
|
||||
const renderInfoCard = ({onClose}: {onClose: () => void}) => (
|
||||
<ExpressionInfoCard
|
||||
kind="sticker"
|
||||
@@ -624,7 +598,6 @@ const StickerItem = observer(({sticker, message, sourceChannel, handleDelete}: S
|
||||
);
|
||||
return (
|
||||
<ExpressionInfoPopout
|
||||
canOpenCard={!shouldBlur}
|
||||
renderTooltip={renderHoverTooltip}
|
||||
renderCard={renderInfoCard}
|
||||
data-flx="channel.message-attachments.sticker-item.expression-info-popout"
|
||||
@@ -635,7 +608,6 @@ const StickerItem = observer(({sticker, message, sourceChannel, handleDelete}: S
|
||||
className={clsx(styles.stickerWrapper, styles.stickerWrapperInteractive)}
|
||||
data-message-sticker="true"
|
||||
onContextMenu={handleContextMenu}
|
||||
onClick={handleRevealClick}
|
||||
data-flx="channel.message-attachments.sticker-item.sticker-wrapper.reveal-click"
|
||||
{...interactionHandlers}
|
||||
>
|
||||
|
||||
@@ -19,11 +19,9 @@ import {getCachedNumberFormat} from '@app/features/i18n/utils/IntlCache';
|
||||
import * as ReactionCommands from '@app/features/messaging/commands/ReactionCommands';
|
||||
import {ReactionTooltip} from '@app/features/messaging/components/popouts/ReactionTooltip';
|
||||
import {ReactionImage} from '@app/features/messaging/components/ReactionImage';
|
||||
import {useMatureMedia} from '@app/features/messaging/hooks/useMatureMedia';
|
||||
import {useMessageReactions as useMessageReactionsSnapshot} from '@app/features/messaging/hooks/useMessageReactionStore';
|
||||
import type {Message} from '@app/features/messaging/models/MessagingMessage';
|
||||
import {getEmojiName, getReactionKey, useEmojiURL} from '@app/features/messaging/utils/ReactionUtils';
|
||||
import matureStyles from '@app/features/theme/styles/MatureBlur.module.css';
|
||||
import {EmojiContextMenuItems} from '@app/features/ui/action_menu/items/EmojiContextMenuItems';
|
||||
import * as ContextMenuCommands from '@app/features/ui/commands/ContextMenuCommands';
|
||||
import FocusRing from '@app/features/ui/focus_ring/FocusRing';
|
||||
@@ -137,7 +135,6 @@ const MessageReactionItem = observer(
|
||||
};
|
||||
const emojiName = getEmojiName(reaction.emoji);
|
||||
const emojiUrl = useEmojiURL({emoji: reaction.emoji, isHovering: isHovering || tooltipHovering});
|
||||
const {shouldBlur: reactionShouldBlur, shouldBlock: reactionShouldBlock} = useMatureMedia(false, message.channelId);
|
||||
const variants = {
|
||||
up: {y: -20, opacity: 0},
|
||||
down: {y: 20, opacity: 0},
|
||||
@@ -175,16 +172,14 @@ const MessageReactionItem = observer(
|
||||
data-flx="channel.message-reactions.message-reaction-item.reaction-inner"
|
||||
>
|
||||
{emojiUrl ? (
|
||||
reactionShouldBlock ? null : (
|
||||
<ReactionImage
|
||||
src={emojiUrl}
|
||||
alt={emojiName}
|
||||
aria-hidden={true}
|
||||
draggable={false}
|
||||
className={clsx('emoji', styles.emoji, reactionShouldBlur && matureStyles.matureBlurred)}
|
||||
data-flx="channel.message-reactions.message-reaction-item.emoji"
|
||||
/>
|
||||
)
|
||||
<ReactionImage
|
||||
src={emojiUrl}
|
||||
alt={emojiName}
|
||||
aria-hidden={true}
|
||||
draggable={false}
|
||||
className={clsx('emoji', styles.emoji)}
|
||||
data-flx="channel.message-reactions.message-reaction-item.emoji"
|
||||
/>
|
||||
) : null}
|
||||
<div
|
||||
className={styles.countWrapper}
|
||||
|
||||
@@ -11,6 +11,7 @@ import type {FlatEmoji} from '@app/features/emoji/types/EmojiTypes';
|
||||
import {checkEmojiAvailability} from '@app/features/expressions/utils/ExpressionPermissionUtils';
|
||||
import {getEmojiDisplayDataWithSkinTone} from '@app/features/expressions/utils/SkinToneUtils';
|
||||
import UnicodeEmojis, {EMOJI_SPRITES} from '@app/features/expressions/utils/UnicodeEmojis';
|
||||
import {loadImage} from '@app/features/messaging/utils/ImageCacheUtils';
|
||||
import {getEmojiRenderUrl} from '@app/features/messaging/utils/markdown/EmojiDetector';
|
||||
import {EmojiContextMenuItems} from '@app/features/ui/action_menu/items/EmojiContextMenuItems';
|
||||
import * as ContextMenuCommands from '@app/features/ui/commands/ContextMenuCommands';
|
||||
@@ -25,9 +26,34 @@ type PickerEmojiImageProps = React.ImgHTMLAttributes<HTMLImageElement> & {
|
||||
alt: string;
|
||||
};
|
||||
|
||||
const PICKER_IMAGE_RETRY_LIMIT = 3;
|
||||
|
||||
const PickerEmojiImage = ({src, alt, ...props}: PickerEmojiImageProps) => {
|
||||
const imageRef = useRef<HTMLImageElement | null>(null);
|
||||
const hasLoadedRef = useRef(false);
|
||||
const retriesRef = useRef(0);
|
||||
const cancelRetryRef = useRef<(() => void) | null>(null);
|
||||
useEffect(() => {
|
||||
retriesRef.current = 0;
|
||||
return () => {
|
||||
cancelRetryRef.current?.();
|
||||
cancelRetryRef.current = null;
|
||||
};
|
||||
}, [src]);
|
||||
const handleError = () => {
|
||||
if (retriesRef.current >= PICKER_IMAGE_RETRY_LIMIT) {
|
||||
return;
|
||||
}
|
||||
retriesRef.current += 1;
|
||||
cancelRetryRef.current?.();
|
||||
cancelRetryRef.current = loadImage(src, () => {
|
||||
cancelRetryRef.current = null;
|
||||
const image = imageRef.current;
|
||||
if (image != null && image.getAttribute('src') === src) {
|
||||
image.src = src;
|
||||
}
|
||||
});
|
||||
};
|
||||
const handleLoad = (event: React.SyntheticEvent<HTMLImageElement>) => {
|
||||
const view = event.currentTarget?.ownerDocument?.defaultView ?? window;
|
||||
view.requestAnimationFrame(() => {
|
||||
@@ -47,6 +73,7 @@ const PickerEmojiImage = ({src, alt, ...props}: PickerEmojiImageProps) => {
|
||||
alt={alt}
|
||||
className={hasLoadedRef.current ? styles.emojiImage : clsx(styles.emojiImage, styles.emojiImageLoading)}
|
||||
onLoad={hasLoadedRef.current ? undefined : handleLoad}
|
||||
onError={hasLoadedRef.current ? undefined : handleError}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
-14
@@ -23,17 +23,3 @@
|
||||
line-height: 1.25rem;
|
||||
color: var(--text-primary-muted);
|
||||
}
|
||||
|
||||
.sectionDescriptionMultiline {
|
||||
font-size: 0.875rem;
|
||||
line-height: 1.25rem;
|
||||
color: var(--text-primary-muted);
|
||||
}
|
||||
|
||||
.sectionDescriptionMultiline p {
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.sectionDescriptionMultiline p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
@@ -284,27 +284,27 @@ const GuildModerationTab: React.FC<{guildId: string}> = observer(({guildId}) =>
|
||||
<h3 className={styles.sectionTitle} data-flx="guild.guild-tabs.guild-moderation-tab.section-title">
|
||||
<Trans>Member verification</Trans>
|
||||
</h3>
|
||||
<div
|
||||
className={styles.sectionDescriptionMultiline}
|
||||
data-flx="guild.guild-tabs.guild-moderation-tab.section-description-multiline"
|
||||
<p
|
||||
className={styles.sectionDescription}
|
||||
data-flx="guild.guild-tabs.guild-moderation-tab.section-description--verification"
|
||||
>
|
||||
<p data-flx="guild.guild-tabs.guild-moderation-tab.p">
|
||||
<Trans>Choose what members must have before they can post or DM community members.</Trans>
|
||||
</p>
|
||||
<p data-flx="guild.guild-tabs.guild-moderation-tab.p--2">
|
||||
<Trans>
|
||||
Choose what members must have before they can post or DM community members. Members with roles can
|
||||
bypass these checks. For public spaces, we recommend enabling verification.
|
||||
</Trans>
|
||||
</p>
|
||||
{isDiscoverable && (
|
||||
<p
|
||||
className={styles.sectionDescription}
|
||||
style={{fontStyle: 'italic'}}
|
||||
data-flx="guild.guild-tabs.guild-moderation-tab.section-description--verification-discovery"
|
||||
>
|
||||
<Trans>
|
||||
Members with roles can bypass these checks. For public spaces, we recommend enabling verification.
|
||||
Communities listed in Discovery require at least email verification. None cannot be selected while
|
||||
Discovery is enabled.
|
||||
</Trans>
|
||||
</p>
|
||||
{isDiscoverable && (
|
||||
<p data-flx="guild.guild-tabs.guild-moderation-tab.p--3">
|
||||
<Trans>
|
||||
Communities listed in Discovery require at least email verification. None cannot be selected while
|
||||
Discovery is enabled.
|
||||
</Trans>
|
||||
</p>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
<Controller
|
||||
name="verification_level"
|
||||
control={form.control}
|
||||
|
||||
@@ -21,7 +21,7 @@ msgstr "... تشغيل الوضع المكثف. رائع!"
|
||||
|
||||
#. Button or menu action label in the channel and chat user message. Keep it concise.
|
||||
#. Suffix after the message text in the forward modal preview when the forwarded message was edited.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:392
|
||||
#: src/features/channel/components/MessageAttachments.tsx:390
|
||||
#: src/features/channel/components/UserMessage.tsx:75
|
||||
#: src/features/messaging/components/modals/ForwardMessagePreview.tsx:26
|
||||
msgid "(edited)"
|
||||
@@ -1051,7 +1051,7 @@ msgid "{count, plural, one {# potential spammer message} other {# potential spam
|
||||
msgstr "{count, plural, zero {# رسالة من مرسلين مزعجين محتملين} one {رسالة واحدة من مرسل مزعج محتمل} two {رسالتان من مرسلين مزعجين محتملين} few {# رسائل من مرسلين مزعجين محتملين} many {# رسالة من مرسلين مزعجين محتملين} other {# رسالة من مرسلين مزعجين محتملين}}"
|
||||
|
||||
#: src/features/app/components/shared/MessageReactionsContent.tsx:56
|
||||
#: src/features/channel/components/MessageReactions.tsx:146
|
||||
#: src/features/channel/components/MessageReactions.tsx:143
|
||||
msgid "{count, plural, one {# reaction} other {# reactions}}"
|
||||
msgstr "{count, plural, zero {# تفاعل} one {تفاعل واحد} two {تفاعلان} few {# تفاعلات} many {# تفاعلًا} other {# تفاعل}}"
|
||||
|
||||
@@ -1329,12 +1329,12 @@ msgid "{emojiName}, {reactionCountText}"
|
||||
msgstr "{emojiName}، {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:50
|
||||
#: src/features/channel/components/MessageReactions.tsx:48
|
||||
msgid "{emojiName}: {reactionCountText}"
|
||||
msgstr "{emojiName}: {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}, {actionText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:55
|
||||
#: src/features/channel/components/MessageReactions.tsx:53
|
||||
msgid "{emojiName}: {reactionCountText}, {actionText}"
|
||||
msgstr "{emojiName}: {reactionCountText}، {actionText}"
|
||||
|
||||
@@ -2215,8 +2215,8 @@ msgstr "لا يزال <0>{username}</0> في المجموعة. حاول مرة
|
||||
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the community and channel the message came from.
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the conversation the message came from.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:243
|
||||
#: src/features/channel/components/MessageAttachments.tsx:299
|
||||
#: src/features/channel/components/MessageAttachments.tsx:241
|
||||
#: src/features/channel/components/MessageAttachments.tsx:297
|
||||
msgid "<0>Forwarded from</0>{sourceInfo}"
|
||||
msgstr "<0>مُعاد توجيهها من</0>{sourceInfo}"
|
||||
|
||||
@@ -7763,9 +7763,9 @@ msgstr "اختر ما يمكن أن يفعله {clientLabel} في مجتمعك.
|
||||
msgid "Choose what friends see in their active now panel"
|
||||
msgstr "اختر ما يراه أصدقاؤك في لوحة \"نشط الآن\""
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:292
|
||||
msgid "Choose what members must have before they can post or DM community members."
|
||||
msgstr "اختر ما يجب أن يستوفيه الأعضاء قبل أن يتمكنوا من النشر أو مراسلة أعضاء المجتمع مباشرة."
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:291
|
||||
msgid "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "اختر ما يجب أن يمتلكه الأعضاء قبل أن يتمكنوا من النشر أو إرسال رسائل مباشرة لأعضاء المجتمع. يمكن للأعضاء الذين لديهم أدوار تجاوز هذه الضوابط. بالنسبة للمساحات العامة، نوصي بتمكين التحقق."
|
||||
|
||||
#. Scope option (radio) that lets the user pick conversation kinds and exclude specific communities.
|
||||
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:71
|
||||
@@ -8638,7 +8638,7 @@ msgstr "يتم إخفاء المجتمعات والقنوات التي لا يم
|
||||
msgid "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
msgstr "المجتمعات المدرجة في الاكتشاف ملزمة بفحص رسائل جميع الأعضاء. لا يمكن تغيير هذا الإعداد أثناء تفعيل الاكتشاف."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:301
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:302
|
||||
msgid "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
msgstr "تتطلب المجتمعات المدرجة في الاكتشاف التحقق من البريد الإلكتروني على الأقل. لا يمكن اختيار \"بلا\" أثناء تفعيل الاكتشاف."
|
||||
|
||||
@@ -15844,7 +15844,7 @@ msgstr "إعادة توجيه الوسائط"
|
||||
msgid "Forward message"
|
||||
msgstr "إعادة توجيه الرسالة"
|
||||
|
||||
#: src/features/channel/components/MessageAttachments.tsx:362
|
||||
#: src/features/channel/components/MessageAttachments.tsx:360
|
||||
msgid "Forwarded"
|
||||
msgstr "مُعاد توجيهها"
|
||||
|
||||
@@ -20844,10 +20844,6 @@ msgstr "تتم إزالة الأعضاء عند عدم الاتصال بالإن
|
||||
msgid "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
msgstr "يمكن للأعضاء الذين لديهم إذن \"{pinMessagesPermissionLabel}\" تثبيت الرسائل للجميع."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:295
|
||||
msgid "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "يمكن للأعضاء ذوي الأدوار تجاوز هذه الفحوصات. للمساحات العامة، نوصي بتمكين التحقق."
|
||||
|
||||
#. Helper text under the Allow mentions switch in the role editor. {mentionEveryonePermissionLabel} is the localized name of the Mention Everyone permission and should match its label exactly.
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleEditor.tsx:47
|
||||
msgid "Members with the \"{mentionEveryonePermissionLabel}\" permission can always mention roles, regardless of this setting."
|
||||
@@ -25629,12 +25625,12 @@ msgid "Press Continue to use your passkey."
|
||||
msgstr "اضغط على متابعة لاستخدام مفتاح المرور الخاص بك."
|
||||
|
||||
#. Label in the channel and chat message reactions.
|
||||
#: src/features/channel/components/MessageReactions.tsx:46
|
||||
#: src/features/channel/components/MessageReactions.tsx:44
|
||||
msgid "press to add reaction"
|
||||
msgstr "اضغط لإضافة رد فعل"
|
||||
|
||||
#. Label in the channel and chat message reactions. Keep the tone plain and specific.
|
||||
#: src/features/channel/components/MessageReactions.tsx:42
|
||||
#: src/features/channel/components/MessageReactions.tsx:40
|
||||
msgid "press to remove reaction"
|
||||
msgstr "اضغط لإزالة رد الفعل"
|
||||
|
||||
|
||||
@@ -1770,6 +1770,9 @@
|
||||
{
|
||||
"msgid": "Choose the premium model"
|
||||
},
|
||||
{
|
||||
"msgid": "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
},
|
||||
{
|
||||
"msgid": "Choose where its published messages should go. You can unfollow any time in Community settings → Webhooks."
|
||||
},
|
||||
|
||||
@@ -21,7 +21,7 @@ msgstr "... включиш сбития режим. Супер!"
|
||||
|
||||
#. Button or menu action label in the channel and chat user message. Keep it concise.
|
||||
#. Suffix after the message text in the forward modal preview when the forwarded message was edited.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:392
|
||||
#: src/features/channel/components/MessageAttachments.tsx:390
|
||||
#: src/features/channel/components/UserMessage.tsx:75
|
||||
#: src/features/messaging/components/modals/ForwardMessagePreview.tsx:26
|
||||
msgid "(edited)"
|
||||
@@ -1051,7 +1051,7 @@ msgid "{count, plural, one {# potential spammer message} other {# potential spam
|
||||
msgstr "{count, plural, one {# потенциално спам съобщение} other {# потенциални спам съобщения}}"
|
||||
|
||||
#: src/features/app/components/shared/MessageReactionsContent.tsx:56
|
||||
#: src/features/channel/components/MessageReactions.tsx:146
|
||||
#: src/features/channel/components/MessageReactions.tsx:143
|
||||
msgid "{count, plural, one {# reaction} other {# reactions}}"
|
||||
msgstr "{count, plural, one {# реакция} other {# реакции}}"
|
||||
|
||||
@@ -1329,12 +1329,12 @@ msgid "{emojiName}, {reactionCountText}"
|
||||
msgstr "{emojiName}, {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:50
|
||||
#: src/features/channel/components/MessageReactions.tsx:48
|
||||
msgid "{emojiName}: {reactionCountText}"
|
||||
msgstr "{emojiName}: {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}, {actionText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:55
|
||||
#: src/features/channel/components/MessageReactions.tsx:53
|
||||
msgid "{emojiName}: {reactionCountText}, {actionText}"
|
||||
msgstr "{emojiName}: {reactionCountText}, {actionText}"
|
||||
|
||||
@@ -2215,8 +2215,8 @@ msgstr "<0>{username}</0> все още е в групата. Опитай от
|
||||
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the community and channel the message came from.
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the conversation the message came from.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:243
|
||||
#: src/features/channel/components/MessageAttachments.tsx:299
|
||||
#: src/features/channel/components/MessageAttachments.tsx:241
|
||||
#: src/features/channel/components/MessageAttachments.tsx:297
|
||||
msgid "<0>Forwarded from</0>{sourceInfo}"
|
||||
msgstr "<0>Препратено от</0>{sourceInfo}"
|
||||
|
||||
@@ -7763,9 +7763,9 @@ msgstr "Избери какво може да прави {clientLabel} в общ
|
||||
msgid "Choose what friends see in their active now panel"
|
||||
msgstr "Избери какво виждат приятелите ти в панела „Активни сега“"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:292
|
||||
msgid "Choose what members must have before they can post or DM community members."
|
||||
msgstr "Избери какво трябва да имат членовете, преди да могат да публикуват или да изпращат DM на членове на общността."
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:291
|
||||
msgid "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Изберете какво трябва да имат членовете, преди да могат да публикуват или да изпращат лични съобщения до членове на общността. Членовете с роли могат да заобиколят тези проверки. За публични пространства препоръчваме да активирате верификация."
|
||||
|
||||
#. Scope option (radio) that lets the user pick conversation kinds and exclude specific communities.
|
||||
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:71
|
||||
@@ -8638,7 +8638,7 @@ msgstr "Общности и канали, където не можете да у
|
||||
msgid "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
msgstr "Общностите, включени в Откриване, трябва да сканират съобщенията от всички членове. Тази настройка не може да се променя, докато Откриване е включено."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:301
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:302
|
||||
msgid "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
msgstr "Общностите, включени в Откриване, изискват поне потвърждение на имейл. Докато Откриване е включено, не може да се избере „Няма“."
|
||||
|
||||
@@ -15844,7 +15844,7 @@ msgstr "Препращане на медия"
|
||||
msgid "Forward message"
|
||||
msgstr "Препращане на съобщение"
|
||||
|
||||
#: src/features/channel/components/MessageAttachments.tsx:362
|
||||
#: src/features/channel/components/MessageAttachments.tsx:360
|
||||
msgid "Forwarded"
|
||||
msgstr "Препратено"
|
||||
|
||||
@@ -20844,10 +20844,6 @@ msgstr "Членовете се премахват, когато излязат
|
||||
msgid "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
msgstr "Членовете с „{pinMessagesPermissionLabel}“ могат да закачат съобщения за всички."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:295
|
||||
msgid "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Членовете с роли могат да заобиколят тези проверки. За публични пространства препоръчваме да включиш потвърждението."
|
||||
|
||||
#. Helper text under the Allow mentions switch in the role editor. {mentionEveryonePermissionLabel} is the localized name of the Mention Everyone permission and should match its label exactly.
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleEditor.tsx:47
|
||||
msgid "Members with the \"{mentionEveryonePermissionLabel}\" permission can always mention roles, regardless of this setting."
|
||||
@@ -25629,12 +25625,12 @@ msgid "Press Continue to use your passkey."
|
||||
msgstr "Натисни „Продължи“, за да използваш своя ключ за достъп."
|
||||
|
||||
#. Label in the channel and chat message reactions.
|
||||
#: src/features/channel/components/MessageReactions.tsx:46
|
||||
#: src/features/channel/components/MessageReactions.tsx:44
|
||||
msgid "press to add reaction"
|
||||
msgstr "натисни, за да добавиш реакция"
|
||||
|
||||
#. Label in the channel and chat message reactions. Keep the tone plain and specific.
|
||||
#: src/features/channel/components/MessageReactions.tsx:42
|
||||
#: src/features/channel/components/MessageReactions.tsx:40
|
||||
msgid "press to remove reaction"
|
||||
msgstr "натисни, за да премахнеш реакцията"
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ msgstr "... zapnout zhuštěný režim. Super!"
|
||||
|
||||
#. Button or menu action label in the channel and chat user message. Keep it concise.
|
||||
#. Suffix after the message text in the forward modal preview when the forwarded message was edited.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:392
|
||||
#: src/features/channel/components/MessageAttachments.tsx:390
|
||||
#: src/features/channel/components/UserMessage.tsx:75
|
||||
#: src/features/messaging/components/modals/ForwardMessagePreview.tsx:26
|
||||
msgid "(edited)"
|
||||
@@ -1051,7 +1051,7 @@ msgid "{count, plural, one {# potential spammer message} other {# potential spam
|
||||
msgstr "{count, plural, one {# zpráva od možného spammera} few {# zprávy od možného spammera} many {# zprávy od možného spammera} other {# zpráv od možného spammera}}"
|
||||
|
||||
#: src/features/app/components/shared/MessageReactionsContent.tsx:56
|
||||
#: src/features/channel/components/MessageReactions.tsx:146
|
||||
#: src/features/channel/components/MessageReactions.tsx:143
|
||||
msgid "{count, plural, one {# reaction} other {# reactions}}"
|
||||
msgstr "{count, plural, one {# reakce} few {# reakce} many {# reakce} other {# reakcí}}"
|
||||
|
||||
@@ -1329,12 +1329,12 @@ msgid "{emojiName}, {reactionCountText}"
|
||||
msgstr "{emojiName}, {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:50
|
||||
#: src/features/channel/components/MessageReactions.tsx:48
|
||||
msgid "{emojiName}: {reactionCountText}"
|
||||
msgstr "{emojiName}: {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}, {actionText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:55
|
||||
#: src/features/channel/components/MessageReactions.tsx:53
|
||||
msgid "{emojiName}: {reactionCountText}, {actionText}"
|
||||
msgstr "{emojiName}: {reactionCountText}, {actionText}"
|
||||
|
||||
@@ -2215,8 +2215,8 @@ msgstr "<0>{username}</0> je stále ve skupině. Zkuste to znovu za chvíli."
|
||||
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the community and channel the message came from.
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the conversation the message came from.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:243
|
||||
#: src/features/channel/components/MessageAttachments.tsx:299
|
||||
#: src/features/channel/components/MessageAttachments.tsx:241
|
||||
#: src/features/channel/components/MessageAttachments.tsx:297
|
||||
msgid "<0>Forwarded from</0>{sourceInfo}"
|
||||
msgstr "<0>Přeposláno z</0>{sourceInfo}"
|
||||
|
||||
@@ -7763,9 +7763,9 @@ msgstr "Vyberte, co může {clientLabel} dělat ve vaší komunitě. Zrušte za
|
||||
msgid "Choose what friends see in their active now panel"
|
||||
msgstr "Vyberte, co přátelé uvidí na panelu „Právě aktivní“"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:292
|
||||
msgid "Choose what members must have before they can post or DM community members."
|
||||
msgstr "Zvolte, co musí mít členové, než budou moct přispívat nebo posílat přímé zprávy členům komunity."
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:291
|
||||
msgid "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Vyberte, co musí mít členové, než budou moci posílat příspěvky nebo soukromé zprávy členům komunity. Členové s rolemi mohou tyto kontroly přeskočit. Pro veřejné prostory doporučujeme povolit ověření."
|
||||
|
||||
#. Scope option (radio) that lets the user pick conversation kinds and exclude specific communities.
|
||||
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:71
|
||||
@@ -8638,7 +8638,7 @@ msgstr "Komunity a kanály, kde nemůžete spravovat webhooky, jsou skryté."
|
||||
msgid "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
msgstr "Komunity uvedené v Objevování musí kontrolovat zprávy všech členů. Toto nastavení nelze změnit, dokud je Objevování zapnuté."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:301
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:302
|
||||
msgid "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
msgstr "Komunity uvedené v Objevování vyžadují alespoň ověření e-mailu. Pokud je Objevování zapnuté, nelze vybrat možnost „Žádné“."
|
||||
|
||||
@@ -15844,7 +15844,7 @@ msgstr "Přeposlat médium"
|
||||
msgid "Forward message"
|
||||
msgstr "Přeposlat zprávu"
|
||||
|
||||
#: src/features/channel/components/MessageAttachments.tsx:362
|
||||
#: src/features/channel/components/MessageAttachments.tsx:360
|
||||
msgid "Forwarded"
|
||||
msgstr "Přeposláno"
|
||||
|
||||
@@ -20844,10 +20844,6 @@ msgstr "Členové jsou odebráni, když jsou offline, pokud jim není přidělen
|
||||
msgid "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
msgstr "Členové s oprávněním „{pinMessagesPermissionLabel}“ mohou připínat zprávy pro všechny."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:295
|
||||
msgid "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Členové s rolemi mohou tyto kontroly obejít. Pro veřejné prostory doporučujeme povolit ověření."
|
||||
|
||||
#. Helper text under the Allow mentions switch in the role editor. {mentionEveryonePermissionLabel} is the localized name of the Mention Everyone permission and should match its label exactly.
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleEditor.tsx:47
|
||||
msgid "Members with the \"{mentionEveryonePermissionLabel}\" permission can always mention roles, regardless of this setting."
|
||||
@@ -25629,12 +25625,12 @@ msgid "Press Continue to use your passkey."
|
||||
msgstr "Stisknutím tlačítka Pokračovat použijete svůj přístupový klíč."
|
||||
|
||||
#. Label in the channel and chat message reactions.
|
||||
#: src/features/channel/components/MessageReactions.tsx:46
|
||||
#: src/features/channel/components/MessageReactions.tsx:44
|
||||
msgid "press to add reaction"
|
||||
msgstr "klepnutím přidáte reakci"
|
||||
|
||||
#. Label in the channel and chat message reactions. Keep the tone plain and specific.
|
||||
#: src/features/channel/components/MessageReactions.tsx:42
|
||||
#: src/features/channel/components/MessageReactions.tsx:40
|
||||
msgid "press to remove reaction"
|
||||
msgstr "klepnutím odeberete reakci"
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ msgstr "... slå kompakt visning til. Fedt!"
|
||||
|
||||
#. Button or menu action label in the channel and chat user message. Keep it concise.
|
||||
#. Suffix after the message text in the forward modal preview when the forwarded message was edited.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:392
|
||||
#: src/features/channel/components/MessageAttachments.tsx:390
|
||||
#: src/features/channel/components/UserMessage.tsx:75
|
||||
#: src/features/messaging/components/modals/ForwardMessagePreview.tsx:26
|
||||
msgid "(edited)"
|
||||
@@ -1051,7 +1051,7 @@ msgid "{count, plural, one {# potential spammer message} other {# potential spam
|
||||
msgstr "{count, plural, one {# besked fra en mulig spammer} other {# beskeder fra mulige spammere}}"
|
||||
|
||||
#: src/features/app/components/shared/MessageReactionsContent.tsx:56
|
||||
#: src/features/channel/components/MessageReactions.tsx:146
|
||||
#: src/features/channel/components/MessageReactions.tsx:143
|
||||
msgid "{count, plural, one {# reaction} other {# reactions}}"
|
||||
msgstr "{count, plural, one {# reaktion} other {# reaktioner}}"
|
||||
|
||||
@@ -1329,12 +1329,12 @@ msgid "{emojiName}, {reactionCountText}"
|
||||
msgstr "{emojiName}, {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:50
|
||||
#: src/features/channel/components/MessageReactions.tsx:48
|
||||
msgid "{emojiName}: {reactionCountText}"
|
||||
msgstr "{emojiName}: {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}, {actionText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:55
|
||||
#: src/features/channel/components/MessageReactions.tsx:53
|
||||
msgid "{emojiName}: {reactionCountText}, {actionText}"
|
||||
msgstr "{emojiName}: {reactionCountText}, {actionText}"
|
||||
|
||||
@@ -2215,8 +2215,8 @@ msgstr "<0>{username}</0> er stadig i gruppen. Prøv igen om et øjeblik."
|
||||
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the community and channel the message came from.
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the conversation the message came from.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:243
|
||||
#: src/features/channel/components/MessageAttachments.tsx:299
|
||||
#: src/features/channel/components/MessageAttachments.tsx:241
|
||||
#: src/features/channel/components/MessageAttachments.tsx:297
|
||||
msgid "<0>Forwarded from</0>{sourceInfo}"
|
||||
msgstr "<0>Videresendt fra</0>{sourceInfo}"
|
||||
|
||||
@@ -7763,9 +7763,9 @@ msgstr "Vælg, hvad {clientLabel} kan gøre i dit fællesskab. Fjern markeringen
|
||||
msgid "Choose what friends see in their active now panel"
|
||||
msgstr "Vælg, hvad venner ser i panelet Aktiv nu"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:292
|
||||
msgid "Choose what members must have before they can post or DM community members."
|
||||
msgstr "Vælg, hvilke krav medlemmer skal opfylde, før de kan skrive beskeder eller sende direkte beskeder til medlemmer af fællesskabet."
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:291
|
||||
msgid "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Vælg, hvad medlemmer skal have, før de kan poste eller sende direkte beskeder til community-medlemmer. Medlemmer med roller kan omgå disse tjek. For offentlige rum anbefaler vi at aktivere verificering."
|
||||
|
||||
#. Scope option (radio) that lets the user pick conversation kinds and exclude specific communities.
|
||||
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:71
|
||||
@@ -8638,7 +8638,7 @@ msgstr "Fællesskaber og kanaler, hvor du ikke kan administrere webhooks, er skj
|
||||
msgid "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
msgstr "Fællesskaber i Opdag skal scanne beskeder fra alle medlemmer. Denne indstilling kan ikke ændres, mens Opdag er aktiveret."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:301
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:302
|
||||
msgid "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
msgstr "Fællesskaber i Opdag kræver mindst en bekræftet e-mailadresse. \"Ingen\" kan ikke vælges, mens Opdag er aktiveret."
|
||||
|
||||
@@ -15844,7 +15844,7 @@ msgstr "Videresend medie"
|
||||
msgid "Forward message"
|
||||
msgstr "Videresend besked"
|
||||
|
||||
#: src/features/channel/components/MessageAttachments.tsx:362
|
||||
#: src/features/channel/components/MessageAttachments.tsx:360
|
||||
msgid "Forwarded"
|
||||
msgstr "Videresendt"
|
||||
|
||||
@@ -20844,10 +20844,6 @@ msgstr "Medlemmer fjernes, når de er offline, medmindre de får en rolle."
|
||||
msgid "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
msgstr "Medlemmer med \"{pinMessagesPermissionLabel}\" kan fastgøre beskeder for alle."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:295
|
||||
msgid "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Medlemmer med roller kan omgå disse tjek. Til offentlige rum anbefaler vi at aktivere bekræftelse."
|
||||
|
||||
#. Helper text under the Allow mentions switch in the role editor. {mentionEveryonePermissionLabel} is the localized name of the Mention Everyone permission and should match its label exactly.
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleEditor.tsx:47
|
||||
msgid "Members with the \"{mentionEveryonePermissionLabel}\" permission can always mention roles, regardless of this setting."
|
||||
@@ -25629,12 +25625,12 @@ msgid "Press Continue to use your passkey."
|
||||
msgstr "Tryk på Fortsæt for at bruge din adgangsnøgle."
|
||||
|
||||
#. Label in the channel and chat message reactions.
|
||||
#: src/features/channel/components/MessageReactions.tsx:46
|
||||
#: src/features/channel/components/MessageReactions.tsx:44
|
||||
msgid "press to add reaction"
|
||||
msgstr "tryk for at tilføje reaktion"
|
||||
|
||||
#. Label in the channel and chat message reactions. Keep the tone plain and specific.
|
||||
#: src/features/channel/components/MessageReactions.tsx:42
|
||||
#: src/features/channel/components/MessageReactions.tsx:40
|
||||
msgid "press to remove reaction"
|
||||
msgstr "tryk for at fjerne reaktion"
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ msgstr "... den Kompaktmodus aktivieren. Super!"
|
||||
|
||||
#. Button or menu action label in the channel and chat user message. Keep it concise.
|
||||
#. Suffix after the message text in the forward modal preview when the forwarded message was edited.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:392
|
||||
#: src/features/channel/components/MessageAttachments.tsx:390
|
||||
#: src/features/channel/components/UserMessage.tsx:75
|
||||
#: src/features/messaging/components/modals/ForwardMessagePreview.tsx:26
|
||||
msgid "(edited)"
|
||||
@@ -1051,7 +1051,7 @@ msgid "{count, plural, one {# potential spammer message} other {# potential spam
|
||||
msgstr "{count, plural, one {# potenzielle Spammer-Nachricht} other {# potenzielle Spammer-Nachrichten}}"
|
||||
|
||||
#: src/features/app/components/shared/MessageReactionsContent.tsx:56
|
||||
#: src/features/channel/components/MessageReactions.tsx:146
|
||||
#: src/features/channel/components/MessageReactions.tsx:143
|
||||
msgid "{count, plural, one {# reaction} other {# reactions}}"
|
||||
msgstr "{count, plural, one {# Reaktion} other {# Reaktionen}}"
|
||||
|
||||
@@ -1329,12 +1329,12 @@ msgid "{emojiName}, {reactionCountText}"
|
||||
msgstr "{emojiName}, {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:50
|
||||
#: src/features/channel/components/MessageReactions.tsx:48
|
||||
msgid "{emojiName}: {reactionCountText}"
|
||||
msgstr "{emojiName}: {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}, {actionText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:55
|
||||
#: src/features/channel/components/MessageReactions.tsx:53
|
||||
msgid "{emojiName}: {reactionCountText}, {actionText}"
|
||||
msgstr "{emojiName}: {reactionCountText}, {actionText}"
|
||||
|
||||
@@ -2215,8 +2215,8 @@ msgstr "<0>{username}</0> ist noch in der Gruppe. Versuche es in einem Moment er
|
||||
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the community and channel the message came from.
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the conversation the message came from.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:243
|
||||
#: src/features/channel/components/MessageAttachments.tsx:299
|
||||
#: src/features/channel/components/MessageAttachments.tsx:241
|
||||
#: src/features/channel/components/MessageAttachments.tsx:297
|
||||
msgid "<0>Forwarded from</0>{sourceInfo}"
|
||||
msgstr "<0>Weitergeleitet aus</0>{sourceInfo}"
|
||||
|
||||
@@ -7763,9 +7763,9 @@ msgstr "Wähle aus, was {clientLabel} in deiner Community tun darf. Deaktiviere
|
||||
msgid "Choose what friends see in their active now panel"
|
||||
msgstr "Wähle aus, was Freunde in ihrem Bereich „Jetzt aktiv“ sehen"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:292
|
||||
msgid "Choose what members must have before they can post or DM community members."
|
||||
msgstr "Lege fest, welche Voraussetzungen Mitglieder erfüllen müssen, bevor sie Nachrichten posten oder Community-Mitgliedern DMs senden können."
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:291
|
||||
msgid "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Lege fest, was Mitglieder haben müssen, bevor sie in der Community posten oder Mitglieder per Direktnachricht kontaktieren können. Mitglieder mit Rollen können diese Prüfungen umgehen. Für öffentliche Bereiche empfehlen wir, die Verifizierung zu aktivieren."
|
||||
|
||||
#. Scope option (radio) that lets the user pick conversation kinds and exclude specific communities.
|
||||
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:71
|
||||
@@ -8638,7 +8638,7 @@ msgstr "Communities und Kanäle, in denen du keine Webhooks verwalten kannst, we
|
||||
msgid "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
msgstr "Unter „Entdecken“ aufgeführte Communitys müssen die Nachrichten aller Mitglieder prüfen. Diese Einstellung kann nicht geändert werden, solange „Entdecken“ aktiviert ist."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:301
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:302
|
||||
msgid "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
msgstr "Unter „Entdecken“ aufgeführte Communitys erfordern mindestens eine verifizierte E-Mail-Adresse. „Keine“ kann nicht ausgewählt werden, solange „Entdecken“ aktiviert ist."
|
||||
|
||||
@@ -15844,7 +15844,7 @@ msgstr "Medien weiterleiten"
|
||||
msgid "Forward message"
|
||||
msgstr "Nachricht weiterleiten"
|
||||
|
||||
#: src/features/channel/components/MessageAttachments.tsx:362
|
||||
#: src/features/channel/components/MessageAttachments.tsx:360
|
||||
msgid "Forwarded"
|
||||
msgstr "Weitergeleitet"
|
||||
|
||||
@@ -20844,10 +20844,6 @@ msgstr "Mitglieder werden entfernt, wenn sie offline sind, es sei denn, sie habe
|
||||
msgid "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
msgstr "Mit \"{pinMessagesPermissionLabel}\" können Mitglieder Nachrichten für alle anheften."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:295
|
||||
msgid "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Mitglieder mit Rollen können diese Prüfungen umgehen. Für öffentliche Bereiche empfehlen wir, die Verifizierung zu aktivieren."
|
||||
|
||||
#. Helper text under the Allow mentions switch in the role editor. {mentionEveryonePermissionLabel} is the localized name of the Mention Everyone permission and should match its label exactly.
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleEditor.tsx:47
|
||||
msgid "Members with the \"{mentionEveryonePermissionLabel}\" permission can always mention roles, regardless of this setting."
|
||||
@@ -25629,12 +25625,12 @@ msgid "Press Continue to use your passkey."
|
||||
msgstr "Drücke auf „Weiter“, um deinen Passkey zu verwenden."
|
||||
|
||||
#. Label in the channel and chat message reactions.
|
||||
#: src/features/channel/components/MessageReactions.tsx:46
|
||||
#: src/features/channel/components/MessageReactions.tsx:44
|
||||
msgid "press to add reaction"
|
||||
msgstr "zum Hinzufügen einer Reaktion tippen"
|
||||
|
||||
#. Label in the channel and chat message reactions. Keep the tone plain and specific.
|
||||
#: src/features/channel/components/MessageReactions.tsx:42
|
||||
#: src/features/channel/components/MessageReactions.tsx:40
|
||||
msgid "press to remove reaction"
|
||||
msgstr "zum Entfernen der Reaktion tippen"
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ msgstr "...ενεργοποιήσεις την πυκνή λειτουργία.
|
||||
|
||||
#. Button or menu action label in the channel and chat user message. Keep it concise.
|
||||
#. Suffix after the message text in the forward modal preview when the forwarded message was edited.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:392
|
||||
#: src/features/channel/components/MessageAttachments.tsx:390
|
||||
#: src/features/channel/components/UserMessage.tsx:75
|
||||
#: src/features/messaging/components/modals/ForwardMessagePreview.tsx:26
|
||||
msgid "(edited)"
|
||||
@@ -1051,7 +1051,7 @@ msgid "{count, plural, one {# potential spammer message} other {# potential spam
|
||||
msgstr "{count, plural, one {# πιθανό μήνυμα spam} other {# πιθανά μηνύματα spam}}"
|
||||
|
||||
#: src/features/app/components/shared/MessageReactionsContent.tsx:56
|
||||
#: src/features/channel/components/MessageReactions.tsx:146
|
||||
#: src/features/channel/components/MessageReactions.tsx:143
|
||||
msgid "{count, plural, one {# reaction} other {# reactions}}"
|
||||
msgstr "{count, plural, one {# αντίδραση} other {# αντιδράσεις}}"
|
||||
|
||||
@@ -1329,12 +1329,12 @@ msgid "{emojiName}, {reactionCountText}"
|
||||
msgstr "{emojiName}, {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:50
|
||||
#: src/features/channel/components/MessageReactions.tsx:48
|
||||
msgid "{emojiName}: {reactionCountText}"
|
||||
msgstr "{emojiName}: {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}, {actionText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:55
|
||||
#: src/features/channel/components/MessageReactions.tsx:53
|
||||
msgid "{emojiName}: {reactionCountText}, {actionText}"
|
||||
msgstr "{emojiName}: {reactionCountText}, {actionText}"
|
||||
|
||||
@@ -2215,8 +2215,8 @@ msgstr "Το άτομο <0>{username}</0> είναι ακόμα στην ομά
|
||||
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the community and channel the message came from.
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the conversation the message came from.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:243
|
||||
#: src/features/channel/components/MessageAttachments.tsx:299
|
||||
#: src/features/channel/components/MessageAttachments.tsx:241
|
||||
#: src/features/channel/components/MessageAttachments.tsx:297
|
||||
msgid "<0>Forwarded from</0>{sourceInfo}"
|
||||
msgstr "<0>Προωθήθηκε από</0>{sourceInfo}"
|
||||
|
||||
@@ -7763,9 +7763,9 @@ msgstr "Επίλεξε τι μπορεί να κάνει το {clientLabel} στ
|
||||
msgid "Choose what friends see in their active now panel"
|
||||
msgstr "Επιλέξτε τι βλέπουν οι φίλοι στην ενότητα «Ενεργοί τώρα»"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:292
|
||||
msgid "Choose what members must have before they can post or DM community members."
|
||||
msgstr "Επιλέξτε τι πρέπει να έχουν τα μέλη πριν δημοσιεύσουν ή στείλουν DM σε μέλη της κοινότητας."
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:291
|
||||
msgid "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Επιλέξτε τι πρέπει να έχουν τα μέλη πριν μπορούν να δημοσιεύουν ή να στέλνουν απευθείας μηνύματα σε μέλη της κοινότητας. Τα μέλη με ρόλους μπορούν να παρακάμψουν αυτούς τους ελέγχους. Για δημόσιους χώρους, συνιστούμε την ενεργοποίηση της επαλήθευσης."
|
||||
|
||||
#. Scope option (radio) that lets the user pick conversation kinds and exclude specific communities.
|
||||
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:71
|
||||
@@ -8638,7 +8638,7 @@ msgstr "Οι κοινότητες και τα κανάλια όπου δεν μ
|
||||
msgid "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
msgstr "Οι κοινότητες που εμφανίζονται στην Ανακάλυψη πρέπει να σαρώνουν τα μηνύματα από όλα τα μέλη. Αυτή η ρύθμιση δεν μπορεί να αλλάξει όσο είναι ενεργοποιημένη η Ανακάλυψη."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:301
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:302
|
||||
msgid "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
msgstr "Οι κοινότητες που εμφανίζονται στην Ανακάλυψη απαιτούν τουλάχιστον επαληθευμένο email. Η επιλογή \"Καμία\" δεν είναι διαθέσιμη όσο η Ανακάλυψη είναι ενεργοποιημένη."
|
||||
|
||||
@@ -15844,7 +15844,7 @@ msgstr "Προώθηση πολυμέσων"
|
||||
msgid "Forward message"
|
||||
msgstr "Προώθηση μηνύματος"
|
||||
|
||||
#: src/features/channel/components/MessageAttachments.tsx:362
|
||||
#: src/features/channel/components/MessageAttachments.tsx:360
|
||||
msgid "Forwarded"
|
||||
msgstr "Προωθημένο"
|
||||
|
||||
@@ -20844,10 +20844,6 @@ msgstr "Τα μέλη αφαιρούνται όταν είναι εκτός σύ
|
||||
msgid "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
msgstr "Τα μέλη με το δικαίωμα \"{pinMessagesPermissionLabel}\" μπορούν να καρφιτσώνουν μηνύματα για όλους."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:295
|
||||
msgid "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Τα μέλη με ρόλους μπορούν να παρακάμψουν αυτούς τους ελέγχους. Για δημόσιους χώρους, συνιστούμε την ενεργοποίηση της επαλήθευσης."
|
||||
|
||||
#. Helper text under the Allow mentions switch in the role editor. {mentionEveryonePermissionLabel} is the localized name of the Mention Everyone permission and should match its label exactly.
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleEditor.tsx:47
|
||||
msgid "Members with the \"{mentionEveryonePermissionLabel}\" permission can always mention roles, regardless of this setting."
|
||||
@@ -25629,12 +25625,12 @@ msgid "Press Continue to use your passkey."
|
||||
msgstr "Πατήστε Συνέχεια για να χρησιμοποιήσετε το κλειδί πρόσβασής σας."
|
||||
|
||||
#. Label in the channel and chat message reactions.
|
||||
#: src/features/channel/components/MessageReactions.tsx:46
|
||||
#: src/features/channel/components/MessageReactions.tsx:44
|
||||
msgid "press to add reaction"
|
||||
msgstr "πατήστε για προσθήκη αντίδρασης"
|
||||
|
||||
#. Label in the channel and chat message reactions. Keep the tone plain and specific.
|
||||
#: src/features/channel/components/MessageReactions.tsx:42
|
||||
#: src/features/channel/components/MessageReactions.tsx:40
|
||||
msgid "press to remove reaction"
|
||||
msgstr "πατήστε για κατάργηση αντίδρασης"
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ msgstr "... turn dense mode on. Nice!"
|
||||
|
||||
#. Button or menu action label in the channel and chat user message. Keep it concise.
|
||||
#. Suffix after the message text in the forward modal preview when the forwarded message was edited.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:392
|
||||
#: src/features/channel/components/MessageAttachments.tsx:390
|
||||
#: src/features/channel/components/UserMessage.tsx:75
|
||||
#: src/features/messaging/components/modals/ForwardMessagePreview.tsx:26
|
||||
msgid "(edited)"
|
||||
@@ -1051,7 +1051,7 @@ msgid "{count, plural, one {# potential spammer message} other {# potential spam
|
||||
msgstr "{count, plural, one {# potential spammer message} other {# potential spammer messages}}"
|
||||
|
||||
#: src/features/app/components/shared/MessageReactionsContent.tsx:56
|
||||
#: src/features/channel/components/MessageReactions.tsx:146
|
||||
#: src/features/channel/components/MessageReactions.tsx:143
|
||||
msgid "{count, plural, one {# reaction} other {# reactions}}"
|
||||
msgstr "{count, plural, one {# reaction} other {# reactions}}"
|
||||
|
||||
@@ -1329,12 +1329,12 @@ msgid "{emojiName}, {reactionCountText}"
|
||||
msgstr "{emojiName}, {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:50
|
||||
#: src/features/channel/components/MessageReactions.tsx:48
|
||||
msgid "{emojiName}: {reactionCountText}"
|
||||
msgstr "{emojiName}: {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}, {actionText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:55
|
||||
#: src/features/channel/components/MessageReactions.tsx:53
|
||||
msgid "{emojiName}: {reactionCountText}, {actionText}"
|
||||
msgstr "{emojiName}: {reactionCountText}, {actionText}"
|
||||
|
||||
@@ -2215,8 +2215,8 @@ msgstr "<0>{username}</0> is still in the group. Try again in a moment."
|
||||
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the community and channel the message came from.
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the conversation the message came from.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:243
|
||||
#: src/features/channel/components/MessageAttachments.tsx:299
|
||||
#: src/features/channel/components/MessageAttachments.tsx:241
|
||||
#: src/features/channel/components/MessageAttachments.tsx:297
|
||||
msgid "<0>Forwarded from</0>{sourceInfo}"
|
||||
msgstr "<0>Forwarded from</0>{sourceInfo}"
|
||||
|
||||
@@ -7763,9 +7763,10 @@ msgstr "Choose what {clientLabel} can do in your community. Uncheck any permissi
|
||||
msgid "Choose what friends see in their active now panel"
|
||||
msgstr "Choose what friends see in their active now panel"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:292
|
||||
msgid "Choose what members must have before they can post or DM community members."
|
||||
msgstr "Choose what members must have before they can post or DM community members."
|
||||
# auto-i18n: reviewed unchanged
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:291
|
||||
msgid "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
|
||||
#. Scope option (radio) that lets the user pick conversation kinds and exclude specific communities.
|
||||
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:71
|
||||
@@ -8638,7 +8639,7 @@ msgstr "Communities and channels where you can't manage webhooks are hidden."
|
||||
msgid "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
msgstr "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:301
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:302
|
||||
msgid "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
msgstr "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
|
||||
@@ -15844,7 +15845,7 @@ msgstr "Forward media"
|
||||
msgid "Forward message"
|
||||
msgstr "Forward message"
|
||||
|
||||
#: src/features/channel/components/MessageAttachments.tsx:362
|
||||
#: src/features/channel/components/MessageAttachments.tsx:360
|
||||
msgid "Forwarded"
|
||||
msgstr "Forwarded"
|
||||
|
||||
@@ -20844,10 +20845,6 @@ msgstr "Members are removed when offline unless given a role."
|
||||
msgid "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
msgstr "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:295
|
||||
msgid "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
|
||||
#. Helper text under the Allow mentions switch in the role editor. {mentionEveryonePermissionLabel} is the localized name of the Mention Everyone permission and should match its label exactly.
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleEditor.tsx:47
|
||||
msgid "Members with the \"{mentionEveryonePermissionLabel}\" permission can always mention roles, regardless of this setting."
|
||||
@@ -25629,12 +25626,12 @@ msgid "Press Continue to use your passkey."
|
||||
msgstr "Press Continue to use your passkey."
|
||||
|
||||
#. Label in the channel and chat message reactions.
|
||||
#: src/features/channel/components/MessageReactions.tsx:46
|
||||
#: src/features/channel/components/MessageReactions.tsx:44
|
||||
msgid "press to add reaction"
|
||||
msgstr "press to add reaction"
|
||||
|
||||
#. Label in the channel and chat message reactions. Keep the tone plain and specific.
|
||||
#: src/features/channel/components/MessageReactions.tsx:42
|
||||
#: src/features/channel/components/MessageReactions.tsx:40
|
||||
msgid "press to remove reaction"
|
||||
msgstr "press to remove reaction"
|
||||
|
||||
@@ -29807,7 +29804,6 @@ msgstr "Sending malware or dangerous links"
|
||||
msgid "Sending messages is disabled in this community"
|
||||
msgstr "Sending messages is disabled in this community"
|
||||
|
||||
# auto-i18n: reviewed unchanged
|
||||
#. Description for the stereo microphone switch in the voice settings.
|
||||
#: src/features/voice/utils/noise_suppression/NoiseSuppressionLabels.ts:54
|
||||
msgid "Sends both channels of a stereo microphone. Needs all processing off and a channel at 64 kbps or higher."
|
||||
|
||||
@@ -21,7 +21,7 @@ msgstr "... turn dense mode on. Nice!"
|
||||
|
||||
#. Button or menu action label in the channel and chat user message. Keep it concise.
|
||||
#. Suffix after the message text in the forward modal preview when the forwarded message was edited.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:392
|
||||
#: src/features/channel/components/MessageAttachments.tsx:390
|
||||
#: src/features/channel/components/UserMessage.tsx:75
|
||||
#: src/features/messaging/components/modals/ForwardMessagePreview.tsx:26
|
||||
msgid "(edited)"
|
||||
@@ -1051,7 +1051,7 @@ msgid "{count, plural, one {# potential spammer message} other {# potential spam
|
||||
msgstr "{count, plural, one {# potential spammer message} other {# potential spammer messages}}"
|
||||
|
||||
#: src/features/app/components/shared/MessageReactionsContent.tsx:56
|
||||
#: src/features/channel/components/MessageReactions.tsx:146
|
||||
#: src/features/channel/components/MessageReactions.tsx:143
|
||||
msgid "{count, plural, one {# reaction} other {# reactions}}"
|
||||
msgstr "{count, plural, one {# reaction} other {# reactions}}"
|
||||
|
||||
@@ -1329,12 +1329,12 @@ msgid "{emojiName}, {reactionCountText}"
|
||||
msgstr "{emojiName}, {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:50
|
||||
#: src/features/channel/components/MessageReactions.tsx:48
|
||||
msgid "{emojiName}: {reactionCountText}"
|
||||
msgstr "{emojiName}: {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}, {actionText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:55
|
||||
#: src/features/channel/components/MessageReactions.tsx:53
|
||||
msgid "{emojiName}: {reactionCountText}, {actionText}"
|
||||
msgstr "{emojiName}: {reactionCountText}, {actionText}"
|
||||
|
||||
@@ -2215,8 +2215,8 @@ msgstr "<0>{username}</0> is still in the group. Try again in a moment."
|
||||
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the community and channel the message came from.
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the conversation the message came from.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:243
|
||||
#: src/features/channel/components/MessageAttachments.tsx:299
|
||||
#: src/features/channel/components/MessageAttachments.tsx:241
|
||||
#: src/features/channel/components/MessageAttachments.tsx:297
|
||||
msgid "<0>Forwarded from</0>{sourceInfo}"
|
||||
msgstr "<0>Forwarded from</0>{sourceInfo}"
|
||||
|
||||
@@ -7763,9 +7763,9 @@ msgstr "Choose what {clientLabel} can do in your community. Uncheck any permissi
|
||||
msgid "Choose what friends see in their active now panel"
|
||||
msgstr "Choose what friends see in their active now panel"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:292
|
||||
msgid "Choose what members must have before they can post or DM community members."
|
||||
msgstr "Choose what members must have before they can post or DM community members."
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:291
|
||||
msgid "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
|
||||
#. Scope option (radio) that lets the user pick conversation kinds and exclude specific communities.
|
||||
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:71
|
||||
@@ -8638,7 +8638,7 @@ msgstr "Communities and channels where you can't manage webhooks are hidden."
|
||||
msgid "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
msgstr "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:301
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:302
|
||||
msgid "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
msgstr "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
|
||||
@@ -15844,7 +15844,7 @@ msgstr "Forward media"
|
||||
msgid "Forward message"
|
||||
msgstr "Forward message"
|
||||
|
||||
#: src/features/channel/components/MessageAttachments.tsx:362
|
||||
#: src/features/channel/components/MessageAttachments.tsx:360
|
||||
msgid "Forwarded"
|
||||
msgstr "Forwarded"
|
||||
|
||||
@@ -20844,10 +20844,6 @@ msgstr "Members are removed when offline unless given a role."
|
||||
msgid "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
msgstr "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:295
|
||||
msgid "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
|
||||
#. Helper text under the Allow mentions switch in the role editor. {mentionEveryonePermissionLabel} is the localized name of the Mention Everyone permission and should match its label exactly.
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleEditor.tsx:47
|
||||
msgid "Members with the \"{mentionEveryonePermissionLabel}\" permission can always mention roles, regardless of this setting."
|
||||
@@ -25629,12 +25625,12 @@ msgid "Press Continue to use your passkey."
|
||||
msgstr "Press Continue to use your passkey."
|
||||
|
||||
#. Label in the channel and chat message reactions.
|
||||
#: src/features/channel/components/MessageReactions.tsx:46
|
||||
#: src/features/channel/components/MessageReactions.tsx:44
|
||||
msgid "press to add reaction"
|
||||
msgstr "press to add reaction"
|
||||
|
||||
#. Label in the channel and chat message reactions. Keep the tone plain and specific.
|
||||
#: src/features/channel/components/MessageReactions.tsx:42
|
||||
#: src/features/channel/components/MessageReactions.tsx:40
|
||||
msgid "press to remove reaction"
|
||||
msgstr "press to remove reaction"
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ msgstr "... actives el modo denso. ¡Genial!"
|
||||
|
||||
#. Button or menu action label in the channel and chat user message. Keep it concise.
|
||||
#. Suffix after the message text in the forward modal preview when the forwarded message was edited.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:392
|
||||
#: src/features/channel/components/MessageAttachments.tsx:390
|
||||
#: src/features/channel/components/UserMessage.tsx:75
|
||||
#: src/features/messaging/components/modals/ForwardMessagePreview.tsx:26
|
||||
msgid "(edited)"
|
||||
@@ -1051,7 +1051,7 @@ msgid "{count, plural, one {# potential spammer message} other {# potential spam
|
||||
msgstr "{count, plural, one {# mensaje de un posible remitente de spam} other {# mensajes de posibles remitentes de spam}}"
|
||||
|
||||
#: src/features/app/components/shared/MessageReactionsContent.tsx:56
|
||||
#: src/features/channel/components/MessageReactions.tsx:146
|
||||
#: src/features/channel/components/MessageReactions.tsx:143
|
||||
msgid "{count, plural, one {# reaction} other {# reactions}}"
|
||||
msgstr "{count, plural, one {# reacción} other {# reacciones}}"
|
||||
|
||||
@@ -1329,12 +1329,12 @@ msgid "{emojiName}, {reactionCountText}"
|
||||
msgstr "{emojiName}, {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:50
|
||||
#: src/features/channel/components/MessageReactions.tsx:48
|
||||
msgid "{emojiName}: {reactionCountText}"
|
||||
msgstr "{emojiName}: {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}, {actionText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:55
|
||||
#: src/features/channel/components/MessageReactions.tsx:53
|
||||
msgid "{emojiName}: {reactionCountText}, {actionText}"
|
||||
msgstr "{emojiName}: {reactionCountText}, {actionText}"
|
||||
|
||||
@@ -2215,8 +2215,8 @@ msgstr "<0>{username}</0> sigue en el grupo. Intenta de nuevo en un momento."
|
||||
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the community and channel the message came from.
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the conversation the message came from.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:243
|
||||
#: src/features/channel/components/MessageAttachments.tsx:299
|
||||
#: src/features/channel/components/MessageAttachments.tsx:241
|
||||
#: src/features/channel/components/MessageAttachments.tsx:297
|
||||
msgid "<0>Forwarded from</0>{sourceInfo}"
|
||||
msgstr "<0>Reenviado desde</0>{sourceInfo}"
|
||||
|
||||
@@ -7763,9 +7763,9 @@ msgstr "Elige qué puede hacer {clientLabel} en tu comunidad. Desmarca los permi
|
||||
msgid "Choose what friends see in their active now panel"
|
||||
msgstr "Elige lo que tus amigos ven en su panel de \"Activo ahora\""
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:292
|
||||
msgid "Choose what members must have before they can post or DM community members."
|
||||
msgstr "Elige qué deben tener los miembros antes de que puedan publicar o enviar mensajes directos a los miembros de la comunidad."
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:291
|
||||
msgid "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Elige lo que los miembros deben tener antes de poder publicar o enviar mensajes directos a otros miembros de la comunidad. Los miembros con roles pueden omitir estas verificaciones. Para espacios públicos, recomendamos habilitar la verificación."
|
||||
|
||||
#. Scope option (radio) that lets the user pick conversation kinds and exclude specific communities.
|
||||
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:71
|
||||
@@ -8638,7 +8638,7 @@ msgstr "Las comunidades y canales donde no puedes administrar webhooks están oc
|
||||
msgid "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
msgstr "Las comunidades que aparecen en Descubrir deben analizar los mensajes de todos los miembros. Esta configuración no se puede cambiar mientras Descubrir esté activado."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:301
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:302
|
||||
msgid "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
msgstr "Las comunidades que aparecen en Descubrir requieren al menos un correo electrónico verificado. No se puede seleccionar \"Ninguno\" mientras Descubrir esté activado."
|
||||
|
||||
@@ -15844,7 +15844,7 @@ msgstr "Reenviar archivo multimedia"
|
||||
msgid "Forward message"
|
||||
msgstr "Reenviar mensaje"
|
||||
|
||||
#: src/features/channel/components/MessageAttachments.tsx:362
|
||||
#: src/features/channel/components/MessageAttachments.tsx:360
|
||||
msgid "Forwarded"
|
||||
msgstr "Reenviado"
|
||||
|
||||
@@ -20844,10 +20844,6 @@ msgstr "Los miembros se eliminan cuando están desconectados, a menos que se les
|
||||
msgid "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
msgstr "Los miembros con el permiso \"{pinMessagesPermissionLabel}\" pueden fijar mensajes para todos."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:295
|
||||
msgid "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Los miembros con roles pueden omitir estas verificaciones. Para espacios públicos, recomendamos habilitar la verificación."
|
||||
|
||||
#. Helper text under the Allow mentions switch in the role editor. {mentionEveryonePermissionLabel} is the localized name of the Mention Everyone permission and should match its label exactly.
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleEditor.tsx:47
|
||||
msgid "Members with the \"{mentionEveryonePermissionLabel}\" permission can always mention roles, regardless of this setting."
|
||||
@@ -25629,12 +25625,12 @@ msgid "Press Continue to use your passkey."
|
||||
msgstr "Presiona Continuar para usar tu llave de acceso."
|
||||
|
||||
#. Label in the channel and chat message reactions.
|
||||
#: src/features/channel/components/MessageReactions.tsx:46
|
||||
#: src/features/channel/components/MessageReactions.tsx:44
|
||||
msgid "press to add reaction"
|
||||
msgstr "toca para agregar una reacción"
|
||||
|
||||
#. Label in the channel and chat message reactions. Keep the tone plain and specific.
|
||||
#: src/features/channel/components/MessageReactions.tsx:42
|
||||
#: src/features/channel/components/MessageReactions.tsx:40
|
||||
msgid "press to remove reaction"
|
||||
msgstr "toca para eliminar la reacción"
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ msgstr "... actives el modo denso. ¡Genial!"
|
||||
|
||||
#. Button or menu action label in the channel and chat user message. Keep it concise.
|
||||
#. Suffix after the message text in the forward modal preview when the forwarded message was edited.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:392
|
||||
#: src/features/channel/components/MessageAttachments.tsx:390
|
||||
#: src/features/channel/components/UserMessage.tsx:75
|
||||
#: src/features/messaging/components/modals/ForwardMessagePreview.tsx:26
|
||||
msgid "(edited)"
|
||||
@@ -1051,7 +1051,7 @@ msgid "{count, plural, one {# potential spammer message} other {# potential spam
|
||||
msgstr "{count, plural, one {# mensaje de un posible remitente de spam} other {# mensajes de posibles remitentes de spam}}"
|
||||
|
||||
#: src/features/app/components/shared/MessageReactionsContent.tsx:56
|
||||
#: src/features/channel/components/MessageReactions.tsx:146
|
||||
#: src/features/channel/components/MessageReactions.tsx:143
|
||||
msgid "{count, plural, one {# reaction} other {# reactions}}"
|
||||
msgstr "{count, plural, one {# reacción} other {# reacciones}}"
|
||||
|
||||
@@ -1329,12 +1329,12 @@ msgid "{emojiName}, {reactionCountText}"
|
||||
msgstr "{emojiName}, {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:50
|
||||
#: src/features/channel/components/MessageReactions.tsx:48
|
||||
msgid "{emojiName}: {reactionCountText}"
|
||||
msgstr "{emojiName}: {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}, {actionText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:55
|
||||
#: src/features/channel/components/MessageReactions.tsx:53
|
||||
msgid "{emojiName}: {reactionCountText}, {actionText}"
|
||||
msgstr "{emojiName}: {reactionCountText}, {actionText}"
|
||||
|
||||
@@ -2215,8 +2215,8 @@ msgstr "<0>{username}</0> sigue en el grupo. Inténtalo de nuevo en un momento."
|
||||
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the community and channel the message came from.
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the conversation the message came from.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:243
|
||||
#: src/features/channel/components/MessageAttachments.tsx:299
|
||||
#: src/features/channel/components/MessageAttachments.tsx:241
|
||||
#: src/features/channel/components/MessageAttachments.tsx:297
|
||||
msgid "<0>Forwarded from</0>{sourceInfo}"
|
||||
msgstr "<0>Reenviado desde</0>{sourceInfo}"
|
||||
|
||||
@@ -7763,9 +7763,9 @@ msgstr "Elige qué puede hacer {clientLabel} en tu comunidad. Desmarca los permi
|
||||
msgid "Choose what friends see in their active now panel"
|
||||
msgstr "Elige lo que ven tus amigos en su panel de actividad actual"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:292
|
||||
msgid "Choose what members must have before they can post or DM community members."
|
||||
msgstr "Elige qué deben tener los miembros antes de que puedan publicar o enviar mensajes directos a los miembros de la comunidad."
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:291
|
||||
msgid "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Elige qué deben tener los miembros antes de poder publicar o enviar mensajes directos a otros miembros de la comunidad. Los miembros con roles pueden omitir estas comprobaciones. Para espacios públicos, recomendamos activar la verificación."
|
||||
|
||||
#. Scope option (radio) that lets the user pick conversation kinds and exclude specific communities.
|
||||
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:71
|
||||
@@ -8638,7 +8638,7 @@ msgstr "Las comunidades y canales donde no puedes administrar webhooks están oc
|
||||
msgid "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
msgstr "Las comunidades que aparecen en Descubrir deben analizar los mensajes de todos los miembros. Este ajuste no se puede cambiar mientras Descubrir esté activado."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:301
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:302
|
||||
msgid "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
msgstr "Las comunidades que aparecen en Descubrir requieren al menos un correo electrónico verificado. No se puede seleccionar Ninguno mientras Descubrir esté activado."
|
||||
|
||||
@@ -15844,7 +15844,7 @@ msgstr "Reenviar contenido multimedia"
|
||||
msgid "Forward message"
|
||||
msgstr "Reenviar mensaje"
|
||||
|
||||
#: src/features/channel/components/MessageAttachments.tsx:362
|
||||
#: src/features/channel/components/MessageAttachments.tsx:360
|
||||
msgid "Forwarded"
|
||||
msgstr "Reenviado"
|
||||
|
||||
@@ -20844,10 +20844,6 @@ msgstr "Los miembros se eliminan al desconectarse a menos que se les asigne un r
|
||||
msgid "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
msgstr "Los miembros con el permiso \"{pinMessagesPermissionLabel}\" pueden fijar mensajes para todos."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:295
|
||||
msgid "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Los miembros con roles pueden omitir estas comprobaciones. Para espacios públicos, recomendamos activar la verificación."
|
||||
|
||||
#. Helper text under the Allow mentions switch in the role editor. {mentionEveryonePermissionLabel} is the localized name of the Mention Everyone permission and should match its label exactly.
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleEditor.tsx:47
|
||||
msgid "Members with the \"{mentionEveryonePermissionLabel}\" permission can always mention roles, regardless of this setting."
|
||||
@@ -25629,12 +25625,12 @@ msgid "Press Continue to use your passkey."
|
||||
msgstr "Pulsa Continuar para usar tu clave de acceso."
|
||||
|
||||
#. Label in the channel and chat message reactions.
|
||||
#: src/features/channel/components/MessageReactions.tsx:46
|
||||
#: src/features/channel/components/MessageReactions.tsx:44
|
||||
msgid "press to add reaction"
|
||||
msgstr "pulsa para añadir una reacción"
|
||||
|
||||
#. Label in the channel and chat message reactions. Keep the tone plain and specific.
|
||||
#: src/features/channel/components/MessageReactions.tsx:42
|
||||
#: src/features/channel/components/MessageReactions.tsx:40
|
||||
msgid "press to remove reaction"
|
||||
msgstr "pulsa para eliminar la reacción"
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ msgstr "...otat tiiviin tilan käyttöön. Hienoa!"
|
||||
|
||||
#. Button or menu action label in the channel and chat user message. Keep it concise.
|
||||
#. Suffix after the message text in the forward modal preview when the forwarded message was edited.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:392
|
||||
#: src/features/channel/components/MessageAttachments.tsx:390
|
||||
#: src/features/channel/components/UserMessage.tsx:75
|
||||
#: src/features/messaging/components/modals/ForwardMessagePreview.tsx:26
|
||||
msgid "(edited)"
|
||||
@@ -1051,7 +1051,7 @@ msgid "{count, plural, one {# potential spammer message} other {# potential spam
|
||||
msgstr "{count, plural, one {# mahdollinen roskapostiviesti} other {# mahdollista roskapostiviestiä}}"
|
||||
|
||||
#: src/features/app/components/shared/MessageReactionsContent.tsx:56
|
||||
#: src/features/channel/components/MessageReactions.tsx:146
|
||||
#: src/features/channel/components/MessageReactions.tsx:143
|
||||
msgid "{count, plural, one {# reaction} other {# reactions}}"
|
||||
msgstr "{count, plural, one {# reaktio} other {# reaktiota}}"
|
||||
|
||||
@@ -1329,12 +1329,12 @@ msgid "{emojiName}, {reactionCountText}"
|
||||
msgstr "{emojiName}, {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:50
|
||||
#: src/features/channel/components/MessageReactions.tsx:48
|
||||
msgid "{emojiName}: {reactionCountText}"
|
||||
msgstr "{emojiName}: {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}, {actionText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:55
|
||||
#: src/features/channel/components/MessageReactions.tsx:53
|
||||
msgid "{emojiName}: {reactionCountText}, {actionText}"
|
||||
msgstr "{emojiName}: {reactionCountText}, {actionText}"
|
||||
|
||||
@@ -2215,8 +2215,8 @@ msgstr "<0>{username}</0> on edelleen ryhmässä. Yritä uudelleen hetken kulutt
|
||||
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the community and channel the message came from.
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the conversation the message came from.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:243
|
||||
#: src/features/channel/components/MessageAttachments.tsx:299
|
||||
#: src/features/channel/components/MessageAttachments.tsx:241
|
||||
#: src/features/channel/components/MessageAttachments.tsx:297
|
||||
msgid "<0>Forwarded from</0>{sourceInfo}"
|
||||
msgstr "<0>Välitetty kohteesta</0>{sourceInfo}"
|
||||
|
||||
@@ -7763,9 +7763,9 @@ msgstr "Valitse, mitä {clientLabel} voi tehdä yhteisössäsi. Poista valinta k
|
||||
msgid "Choose what friends see in their active now panel"
|
||||
msgstr "Valitse, mitä kaverit näkevät Aktiiviset nyt -paneelissaan"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:292
|
||||
msgid "Choose what members must have before they can post or DM community members."
|
||||
msgstr "Valitse, mitä jäsenillä on oltava, ennen kuin he voivat julkaista tai lähettää yksityisviestejä yhteisön jäsenille."
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:291
|
||||
msgid "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Valitse, mitä jäsenillä on oltava ennen kuin he voivat lähettää viestejä tai lähettää yksityisviestejä yhteisön jäsenille. Roolien jäsenet voivat ohittaa nämä tarkistukset. Julkisia tiloja varten suosittelemme vahvistuksen käyttöönottoa."
|
||||
|
||||
#. Scope option (radio) that lets the user pick conversation kinds and exclude specific communities.
|
||||
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:71
|
||||
@@ -8638,7 +8638,7 @@ msgstr "Yhteisöt ja kanavat, joissa et voi hallita webhookeja, on piilotettu."
|
||||
msgid "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
msgstr "Löydä-osiossa listattujen yhteisöjen on tarkistettava kaikkien jäsenten viestit. Tätä asetusta ei voi muuttaa, kun Löydä-osio on käytössä."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:301
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:302
|
||||
msgid "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
msgstr "Löydä-osiossa listatut yhteisöt edellyttävät vähintään sähköpostin vahvistamista. Vaihtoehtoa \"Ei mitään\" ei voi valita, kun Löydä-osio on käytössä."
|
||||
|
||||
@@ -15844,7 +15844,7 @@ msgstr "Välitä media"
|
||||
msgid "Forward message"
|
||||
msgstr "Välitä viesti"
|
||||
|
||||
#: src/features/channel/components/MessageAttachments.tsx:362
|
||||
#: src/features/channel/components/MessageAttachments.tsx:360
|
||||
msgid "Forwarded"
|
||||
msgstr "Välitetty"
|
||||
|
||||
@@ -20844,10 +20844,6 @@ msgstr "Jäsenet poistetaan, kun he ovat offline-tilassa, ellei heille ole annet
|
||||
msgid "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
msgstr "Jäsenet, joilla on oikeus \"{pinMessagesPermissionLabel}\", voivat kiinnittää viestejä kaikkien nähtäville."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:295
|
||||
msgid "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Jäsenet, joilla on rooli, voivat ohittaa nämä tarkistukset. Julkisissa tiloissa suosittelemme ottamaan vahvistuksen käyttöön."
|
||||
|
||||
#. Helper text under the Allow mentions switch in the role editor. {mentionEveryonePermissionLabel} is the localized name of the Mention Everyone permission and should match its label exactly.
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleEditor.tsx:47
|
||||
msgid "Members with the \"{mentionEveryonePermissionLabel}\" permission can always mention roles, regardless of this setting."
|
||||
@@ -25629,12 +25625,12 @@ msgid "Press Continue to use your passkey."
|
||||
msgstr "Paina Jatka käyttääksesi pääsyavaintasi."
|
||||
|
||||
#. Label in the channel and chat message reactions.
|
||||
#: src/features/channel/components/MessageReactions.tsx:46
|
||||
#: src/features/channel/components/MessageReactions.tsx:44
|
||||
msgid "press to add reaction"
|
||||
msgstr "lisää reaktio painamalla"
|
||||
|
||||
#. Label in the channel and chat message reactions. Keep the tone plain and specific.
|
||||
#: src/features/channel/components/MessageReactions.tsx:42
|
||||
#: src/features/channel/components/MessageReactions.tsx:40
|
||||
msgid "press to remove reaction"
|
||||
msgstr "poista reaktio painamalla"
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ msgstr "... activer le mode dense. Chouette !"
|
||||
|
||||
#. Button or menu action label in the channel and chat user message. Keep it concise.
|
||||
#. Suffix after the message text in the forward modal preview when the forwarded message was edited.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:392
|
||||
#: src/features/channel/components/MessageAttachments.tsx:390
|
||||
#: src/features/channel/components/UserMessage.tsx:75
|
||||
#: src/features/messaging/components/modals/ForwardMessagePreview.tsx:26
|
||||
msgid "(edited)"
|
||||
@@ -1051,7 +1051,7 @@ msgid "{count, plural, one {# potential spammer message} other {# potential spam
|
||||
msgstr "{count, plural, one {# message d’une personne susceptible d’envoyer du spam} other {# messages de personnes susceptibles d’envoyer du spam}}"
|
||||
|
||||
#: src/features/app/components/shared/MessageReactionsContent.tsx:56
|
||||
#: src/features/channel/components/MessageReactions.tsx:146
|
||||
#: src/features/channel/components/MessageReactions.tsx:143
|
||||
msgid "{count, plural, one {# reaction} other {# reactions}}"
|
||||
msgstr "{count, plural, one {# réaction} other {# réactions}}"
|
||||
|
||||
@@ -1329,12 +1329,12 @@ msgid "{emojiName}, {reactionCountText}"
|
||||
msgstr "{emojiName}, {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:50
|
||||
#: src/features/channel/components/MessageReactions.tsx:48
|
||||
msgid "{emojiName}: {reactionCountText}"
|
||||
msgstr "{emojiName} : {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}, {actionText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:55
|
||||
#: src/features/channel/components/MessageReactions.tsx:53
|
||||
msgid "{emojiName}: {reactionCountText}, {actionText}"
|
||||
msgstr "{emojiName} : {reactionCountText}, {actionText}"
|
||||
|
||||
@@ -2215,8 +2215,8 @@ msgstr "<0>{username}</0> est toujours dans le groupe. Réessayez dans un instan
|
||||
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the community and channel the message came from.
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the conversation the message came from.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:243
|
||||
#: src/features/channel/components/MessageAttachments.tsx:299
|
||||
#: src/features/channel/components/MessageAttachments.tsx:241
|
||||
#: src/features/channel/components/MessageAttachments.tsx:297
|
||||
msgid "<0>Forwarded from</0>{sourceInfo}"
|
||||
msgstr "<0>Transféré depuis</0>{sourceInfo}"
|
||||
|
||||
@@ -7763,9 +7763,9 @@ msgstr "Choisissez ce que {clientLabel} peut faire dans votre communauté. Déco
|
||||
msgid "Choose what friends see in their active now panel"
|
||||
msgstr "Choisissez ce que vos amis voient dans leur panneau « Actif en ce moment »"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:292
|
||||
msgid "Choose what members must have before they can post or DM community members."
|
||||
msgstr "Choisissez les conditions à remplir pour publier ou envoyer des messages privés aux membres de la communauté."
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:291
|
||||
msgid "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Choisissez ce que les membres doivent avoir avant de pouvoir publier ou envoyer des messages directs aux membres de la communauté. Les membres ayant des rôles peuvent contourner ces vérifications. Pour les espaces publics, nous recommandons d'activer la vérification."
|
||||
|
||||
#. Scope option (radio) that lets the user pick conversation kinds and exclude specific communities.
|
||||
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:71
|
||||
@@ -8638,7 +8638,7 @@ msgstr "Les communautés et chaînes où vous ne pouvez pas gérer les webhooks
|
||||
msgid "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
msgstr "Les communautés présentes dans Découverte doivent analyser les messages de tous les membres. Ce paramètre ne peut pas être modifié tant que Découverte est activée."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:301
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:302
|
||||
msgid "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
msgstr "Les communautés présentes dans Découverte doivent exiger au minimum la vérification de l’adresse e-mail. L’option « Aucun » ne peut pas être sélectionnée tant que Découverte est activée."
|
||||
|
||||
@@ -15844,7 +15844,7 @@ msgstr "Transférer le média"
|
||||
msgid "Forward message"
|
||||
msgstr "Transférer le message"
|
||||
|
||||
#: src/features/channel/components/MessageAttachments.tsx:362
|
||||
#: src/features/channel/components/MessageAttachments.tsx:360
|
||||
msgid "Forwarded"
|
||||
msgstr "Transféré"
|
||||
|
||||
@@ -20844,10 +20844,6 @@ msgstr "Les membres sont retirés de la communauté lorsqu’ils passent hors li
|
||||
msgid "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
msgstr "Les membres disposant de la permission « {pinMessagesPermissionLabel} » peuvent épingler des messages pour tout le monde."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:295
|
||||
msgid "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Les membres avec des rôles peuvent contourner ces vérifications. Pour les espaces publics, nous recommandons d'activer la vérification."
|
||||
|
||||
#. Helper text under the Allow mentions switch in the role editor. {mentionEveryonePermissionLabel} is the localized name of the Mention Everyone permission and should match its label exactly.
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleEditor.tsx:47
|
||||
msgid "Members with the \"{mentionEveryonePermissionLabel}\" permission can always mention roles, regardless of this setting."
|
||||
@@ -25629,12 +25625,12 @@ msgid "Press Continue to use your passkey."
|
||||
msgstr "Appuyez sur Continuer pour utiliser votre clé d'accès."
|
||||
|
||||
#. Label in the channel and chat message reactions.
|
||||
#: src/features/channel/components/MessageReactions.tsx:46
|
||||
#: src/features/channel/components/MessageReactions.tsx:44
|
||||
msgid "press to add reaction"
|
||||
msgstr "appuyer pour ajouter une réaction"
|
||||
|
||||
#. Label in the channel and chat message reactions. Keep the tone plain and specific.
|
||||
#: src/features/channel/components/MessageReactions.tsx:42
|
||||
#: src/features/channel/components/MessageReactions.tsx:40
|
||||
msgid "press to remove reaction"
|
||||
msgstr "appuyer pour supprimer la réaction"
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ msgstr "... להפעיל מצב צפוף. יפה!"
|
||||
|
||||
#. Button or menu action label in the channel and chat user message. Keep it concise.
|
||||
#. Suffix after the message text in the forward modal preview when the forwarded message was edited.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:392
|
||||
#: src/features/channel/components/MessageAttachments.tsx:390
|
||||
#: src/features/channel/components/UserMessage.tsx:75
|
||||
#: src/features/messaging/components/modals/ForwardMessagePreview.tsx:26
|
||||
msgid "(edited)"
|
||||
@@ -1051,7 +1051,7 @@ msgid "{count, plural, one {# potential spammer message} other {# potential spam
|
||||
msgstr "{count, plural, one {# הודעת ספאם אפשרית} other {# הודעות ספאם אפשריות}}"
|
||||
|
||||
#: src/features/app/components/shared/MessageReactionsContent.tsx:56
|
||||
#: src/features/channel/components/MessageReactions.tsx:146
|
||||
#: src/features/channel/components/MessageReactions.tsx:143
|
||||
msgid "{count, plural, one {# reaction} other {# reactions}}"
|
||||
msgstr "{count, plural, one {# ריאקציה} other {# ריאקציות}}"
|
||||
|
||||
@@ -1329,12 +1329,12 @@ msgid "{emojiName}, {reactionCountText}"
|
||||
msgstr "{emojiName}, {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:50
|
||||
#: src/features/channel/components/MessageReactions.tsx:48
|
||||
msgid "{emojiName}: {reactionCountText}"
|
||||
msgstr "{emojiName}: {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}, {actionText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:55
|
||||
#: src/features/channel/components/MessageReactions.tsx:53
|
||||
msgid "{emojiName}: {reactionCountText}, {actionText}"
|
||||
msgstr "{emojiName}: {reactionCountText}, {actionText}"
|
||||
|
||||
@@ -2215,8 +2215,8 @@ msgstr "<0>{username}</0> עדיין בקבוצה. נסה שוב בעוד רגע
|
||||
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the community and channel the message came from.
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the conversation the message came from.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:243
|
||||
#: src/features/channel/components/MessageAttachments.tsx:299
|
||||
#: src/features/channel/components/MessageAttachments.tsx:241
|
||||
#: src/features/channel/components/MessageAttachments.tsx:297
|
||||
msgid "<0>Forwarded from</0>{sourceInfo}"
|
||||
msgstr "<0>הועבר מתוך</0>{sourceInfo}"
|
||||
|
||||
@@ -7763,9 +7763,9 @@ msgstr "בחר מה {clientLabel} יכול לעשות בקהילה שלך. בט
|
||||
msgid "Choose what friends see in their active now panel"
|
||||
msgstr "בחר מה חברים רואים בחלונית \"פעילים כעת\" שלהם"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:292
|
||||
msgid "Choose what members must have before they can post or DM community members."
|
||||
msgstr "בחר מה נדרש מחברים לפני שיוכלו לשלוח הודעות בערוצים או הודעות פרטיות לחברי הקהילה."
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:291
|
||||
msgid "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "בחר מה חברי הקהילה חייבים לעמוד בו לפני שהם יכולים לפרסם או לשלוח הודעות פרטיות לחברי קהילה אחרים. חברים עם תפקידים יכולים לעקוף את הבדיקות הללו. עבור חללים ציבוריים, אנו ממליצים להפעיל אימות."
|
||||
|
||||
#. Scope option (radio) that lets the user pick conversation kinds and exclude specific communities.
|
||||
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:71
|
||||
@@ -8638,7 +8638,7 @@ msgstr "קהילות וערוצים שבהם אינך יכול לנהל Webhooks
|
||||
msgid "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
msgstr "קהילות המופיעות בגילוי נדרשות לסרוק הודעות מכל החברים. לא ניתן לשנות הגדרה זו כל עוד הגילוי מופעל."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:301
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:302
|
||||
msgid "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
msgstr "קהילות המופיעות בגילוי דורשות אימייל מאומת לפחות. לא ניתן לבחור באפשרות \"ללא\" כשהגילוי מופעל."
|
||||
|
||||
@@ -15844,7 +15844,7 @@ msgstr "העבר מדיה"
|
||||
msgid "Forward message"
|
||||
msgstr "העברת הודעה"
|
||||
|
||||
#: src/features/channel/components/MessageAttachments.tsx:362
|
||||
#: src/features/channel/components/MessageAttachments.tsx:360
|
||||
msgid "Forwarded"
|
||||
msgstr "הועבר"
|
||||
|
||||
@@ -20844,10 +20844,6 @@ msgstr "חברים יוסרו כשהם לא מקוונים, אלא אם כן י
|
||||
msgid "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
msgstr "חברים עם הרשאת \"{pinMessagesPermissionLabel}\" יכולים להצמיד הודעות עבור כולם."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:295
|
||||
msgid "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "חברים עם תפקידים יכולים לעקוף את הבדיקות האלה. עבור מרחבים ציבוריים, אנו ממליצים להפעיל אימות."
|
||||
|
||||
#. Helper text under the Allow mentions switch in the role editor. {mentionEveryonePermissionLabel} is the localized name of the Mention Everyone permission and should match its label exactly.
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleEditor.tsx:47
|
||||
msgid "Members with the \"{mentionEveryonePermissionLabel}\" permission can always mention roles, regardless of this setting."
|
||||
@@ -25629,12 +25625,12 @@ msgid "Press Continue to use your passkey."
|
||||
msgstr "לחץ על המשך כדי להשתמש במפתח הגישה שלך."
|
||||
|
||||
#. Label in the channel and chat message reactions.
|
||||
#: src/features/channel/components/MessageReactions.tsx:46
|
||||
#: src/features/channel/components/MessageReactions.tsx:44
|
||||
msgid "press to add reaction"
|
||||
msgstr "לחץ כדי להוסיף ריאקציה"
|
||||
|
||||
#. Label in the channel and chat message reactions. Keep the tone plain and specific.
|
||||
#: src/features/channel/components/MessageReactions.tsx:42
|
||||
#: src/features/channel/components/MessageReactions.tsx:40
|
||||
msgid "press to remove reaction"
|
||||
msgstr "לחץ כדי להסיר ריאקציה"
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ msgstr "... सघन मोड चालू करें। बढ़िया!
|
||||
|
||||
#. Button or menu action label in the channel and chat user message. Keep it concise.
|
||||
#. Suffix after the message text in the forward modal preview when the forwarded message was edited.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:392
|
||||
#: src/features/channel/components/MessageAttachments.tsx:390
|
||||
#: src/features/channel/components/UserMessage.tsx:75
|
||||
#: src/features/messaging/components/modals/ForwardMessagePreview.tsx:26
|
||||
msgid "(edited)"
|
||||
@@ -1051,7 +1051,7 @@ msgid "{count, plural, one {# potential spammer message} other {# potential spam
|
||||
msgstr "{count, plural, one {# संभावित स्पैमर का मैसेज} other {# संभावित स्पैमर के मैसेज}}"
|
||||
|
||||
#: src/features/app/components/shared/MessageReactionsContent.tsx:56
|
||||
#: src/features/channel/components/MessageReactions.tsx:146
|
||||
#: src/features/channel/components/MessageReactions.tsx:143
|
||||
msgid "{count, plural, one {# reaction} other {# reactions}}"
|
||||
msgstr "{count, plural, one {# रिएक्शन} other {# रिएक्शन}}"
|
||||
|
||||
@@ -1329,12 +1329,12 @@ msgid "{emojiName}, {reactionCountText}"
|
||||
msgstr "{emojiName}, {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:50
|
||||
#: src/features/channel/components/MessageReactions.tsx:48
|
||||
msgid "{emojiName}: {reactionCountText}"
|
||||
msgstr "{emojiName}: {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}, {actionText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:55
|
||||
#: src/features/channel/components/MessageReactions.tsx:53
|
||||
msgid "{emojiName}: {reactionCountText}, {actionText}"
|
||||
msgstr "{emojiName}: {reactionCountText}, {actionText}"
|
||||
|
||||
@@ -2215,8 +2215,8 @@ msgstr "<0>{username}</0> अभी भी ग्रुप में है।
|
||||
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the community and channel the message came from.
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the conversation the message came from.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:243
|
||||
#: src/features/channel/components/MessageAttachments.tsx:299
|
||||
#: src/features/channel/components/MessageAttachments.tsx:241
|
||||
#: src/features/channel/components/MessageAttachments.tsx:297
|
||||
msgid "<0>Forwarded from</0>{sourceInfo}"
|
||||
msgstr "{sourceInfo}<0>से फ़ॉरवर्ड किया गया</0>"
|
||||
|
||||
@@ -7763,9 +7763,9 @@ msgstr "चुनें कि {clientLabel} आपकी कम्युनि
|
||||
msgid "Choose what friends see in their active now panel"
|
||||
msgstr "चुनें कि दोस्त अपने अभी सक्रिय पैनल में क्या देखें"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:292
|
||||
msgid "Choose what members must have before they can post or DM community members."
|
||||
msgstr "चुनें कि सदस्यों को पोस्ट करने या कम्युनिटी के सदस्यों को DM करने से पहले क्या करना होगा।"
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:291
|
||||
msgid "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "सदस्य पोस्ट करने या समुदाय के सदस्यों को सीधे संदेश भेजने से पहले उनके पास क्या होना चाहिए, उसे चुनें। भूमिकाओं वाले सदस्य इन जांचों को बायपास कर सकते हैं। सार्वजनिक स्थानों के लिए, हम सत्यापन सक्षम करने की सलाह देते हैं।"
|
||||
|
||||
#. Scope option (radio) that lets the user pick conversation kinds and exclude specific communities.
|
||||
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:71
|
||||
@@ -8638,7 +8638,7 @@ msgstr "जिन समुदायों और चैनलों में
|
||||
msgid "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
msgstr "डिस्कवरी में लिस्ट की गई कम्युनिटी के लिए सभी सदस्यों के मैसेज स्कैन करना ज़रूरी है। डिस्कवरी चालू होने पर यह सेटिंग बदली नहीं जा सकती।"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:301
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:302
|
||||
msgid "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
msgstr "डिस्कवरी में लिस्ट की गई कम्युनिटी के लिए कम से कम ईमेल वेरिफ़िकेशन ज़रूरी है। डिस्कवरी चालू रहने तक \"कोई नहीं\" नहीं चुना जा सकता।"
|
||||
|
||||
@@ -15844,7 +15844,7 @@ msgstr "मीडिया फ़ॉरवर्ड करें"
|
||||
msgid "Forward message"
|
||||
msgstr "मैसेज फ़ॉरवर्ड करें"
|
||||
|
||||
#: src/features/channel/components/MessageAttachments.tsx:362
|
||||
#: src/features/channel/components/MessageAttachments.tsx:360
|
||||
msgid "Forwarded"
|
||||
msgstr "फ़ॉरवर्ड किया गया"
|
||||
|
||||
@@ -20844,10 +20844,6 @@ msgstr "सदस्यों को ऑफ़लाइन होने पर
|
||||
msgid "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
msgstr "जिन सदस्यों के पास \"{pinMessagesPermissionLabel}\" है, वे सभी के लिए मैसेज पिन कर सकते हैं।"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:295
|
||||
msgid "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "रोल वाले सदस्य इन जाँचों को बायपास कर सकते हैं। सार्वजनिक जगहों के लिए, हम वेरिफ़िकेशन चालू करने की सलाह देते हैं।"
|
||||
|
||||
#. Helper text under the Allow mentions switch in the role editor. {mentionEveryonePermissionLabel} is the localized name of the Mention Everyone permission and should match its label exactly.
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleEditor.tsx:47
|
||||
msgid "Members with the \"{mentionEveryonePermissionLabel}\" permission can always mention roles, regardless of this setting."
|
||||
@@ -25629,12 +25625,12 @@ msgid "Press Continue to use your passkey."
|
||||
msgstr "अपनी पासकी का उपयोग करने के लिए 'जारी रखें' दबाएँ।"
|
||||
|
||||
#. Label in the channel and chat message reactions.
|
||||
#: src/features/channel/components/MessageReactions.tsx:46
|
||||
#: src/features/channel/components/MessageReactions.tsx:44
|
||||
msgid "press to add reaction"
|
||||
msgstr "रिएक्शन जोड़ने के लिए दबाएँ"
|
||||
|
||||
#. Label in the channel and chat message reactions. Keep the tone plain and specific.
|
||||
#: src/features/channel/components/MessageReactions.tsx:42
|
||||
#: src/features/channel/components/MessageReactions.tsx:40
|
||||
msgid "press to remove reaction"
|
||||
msgstr "रिएक्शन हटाने के लिए दबाएँ"
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ msgstr "... uključite zbijeni način rada. Super!"
|
||||
|
||||
#. Button or menu action label in the channel and chat user message. Keep it concise.
|
||||
#. Suffix after the message text in the forward modal preview when the forwarded message was edited.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:392
|
||||
#: src/features/channel/components/MessageAttachments.tsx:390
|
||||
#: src/features/channel/components/UserMessage.tsx:75
|
||||
#: src/features/messaging/components/modals/ForwardMessagePreview.tsx:26
|
||||
msgid "(edited)"
|
||||
@@ -1051,7 +1051,7 @@ msgid "{count, plural, one {# potential spammer message} other {# potential spam
|
||||
msgstr "{count, plural, one {# moguća neželjena poruka} few {# moguće neželjene poruke} other {# mogućih neželjenih poruka}}"
|
||||
|
||||
#: src/features/app/components/shared/MessageReactionsContent.tsx:56
|
||||
#: src/features/channel/components/MessageReactions.tsx:146
|
||||
#: src/features/channel/components/MessageReactions.tsx:143
|
||||
msgid "{count, plural, one {# reaction} other {# reactions}}"
|
||||
msgstr "{count, plural, one {# reakcija} few {# reakcije} other {# reakcija}}"
|
||||
|
||||
@@ -1329,12 +1329,12 @@ msgid "{emojiName}, {reactionCountText}"
|
||||
msgstr "{emojiName}, {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:50
|
||||
#: src/features/channel/components/MessageReactions.tsx:48
|
||||
msgid "{emojiName}: {reactionCountText}"
|
||||
msgstr "{emojiName}: {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}, {actionText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:55
|
||||
#: src/features/channel/components/MessageReactions.tsx:53
|
||||
msgid "{emojiName}: {reactionCountText}, {actionText}"
|
||||
msgstr "{emojiName}: {reactionCountText}, {actionText}"
|
||||
|
||||
@@ -2215,8 +2215,8 @@ msgstr "<0>{username}</0> je i dalje u grupi. Pokušajte ponovno za trenutak."
|
||||
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the community and channel the message came from.
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the conversation the message came from.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:243
|
||||
#: src/features/channel/components/MessageAttachments.tsx:299
|
||||
#: src/features/channel/components/MessageAttachments.tsx:241
|
||||
#: src/features/channel/components/MessageAttachments.tsx:297
|
||||
msgid "<0>Forwarded from</0>{sourceInfo}"
|
||||
msgstr "<0>Proslijeđeno iz</0>{sourceInfo}"
|
||||
|
||||
@@ -7763,9 +7763,9 @@ msgstr "Odaberite što {clientLabel} može raditi u vašoj zajednici. Odznačite
|
||||
msgid "Choose what friends see in their active now panel"
|
||||
msgstr "Odaberite što prijatelji vide na ploči \"Aktivno sada\""
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:292
|
||||
msgid "Choose what members must have before they can post or DM community members."
|
||||
msgstr "Odaberite što članovi moraju imati prije nego što mogu objavljivati ili slati izravne poruke članovima zajednice."
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:291
|
||||
msgid "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Odaberite što članovi moraju imati prije nego što mogu objavljivati ili slati privatne poruke članovima zajednice. Članovi s ulogama mogu zaobići ove provjere. Za javne prostore preporučujemo omogućavanje provjere."
|
||||
|
||||
#. Scope option (radio) that lets the user pick conversation kinds and exclude specific communities.
|
||||
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:71
|
||||
@@ -8638,7 +8638,7 @@ msgstr "Zajednice i kanali kojima ne možete upravljati webhookovima skriveni su
|
||||
msgid "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
msgstr "Zajednice navedene u Otkrivanju moraju skenirati poruke svih članova. Ova se postavka ne može promijeniti dok je Otkrivanje omogućeno."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:301
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:302
|
||||
msgid "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
msgstr "Zajednice navedene u Otkrivanju zahtijevaju barem potvrđenu e-poštu. Opcija \"Ništa\" ne može se odabrati dok je Otkrivanje omogućeno."
|
||||
|
||||
@@ -15844,7 +15844,7 @@ msgstr "Proslijedi medij"
|
||||
msgid "Forward message"
|
||||
msgstr "Proslijedi poruku"
|
||||
|
||||
#: src/features/channel/components/MessageAttachments.tsx:362
|
||||
#: src/features/channel/components/MessageAttachments.tsx:360
|
||||
msgid "Forwarded"
|
||||
msgstr "Proslijeđeno"
|
||||
|
||||
@@ -20844,10 +20844,6 @@ msgstr "Članovi se uklanjaju kada su izvan mreže, osim ako im nije dodijeljena
|
||||
msgid "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
msgstr "Članovi s dopuštenjem \"{pinMessagesPermissionLabel}\" mogu prikvačiti poruke za sve."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:295
|
||||
msgid "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Članovi s ulogama mogu zaobići ove provjere. Za javne prostore preporučujemo omogućavanje provjere."
|
||||
|
||||
#. Helper text under the Allow mentions switch in the role editor. {mentionEveryonePermissionLabel} is the localized name of the Mention Everyone permission and should match its label exactly.
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleEditor.tsx:47
|
||||
msgid "Members with the \"{mentionEveryonePermissionLabel}\" permission can always mention roles, regardless of this setting."
|
||||
@@ -25629,12 +25625,12 @@ msgid "Press Continue to use your passkey."
|
||||
msgstr "Pritisnite Nastavi da biste koristili svoj pristupni ključ."
|
||||
|
||||
#. Label in the channel and chat message reactions.
|
||||
#: src/features/channel/components/MessageReactions.tsx:46
|
||||
#: src/features/channel/components/MessageReactions.tsx:44
|
||||
msgid "press to add reaction"
|
||||
msgstr "pritisnite za dodavanje reakcije"
|
||||
|
||||
#. Label in the channel and chat message reactions. Keep the tone plain and specific.
|
||||
#: src/features/channel/components/MessageReactions.tsx:42
|
||||
#: src/features/channel/components/MessageReactions.tsx:40
|
||||
msgid "press to remove reaction"
|
||||
msgstr "pritisnite za uklanjanje reakcije"
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ msgstr "... bekapcsold a sűrű módot. Szuper!"
|
||||
|
||||
#. Button or menu action label in the channel and chat user message. Keep it concise.
|
||||
#. Suffix after the message text in the forward modal preview when the forwarded message was edited.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:392
|
||||
#: src/features/channel/components/MessageAttachments.tsx:390
|
||||
#: src/features/channel/components/UserMessage.tsx:75
|
||||
#: src/features/messaging/components/modals/ForwardMessagePreview.tsx:26
|
||||
msgid "(edited)"
|
||||
@@ -1051,7 +1051,7 @@ msgid "{count, plural, one {# potential spammer message} other {# potential spam
|
||||
msgstr "{count, plural, one {# potenciális spammertől érkező üzenet} other {# potenciális spammertől érkező üzenet}}"
|
||||
|
||||
#: src/features/app/components/shared/MessageReactionsContent.tsx:56
|
||||
#: src/features/channel/components/MessageReactions.tsx:146
|
||||
#: src/features/channel/components/MessageReactions.tsx:143
|
||||
msgid "{count, plural, one {# reaction} other {# reactions}}"
|
||||
msgstr "{count, plural, one {# reakció} other {# reakció}}"
|
||||
|
||||
@@ -1329,12 +1329,12 @@ msgid "{emojiName}, {reactionCountText}"
|
||||
msgstr "{emojiName}, {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:50
|
||||
#: src/features/channel/components/MessageReactions.tsx:48
|
||||
msgid "{emojiName}: {reactionCountText}"
|
||||
msgstr "{emojiName}: {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}, {actionText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:55
|
||||
#: src/features/channel/components/MessageReactions.tsx:53
|
||||
msgid "{emojiName}: {reactionCountText}, {actionText}"
|
||||
msgstr "{emojiName}: {reactionCountText}, {actionText}"
|
||||
|
||||
@@ -2215,8 +2215,8 @@ msgstr "<0>{username}</0> még mindig a csoportban van. Próbáld újra egy pill
|
||||
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the community and channel the message came from.
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the conversation the message came from.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:243
|
||||
#: src/features/channel/components/MessageAttachments.tsx:299
|
||||
#: src/features/channel/components/MessageAttachments.tsx:241
|
||||
#: src/features/channel/components/MessageAttachments.tsx:297
|
||||
msgid "<0>Forwarded from</0>{sourceInfo}"
|
||||
msgstr "<0>Továbbítva innen</0>{sourceInfo}"
|
||||
|
||||
@@ -7763,9 +7763,9 @@ msgstr "Válaszd ki, mit tehet a(z) {clientLabel} a közösségedben. Töröld a
|
||||
msgid "Choose what friends see in their active now panel"
|
||||
msgstr "Válaszd ki, mit lássanak az ismerőseid a „Most aktívak” panelen"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:292
|
||||
msgid "Choose what members must have before they can post or DM community members."
|
||||
msgstr "Válaszd ki, hogy a tagoknak mivel kell rendelkezniük, mielőtt bejegyzéseket tehetnek közzé vagy közvetlen üzenetet küldhetnek a közösség tagjainak."
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:291
|
||||
msgid "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Válaszd ki, hogy a tagoknak mi legyen meg, mielőtt bejegyzést írhatnak vagy privát üzenetet küldhetnek a közösség tagjainak. A szerepkörrel rendelkező tagok átugorhatják ezeket az ellenőrzéseket. Nyilvános helyek esetén javasoljuk az ellenőrzés engedélyezését."
|
||||
|
||||
#. Scope option (radio) that lets the user pick conversation kinds and exclude specific communities.
|
||||
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:71
|
||||
@@ -8638,7 +8638,7 @@ msgstr "A közösségek és csatornák, ahol nem tudsz webhookokat kezelni, el v
|
||||
msgid "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
msgstr "A Felfedezésben szereplő közösségekben minden tag üzeneteit ellenőrizni kell. Ez a beállítás nem módosítható, amíg a Felfedezés engedélyezve van."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:301
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:302
|
||||
msgid "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
msgstr "A Felfedezésben szereplő közösségekben legalább az e-mail-cím megerősítését meg kell követelni. A „Nincs” lehetőség nem választható, amíg a Felfedezés engedélyezve van."
|
||||
|
||||
@@ -15844,7 +15844,7 @@ msgstr "Média továbbítása"
|
||||
msgid "Forward message"
|
||||
msgstr "Üzenet továbbítása"
|
||||
|
||||
#: src/features/channel/components/MessageAttachments.tsx:362
|
||||
#: src/features/channel/components/MessageAttachments.tsx:360
|
||||
msgid "Forwarded"
|
||||
msgstr "Továbbítva"
|
||||
|
||||
@@ -20844,10 +20844,6 @@ msgstr "A tagok eltávolításra kerülnek, ha offline állapotban vannak, kivé
|
||||
msgid "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
msgstr "Azok a tagok, akik rendelkeznek a(z) „{pinMessagesPermissionLabel}” jogosultsággal, üzeneteket rögzíthetnek mindenki számára."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:295
|
||||
msgid "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "A szerepkörrel rendelkező tagok megkerülhetik ezeket az ellenőrzéseket. Nyilvános terek esetén javasoljuk az ellenőrzés engedélyezését."
|
||||
|
||||
#. Helper text under the Allow mentions switch in the role editor. {mentionEveryonePermissionLabel} is the localized name of the Mention Everyone permission and should match its label exactly.
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleEditor.tsx:47
|
||||
msgid "Members with the \"{mentionEveryonePermissionLabel}\" permission can always mention roles, regardless of this setting."
|
||||
@@ -25629,12 +25625,12 @@ msgid "Press Continue to use your passkey."
|
||||
msgstr "Nyomd meg a Folytatás gombot a jelszókulcsod használatához."
|
||||
|
||||
#. Label in the channel and chat message reactions.
|
||||
#: src/features/channel/components/MessageReactions.tsx:46
|
||||
#: src/features/channel/components/MessageReactions.tsx:44
|
||||
msgid "press to add reaction"
|
||||
msgstr "nyomd meg a reakció hozzáadásához"
|
||||
|
||||
#. Label in the channel and chat message reactions. Keep the tone plain and specific.
|
||||
#: src/features/channel/components/MessageReactions.tsx:42
|
||||
#: src/features/channel/components/MessageReactions.tsx:40
|
||||
msgid "press to remove reaction"
|
||||
msgstr "nyomd meg a reakció eltávolításához"
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ msgstr "... nyalakan mode rapat. Mantap!"
|
||||
|
||||
#. Button or menu action label in the channel and chat user message. Keep it concise.
|
||||
#. Suffix after the message text in the forward modal preview when the forwarded message was edited.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:392
|
||||
#: src/features/channel/components/MessageAttachments.tsx:390
|
||||
#: src/features/channel/components/UserMessage.tsx:75
|
||||
#: src/features/messaging/components/modals/ForwardMessagePreview.tsx:26
|
||||
msgid "(edited)"
|
||||
@@ -1051,7 +1051,7 @@ msgid "{count, plural, one {# potential spammer message} other {# potential spam
|
||||
msgstr "{count, plural, one {# pesan spammer potensial} other {# pesan spammer potensial}}"
|
||||
|
||||
#: src/features/app/components/shared/MessageReactionsContent.tsx:56
|
||||
#: src/features/channel/components/MessageReactions.tsx:146
|
||||
#: src/features/channel/components/MessageReactions.tsx:143
|
||||
msgid "{count, plural, one {# reaction} other {# reactions}}"
|
||||
msgstr "{count, plural, one {# reaksi} other {# reaksi}}"
|
||||
|
||||
@@ -1329,12 +1329,12 @@ msgid "{emojiName}, {reactionCountText}"
|
||||
msgstr "{emojiName}, {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:50
|
||||
#: src/features/channel/components/MessageReactions.tsx:48
|
||||
msgid "{emojiName}: {reactionCountText}"
|
||||
msgstr "{emojiName}: {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}, {actionText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:55
|
||||
#: src/features/channel/components/MessageReactions.tsx:53
|
||||
msgid "{emojiName}: {reactionCountText}, {actionText}"
|
||||
msgstr "{emojiName}: {reactionCountText}, {actionText}"
|
||||
|
||||
@@ -2215,8 +2215,8 @@ msgstr "<0>{username}</0> masih ada di grup. Coba lagi sebentar lagi."
|
||||
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the community and channel the message came from.
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the conversation the message came from.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:243
|
||||
#: src/features/channel/components/MessageAttachments.tsx:299
|
||||
#: src/features/channel/components/MessageAttachments.tsx:241
|
||||
#: src/features/channel/components/MessageAttachments.tsx:297
|
||||
msgid "<0>Forwarded from</0>{sourceInfo}"
|
||||
msgstr "<0>Diteruskan dari</0>{sourceInfo}"
|
||||
|
||||
@@ -7763,9 +7763,9 @@ msgstr "Pilih apa yang dapat dilakukan {clientLabel} di komunitasmu. Hapus centa
|
||||
msgid "Choose what friends see in their active now panel"
|
||||
msgstr "Pilih apa yang dilihat teman di panel Aktif sekarang mereka"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:292
|
||||
msgid "Choose what members must have before they can post or DM community members."
|
||||
msgstr "Pilih apa yang harus dimiliki anggota sebelum mereka dapat memposting atau mengirim DM ke anggota komunitas."
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:291
|
||||
msgid "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Pilih apa yang harus dimiliki anggota sebelum mereka dapat memposting atau mengirim DM ke anggota komunitas. Anggota dengan peran dapat melewati pemeriksaan ini. Untuk ruang publik, kami menyarankan untuk mengaktifkan verifikasi."
|
||||
|
||||
#. Scope option (radio) that lets the user pick conversation kinds and exclude specific communities.
|
||||
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:71
|
||||
@@ -8638,7 +8638,7 @@ msgstr "Komunitas dan channel tempat Anda tidak dapat mengelola webhook akan dis
|
||||
msgid "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
msgstr "Komunitas yang tercantum di Discovery wajib memindai pesan dari semua anggota. Pengaturan ini tidak dapat diubah selama Discovery aktif."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:301
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:302
|
||||
msgid "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
msgstr "Komunitas yang tercantum di Discovery minimal memerlukan verifikasi email. Opsi \"Tidak ada\" tidak dapat dipilih selama Discovery aktif."
|
||||
|
||||
@@ -15844,7 +15844,7 @@ msgstr "Teruskan media"
|
||||
msgid "Forward message"
|
||||
msgstr "Teruskan pesan"
|
||||
|
||||
#: src/features/channel/components/MessageAttachments.tsx:362
|
||||
#: src/features/channel/components/MessageAttachments.tsx:360
|
||||
msgid "Forwarded"
|
||||
msgstr "Diteruskan"
|
||||
|
||||
@@ -20844,10 +20844,6 @@ msgstr "Anggota akan dikeluarkan saat offline kecuali diberi peran."
|
||||
msgid "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
msgstr "Anggota dengan izin \"{pinMessagesPermissionLabel}\" dapat menyematkan pesan untuk semua orang."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:295
|
||||
msgid "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Anggota dengan peran dapat melewati pemeriksaan ini. Untuk ruang publik, kami sarankan untuk mengaktifkan verifikasi."
|
||||
|
||||
#. Helper text under the Allow mentions switch in the role editor. {mentionEveryonePermissionLabel} is the localized name of the Mention Everyone permission and should match its label exactly.
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleEditor.tsx:47
|
||||
msgid "Members with the \"{mentionEveryonePermissionLabel}\" permission can always mention roles, regardless of this setting."
|
||||
@@ -25629,12 +25625,12 @@ msgid "Press Continue to use your passkey."
|
||||
msgstr "Tekan Lanjutkan untuk menggunakan passkey kamu."
|
||||
|
||||
#. Label in the channel and chat message reactions.
|
||||
#: src/features/channel/components/MessageReactions.tsx:46
|
||||
#: src/features/channel/components/MessageReactions.tsx:44
|
||||
msgid "press to add reaction"
|
||||
msgstr "tekan untuk menambahkan reaksi"
|
||||
|
||||
#. Label in the channel and chat message reactions. Keep the tone plain and specific.
|
||||
#: src/features/channel/components/MessageReactions.tsx:42
|
||||
#: src/features/channel/components/MessageReactions.tsx:40
|
||||
msgid "press to remove reaction"
|
||||
msgstr "tekan untuk menghapus reaksi"
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ msgstr "... attiva la modalità compatta. Ottimo!"
|
||||
|
||||
#. Button or menu action label in the channel and chat user message. Keep it concise.
|
||||
#. Suffix after the message text in the forward modal preview when the forwarded message was edited.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:392
|
||||
#: src/features/channel/components/MessageAttachments.tsx:390
|
||||
#: src/features/channel/components/UserMessage.tsx:75
|
||||
#: src/features/messaging/components/modals/ForwardMessagePreview.tsx:26
|
||||
msgid "(edited)"
|
||||
@@ -1051,7 +1051,7 @@ msgid "{count, plural, one {# potential spammer message} other {# potential spam
|
||||
msgstr "{count, plural, one {# messaggio da potenziale spammer} other {# messaggi da potenziali spammer}}"
|
||||
|
||||
#: src/features/app/components/shared/MessageReactionsContent.tsx:56
|
||||
#: src/features/channel/components/MessageReactions.tsx:146
|
||||
#: src/features/channel/components/MessageReactions.tsx:143
|
||||
msgid "{count, plural, one {# reaction} other {# reactions}}"
|
||||
msgstr "{count, plural, one {# reazione} other {# reazioni}}"
|
||||
|
||||
@@ -1329,12 +1329,12 @@ msgid "{emojiName}, {reactionCountText}"
|
||||
msgstr "{emojiName}, {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:50
|
||||
#: src/features/channel/components/MessageReactions.tsx:48
|
||||
msgid "{emojiName}: {reactionCountText}"
|
||||
msgstr "{emojiName}: {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}, {actionText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:55
|
||||
#: src/features/channel/components/MessageReactions.tsx:53
|
||||
msgid "{emojiName}: {reactionCountText}, {actionText}"
|
||||
msgstr "{emojiName}: {reactionCountText}, {actionText}"
|
||||
|
||||
@@ -2215,8 +2215,8 @@ msgstr "<0>{username}</0> è ancora nel gruppo. Riprova tra un momento."
|
||||
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the community and channel the message came from.
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the conversation the message came from.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:243
|
||||
#: src/features/channel/components/MessageAttachments.tsx:299
|
||||
#: src/features/channel/components/MessageAttachments.tsx:241
|
||||
#: src/features/channel/components/MessageAttachments.tsx:297
|
||||
msgid "<0>Forwarded from</0>{sourceInfo}"
|
||||
msgstr "<0>Inoltrato da</0>{sourceInfo}"
|
||||
|
||||
@@ -7763,9 +7763,9 @@ msgstr "Scegli cosa può fare {clientLabel} nella tua community. Deseleziona le
|
||||
msgid "Choose what friends see in their active now panel"
|
||||
msgstr "Scegli cosa vedono i tuoi amici nel pannello \"Attivi ora\""
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:292
|
||||
msgid "Choose what members must have before they can post or DM community members."
|
||||
msgstr "Scegli cosa devono avere i membri prima di poter pubblicare messaggi o inviare messaggi diretti ai membri della community."
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:291
|
||||
msgid "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Scegli cosa devono avere i membri prima di poter pubblicare o inviare messaggi diretti ai membri della community. I membri con ruoli possono aggirare questi controlli. Per gli spazi pubblici, consigliamo di abilitare la verifica."
|
||||
|
||||
#. Scope option (radio) that lets the user pick conversation kinds and exclude specific communities.
|
||||
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:71
|
||||
@@ -8638,7 +8638,7 @@ msgstr "Le community e i canali in cui non puoi gestire gli webhook sono nascost
|
||||
msgid "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
msgstr "Le community elencate in Scopri devono controllare i messaggi di tutti i membri. Questa impostazione non può essere modificata mentre Scopri è attivo."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:301
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:302
|
||||
msgid "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
msgstr "Le community elencate in Scopri devono richiedere almeno la verifica dell’email. Non è possibile selezionare \"Nessuno\" mentre Scopri è attivo."
|
||||
|
||||
@@ -15844,7 +15844,7 @@ msgstr "Inoltra contenuto multimediale"
|
||||
msgid "Forward message"
|
||||
msgstr "Inoltra messaggio"
|
||||
|
||||
#: src/features/channel/components/MessageAttachments.tsx:362
|
||||
#: src/features/channel/components/MessageAttachments.tsx:360
|
||||
msgid "Forwarded"
|
||||
msgstr "Inoltrato"
|
||||
|
||||
@@ -20844,10 +20844,6 @@ msgstr "I membri vengono rimossi quando sono offline, a meno che non venga asseg
|
||||
msgid "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
msgstr "I membri con il permesso \"{pinMessagesPermissionLabel}\" possono fissare messaggi per tutti."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:295
|
||||
msgid "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "I membri con ruoli possono ignorare questi controlli. Per gli spazi pubblici, consigliamo di abilitare la verifica."
|
||||
|
||||
#. Helper text under the Allow mentions switch in the role editor. {mentionEveryonePermissionLabel} is the localized name of the Mention Everyone permission and should match its label exactly.
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleEditor.tsx:47
|
||||
msgid "Members with the \"{mentionEveryonePermissionLabel}\" permission can always mention roles, regardless of this setting."
|
||||
@@ -25629,12 +25625,12 @@ msgid "Press Continue to use your passkey."
|
||||
msgstr "Premi Continua per usare la tua passkey."
|
||||
|
||||
#. Label in the channel and chat message reactions.
|
||||
#: src/features/channel/components/MessageReactions.tsx:46
|
||||
#: src/features/channel/components/MessageReactions.tsx:44
|
||||
msgid "press to add reaction"
|
||||
msgstr "premi per aggiungere una reazione"
|
||||
|
||||
#. Label in the channel and chat message reactions. Keep the tone plain and specific.
|
||||
#: src/features/channel/components/MessageReactions.tsx:42
|
||||
#: src/features/channel/components/MessageReactions.tsx:40
|
||||
msgid "press to remove reaction"
|
||||
msgstr "premi per rimuovere la reazione"
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ msgstr "…コンパクト表示をオンに。いいね!"
|
||||
|
||||
#. Button or menu action label in the channel and chat user message. Keep it concise.
|
||||
#. Suffix after the message text in the forward modal preview when the forwarded message was edited.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:392
|
||||
#: src/features/channel/components/MessageAttachments.tsx:390
|
||||
#: src/features/channel/components/UserMessage.tsx:75
|
||||
#: src/features/messaging/components/modals/ForwardMessagePreview.tsx:26
|
||||
msgid "(edited)"
|
||||
@@ -1051,7 +1051,7 @@ msgid "{count, plural, one {# potential spammer message} other {# potential spam
|
||||
msgstr "{count, plural, one {#件のスパムの可能性があるメッセージ} other {#件のスパムの可能性があるメッセージ}}"
|
||||
|
||||
#: src/features/app/components/shared/MessageReactionsContent.tsx:56
|
||||
#: src/features/channel/components/MessageReactions.tsx:146
|
||||
#: src/features/channel/components/MessageReactions.tsx:143
|
||||
msgid "{count, plural, one {# reaction} other {# reactions}}"
|
||||
msgstr "{count, plural, one {#件のリアクション} other {#件のリアクション}}"
|
||||
|
||||
@@ -1329,12 +1329,12 @@ msgid "{emojiName}, {reactionCountText}"
|
||||
msgstr "{emojiName}、{reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:50
|
||||
#: src/features/channel/components/MessageReactions.tsx:48
|
||||
msgid "{emojiName}: {reactionCountText}"
|
||||
msgstr "{emojiName}: {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}, {actionText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:55
|
||||
#: src/features/channel/components/MessageReactions.tsx:53
|
||||
msgid "{emojiName}: {reactionCountText}, {actionText}"
|
||||
msgstr "{emojiName}: {reactionCountText}、{actionText}"
|
||||
|
||||
@@ -2215,8 +2215,8 @@ msgstr "<0>{username}</0>はまだグループにいます。しばらくして
|
||||
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the community and channel the message came from.
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the conversation the message came from.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:243
|
||||
#: src/features/channel/components/MessageAttachments.tsx:299
|
||||
#: src/features/channel/components/MessageAttachments.tsx:241
|
||||
#: src/features/channel/components/MessageAttachments.tsx:297
|
||||
msgid "<0>Forwarded from</0>{sourceInfo}"
|
||||
msgstr "<0>転送元</0>{sourceInfo}"
|
||||
|
||||
@@ -7763,9 +7763,9 @@ msgstr "{clientLabel} がコミュニティでできることを選択してく
|
||||
msgid "Choose what friends see in their active now panel"
|
||||
msgstr "友達の「オンライン中」パネルに表示される内容を選択"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:292
|
||||
msgid "Choose what members must have before they can post or DM community members."
|
||||
msgstr "メンバーが投稿やコミュニティメンバーへのDMを行うために必要な条件を選択してください。"
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:291
|
||||
msgid "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "コミュニティのメンバーが投稿したり、他のメンバーにダイレクトメッセージを送信したりする前に、満たす必要がある条件を選択します。ロールを持つメンバーはこれらのチェックをスキップできます。公開スペースでは、認証を有効にすることをお勧めします。"
|
||||
|
||||
#. Scope option (radio) that lets the user pick conversation kinds and exclude specific communities.
|
||||
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:71
|
||||
@@ -8638,7 +8638,7 @@ msgstr "Webhookを管理できないコミュニティやチャンネルは非
|
||||
msgid "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
msgstr "「見つける」に掲載されているコミュニティは、すべてのメンバーのメッセージをスキャンする必要があります。「見つける」が有効な間は、この設定を変更できません。"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:301
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:302
|
||||
msgid "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
msgstr "「見つける」に掲載されているコミュニティには、少なくともメールアドレスの認証が必要です。「見つける」が有効な間は「なし」を選択できません。"
|
||||
|
||||
@@ -15844,7 +15844,7 @@ msgstr "メディアを転送"
|
||||
msgid "Forward message"
|
||||
msgstr "メッセージを転送"
|
||||
|
||||
#: src/features/channel/components/MessageAttachments.tsx:362
|
||||
#: src/features/channel/components/MessageAttachments.tsx:360
|
||||
msgid "Forwarded"
|
||||
msgstr "転送済み"
|
||||
|
||||
@@ -20844,10 +20844,6 @@ msgstr "ロールが付与されていない限り、オフラインになると
|
||||
msgid "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
msgstr "「{pinMessagesPermissionLabel}」の権限を持つメンバーは、すべてのユーザー向けにメッセージをピン留めできます。"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:295
|
||||
msgid "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "ロールを持つメンバーはこれらのチェックをバイパスできます。公開スペースでは、認証を有効にすることをおすすめします。"
|
||||
|
||||
#. Helper text under the Allow mentions switch in the role editor. {mentionEveryonePermissionLabel} is the localized name of the Mention Everyone permission and should match its label exactly.
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleEditor.tsx:47
|
||||
msgid "Members with the \"{mentionEveryonePermissionLabel}\" permission can always mention roles, regardless of this setting."
|
||||
@@ -25629,12 +25625,12 @@ msgid "Press Continue to use your passkey."
|
||||
msgstr "「続行」を押してパスキーを使用してください。"
|
||||
|
||||
#. Label in the channel and chat message reactions.
|
||||
#: src/features/channel/components/MessageReactions.tsx:46
|
||||
#: src/features/channel/components/MessageReactions.tsx:44
|
||||
msgid "press to add reaction"
|
||||
msgstr "押してリアクションを追加"
|
||||
|
||||
#. Label in the channel and chat message reactions. Keep the tone plain and specific.
|
||||
#: src/features/channel/components/MessageReactions.tsx:42
|
||||
#: src/features/channel/components/MessageReactions.tsx:40
|
||||
msgid "press to remove reaction"
|
||||
msgstr "押してリアクションを削除"
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ msgstr "... 좁게 모드를 켜 보세요. 좋아요!"
|
||||
|
||||
#. Button or menu action label in the channel and chat user message. Keep it concise.
|
||||
#. Suffix after the message text in the forward modal preview when the forwarded message was edited.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:392
|
||||
#: src/features/channel/components/MessageAttachments.tsx:390
|
||||
#: src/features/channel/components/UserMessage.tsx:75
|
||||
#: src/features/messaging/components/modals/ForwardMessagePreview.tsx:26
|
||||
msgid "(edited)"
|
||||
@@ -1051,7 +1051,7 @@ msgid "{count, plural, one {# potential spammer message} other {# potential spam
|
||||
msgstr "{count, plural, one {#개의 스팸 의심 메시지} other {#개의 스팸 의심 메시지}}"
|
||||
|
||||
#: src/features/app/components/shared/MessageReactionsContent.tsx:56
|
||||
#: src/features/channel/components/MessageReactions.tsx:146
|
||||
#: src/features/channel/components/MessageReactions.tsx:143
|
||||
msgid "{count, plural, one {# reaction} other {# reactions}}"
|
||||
msgstr "{count, plural, one {#개 반응} other {#개 반응}}"
|
||||
|
||||
@@ -1329,12 +1329,12 @@ msgid "{emojiName}, {reactionCountText}"
|
||||
msgstr "{emojiName}, {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:50
|
||||
#: src/features/channel/components/MessageReactions.tsx:48
|
||||
msgid "{emojiName}: {reactionCountText}"
|
||||
msgstr "{emojiName}: {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}, {actionText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:55
|
||||
#: src/features/channel/components/MessageReactions.tsx:53
|
||||
msgid "{emojiName}: {reactionCountText}, {actionText}"
|
||||
msgstr "{emojiName}: {reactionCountText}, {actionText}"
|
||||
|
||||
@@ -2215,8 +2215,8 @@ msgstr "<0>{username}</0>님이 아직 그룹에 있습니다. 잠시 후에 다
|
||||
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the community and channel the message came from.
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the conversation the message came from.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:243
|
||||
#: src/features/channel/components/MessageAttachments.tsx:299
|
||||
#: src/features/channel/components/MessageAttachments.tsx:241
|
||||
#: src/features/channel/components/MessageAttachments.tsx:297
|
||||
msgid "<0>Forwarded from</0>{sourceInfo}"
|
||||
msgstr "{sourceInfo}<0>에서 전달됨</0>"
|
||||
|
||||
@@ -7763,9 +7763,9 @@ msgstr "{clientLabel}이(가) 내 커뮤니티에서 수행할 작업을 선택
|
||||
msgid "Choose what friends see in their active now panel"
|
||||
msgstr "친구의 활동 중 패널에 표시되는 내용을 선택하세요"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:292
|
||||
msgid "Choose what members must have before they can post or DM community members."
|
||||
msgstr "멤버가 게시하거나 커뮤니티 멤버에게 DM을 보내려면 갖춰야 할 조건을 선택하세요."
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:291
|
||||
msgid "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "커뮤니티 멤버가 글을 쓰거나 DM을 보내기 전에 반드시 갖춰야 할 조건을 선택하세요. 역할이 있는 멤버는 이 검사를 건너뛸 수 있습니다. 공개 공간의 경우 인증을 활성화하는 것이 좋습니다."
|
||||
|
||||
#. Scope option (radio) that lets the user pick conversation kinds and exclude specific communities.
|
||||
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:71
|
||||
@@ -8638,7 +8638,7 @@ msgstr "웹훅을 관리할 수 없는 커뮤니티 및 채널은 숨겨집니
|
||||
msgid "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
msgstr "디스커버리에 등록된 커뮤니티는 모든 멤버의 메시지를 스캔해야 합니다. 디스커버리가 활성화된 동안에는 이 설정을 변경할 수 없습니다."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:301
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:302
|
||||
msgid "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
msgstr "디스커버리에 등록된 커뮤니티는 이메일 인증이 필수입니다. 디스커버리가 활성화된 동안에는 \"없음\"을 선택할 수 없습니다."
|
||||
|
||||
@@ -15844,7 +15844,7 @@ msgstr "미디어 전달"
|
||||
msgid "Forward message"
|
||||
msgstr "메시지 전달"
|
||||
|
||||
#: src/features/channel/components/MessageAttachments.tsx:362
|
||||
#: src/features/channel/components/MessageAttachments.tsx:360
|
||||
msgid "Forwarded"
|
||||
msgstr "전달됨"
|
||||
|
||||
@@ -20844,10 +20844,6 @@ msgstr "역할이 부여되지 않으면 오프라인 시 멤버가 제거됩니
|
||||
msgid "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
msgstr "\"{pinMessagesPermissionLabel}\" 권한이 있는 멤버는 모두가 볼 수 있도록 메시지를 고정할 수 있습니다."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:295
|
||||
msgid "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "역할이 있는 멤버는 이 검사를 우회할 수 있습니다. 공개 공간의 경우, 인증 활성화를 권장합니다."
|
||||
|
||||
#. Helper text under the Allow mentions switch in the role editor. {mentionEveryonePermissionLabel} is the localized name of the Mention Everyone permission and should match its label exactly.
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleEditor.tsx:47
|
||||
msgid "Members with the \"{mentionEveryonePermissionLabel}\" permission can always mention roles, regardless of this setting."
|
||||
@@ -25629,12 +25625,12 @@ msgid "Press Continue to use your passkey."
|
||||
msgstr "'계속'을 눌러 패스키를 사용하세요."
|
||||
|
||||
#. Label in the channel and chat message reactions.
|
||||
#: src/features/channel/components/MessageReactions.tsx:46
|
||||
#: src/features/channel/components/MessageReactions.tsx:44
|
||||
msgid "press to add reaction"
|
||||
msgstr "눌러서 반응 추가"
|
||||
|
||||
#. Label in the channel and chat message reactions. Keep the tone plain and specific.
|
||||
#: src/features/channel/components/MessageReactions.tsx:42
|
||||
#: src/features/channel/components/MessageReactions.tsx:40
|
||||
msgid "press to remove reaction"
|
||||
msgstr "눌러서 반응 삭제"
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ msgstr "... įjungsite tankųjį režimą. Puiku!"
|
||||
|
||||
#. Button or menu action label in the channel and chat user message. Keep it concise.
|
||||
#. Suffix after the message text in the forward modal preview when the forwarded message was edited.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:392
|
||||
#: src/features/channel/components/MessageAttachments.tsx:390
|
||||
#: src/features/channel/components/UserMessage.tsx:75
|
||||
#: src/features/messaging/components/modals/ForwardMessagePreview.tsx:26
|
||||
msgid "(edited)"
|
||||
@@ -1051,7 +1051,7 @@ msgid "{count, plural, one {# potential spammer message} other {# potential spam
|
||||
msgstr "{count, plural, one {# galima šlamšto siuntėjo žinutė} few {# galimos šlamšto siuntėjo žinutės} other {# galimų šlamšto siuntėjo žinučių}}"
|
||||
|
||||
#: src/features/app/components/shared/MessageReactionsContent.tsx:56
|
||||
#: src/features/channel/components/MessageReactions.tsx:146
|
||||
#: src/features/channel/components/MessageReactions.tsx:143
|
||||
msgid "{count, plural, one {# reaction} other {# reactions}}"
|
||||
msgstr "{count, plural, one {# reakcija} few {# reakcijos} other {# reakcijų}}"
|
||||
|
||||
@@ -1329,12 +1329,12 @@ msgid "{emojiName}, {reactionCountText}"
|
||||
msgstr "{emojiName}, {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:50
|
||||
#: src/features/channel/components/MessageReactions.tsx:48
|
||||
msgid "{emojiName}: {reactionCountText}"
|
||||
msgstr "{emojiName}: {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}, {actionText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:55
|
||||
#: src/features/channel/components/MessageReactions.tsx:53
|
||||
msgid "{emojiName}: {reactionCountText}, {actionText}"
|
||||
msgstr "{emojiName}: {reactionCountText}, {actionText}"
|
||||
|
||||
@@ -2215,8 +2215,8 @@ msgstr "<0>{username}</0> vis dar yra grupėje. Bandykite dar kartą po akimirko
|
||||
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the community and channel the message came from.
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the conversation the message came from.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:243
|
||||
#: src/features/channel/components/MessageAttachments.tsx:299
|
||||
#: src/features/channel/components/MessageAttachments.tsx:241
|
||||
#: src/features/channel/components/MessageAttachments.tsx:297
|
||||
msgid "<0>Forwarded from</0>{sourceInfo}"
|
||||
msgstr "<0>Persiųsta iš</0>{sourceInfo}"
|
||||
|
||||
@@ -7763,9 +7763,9 @@ msgstr "Pasirinkite, ką „{clientLabel}“ gali daryti jūsų bendruomenėje.
|
||||
msgid "Choose what friends see in their active now panel"
|
||||
msgstr "Pasirinkite, ką draugai mato savo aktyvumo skydelyje"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:292
|
||||
msgid "Choose what members must have before they can post or DM community members."
|
||||
msgstr "Pasirinkite, ką nariai turi turėti, kad galėtų rašyti žinutes ar siųsti tiesiogines žinutes bendruomenės nariams."
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:291
|
||||
msgid "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Pasirinkite, ką nariai turi turėti prieš galėdami skelbti ar siųsti tiesioginius pranešimus bendruomenės nariams. Nariai, turintys vaidmenis, gali praleisti šiuos patikrinimus. Viešoms erdvėms rekomenduojame įjungti patvirtinimą."
|
||||
|
||||
#. Scope option (radio) that lets the user pick conversation kinds and exclude specific communities.
|
||||
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:71
|
||||
@@ -8638,7 +8638,7 @@ msgstr "Bendruomenės ir kanalai, kuriuose negalite tvarkyti webhookų, yra pasl
|
||||
msgid "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
msgstr "Į Atradimą įtrauktos bendruomenės privalo tikrinti visų narių žinutes. Šio nustatymo negalima keisti, kol įjungtas Atradimas."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:301
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:302
|
||||
msgid "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
msgstr "Į Atradimą įtrauktoms bendruomenėms būtinas bent el. pašto patvirtinimas. Kol įjungtas Atradimas, negalima pasirinkti „Nėra“."
|
||||
|
||||
@@ -15844,7 +15844,7 @@ msgstr "Persiųsti mediją"
|
||||
msgid "Forward message"
|
||||
msgstr "Persiųsti žinutę"
|
||||
|
||||
#: src/features/channel/components/MessageAttachments.tsx:362
|
||||
#: src/features/channel/components/MessageAttachments.tsx:360
|
||||
msgid "Forwarded"
|
||||
msgstr "Persiųsta"
|
||||
|
||||
@@ -20845,10 +20845,6 @@ msgstr "Nariai pašalinami, kai yra neprisijungę, nebent jiems priskirtas vaidm
|
||||
msgid "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
msgstr "Nariai, turintys leidimą „{pinMessagesPermissionLabel}“, gali prisegti žinutes visiems."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:295
|
||||
msgid "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Nariai, turintys vaidmenis, gali apeiti šiuos patikrinimus. Viešosioms erdvėms rekomenduojame įjungti patvirtinimą."
|
||||
|
||||
#. Helper text under the Allow mentions switch in the role editor. {mentionEveryonePermissionLabel} is the localized name of the Mention Everyone permission and should match its label exactly.
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleEditor.tsx:47
|
||||
msgid "Members with the \"{mentionEveryonePermissionLabel}\" permission can always mention roles, regardless of this setting."
|
||||
@@ -25630,12 +25626,12 @@ msgid "Press Continue to use your passkey."
|
||||
msgstr "Paspauskite „Tęsti“, kad naudotumėte savo prieigos raktą."
|
||||
|
||||
#. Label in the channel and chat message reactions.
|
||||
#: src/features/channel/components/MessageReactions.tsx:46
|
||||
#: src/features/channel/components/MessageReactions.tsx:44
|
||||
msgid "press to add reaction"
|
||||
msgstr "paspauskite, kad pridėtumėte reakciją"
|
||||
|
||||
#. Label in the channel and chat message reactions. Keep the tone plain and specific.
|
||||
#: src/features/channel/components/MessageReactions.tsx:42
|
||||
#: src/features/channel/components/MessageReactions.tsx:40
|
||||
msgid "press to remove reaction"
|
||||
msgstr "paspauskite, kad pašalintumėte reakciją"
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ msgstr "... compacte modus inschakelen. Mooi!"
|
||||
|
||||
#. Button or menu action label in the channel and chat user message. Keep it concise.
|
||||
#. Suffix after the message text in the forward modal preview when the forwarded message was edited.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:392
|
||||
#: src/features/channel/components/MessageAttachments.tsx:390
|
||||
#: src/features/channel/components/UserMessage.tsx:75
|
||||
#: src/features/messaging/components/modals/ForwardMessagePreview.tsx:26
|
||||
msgid "(edited)"
|
||||
@@ -1051,7 +1051,7 @@ msgid "{count, plural, one {# potential spammer message} other {# potential spam
|
||||
msgstr "{count, plural, one {# bericht van een mogelijke spammer} other {# berichten van mogelijke spammers}}"
|
||||
|
||||
#: src/features/app/components/shared/MessageReactionsContent.tsx:56
|
||||
#: src/features/channel/components/MessageReactions.tsx:146
|
||||
#: src/features/channel/components/MessageReactions.tsx:143
|
||||
msgid "{count, plural, one {# reaction} other {# reactions}}"
|
||||
msgstr "{count, plural, one {# reactie} other {# reacties}}"
|
||||
|
||||
@@ -1329,12 +1329,12 @@ msgid "{emojiName}, {reactionCountText}"
|
||||
msgstr "{emojiName}, {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:50
|
||||
#: src/features/channel/components/MessageReactions.tsx:48
|
||||
msgid "{emojiName}: {reactionCountText}"
|
||||
msgstr "{emojiName}: {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}, {actionText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:55
|
||||
#: src/features/channel/components/MessageReactions.tsx:53
|
||||
msgid "{emojiName}: {reactionCountText}, {actionText}"
|
||||
msgstr "{emojiName}: {reactionCountText}, {actionText}"
|
||||
|
||||
@@ -2215,8 +2215,8 @@ msgstr "<0>{username}</0> zit nog steeds in de groep. Probeer het zo opnieuw."
|
||||
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the community and channel the message came from.
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the conversation the message came from.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:243
|
||||
#: src/features/channel/components/MessageAttachments.tsx:299
|
||||
#: src/features/channel/components/MessageAttachments.tsx:241
|
||||
#: src/features/channel/components/MessageAttachments.tsx:297
|
||||
msgid "<0>Forwarded from</0>{sourceInfo}"
|
||||
msgstr "<0>Doorgestuurd vanuit</0>{sourceInfo}"
|
||||
|
||||
@@ -7763,9 +7763,9 @@ msgstr "Kies wat {clientLabel} in je community mag doen. Vink alle machtigingen
|
||||
msgid "Choose what friends see in their active now panel"
|
||||
msgstr "Kies wat vrienden zien in hun 'nu actief'-paneel"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:292
|
||||
msgid "Choose what members must have before they can post or DM community members."
|
||||
msgstr "Kies waaraan leden moeten voldoen voordat ze berichten kunnen plaatsen of communityleden een DM kunnen sturen."
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:291
|
||||
msgid "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Kies wat leden moeten hebben voordat ze berichten kunnen plaatsen of communityleden een DM kunnen sturen. Leden met rollen kunnen deze controles omzeilen. Voor openbare ruimtes raden we aan verificatie in te schakelen."
|
||||
|
||||
#. Scope option (radio) that lets the user pick conversation kinds and exclude specific communities.
|
||||
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:71
|
||||
@@ -8638,7 +8638,7 @@ msgstr "Communities en kanalen waar je geen webhooks kunt beheren, worden verbor
|
||||
msgid "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
msgstr "Communities die in Ontdekken worden vermeld, moeten berichten van alle leden scannen. Deze instelling kan niet worden gewijzigd zolang Ontdekken is ingeschakeld."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:301
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:302
|
||||
msgid "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
msgstr "Communities die in Ontdekken worden vermeld, vereisen minimaal e-mailverificatie. Je kunt \"Geen\" niet selecteren zolang Ontdekken is ingeschakeld."
|
||||
|
||||
@@ -15844,7 +15844,7 @@ msgstr "Media doorsturen"
|
||||
msgid "Forward message"
|
||||
msgstr "Bericht doorsturen"
|
||||
|
||||
#: src/features/channel/components/MessageAttachments.tsx:362
|
||||
#: src/features/channel/components/MessageAttachments.tsx:360
|
||||
msgid "Forwarded"
|
||||
msgstr "Doorgestuurd"
|
||||
|
||||
@@ -20844,10 +20844,6 @@ msgstr "Leden worden verwijderd wanneer ze offline zijn, tenzij ze een rol krijg
|
||||
msgid "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
msgstr "Leden met de machtiging \"{pinMessagesPermissionLabel}\" kunnen berichten voor iedereen vastzetten."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:295
|
||||
msgid "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Leden met rollen kunnen deze controles omzeilen. Voor openbare ruimtes raden we aan verificatie in te schakelen."
|
||||
|
||||
#. Helper text under the Allow mentions switch in the role editor. {mentionEveryonePermissionLabel} is the localized name of the Mention Everyone permission and should match its label exactly.
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleEditor.tsx:47
|
||||
msgid "Members with the \"{mentionEveryonePermissionLabel}\" permission can always mention roles, regardless of this setting."
|
||||
@@ -25629,12 +25625,12 @@ msgid "Press Continue to use your passkey."
|
||||
msgstr "Druk op 'Doorgaan' om je passkey te gebruiken."
|
||||
|
||||
#. Label in the channel and chat message reactions.
|
||||
#: src/features/channel/components/MessageReactions.tsx:46
|
||||
#: src/features/channel/components/MessageReactions.tsx:44
|
||||
msgid "press to add reaction"
|
||||
msgstr "tik om een reactie toe te voegen"
|
||||
|
||||
#. Label in the channel and chat message reactions. Keep the tone plain and specific.
|
||||
#: src/features/channel/components/MessageReactions.tsx:42
|
||||
#: src/features/channel/components/MessageReactions.tsx:40
|
||||
msgid "press to remove reaction"
|
||||
msgstr "tik om de reactie te verwijderen"
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ msgstr "... slå på kompakt modus. Bra!"
|
||||
|
||||
#. Button or menu action label in the channel and chat user message. Keep it concise.
|
||||
#. Suffix after the message text in the forward modal preview when the forwarded message was edited.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:392
|
||||
#: src/features/channel/components/MessageAttachments.tsx:390
|
||||
#: src/features/channel/components/UserMessage.tsx:75
|
||||
#: src/features/messaging/components/modals/ForwardMessagePreview.tsx:26
|
||||
msgid "(edited)"
|
||||
@@ -1051,7 +1051,7 @@ msgid "{count, plural, one {# potential spammer message} other {# potential spam
|
||||
msgstr "{count, plural, one {# melding fra en mulig spammer} other {# meldinger fra en mulig spammer}}"
|
||||
|
||||
#: src/features/app/components/shared/MessageReactionsContent.tsx:56
|
||||
#: src/features/channel/components/MessageReactions.tsx:146
|
||||
#: src/features/channel/components/MessageReactions.tsx:143
|
||||
msgid "{count, plural, one {# reaction} other {# reactions}}"
|
||||
msgstr "{count, plural, one {# reaksjon} other {# reaksjoner}}"
|
||||
|
||||
@@ -1329,12 +1329,12 @@ msgid "{emojiName}, {reactionCountText}"
|
||||
msgstr "{emojiName}, {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:50
|
||||
#: src/features/channel/components/MessageReactions.tsx:48
|
||||
msgid "{emojiName}: {reactionCountText}"
|
||||
msgstr "{emojiName}: {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}, {actionText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:55
|
||||
#: src/features/channel/components/MessageReactions.tsx:53
|
||||
msgid "{emojiName}: {reactionCountText}, {actionText}"
|
||||
msgstr "{emojiName}: {reactionCountText}, {actionText}"
|
||||
|
||||
@@ -2215,8 +2215,8 @@ msgstr "<0>{username}</0> er fortsatt i gruppen. Prøv igjen om et øyeblikk."
|
||||
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the community and channel the message came from.
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the conversation the message came from.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:243
|
||||
#: src/features/channel/components/MessageAttachments.tsx:299
|
||||
#: src/features/channel/components/MessageAttachments.tsx:241
|
||||
#: src/features/channel/components/MessageAttachments.tsx:297
|
||||
msgid "<0>Forwarded from</0>{sourceInfo}"
|
||||
msgstr "<0>Videresendt fra</0>{sourceInfo}"
|
||||
|
||||
@@ -7763,9 +7763,9 @@ msgstr "Velg hva {clientLabel} kan gjøre i fellesskapet ditt. Fjern avmerkingen
|
||||
msgid "Choose what friends see in their active now panel"
|
||||
msgstr "Velg hva venner ser i panelet «Aktiv nå»"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:292
|
||||
msgid "Choose what members must have before they can post or DM community members."
|
||||
msgstr "Velg hva medlemmer må ha før de kan legge ut innlegg eller sende direktemeldinger til fellesskapsmedlemmer."
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:291
|
||||
msgid "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Velg hva medlemmer må ha før de kan poste eller sende direktemeldinger til fellesskapsmedlemmer. Medlemmer med roller kan omgå disse sjekkene. For offentlige rom anbefaler vi å aktivere verifisering."
|
||||
|
||||
#. Scope option (radio) that lets the user pick conversation kinds and exclude specific communities.
|
||||
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:71
|
||||
@@ -8638,7 +8638,7 @@ msgstr "Fellesskap og kanaler der du ikke kan administrere webhooks, er skjult."
|
||||
msgid "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
msgstr "Fellesskap som er oppført under Oppdag, må skanne meldinger fra alle medlemmer. Denne innstillingen kan ikke endres mens Oppdag er aktivert."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:301
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:302
|
||||
msgid "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
msgstr "Fellesskap som er oppført under Oppdag, krever minst bekreftet e-postadresse. «Ingen» kan ikke velges mens Oppdag er aktivert."
|
||||
|
||||
@@ -15844,7 +15844,7 @@ msgstr "Videresend medieinnhold"
|
||||
msgid "Forward message"
|
||||
msgstr "Videresend melding"
|
||||
|
||||
#: src/features/channel/components/MessageAttachments.tsx:362
|
||||
#: src/features/channel/components/MessageAttachments.tsx:360
|
||||
msgid "Forwarded"
|
||||
msgstr "Videresendt"
|
||||
|
||||
@@ -20844,10 +20844,6 @@ msgstr "Medlemmer fjernes når de er frakoblet, med mindre de har fått en rolle
|
||||
msgid "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
msgstr "Medlemmer med «{pinMessagesPermissionLabel}» kan feste meldinger for alle."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:295
|
||||
msgid "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Medlemmer med roller kan omgå disse kontrollene. For offentlige fellesskap anbefaler vi å aktivere verifisering."
|
||||
|
||||
#. Helper text under the Allow mentions switch in the role editor. {mentionEveryonePermissionLabel} is the localized name of the Mention Everyone permission and should match its label exactly.
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleEditor.tsx:47
|
||||
msgid "Members with the \"{mentionEveryonePermissionLabel}\" permission can always mention roles, regardless of this setting."
|
||||
@@ -25629,12 +25625,12 @@ msgid "Press Continue to use your passkey."
|
||||
msgstr "Trykk på «Fortsett» for å bruke passnøkkelen din."
|
||||
|
||||
#. Label in the channel and chat message reactions.
|
||||
#: src/features/channel/components/MessageReactions.tsx:46
|
||||
#: src/features/channel/components/MessageReactions.tsx:44
|
||||
msgid "press to add reaction"
|
||||
msgstr "trykk for å legge til reaksjon"
|
||||
|
||||
#. Label in the channel and chat message reactions. Keep the tone plain and specific.
|
||||
#: src/features/channel/components/MessageReactions.tsx:42
|
||||
#: src/features/channel/components/MessageReactions.tsx:40
|
||||
msgid "press to remove reaction"
|
||||
msgstr "trykk for å fjerne reaksjon"
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ msgstr "... włącz tryb zwarty. Super!"
|
||||
|
||||
#. Button or menu action label in the channel and chat user message. Keep it concise.
|
||||
#. Suffix after the message text in the forward modal preview when the forwarded message was edited.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:392
|
||||
#: src/features/channel/components/MessageAttachments.tsx:390
|
||||
#: src/features/channel/components/UserMessage.tsx:75
|
||||
#: src/features/messaging/components/modals/ForwardMessagePreview.tsx:26
|
||||
msgid "(edited)"
|
||||
@@ -1051,7 +1051,7 @@ msgid "{count, plural, one {# potential spammer message} other {# potential spam
|
||||
msgstr "{count, plural, one {# wiadomość od potencjalnego spamera} few {# wiadomości od potencjalnego spamera} many {# wiadomości od potencjalnego spamera} other {# wiadomości od potencjalnego spamera}}"
|
||||
|
||||
#: src/features/app/components/shared/MessageReactionsContent.tsx:56
|
||||
#: src/features/channel/components/MessageReactions.tsx:146
|
||||
#: src/features/channel/components/MessageReactions.tsx:143
|
||||
msgid "{count, plural, one {# reaction} other {# reactions}}"
|
||||
msgstr "{count, plural, one {# reakcja} few {# reakcje} many {# reakcji} other {# reakcji}}"
|
||||
|
||||
@@ -1329,12 +1329,12 @@ msgid "{emojiName}, {reactionCountText}"
|
||||
msgstr "{emojiName}, {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:50
|
||||
#: src/features/channel/components/MessageReactions.tsx:48
|
||||
msgid "{emojiName}: {reactionCountText}"
|
||||
msgstr "Reakcja {emojiName}: {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}, {actionText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:55
|
||||
#: src/features/channel/components/MessageReactions.tsx:53
|
||||
msgid "{emojiName}: {reactionCountText}, {actionText}"
|
||||
msgstr "Reakcja {emojiName}: {reactionCountText}, {actionText}"
|
||||
|
||||
@@ -2215,8 +2215,8 @@ msgstr "<0>{username}</0> nadal jest w grupie. Spróbuj ponownie za chwilę."
|
||||
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the community and channel the message came from.
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the conversation the message came from.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:243
|
||||
#: src/features/channel/components/MessageAttachments.tsx:299
|
||||
#: src/features/channel/components/MessageAttachments.tsx:241
|
||||
#: src/features/channel/components/MessageAttachments.tsx:297
|
||||
msgid "<0>Forwarded from</0>{sourceInfo}"
|
||||
msgstr "<0>Przekazano z</0>{sourceInfo}"
|
||||
|
||||
@@ -7763,9 +7763,9 @@ msgstr "Wybierz, co {clientLabel} może robić w Twojej społeczności. Odznacz
|
||||
msgid "Choose what friends see in their active now panel"
|
||||
msgstr "Wybierz, co znajomi widzą w panelu „Aktywni teraz”"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:292
|
||||
msgid "Choose what members must have before they can post or DM community members."
|
||||
msgstr "Wybierz, jakie wymagania muszą spełnić członkowie, zanim będą mogli publikować wiadomości lub wysyłać wiadomości prywatne do członków społeczności."
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:291
|
||||
msgid "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Wybierz, co członkowie muszą spełnić, zanim będą mogli publikować lub wysyłać wiadomości prywatne do członków społeczności. Członkowie z rolami mogą pominąć te sprawdzenia. W przypadku przestrzeni publicznych zalecamy włączenie weryfikacji."
|
||||
|
||||
#. Scope option (radio) that lets the user pick conversation kinds and exclude specific communities.
|
||||
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:71
|
||||
@@ -8638,7 +8638,7 @@ msgstr "Społeczności i kanały, w których nie możesz zarządzać webhookami,
|
||||
msgid "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
msgstr "Społeczności widoczne w sekcji Odkrywanie muszą skanować wiadomości wszystkich członków. Tego ustawienia nie można zmienić, gdy Odkrywanie jest włączone."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:301
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:302
|
||||
msgid "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
msgstr "Społeczności widoczne w sekcji Odkrywanie wymagają co najmniej weryfikacji adresu e-mail. Nie można wybrać opcji „Brak”, gdy Odkrywanie jest włączone."
|
||||
|
||||
@@ -15844,7 +15844,7 @@ msgstr "Przekaż dalej multimedia"
|
||||
msgid "Forward message"
|
||||
msgstr "Przekaż wiadomość dalej"
|
||||
|
||||
#: src/features/channel/components/MessageAttachments.tsx:362
|
||||
#: src/features/channel/components/MessageAttachments.tsx:360
|
||||
msgid "Forwarded"
|
||||
msgstr "Przekazano"
|
||||
|
||||
@@ -20844,10 +20844,6 @@ msgstr "Członkowie są usuwani, gdy są offline, chyba że otrzymają rolę."
|
||||
msgid "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
msgstr "Członkowie z uprawnieniem „{pinMessagesPermissionLabel}” mogą przypinać wiadomości dla wszystkich."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:295
|
||||
msgid "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Członkowie z rolami mogą omijać te weryfikacje. W przypadku przestrzeni publicznych zalecamy włączenie weryfikacji."
|
||||
|
||||
#. Helper text under the Allow mentions switch in the role editor. {mentionEveryonePermissionLabel} is the localized name of the Mention Everyone permission and should match its label exactly.
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleEditor.tsx:47
|
||||
msgid "Members with the \"{mentionEveryonePermissionLabel}\" permission can always mention roles, regardless of this setting."
|
||||
@@ -25629,12 +25625,12 @@ msgid "Press Continue to use your passkey."
|
||||
msgstr "Naciśnij „Dalej”, aby użyć klucza dostępu."
|
||||
|
||||
#. Label in the channel and chat message reactions.
|
||||
#: src/features/channel/components/MessageReactions.tsx:46
|
||||
#: src/features/channel/components/MessageReactions.tsx:44
|
||||
msgid "press to add reaction"
|
||||
msgstr "naciśnij, aby dodać reakcję"
|
||||
|
||||
#. Label in the channel and chat message reactions. Keep the tone plain and specific.
|
||||
#: src/features/channel/components/MessageReactions.tsx:42
|
||||
#: src/features/channel/components/MessageReactions.tsx:40
|
||||
msgid "press to remove reaction"
|
||||
msgstr "naciśnij, aby usunąć reakcję"
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ msgstr "... ativar o modo denso. Boa!"
|
||||
|
||||
#. Button or menu action label in the channel and chat user message. Keep it concise.
|
||||
#. Suffix after the message text in the forward modal preview when the forwarded message was edited.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:392
|
||||
#: src/features/channel/components/MessageAttachments.tsx:390
|
||||
#: src/features/channel/components/UserMessage.tsx:75
|
||||
#: src/features/messaging/components/modals/ForwardMessagePreview.tsx:26
|
||||
msgid "(edited)"
|
||||
@@ -1051,7 +1051,7 @@ msgid "{count, plural, one {# potential spammer message} other {# potential spam
|
||||
msgstr "{count, plural, =1 {# mensagem de um possível remetente de spam} other {# mensagens de possíveis remetentes de spam}}"
|
||||
|
||||
#: src/features/app/components/shared/MessageReactionsContent.tsx:56
|
||||
#: src/features/channel/components/MessageReactions.tsx:146
|
||||
#: src/features/channel/components/MessageReactions.tsx:143
|
||||
msgid "{count, plural, one {# reaction} other {# reactions}}"
|
||||
msgstr "{count, plural, =0 {# reações} one {# reação} other {# reações}}"
|
||||
|
||||
@@ -1329,12 +1329,12 @@ msgid "{emojiName}, {reactionCountText}"
|
||||
msgstr "{emojiName}, {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:50
|
||||
#: src/features/channel/components/MessageReactions.tsx:48
|
||||
msgid "{emojiName}: {reactionCountText}"
|
||||
msgstr "{emojiName}: {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}, {actionText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:55
|
||||
#: src/features/channel/components/MessageReactions.tsx:53
|
||||
msgid "{emojiName}: {reactionCountText}, {actionText}"
|
||||
msgstr "{emojiName}: {reactionCountText}, {actionText}"
|
||||
|
||||
@@ -2215,8 +2215,8 @@ msgstr "<0>{username}</0> ainda está no grupo. Tente novamente em instantes."
|
||||
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the community and channel the message came from.
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the conversation the message came from.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:243
|
||||
#: src/features/channel/components/MessageAttachments.tsx:299
|
||||
#: src/features/channel/components/MessageAttachments.tsx:241
|
||||
#: src/features/channel/components/MessageAttachments.tsx:297
|
||||
msgid "<0>Forwarded from</0>{sourceInfo}"
|
||||
msgstr "<0>Encaminhada de</0>{sourceInfo}"
|
||||
|
||||
@@ -7763,9 +7763,9 @@ msgstr "Escolha o que {clientLabel} pode fazer na sua comunidade. Desmarque as p
|
||||
msgid "Choose what friends see in their active now panel"
|
||||
msgstr "Escolha o que os amigos veem no painel \"Ativos agora\""
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:292
|
||||
msgid "Choose what members must have before they can post or DM community members."
|
||||
msgstr "Escolha o que os membros devem ter antes de poderem postar ou enviar mensagens diretas para os membros da comunidade."
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:291
|
||||
msgid "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Escolha o que os membros precisam ter antes de poderem postar ou enviar mensagens diretas para membros da comunidade. Membros com cargos podem ignorar essas verificações. Para espaços públicos, recomendamos ativar a verificação."
|
||||
|
||||
#. Scope option (radio) that lets the user pick conversation kinds and exclude specific communities.
|
||||
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:71
|
||||
@@ -8638,7 +8638,7 @@ msgstr "Comunidades e canais onde você não pode gerenciar webhooks são oculta
|
||||
msgid "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
msgstr "As comunidades listadas em Descobrir precisam analisar as mensagens de todos os membros. Esta configuração não pode ser alterada enquanto Descobrir estiver ativado."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:301
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:302
|
||||
msgid "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
msgstr "As comunidades listadas em Descobrir exigem, no mínimo, a verificação de e-mail. A opção \"Nenhuma\" não pode ser selecionada enquanto Descobrir estiver ativado."
|
||||
|
||||
@@ -15844,7 +15844,7 @@ msgstr "Encaminhar mídia"
|
||||
msgid "Forward message"
|
||||
msgstr "Encaminhar mensagem"
|
||||
|
||||
#: src/features/channel/components/MessageAttachments.tsx:362
|
||||
#: src/features/channel/components/MessageAttachments.tsx:360
|
||||
msgid "Forwarded"
|
||||
msgstr "Encaminhada"
|
||||
|
||||
@@ -20844,10 +20844,6 @@ msgstr "Membros são removidos quando offline, a menos que recebam um cargo."
|
||||
msgid "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
msgstr "Membros com \"{pinMessagesPermissionLabel}\" podem fixar mensagens para todos."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:295
|
||||
msgid "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Membros com cargos podem ignorar essas verificações. Para espaços públicos, recomendamos ativar a verificação."
|
||||
|
||||
#. Helper text under the Allow mentions switch in the role editor. {mentionEveryonePermissionLabel} is the localized name of the Mention Everyone permission and should match its label exactly.
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleEditor.tsx:47
|
||||
msgid "Members with the \"{mentionEveryonePermissionLabel}\" permission can always mention roles, regardless of this setting."
|
||||
@@ -25629,12 +25625,12 @@ msgid "Press Continue to use your passkey."
|
||||
msgstr "Pressione \"Continuar\" para usar sua chave de acesso."
|
||||
|
||||
#. Label in the channel and chat message reactions.
|
||||
#: src/features/channel/components/MessageReactions.tsx:46
|
||||
#: src/features/channel/components/MessageReactions.tsx:44
|
||||
msgid "press to add reaction"
|
||||
msgstr "toque para adicionar uma reação"
|
||||
|
||||
#. Label in the channel and chat message reactions. Keep the tone plain and specific.
|
||||
#: src/features/channel/components/MessageReactions.tsx:42
|
||||
#: src/features/channel/components/MessageReactions.tsx:40
|
||||
msgid "press to remove reaction"
|
||||
msgstr "toque para remover a reação"
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ msgstr "... activezi modul dens. Super!"
|
||||
|
||||
#. Button or menu action label in the channel and chat user message. Keep it concise.
|
||||
#. Suffix after the message text in the forward modal preview when the forwarded message was edited.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:392
|
||||
#: src/features/channel/components/MessageAttachments.tsx:390
|
||||
#: src/features/channel/components/UserMessage.tsx:75
|
||||
#: src/features/messaging/components/modals/ForwardMessagePreview.tsx:26
|
||||
msgid "(edited)"
|
||||
@@ -1051,7 +1051,7 @@ msgid "{count, plural, one {# potential spammer message} other {# potential spam
|
||||
msgstr "{count, plural, one {# mesaj potențial spam} few {# mesaje potențial spam} other {# de mesaje potențial spam}}"
|
||||
|
||||
#: src/features/app/components/shared/MessageReactionsContent.tsx:56
|
||||
#: src/features/channel/components/MessageReactions.tsx:146
|
||||
#: src/features/channel/components/MessageReactions.tsx:143
|
||||
msgid "{count, plural, one {# reaction} other {# reactions}}"
|
||||
msgstr "{count, plural, one {# reacție} few {# reacții} other {# de reacții}}"
|
||||
|
||||
@@ -1329,12 +1329,12 @@ msgid "{emojiName}, {reactionCountText}"
|
||||
msgstr "{emojiName}, {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:50
|
||||
#: src/features/channel/components/MessageReactions.tsx:48
|
||||
msgid "{emojiName}: {reactionCountText}"
|
||||
msgstr "{emojiName}: {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}, {actionText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:55
|
||||
#: src/features/channel/components/MessageReactions.tsx:53
|
||||
msgid "{emojiName}: {reactionCountText}, {actionText}"
|
||||
msgstr "{emojiName}: {reactionCountText}, {actionText}"
|
||||
|
||||
@@ -2215,8 +2215,8 @@ msgstr "<0>{username}</0> este încă în grup. Încearcă din nou peste câteva
|
||||
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the community and channel the message came from.
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the conversation the message came from.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:243
|
||||
#: src/features/channel/components/MessageAttachments.tsx:299
|
||||
#: src/features/channel/components/MessageAttachments.tsx:241
|
||||
#: src/features/channel/components/MessageAttachments.tsx:297
|
||||
msgid "<0>Forwarded from</0>{sourceInfo}"
|
||||
msgstr "<0>Redirecționat din</0>{sourceInfo}"
|
||||
|
||||
@@ -7763,9 +7763,9 @@ msgstr "Alege ce poate face {clientLabel} în comunitatea ta. Debifează permisi
|
||||
msgid "Choose what friends see in their active now panel"
|
||||
msgstr "Alege ce văd prietenii în panoul lor „Activ acum”"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:292
|
||||
msgid "Choose what members must have before they can post or DM community members."
|
||||
msgstr "Alege ce trebuie să aibă membrii înainte de a putea posta sau de a trimite DM-uri membrilor comunității."
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:291
|
||||
msgid "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Alege ce trebuie să aibă membrii înainte de a putea posta sau trimite mesaje directe membrilor comunității. Membrii cu roluri pot ocoli aceste verificări. Pentru spațiile publice, recomandăm activarea verificării."
|
||||
|
||||
#. Scope option (radio) that lets the user pick conversation kinds and exclude specific communities.
|
||||
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:71
|
||||
@@ -8638,7 +8638,7 @@ msgstr "Comunitățile și canalele unde nu poți gestiona webhook-uri sunt ascu
|
||||
msgid "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
msgstr "Comunitățile listate în Discovery trebuie să scaneze mesajele tuturor membrilor. Această setare nu poate fi modificată cât timp Discovery este activat."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:301
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:302
|
||||
msgid "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
msgstr "Comunitățile listate în Discovery necesită cel puțin verificarea adresei de e-mail. Opțiunea „Niciunul” nu poate fi selectată cât timp Discovery este activat."
|
||||
|
||||
@@ -15844,7 +15844,7 @@ msgstr "Redirecționează media"
|
||||
msgid "Forward message"
|
||||
msgstr "Redirecționează mesajul"
|
||||
|
||||
#: src/features/channel/components/MessageAttachments.tsx:362
|
||||
#: src/features/channel/components/MessageAttachments.tsx:360
|
||||
msgid "Forwarded"
|
||||
msgstr "Redirecționat"
|
||||
|
||||
@@ -20844,10 +20844,6 @@ msgstr "Membrii sunt eliminați când sunt offline, dacă nu li se atribuie un r
|
||||
msgid "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
msgstr "Membrii cu „{pinMessagesPermissionLabel}” pot fixa mesaje pentru toată lumea."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:295
|
||||
msgid "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Membrii cu roluri pot ocoli aceste verificări. Pentru spațiile publice, recomandăm activarea verificării."
|
||||
|
||||
#. Helper text under the Allow mentions switch in the role editor. {mentionEveryonePermissionLabel} is the localized name of the Mention Everyone permission and should match its label exactly.
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleEditor.tsx:47
|
||||
msgid "Members with the \"{mentionEveryonePermissionLabel}\" permission can always mention roles, regardless of this setting."
|
||||
@@ -25629,12 +25625,12 @@ msgid "Press Continue to use your passkey."
|
||||
msgstr "Apasă pe „Continuă” pentru a folosi cheia de acces."
|
||||
|
||||
#. Label in the channel and chat message reactions.
|
||||
#: src/features/channel/components/MessageReactions.tsx:46
|
||||
#: src/features/channel/components/MessageReactions.tsx:44
|
||||
msgid "press to add reaction"
|
||||
msgstr "apasă pentru a adăuga o reacție"
|
||||
|
||||
#. Label in the channel and chat message reactions. Keep the tone plain and specific.
|
||||
#: src/features/channel/components/MessageReactions.tsx:42
|
||||
#: src/features/channel/components/MessageReactions.tsx:40
|
||||
msgid "press to remove reaction"
|
||||
msgstr "apasă pentru a elimina reacția"
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ msgstr "...включите плотный режим. Отлично!"
|
||||
|
||||
#. Button or menu action label in the channel and chat user message. Keep it concise.
|
||||
#. Suffix after the message text in the forward modal preview when the forwarded message was edited.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:392
|
||||
#: src/features/channel/components/MessageAttachments.tsx:390
|
||||
#: src/features/channel/components/UserMessage.tsx:75
|
||||
#: src/features/messaging/components/modals/ForwardMessagePreview.tsx:26
|
||||
msgid "(edited)"
|
||||
@@ -1051,7 +1051,7 @@ msgid "{count, plural, one {# potential spammer message} other {# potential spam
|
||||
msgstr "{count, plural, one {# потенциальное спам-сообщение} few {# потенциальных спам-сообщения} many {# потенциальных спам-сообщений} other {# потенциальных спам-сообщений}}"
|
||||
|
||||
#: src/features/app/components/shared/MessageReactionsContent.tsx:56
|
||||
#: src/features/channel/components/MessageReactions.tsx:146
|
||||
#: src/features/channel/components/MessageReactions.tsx:143
|
||||
msgid "{count, plural, one {# reaction} other {# reactions}}"
|
||||
msgstr "{count, plural, one {# реакция} few {# реакции} many {# реакций} other {# реакций}}"
|
||||
|
||||
@@ -1329,12 +1329,12 @@ msgid "{emojiName}, {reactionCountText}"
|
||||
msgstr "{emojiName}, {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:50
|
||||
#: src/features/channel/components/MessageReactions.tsx:48
|
||||
msgid "{emojiName}: {reactionCountText}"
|
||||
msgstr "{emojiName}: {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}, {actionText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:55
|
||||
#: src/features/channel/components/MessageReactions.tsx:53
|
||||
msgid "{emojiName}: {reactionCountText}, {actionText}"
|
||||
msgstr "{emojiName}: {reactionCountText}, {actionText}"
|
||||
|
||||
@@ -2215,8 +2215,8 @@ msgstr "<0>{username}</0> всё ещё в группе. Попробуйте е
|
||||
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the community and channel the message came from.
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the conversation the message came from.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:243
|
||||
#: src/features/channel/components/MessageAttachments.tsx:299
|
||||
#: src/features/channel/components/MessageAttachments.tsx:241
|
||||
#: src/features/channel/components/MessageAttachments.tsx:297
|
||||
msgid "<0>Forwarded from</0>{sourceInfo}"
|
||||
msgstr "<0>Переслано из</0>{sourceInfo}"
|
||||
|
||||
@@ -7763,9 +7763,9 @@ msgstr "Выберите, что {clientLabel} сможет делать в ва
|
||||
msgid "Choose what friends see in their active now panel"
|
||||
msgstr "Выберите, что друзья видят на панели «Сейчас онлайн»"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:292
|
||||
msgid "Choose what members must have before they can post or DM community members."
|
||||
msgstr "Выберите, что должны иметь участники, прежде чем они смогут публиковать сообщения или писать личные сообщения другим участникам сообщества."
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:291
|
||||
msgid "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Выберите, что должны иметь участники, прежде чем они смогут публиковать сообщения или отправлять личные сообщения участникам сообщества. Участники с ролями могут обойти эти проверки. Для публичных пространств мы рекомендуем включить верификацию."
|
||||
|
||||
#. Scope option (radio) that lets the user pick conversation kinds and exclude specific communities.
|
||||
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:71
|
||||
@@ -8638,7 +8638,7 @@ msgstr "Сообщества и каналы, где вы не можете уп
|
||||
msgid "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
msgstr "Сообщества в каталоге обязаны проверять сообщения всех участников. Пока сообщество размещено в каталоге, этот параметр изменить нельзя."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:301
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:302
|
||||
msgid "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
msgstr "Сообщества в каталоге должны требовать как минимум подтвержденный адрес электронной почты. Пока сообщество размещено в каталоге, выбрать «Нет» нельзя."
|
||||
|
||||
@@ -15844,7 +15844,7 @@ msgstr "Переслать медиафайл"
|
||||
msgid "Forward message"
|
||||
msgstr "Переслать сообщение"
|
||||
|
||||
#: src/features/channel/components/MessageAttachments.tsx:362
|
||||
#: src/features/channel/components/MessageAttachments.tsx:360
|
||||
msgid "Forwarded"
|
||||
msgstr "Переслано"
|
||||
|
||||
@@ -20844,10 +20844,6 @@ msgstr "Участники будут удалены, когда выйдут и
|
||||
msgid "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
msgstr "Участники с разрешением «{pinMessagesPermissionLabel}» могут закреплять сообщения для всех."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:295
|
||||
msgid "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Участники с ролями могут обходить эти проверки. Для открытых сообществ рекомендуем включить верификацию."
|
||||
|
||||
#. Helper text under the Allow mentions switch in the role editor. {mentionEveryonePermissionLabel} is the localized name of the Mention Everyone permission and should match its label exactly.
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleEditor.tsx:47
|
||||
msgid "Members with the \"{mentionEveryonePermissionLabel}\" permission can always mention roles, regardless of this setting."
|
||||
@@ -25629,12 +25625,12 @@ msgid "Press Continue to use your passkey."
|
||||
msgstr "Нажмите «Продолжить», чтобы использовать ключ доступа."
|
||||
|
||||
#. Label in the channel and chat message reactions.
|
||||
#: src/features/channel/components/MessageReactions.tsx:46
|
||||
#: src/features/channel/components/MessageReactions.tsx:44
|
||||
msgid "press to add reaction"
|
||||
msgstr "нажмите, чтобы добавить реакцию"
|
||||
|
||||
#. Label in the channel and chat message reactions. Keep the tone plain and specific.
|
||||
#: src/features/channel/components/MessageReactions.tsx:42
|
||||
#: src/features/channel/components/MessageReactions.tsx:40
|
||||
msgid "press to remove reaction"
|
||||
msgstr "нажмите, чтобы удалить реакцию"
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ msgstr "... aktivera kompakt läge. Snyggt!"
|
||||
|
||||
#. Button or menu action label in the channel and chat user message. Keep it concise.
|
||||
#. Suffix after the message text in the forward modal preview when the forwarded message was edited.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:392
|
||||
#: src/features/channel/components/MessageAttachments.tsx:390
|
||||
#: src/features/channel/components/UserMessage.tsx:75
|
||||
#: src/features/messaging/components/modals/ForwardMessagePreview.tsx:26
|
||||
msgid "(edited)"
|
||||
@@ -1051,7 +1051,7 @@ msgid "{count, plural, one {# potential spammer message} other {# potential spam
|
||||
msgstr "{count, plural, one {# meddelande från en möjlig spammare} other {# meddelanden från möjliga spammare}}"
|
||||
|
||||
#: src/features/app/components/shared/MessageReactionsContent.tsx:56
|
||||
#: src/features/channel/components/MessageReactions.tsx:146
|
||||
#: src/features/channel/components/MessageReactions.tsx:143
|
||||
msgid "{count, plural, one {# reaction} other {# reactions}}"
|
||||
msgstr "{count, plural, one {# reaktion} other {# reaktioner}}"
|
||||
|
||||
@@ -1329,12 +1329,12 @@ msgid "{emojiName}, {reactionCountText}"
|
||||
msgstr "{emojiName}, {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:50
|
||||
#: src/features/channel/components/MessageReactions.tsx:48
|
||||
msgid "{emojiName}: {reactionCountText}"
|
||||
msgstr "{emojiName}: {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}, {actionText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:55
|
||||
#: src/features/channel/components/MessageReactions.tsx:53
|
||||
msgid "{emojiName}: {reactionCountText}, {actionText}"
|
||||
msgstr "{emojiName}: {reactionCountText}, {actionText}"
|
||||
|
||||
@@ -2215,8 +2215,8 @@ msgstr "<0>{username}</0> är fortfarande kvar i gruppen. Försök igen om en li
|
||||
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the community and channel the message came from.
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the conversation the message came from.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:243
|
||||
#: src/features/channel/components/MessageAttachments.tsx:299
|
||||
#: src/features/channel/components/MessageAttachments.tsx:241
|
||||
#: src/features/channel/components/MessageAttachments.tsx:297
|
||||
msgid "<0>Forwarded from</0>{sourceInfo}"
|
||||
msgstr "<0>Vidarebefordrat från</0>{sourceInfo}"
|
||||
|
||||
@@ -7763,9 +7763,9 @@ msgstr "Välj vad {clientLabel} får göra i din community. Avmarkera behörighe
|
||||
msgid "Choose what friends see in their active now panel"
|
||||
msgstr "Välj vad vänner ser i sin panel för aktiva nu"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:292
|
||||
msgid "Choose what members must have before they can post or DM community members."
|
||||
msgstr "Välj vad medlemmar måste ha innan de kan skriva inlägg eller skicka direktmeddelanden till communitymedlemmar."
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:291
|
||||
msgid "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Välj vad medlemmar måste ha innan de kan posta eller skicka direktmeddelanden till community-medlemmar. Medlemmar med roller kan kringgå dessa kontroller. För publika utrymmen rekommenderar vi att aktivera verifiering."
|
||||
|
||||
#. Scope option (radio) that lets the user pick conversation kinds and exclude specific communities.
|
||||
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:71
|
||||
@@ -8638,7 +8638,7 @@ msgstr "Sammanslutningar och kanaler där du inte kan hantera webhooks är dolda
|
||||
msgid "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
msgstr "Communities som listas i Upptäck måste granska meddelanden från alla medlemmar. Den här inställningen kan inte ändras medan Upptäck är aktiverat."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:301
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:302
|
||||
msgid "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
msgstr "Communities som listas i Upptäck måste kräva minst e-postverifiering. ”Ingen” kan inte väljas medan Upptäck är aktiverat."
|
||||
|
||||
@@ -15844,7 +15844,7 @@ msgstr "Vidarebefordra medieobjekt"
|
||||
msgid "Forward message"
|
||||
msgstr "Vidarebefordra meddelande"
|
||||
|
||||
#: src/features/channel/components/MessageAttachments.tsx:362
|
||||
#: src/features/channel/components/MessageAttachments.tsx:360
|
||||
msgid "Forwarded"
|
||||
msgstr "Vidarebefordrat"
|
||||
|
||||
@@ -20844,10 +20844,6 @@ msgstr "Medlemmar tas bort när de är offline om de inte har tilldelats en roll
|
||||
msgid "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
msgstr "Medlemmar med behörigheten \"{pinMessagesPermissionLabel}\" kan fästa meddelanden åt alla."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:295
|
||||
msgid "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Medlemmar med roller kan kringgå dessa kontroller. För offentliga utrymmen rekommenderar vi att du aktiverar verifiering."
|
||||
|
||||
#. Helper text under the Allow mentions switch in the role editor. {mentionEveryonePermissionLabel} is the localized name of the Mention Everyone permission and should match its label exactly.
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleEditor.tsx:47
|
||||
msgid "Members with the \"{mentionEveryonePermissionLabel}\" permission can always mention roles, regardless of this setting."
|
||||
@@ -25629,12 +25625,12 @@ msgid "Press Continue to use your passkey."
|
||||
msgstr "Tryck på Fortsätt för att använda din lösennyckel."
|
||||
|
||||
#. Label in the channel and chat message reactions.
|
||||
#: src/features/channel/components/MessageReactions.tsx:46
|
||||
#: src/features/channel/components/MessageReactions.tsx:44
|
||||
msgid "press to add reaction"
|
||||
msgstr "tryck för att lägga till reaktion"
|
||||
|
||||
#. Label in the channel and chat message reactions. Keep the tone plain and specific.
|
||||
#: src/features/channel/components/MessageReactions.tsx:42
|
||||
#: src/features/channel/components/MessageReactions.tsx:40
|
||||
msgid "press to remove reaction"
|
||||
msgstr "tryck för att ta bort reaktion"
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ msgstr "... เปิดโหมดกระชับแล้ว เยี่
|
||||
|
||||
#. Button or menu action label in the channel and chat user message. Keep it concise.
|
||||
#. Suffix after the message text in the forward modal preview when the forwarded message was edited.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:392
|
||||
#: src/features/channel/components/MessageAttachments.tsx:390
|
||||
#: src/features/channel/components/UserMessage.tsx:75
|
||||
#: src/features/messaging/components/modals/ForwardMessagePreview.tsx:26
|
||||
msgid "(edited)"
|
||||
@@ -1051,7 +1051,7 @@ msgid "{count, plural, one {# potential spammer message} other {# potential spam
|
||||
msgstr "{count, plural, one {# ข้อความที่อาจเป็นสแปม} other {# ข้อความที่อาจเป็นสแปม}}"
|
||||
|
||||
#: src/features/app/components/shared/MessageReactionsContent.tsx:56
|
||||
#: src/features/channel/components/MessageReactions.tsx:146
|
||||
#: src/features/channel/components/MessageReactions.tsx:143
|
||||
msgid "{count, plural, one {# reaction} other {# reactions}}"
|
||||
msgstr "{count, plural, one {# รีแอ็กชัน} other {# รีแอ็กชัน}}"
|
||||
|
||||
@@ -1329,12 +1329,12 @@ msgid "{emojiName}, {reactionCountText}"
|
||||
msgstr "{emojiName}, {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:50
|
||||
#: src/features/channel/components/MessageReactions.tsx:48
|
||||
msgid "{emojiName}: {reactionCountText}"
|
||||
msgstr "{emojiName}: {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}, {actionText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:55
|
||||
#: src/features/channel/components/MessageReactions.tsx:53
|
||||
msgid "{emojiName}: {reactionCountText}, {actionText}"
|
||||
msgstr "{emojiName}: {reactionCountText}, {actionText}"
|
||||
|
||||
@@ -2215,8 +2215,8 @@ msgstr "<0>{username}</0> ยังอยู่ในกลุ่ม ลอง
|
||||
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the community and channel the message came from.
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the conversation the message came from.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:243
|
||||
#: src/features/channel/components/MessageAttachments.tsx:299
|
||||
#: src/features/channel/components/MessageAttachments.tsx:241
|
||||
#: src/features/channel/components/MessageAttachments.tsx:297
|
||||
msgid "<0>Forwarded from</0>{sourceInfo}"
|
||||
msgstr "<0>ส่งต่อจาก</0>{sourceInfo}"
|
||||
|
||||
@@ -7763,9 +7763,9 @@ msgstr "เลือกสิ่งที่ {clientLabel} ทำได้ใน
|
||||
msgid "Choose what friends see in their active now panel"
|
||||
msgstr "เลือกสิ่งที่เพื่อนเห็นในแผงกำลังใช้งานอยู่ตอนนี้"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:292
|
||||
msgid "Choose what members must have before they can post or DM community members."
|
||||
msgstr "เลือกสิ่งที่สมาชิกต้องมีก่อนที่จะโพสต์หรือส่งข้อความส่วนตัวถึงสมาชิกในคอมมูนิตี้ได้"
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:291
|
||||
msgid "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "เลือกว่าสมาชิกต้องมีอะไรบ้างก่อนที่จะโพสต์หรือส่งข้อความส่วนตัวถึงสมาชิกในชุมชน สมาชิกที่มีบทบาทสามารถข้ามการตรวจสอบเหล่านี้ได้ สำหรับพื้นที่สาธารณะ เราแนะนำให้เปิดใช้งานการยืนยัน"
|
||||
|
||||
#. Scope option (radio) that lets the user pick conversation kinds and exclude specific communities.
|
||||
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:71
|
||||
@@ -8638,7 +8638,7 @@ msgstr "ชุมชนและช่องทางที่คุณไม่
|
||||
msgid "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
msgstr "คอมมูนิตี้ที่อยู่ใน Discovery ต้องสแกนข้อความจากสมาชิกทุกคน การตั้งค่านี้เปลี่ยนแปลงไม่ได้ขณะที่เปิดใช้งาน Discovery"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:301
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:302
|
||||
msgid "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
msgstr "คอมมูนิตี้ที่อยู่ใน Discovery ต้องมีการยืนยันอีเมลเป็นอย่างน้อย จะเลือก \"ไม่มี\" ไม่ได้ขณะที่เปิดใช้งาน Discovery"
|
||||
|
||||
@@ -15844,7 +15844,7 @@ msgstr "ส่งต่อสื่อ"
|
||||
msgid "Forward message"
|
||||
msgstr "ส่งต่อข้อความ"
|
||||
|
||||
#: src/features/channel/components/MessageAttachments.tsx:362
|
||||
#: src/features/channel/components/MessageAttachments.tsx:360
|
||||
msgid "Forwarded"
|
||||
msgstr "ส่งต่อแล้ว"
|
||||
|
||||
@@ -20844,10 +20844,6 @@ msgstr "สมาชิกจะถูกนำออกเมื่อออฟ
|
||||
msgid "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
msgstr "สมาชิกที่มีสิทธิ์ \"{pinMessagesPermissionLabel}\" สามารถปักหมุดข้อความให้ทุกคนเห็นได้"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:295
|
||||
msgid "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "สมาชิกที่มีบทบาทสามารถข้ามการตรวจสอบเหล่านี้ได้ สำหรับพื้นที่สาธารณะ เราแนะนำให้เปิดใช้งานการยืนยัน"
|
||||
|
||||
#. Helper text under the Allow mentions switch in the role editor. {mentionEveryonePermissionLabel} is the localized name of the Mention Everyone permission and should match its label exactly.
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleEditor.tsx:47
|
||||
msgid "Members with the \"{mentionEveryonePermissionLabel}\" permission can always mention roles, regardless of this setting."
|
||||
@@ -25629,12 +25625,12 @@ msgid "Press Continue to use your passkey."
|
||||
msgstr "กด \"ดำเนินการต่อ\" เพื่อใช้พาสคีย์ของคุณ"
|
||||
|
||||
#. Label in the channel and chat message reactions.
|
||||
#: src/features/channel/components/MessageReactions.tsx:46
|
||||
#: src/features/channel/components/MessageReactions.tsx:44
|
||||
msgid "press to add reaction"
|
||||
msgstr "กดเพื่อเพิ่มรีแอ็กชัน"
|
||||
|
||||
#. Label in the channel and chat message reactions. Keep the tone plain and specific.
|
||||
#: src/features/channel/components/MessageReactions.tsx:42
|
||||
#: src/features/channel/components/MessageReactions.tsx:40
|
||||
msgid "press to remove reaction"
|
||||
msgstr "กดเพื่อลบรีแอ็กชัน"
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ msgstr "... yoğun modu açın. Harika!"
|
||||
|
||||
#. Button or menu action label in the channel and chat user message. Keep it concise.
|
||||
#. Suffix after the message text in the forward modal preview when the forwarded message was edited.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:392
|
||||
#: src/features/channel/components/MessageAttachments.tsx:390
|
||||
#: src/features/channel/components/UserMessage.tsx:75
|
||||
#: src/features/messaging/components/modals/ForwardMessagePreview.tsx:26
|
||||
msgid "(edited)"
|
||||
@@ -1051,7 +1051,7 @@ msgid "{count, plural, one {# potential spammer message} other {# potential spam
|
||||
msgstr "{count, plural, one {# olası spam mesajı} other {# olası spam mesajı}}"
|
||||
|
||||
#: src/features/app/components/shared/MessageReactionsContent.tsx:56
|
||||
#: src/features/channel/components/MessageReactions.tsx:146
|
||||
#: src/features/channel/components/MessageReactions.tsx:143
|
||||
msgid "{count, plural, one {# reaction} other {# reactions}}"
|
||||
msgstr "{count, plural, one {# tepki} other {# tepki}}"
|
||||
|
||||
@@ -1329,12 +1329,12 @@ msgid "{emojiName}, {reactionCountText}"
|
||||
msgstr "{emojiName}, {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:50
|
||||
#: src/features/channel/components/MessageReactions.tsx:48
|
||||
msgid "{emojiName}: {reactionCountText}"
|
||||
msgstr "{emojiName}: {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}, {actionText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:55
|
||||
#: src/features/channel/components/MessageReactions.tsx:53
|
||||
msgid "{emojiName}: {reactionCountText}, {actionText}"
|
||||
msgstr "{emojiName}: {reactionCountText}, {actionText}"
|
||||
|
||||
@@ -2215,8 +2215,8 @@ msgstr "<0>{username}</0> hâlâ grupta. Birazdan tekrar deneyin."
|
||||
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the community and channel the message came from.
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the conversation the message came from.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:243
|
||||
#: src/features/channel/components/MessageAttachments.tsx:299
|
||||
#: src/features/channel/components/MessageAttachments.tsx:241
|
||||
#: src/features/channel/components/MessageAttachments.tsx:297
|
||||
msgid "<0>Forwarded from</0>{sourceInfo}"
|
||||
msgstr "<0>Şuradan iletildi:</0>{sourceInfo}"
|
||||
|
||||
@@ -7763,9 +7763,9 @@ msgstr "{clientLabel} uygulamasının topluluğunuzda neler yapabileceğini seç
|
||||
msgid "Choose what friends see in their active now panel"
|
||||
msgstr "Arkadaşlarınızın şu an aktif panelinde neler göreceğini seçin"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:292
|
||||
msgid "Choose what members must have before they can post or DM community members."
|
||||
msgstr "Üyelerin mesaj gönderebilmek veya topluluk üyelerine DM gönderebilmek için nelere sahip olması gerektiğini seçin."
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:291
|
||||
msgid "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Topluluk üyelerinin gönderi yapmadan veya topluluk üyilerine DM atmadan önce sahip olması gerekenleri seçin. Rolü olan üyeler bu kontrolleri atlayabilir. Genel alanlar için doğrulamayı etkinleştirmenizi öneririz."
|
||||
|
||||
#. Scope option (radio) that lets the user pick conversation kinds and exclude specific communities.
|
||||
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:71
|
||||
@@ -8638,7 +8638,7 @@ msgstr "Webhook'ları yönetemediğiniz topluluklar ve kanallar gizlenir."
|
||||
msgid "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
msgstr "Keşfet'te listelenen toplulukların tüm üyelerden gelen mesajları taraması gerekir. Keşfet etkinken bu ayar değiştirilemez."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:301
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:302
|
||||
msgid "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
msgstr "Keşfet'te listelenen topluluklarda en az e-posta doğrulaması gerekir. Keşfet etkinken \"Hiçbiri\" seçilemez."
|
||||
|
||||
@@ -15844,7 +15844,7 @@ msgstr "Medyayı ilet"
|
||||
msgid "Forward message"
|
||||
msgstr "Mesajı ilet"
|
||||
|
||||
#: src/features/channel/components/MessageAttachments.tsx:362
|
||||
#: src/features/channel/components/MessageAttachments.tsx:360
|
||||
msgid "Forwarded"
|
||||
msgstr "İletildi"
|
||||
|
||||
@@ -20844,10 +20844,6 @@ msgstr "Çevrimdışı olduklarında bir rol atanmadığı sürece üyeler kald
|
||||
msgid "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
msgstr "\"{pinMessagesPermissionLabel}\" iznine sahip üyeler, herkes için mesaj sabitleyebilir."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:295
|
||||
msgid "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Rolü olan üyeler bu kontrolleri atlayabilir. Herkese açık alanlar için doğrulamayı etkinleştirmenizi öneririz."
|
||||
|
||||
#. Helper text under the Allow mentions switch in the role editor. {mentionEveryonePermissionLabel} is the localized name of the Mention Everyone permission and should match its label exactly.
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleEditor.tsx:47
|
||||
msgid "Members with the \"{mentionEveryonePermissionLabel}\" permission can always mention roles, regardless of this setting."
|
||||
@@ -25629,12 +25625,12 @@ msgid "Press Continue to use your passkey."
|
||||
msgstr "Geçiş anahtarınızı kullanmak için Devam et'e basın."
|
||||
|
||||
#. Label in the channel and chat message reactions.
|
||||
#: src/features/channel/components/MessageReactions.tsx:46
|
||||
#: src/features/channel/components/MessageReactions.tsx:44
|
||||
msgid "press to add reaction"
|
||||
msgstr "tepki eklemek için basın"
|
||||
|
||||
#. Label in the channel and chat message reactions. Keep the tone plain and specific.
|
||||
#: src/features/channel/components/MessageReactions.tsx:42
|
||||
#: src/features/channel/components/MessageReactions.tsx:40
|
||||
msgid "press to remove reaction"
|
||||
msgstr "tepkiyi kaldırmak için basın"
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ msgstr "...увімкнете щільний режим. Чудово!"
|
||||
|
||||
#. Button or menu action label in the channel and chat user message. Keep it concise.
|
||||
#. Suffix after the message text in the forward modal preview when the forwarded message was edited.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:392
|
||||
#: src/features/channel/components/MessageAttachments.tsx:390
|
||||
#: src/features/channel/components/UserMessage.tsx:75
|
||||
#: src/features/messaging/components/modals/ForwardMessagePreview.tsx:26
|
||||
msgid "(edited)"
|
||||
@@ -1051,7 +1051,7 @@ msgid "{count, plural, one {# potential spammer message} other {# potential spam
|
||||
msgstr "{count, plural, one {# потенційно спамерське повідомлення} few {# потенційно спамерські повідомлення} many {# потенційно спамерських повідомлень} other {# потенційно спамерських повідомлень}}"
|
||||
|
||||
#: src/features/app/components/shared/MessageReactionsContent.tsx:56
|
||||
#: src/features/channel/components/MessageReactions.tsx:146
|
||||
#: src/features/channel/components/MessageReactions.tsx:143
|
||||
msgid "{count, plural, one {# reaction} other {# reactions}}"
|
||||
msgstr "{count, plural, one {# реакція} few {# реакції} many {# реакцій} other {# реакції}}"
|
||||
|
||||
@@ -1329,12 +1329,12 @@ msgid "{emojiName}, {reactionCountText}"
|
||||
msgstr "{emojiName}, {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:50
|
||||
#: src/features/channel/components/MessageReactions.tsx:48
|
||||
msgid "{emojiName}: {reactionCountText}"
|
||||
msgstr "{emojiName}: {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}, {actionText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:55
|
||||
#: src/features/channel/components/MessageReactions.tsx:53
|
||||
msgid "{emojiName}: {reactionCountText}, {actionText}"
|
||||
msgstr "{emojiName}: {reactionCountText}, {actionText}"
|
||||
|
||||
@@ -2215,8 +2215,8 @@ msgstr "<0>{username}</0> досі в групі. Спробуйте ще раз
|
||||
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the community and channel the message came from.
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the conversation the message came from.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:243
|
||||
#: src/features/channel/components/MessageAttachments.tsx:299
|
||||
#: src/features/channel/components/MessageAttachments.tsx:241
|
||||
#: src/features/channel/components/MessageAttachments.tsx:297
|
||||
msgid "<0>Forwarded from</0>{sourceInfo}"
|
||||
msgstr "<0>Переслано з</0>{sourceInfo}"
|
||||
|
||||
@@ -7763,9 +7763,9 @@ msgstr "Виберіть, що {clientLabel} може робити у вашій
|
||||
msgid "Choose what friends see in their active now panel"
|
||||
msgstr "Виберіть, що друзі бачитимуть на панелі «Активні зараз»"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:292
|
||||
msgid "Choose what members must have before they can post or DM community members."
|
||||
msgstr "Виберіть, що повинні мати учасники, перш ніж вони зможуть писати в каналах або надсилати особисті повідомлення учасникам спільноти."
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:291
|
||||
msgid "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Виберіть, що учасники повинні мати, перш ніж вони зможуть публікувати дописи або надсилати особисті повідомлення учасникам спільноти. Учасники з ролями можуть обійти ці перевірки. Для публічних просторів рекомендуємо ввімкнути верифікацію."
|
||||
|
||||
#. Scope option (radio) that lets the user pick conversation kinds and exclude specific communities.
|
||||
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:71
|
||||
@@ -8638,7 +8638,7 @@ msgstr "Спільноти та канали, де ви не можете кер
|
||||
msgid "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
msgstr "Спільноти в Discovery мають перевіряти повідомлення від усіх учасників. Цей параметр не можна змінити, доки Discovery ввімкнено."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:301
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:302
|
||||
msgid "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
msgstr "Спільноти в Discovery потребують щонайменше підтвердження електронної пошти. Поки Discovery ввімкнено, не можна вибрати «Немає»."
|
||||
|
||||
@@ -15844,7 +15844,7 @@ msgstr "Переслати медіа"
|
||||
msgid "Forward message"
|
||||
msgstr "Переслати повідомлення"
|
||||
|
||||
#: src/features/channel/components/MessageAttachments.tsx:362
|
||||
#: src/features/channel/components/MessageAttachments.tsx:360
|
||||
msgid "Forwarded"
|
||||
msgstr "Переслано"
|
||||
|
||||
@@ -20844,10 +20844,6 @@ msgstr "Учасники вилучаються, коли вони офлайн,
|
||||
msgid "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
msgstr "Учасники з дозволом «{pinMessagesPermissionLabel}» можуть закріплювати повідомлення для всіх."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:295
|
||||
msgid "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Учасники з ролями можуть обходити ці перевірки. Для публічних просторів радимо ввімкнути перевірку."
|
||||
|
||||
#. Helper text under the Allow mentions switch in the role editor. {mentionEveryonePermissionLabel} is the localized name of the Mention Everyone permission and should match its label exactly.
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleEditor.tsx:47
|
||||
msgid "Members with the \"{mentionEveryonePermissionLabel}\" permission can always mention roles, regardless of this setting."
|
||||
@@ -25629,12 +25625,12 @@ msgid "Press Continue to use your passkey."
|
||||
msgstr "Натисніть «Продовжити», щоб скористатися своїм ключем доступу."
|
||||
|
||||
#. Label in the channel and chat message reactions.
|
||||
#: src/features/channel/components/MessageReactions.tsx:46
|
||||
#: src/features/channel/components/MessageReactions.tsx:44
|
||||
msgid "press to add reaction"
|
||||
msgstr "натисніть, щоб додати реакцію"
|
||||
|
||||
#. Label in the channel and chat message reactions. Keep the tone plain and specific.
|
||||
#: src/features/channel/components/MessageReactions.tsx:42
|
||||
#: src/features/channel/components/MessageReactions.tsx:40
|
||||
msgid "press to remove reaction"
|
||||
msgstr "натисніть, щоб видалити реакцію"
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ msgstr "... bật chế độ dày đặc. Tuyệt!"
|
||||
|
||||
#. Button or menu action label in the channel and chat user message. Keep it concise.
|
||||
#. Suffix after the message text in the forward modal preview when the forwarded message was edited.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:392
|
||||
#: src/features/channel/components/MessageAttachments.tsx:390
|
||||
#: src/features/channel/components/UserMessage.tsx:75
|
||||
#: src/features/messaging/components/modals/ForwardMessagePreview.tsx:26
|
||||
msgid "(edited)"
|
||||
@@ -1051,7 +1051,7 @@ msgid "{count, plural, one {# potential spammer message} other {# potential spam
|
||||
msgstr "{count, plural, one {# tin nhắn có thể là spam} other {# tin nhắn có thể là spam}}"
|
||||
|
||||
#: src/features/app/components/shared/MessageReactionsContent.tsx:56
|
||||
#: src/features/channel/components/MessageReactions.tsx:146
|
||||
#: src/features/channel/components/MessageReactions.tsx:143
|
||||
msgid "{count, plural, one {# reaction} other {# reactions}}"
|
||||
msgstr "{count, plural, one {# cảm xúc} other {# cảm xúc}}"
|
||||
|
||||
@@ -1329,12 +1329,12 @@ msgid "{emojiName}, {reactionCountText}"
|
||||
msgstr "{emojiName}, {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:50
|
||||
#: src/features/channel/components/MessageReactions.tsx:48
|
||||
msgid "{emojiName}: {reactionCountText}"
|
||||
msgstr "{emojiName}: {reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}, {actionText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:55
|
||||
#: src/features/channel/components/MessageReactions.tsx:53
|
||||
msgid "{emojiName}: {reactionCountText}, {actionText}"
|
||||
msgstr "{emojiName}: {reactionCountText}, {actionText}"
|
||||
|
||||
@@ -2215,8 +2215,8 @@ msgstr "<0>{username}</0> vẫn còn trong nhóm. Hãy thử lại sau giây lá
|
||||
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the community and channel the message came from.
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the conversation the message came from.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:243
|
||||
#: src/features/channel/components/MessageAttachments.tsx:299
|
||||
#: src/features/channel/components/MessageAttachments.tsx:241
|
||||
#: src/features/channel/components/MessageAttachments.tsx:297
|
||||
msgid "<0>Forwarded from</0>{sourceInfo}"
|
||||
msgstr "<0>Đã chuyển tiếp từ</0>{sourceInfo}"
|
||||
|
||||
@@ -7763,9 +7763,9 @@ msgstr "Chọn những gì {clientLabel} có thể làm trong cộng đồng c
|
||||
msgid "Choose what friends see in their active now panel"
|
||||
msgstr "Chọn những gì bạn bè thấy trong mục Đang hoạt động của họ"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:292
|
||||
msgid "Choose what members must have before they can post or DM community members."
|
||||
msgstr "Chọn những gì thành viên phải có trước khi họ có thể đăng bài hoặc nhắn tin trực tiếp cho thành viên cộng đồng."
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:291
|
||||
msgid "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Chọn những gì thành viên phải có trước khi họ có thể đăng bài hoặc gửi tin nhắn trực tiếp cho các thành viên cộng đồng. Thành viên có vai trò có thể bỏ qua các kiểm tra này. Đối với các không gian công khai, chúng tôi khuyên bạn nên bật xác minh."
|
||||
|
||||
#. Scope option (radio) that lets the user pick conversation kinds and exclude specific communities.
|
||||
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:71
|
||||
@@ -8638,7 +8638,7 @@ msgstr "Cộng đồng và kênh mà bạn không thể quản lý webhook sẽ
|
||||
msgid "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
msgstr "Các cộng đồng được liệt kê trong Khám phá bắt buộc phải quét tin nhắn từ tất cả thành viên. Bạn không thể thay đổi cài đặt này khi Khám phá đang bật."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:301
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:302
|
||||
msgid "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
msgstr "Các cộng đồng được liệt kê trong Khám phá bắt buộc phải có ít nhất mức xác minh email. Không thể chọn \"Không\" khi Khám phá đang bật."
|
||||
|
||||
@@ -15844,7 +15844,7 @@ msgstr "Chuyển tiếp phương tiện"
|
||||
msgid "Forward message"
|
||||
msgstr "Chuyển tiếp tin nhắn"
|
||||
|
||||
#: src/features/channel/components/MessageAttachments.tsx:362
|
||||
#: src/features/channel/components/MessageAttachments.tsx:360
|
||||
msgid "Forwarded"
|
||||
msgstr "Đã chuyển tiếp"
|
||||
|
||||
@@ -20844,10 +20844,6 @@ msgstr "Thành viên sẽ bị xóa khỏi cộng đồng khi ngoại tuyến tr
|
||||
msgid "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
msgstr "Thành viên có quyền \"{pinMessagesPermissionLabel}\" có thể ghim tin nhắn cho mọi người."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:295
|
||||
msgid "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "Thành viên có vai trò có thể bỏ qua các kiểm tra này. Đối với không gian công cộng, chúng tôi khuyên bạn nên bật xác minh."
|
||||
|
||||
#. Helper text under the Allow mentions switch in the role editor. {mentionEveryonePermissionLabel} is the localized name of the Mention Everyone permission and should match its label exactly.
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleEditor.tsx:47
|
||||
msgid "Members with the \"{mentionEveryonePermissionLabel}\" permission can always mention roles, regardless of this setting."
|
||||
@@ -25629,12 +25625,12 @@ msgid "Press Continue to use your passkey."
|
||||
msgstr "Nhấn Tiếp tục để sử dụng khóa truy cập của bạn."
|
||||
|
||||
#. Label in the channel and chat message reactions.
|
||||
#: src/features/channel/components/MessageReactions.tsx:46
|
||||
#: src/features/channel/components/MessageReactions.tsx:44
|
||||
msgid "press to add reaction"
|
||||
msgstr "nhấn để thêm cảm xúc"
|
||||
|
||||
#. Label in the channel and chat message reactions. Keep the tone plain and specific.
|
||||
#: src/features/channel/components/MessageReactions.tsx:42
|
||||
#: src/features/channel/components/MessageReactions.tsx:40
|
||||
msgid "press to remove reaction"
|
||||
msgstr "nhấn để gỡ cảm xúc"
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ msgstr "…开启紧凑模式。赞!"
|
||||
|
||||
#. Button or menu action label in the channel and chat user message. Keep it concise.
|
||||
#. Suffix after the message text in the forward modal preview when the forwarded message was edited.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:392
|
||||
#: src/features/channel/components/MessageAttachments.tsx:390
|
||||
#: src/features/channel/components/UserMessage.tsx:75
|
||||
#: src/features/messaging/components/modals/ForwardMessagePreview.tsx:26
|
||||
msgid "(edited)"
|
||||
@@ -1051,7 +1051,7 @@ msgid "{count, plural, one {# potential spammer message} other {# potential spam
|
||||
msgstr "{count, plural, other {# 条疑似垃圾消息}}"
|
||||
|
||||
#: src/features/app/components/shared/MessageReactionsContent.tsx:56
|
||||
#: src/features/channel/components/MessageReactions.tsx:146
|
||||
#: src/features/channel/components/MessageReactions.tsx:143
|
||||
msgid "{count, plural, one {# reaction} other {# reactions}}"
|
||||
msgstr "{count, plural, other {# 条回应}}"
|
||||
|
||||
@@ -1329,12 +1329,12 @@ msgid "{emojiName}, {reactionCountText}"
|
||||
msgstr "{emojiName},{reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:50
|
||||
#: src/features/channel/components/MessageReactions.tsx:48
|
||||
msgid "{emojiName}: {reactionCountText}"
|
||||
msgstr "{emojiName}:{reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}, {actionText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:55
|
||||
#: src/features/channel/components/MessageReactions.tsx:53
|
||||
msgid "{emojiName}: {reactionCountText}, {actionText}"
|
||||
msgstr "{emojiName}:{reactionCountText},{actionText}"
|
||||
|
||||
@@ -2215,8 +2215,8 @@ msgstr "<0>{username}</0> 仍在群聊中。请稍后重试。"
|
||||
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the community and channel the message came from.
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the conversation the message came from.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:243
|
||||
#: src/features/channel/components/MessageAttachments.tsx:299
|
||||
#: src/features/channel/components/MessageAttachments.tsx:241
|
||||
#: src/features/channel/components/MessageAttachments.tsx:297
|
||||
msgid "<0>Forwarded from</0>{sourceInfo}"
|
||||
msgstr "<0>转发自</0>{sourceInfo}"
|
||||
|
||||
@@ -7763,9 +7763,9 @@ msgstr "选择 {clientLabel} 在你的社区中可以执行的操作。取消勾
|
||||
msgid "Choose what friends see in their active now panel"
|
||||
msgstr "选择好友在“正在活跃”面板中看到的内容"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:292
|
||||
msgid "Choose what members must have before they can post or DM community members."
|
||||
msgstr "选择成员在发帖或私信社区成员前必须满足的条件。"
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:291
|
||||
msgid "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "选择成员在发布帖子或向社区成员发送私信前必须满足的条件。拥有角色的成员可以绕过这些检查。对于公开频道,我们建议启用验证。"
|
||||
|
||||
#. Scope option (radio) that lets the user pick conversation kinds and exclude specific communities.
|
||||
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:71
|
||||
@@ -8638,7 +8638,7 @@ msgstr "无法管理入站 webhook 的社群和频道已隐藏。"
|
||||
msgid "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
msgstr "列入社区发现的社区必须扫描所有成员的消息。启用社区发现后,无法更改此设置。"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:301
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:302
|
||||
msgid "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
msgstr "列入社区发现的社区至少需要邮箱验证。启用社区发现后,无法选择“无”。"
|
||||
|
||||
@@ -15844,7 +15844,7 @@ msgstr "转发媒体"
|
||||
msgid "Forward message"
|
||||
msgstr "转发消息"
|
||||
|
||||
#: src/features/channel/components/MessageAttachments.tsx:362
|
||||
#: src/features/channel/components/MessageAttachments.tsx:360
|
||||
msgid "Forwarded"
|
||||
msgstr "已转发"
|
||||
|
||||
@@ -20844,10 +20844,6 @@ msgstr "成员离线时会被移除,除非为其分配了身份组。"
|
||||
msgid "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
msgstr "拥有“{pinMessagesPermissionLabel}”权限的成员可以为所有人置顶消息。"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:295
|
||||
msgid "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "拥有身份组的成员可以绕过这些检查。对于公共空间,我们建议启用验证。"
|
||||
|
||||
#. Helper text under the Allow mentions switch in the role editor. {mentionEveryonePermissionLabel} is the localized name of the Mention Everyone permission and should match its label exactly.
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleEditor.tsx:47
|
||||
msgid "Members with the \"{mentionEveryonePermissionLabel}\" permission can always mention roles, regardless of this setting."
|
||||
@@ -25629,12 +25625,12 @@ msgid "Press Continue to use your passkey."
|
||||
msgstr "按“继续”以使用你的通行密钥。"
|
||||
|
||||
#. Label in the channel and chat message reactions.
|
||||
#: src/features/channel/components/MessageReactions.tsx:46
|
||||
#: src/features/channel/components/MessageReactions.tsx:44
|
||||
msgid "press to add reaction"
|
||||
msgstr "轻触以添加表情回应"
|
||||
|
||||
#. Label in the channel and chat message reactions. Keep the tone plain and specific.
|
||||
#: src/features/channel/components/MessageReactions.tsx:42
|
||||
#: src/features/channel/components/MessageReactions.tsx:40
|
||||
msgid "press to remove reaction"
|
||||
msgstr "轻触以移除表情回应"
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ msgstr "…開啟緊湊模式。讚喔!"
|
||||
|
||||
#. Button or menu action label in the channel and chat user message. Keep it concise.
|
||||
#. Suffix after the message text in the forward modal preview when the forwarded message was edited.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:392
|
||||
#: src/features/channel/components/MessageAttachments.tsx:390
|
||||
#: src/features/channel/components/UserMessage.tsx:75
|
||||
#: src/features/messaging/components/modals/ForwardMessagePreview.tsx:26
|
||||
msgid "(edited)"
|
||||
@@ -1051,7 +1051,7 @@ msgid "{count, plural, one {# potential spammer message} other {# potential spam
|
||||
msgstr "{count, plural, one {# 則可能的垃圾訊息} other {# 則可能的垃圾訊息}}"
|
||||
|
||||
#: src/features/app/components/shared/MessageReactionsContent.tsx:56
|
||||
#: src/features/channel/components/MessageReactions.tsx:146
|
||||
#: src/features/channel/components/MessageReactions.tsx:143
|
||||
msgid "{count, plural, one {# reaction} other {# reactions}}"
|
||||
msgstr "{count, plural, one {# 個反應} other {# 個反應}}"
|
||||
|
||||
@@ -1329,12 +1329,12 @@ msgid "{emojiName}, {reactionCountText}"
|
||||
msgstr "{emojiName},{reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:50
|
||||
#: src/features/channel/components/MessageReactions.tsx:48
|
||||
msgid "{emojiName}: {reactionCountText}"
|
||||
msgstr "{emojiName}:{reactionCountText}"
|
||||
|
||||
#. Short label in the channel and chat message reactions. Keep it concise. Preserve {emojiName}, {reactionCountText}, {actionText}; they are inserted by code.
|
||||
#: src/features/channel/components/MessageReactions.tsx:55
|
||||
#: src/features/channel/components/MessageReactions.tsx:53
|
||||
msgid "{emojiName}: {reactionCountText}, {actionText}"
|
||||
msgstr "{emojiName}:{reactionCountText},{actionText}"
|
||||
|
||||
@@ -2215,8 +2215,8 @@ msgstr "<0>{username}</0>仍在群組中。請稍後再試一次。"
|
||||
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the community and channel the message came from.
|
||||
#. Attribution line on a forwarded message, above the forwarded content. sourceInfo is the icon and name of the conversation the message came from.
|
||||
#: src/features/channel/components/MessageAttachments.tsx:243
|
||||
#: src/features/channel/components/MessageAttachments.tsx:299
|
||||
#: src/features/channel/components/MessageAttachments.tsx:241
|
||||
#: src/features/channel/components/MessageAttachments.tsx:297
|
||||
msgid "<0>Forwarded from</0>{sourceInfo}"
|
||||
msgstr "<0>轉傳自</0>{sourceInfo}"
|
||||
|
||||
@@ -7763,9 +7763,9 @@ msgstr "選擇「{clientLabel}」可以在您的社群中執行哪些操作。
|
||||
msgid "Choose what friends see in their active now panel"
|
||||
msgstr "選擇好友在「目前在線上」面板中會看到什麼"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:292
|
||||
msgid "Choose what members must have before they can post or DM community members."
|
||||
msgstr "選擇成員發文或傳送私訊給社群成員前,必須具備的條件。"
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:291
|
||||
msgid "Choose what members must have before they can post or DM community members. Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "設定成員在發佈訊息或傳送私訊給社群成員前必須擁有的條件。擁有角色的成員可以略過這些檢查。建議為公開空間啟用驗證。"
|
||||
|
||||
#. Scope option (radio) that lets the user pick conversation kinds and exclude specific communities.
|
||||
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:71
|
||||
@@ -8638,7 +8638,7 @@ msgstr "無法管理網頁掛鉤的社群和頻道將會隱藏。"
|
||||
msgid "Communities listed in Discovery are required to scan messages from all members. This setting cannot be changed while Discovery is enabled."
|
||||
msgstr "在探索中列出的社群必須掃描所有成員的訊息。啟用探索時無法變更此設定。"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:301
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:302
|
||||
msgid "Communities listed in Discovery require at least email verification. None cannot be selected while Discovery is enabled."
|
||||
msgstr "在探索中列出的社群至少需要驗證電子郵件。啟用探索時,無法選擇「無」。"
|
||||
|
||||
@@ -15844,7 +15844,7 @@ msgstr "轉傳媒體"
|
||||
msgid "Forward message"
|
||||
msgstr "轉傳訊息"
|
||||
|
||||
#: src/features/channel/components/MessageAttachments.tsx:362
|
||||
#: src/features/channel/components/MessageAttachments.tsx:360
|
||||
msgid "Forwarded"
|
||||
msgstr "已轉傳"
|
||||
|
||||
@@ -20844,10 +20844,6 @@ msgstr "除非獲得身分組,否則成員離線時就會被移除。"
|
||||
msgid "Members with \"{pinMessagesPermissionLabel}\" can pin messages for everyone."
|
||||
msgstr "擁有「{pinMessagesPermissionLabel}」權限的成員可以為所有人釘選訊息。"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx:295
|
||||
msgid "Members with roles can bypass these checks. For public spaces, we recommend enabling verification."
|
||||
msgstr "擁有身分組的成員可以略過這些檢查。對於公開空間,我們建議啟用驗證。"
|
||||
|
||||
#. Helper text under the Allow mentions switch in the role editor. {mentionEveryonePermissionLabel} is the localized name of the Mention Everyone permission and should match its label exactly.
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleEditor.tsx:47
|
||||
msgid "Members with the \"{mentionEveryonePermissionLabel}\" permission can always mention roles, regardless of this setting."
|
||||
@@ -25629,12 +25625,12 @@ msgid "Press Continue to use your passkey."
|
||||
msgstr "按下「繼續」以使用您的通行金鑰。"
|
||||
|
||||
#. Label in the channel and chat message reactions.
|
||||
#: src/features/channel/components/MessageReactions.tsx:46
|
||||
#: src/features/channel/components/MessageReactions.tsx:44
|
||||
msgid "press to add reaction"
|
||||
msgstr "按一下以新增反應"
|
||||
|
||||
#. Label in the channel and chat message reactions. Keep the tone plain and specific.
|
||||
#: src/features/channel/components/MessageReactions.tsx:42
|
||||
#: src/features/channel/components/MessageReactions.tsx:40
|
||||
msgid "press to remove reaction"
|
||||
msgstr "按一下以移除反應"
|
||||
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
/* SPDX-License-Identifier: AGPL-3.0-or-later */
|
||||
|
||||
.matureBlurred {
|
||||
filter: blur(0.625rem);
|
||||
cursor: pointer;
|
||||
transition: filter 0.2s;
|
||||
}
|
||||
|
||||
.matureStickerBlurred {
|
||||
filter: blur(0.625rem);
|
||||
cursor: pointer;
|
||||
transition: filter 0.2s;
|
||||
}
|
||||
@@ -134,6 +134,13 @@ class ModalState {
|
||||
};
|
||||
}
|
||||
|
||||
releasePortalHost(host: HTMLElement): void {
|
||||
if (!this.modals.some((modal) => modal.portalHost === host)) return;
|
||||
this.modals = this.modals.map((modal) =>
|
||||
modal.portalHost === host ? {...modal, portalHost: null, ownerDocument: this.resolveOwnerDocument(null)} : modal,
|
||||
);
|
||||
}
|
||||
|
||||
pop(key?: string | number, ownerDocument?: Document): void {
|
||||
let removed: ModalEntry | undefined;
|
||||
let wasTopmost = false;
|
||||
|
||||
+13
-15
@@ -331,19 +331,7 @@
|
||||
}
|
||||
|
||||
.botPermissionList {
|
||||
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||||
}
|
||||
|
||||
@media (max-width: 1080px) {
|
||||
.botPermissionList {
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 720px) {
|
||||
.botPermissionList {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
grid-template-columns: repeat(auto-fill, minmax(min(100%, 16rem), 1fr));
|
||||
}
|
||||
|
||||
.scopeItem {
|
||||
@@ -354,9 +342,19 @@
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.scopeCheckbox {
|
||||
flex: 1 1 auto;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.scopeCheckbox > div,
|
||||
.scopeCheckbox > div > div {
|
||||
min-width: 0;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.scopeLabel {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
display: block;
|
||||
min-width: 0;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
|
||||
+2
@@ -117,6 +117,7 @@ export const OAuthBuilderSection: React.FC<OAuthBuilderSectionProps> = ({
|
||||
checked={!!field.value}
|
||||
onChange={(checked) => field.onChange(checked)}
|
||||
size="small"
|
||||
className={styles.scopeCheckbox}
|
||||
data-flx="user.applications-tab.application-detail.o-auth-builder-section.checkbox.change"
|
||||
>
|
||||
<span
|
||||
@@ -179,6 +180,7 @@ export const OAuthBuilderSection: React.FC<OAuthBuilderSectionProps> = ({
|
||||
checked={!!field.value}
|
||||
onChange={(checked) => field.onChange(checked)}
|
||||
size="small"
|
||||
className={styles.scopeCheckbox}
|
||||
data-flx="user.applications-tab.application-detail.o-auth-builder-section.checkbox.change--2"
|
||||
>
|
||||
<span
|
||||
|
||||
@@ -15,8 +15,10 @@ import {
|
||||
type LinuxAudioSourceFilterOptions,
|
||||
type LinuxAudioSourceItem,
|
||||
linuxAudioSourceItemKey,
|
||||
linuxAudioSourcePatternsEqual,
|
||||
mapLinuxAudioNodeToItems,
|
||||
uniqueLinuxAudioSourceItems,
|
||||
withSelectedLinuxAudioSources,
|
||||
} from '@app/features/voice/utils/LinuxAudioSourceRules';
|
||||
import {
|
||||
formatScreenShareAudioSummary,
|
||||
@@ -78,15 +80,8 @@ const EMPTY_SNAPSHOT: AudioSourceSnapshot = {
|
||||
error: null,
|
||||
};
|
||||
|
||||
function nodesEqual(a: VirtmicNode, b: VirtmicNode): boolean {
|
||||
const keysA = Object.keys(a);
|
||||
const keysB = Object.keys(b);
|
||||
if (keysA.length !== keysB.length) return false;
|
||||
return keysA.every((key) => a[key] === b[key]);
|
||||
}
|
||||
|
||||
function isItemSelected(value: VirtmicNode, sources: Array<VirtmicNode>): boolean {
|
||||
return sources.some((source) => nodesEqual(source, value));
|
||||
return sources.some((source) => linuxAudioSourcePatternsEqual(source, value));
|
||||
}
|
||||
|
||||
async function fetchAudioSources(options: LinuxAudioSourceFilterOptions): Promise<AudioSourceSnapshot> {
|
||||
@@ -188,7 +183,7 @@ export const AudioSourcePickerLinuxSubmenu = observer((props: AudioSourcePickerL
|
||||
(item: LinuxAudioSourceItem) => {
|
||||
const isSelected = isItemSelected(item.value, includeSources);
|
||||
const nextSources = isSelected
|
||||
? includeSources.filter((source) => !nodesEqual(source, item.value))
|
||||
? includeSources.filter((source) => !linuxAudioSourcePatternsEqual(source, item.value))
|
||||
: [...includeSources, item.value];
|
||||
VoiceSettingsCommands.update({
|
||||
screenShareAudioSourceMode: nextSources.length > 0 ? 'specific' : 'system',
|
||||
@@ -203,7 +198,7 @@ export const AudioSourcePickerLinuxSubmenu = observer((props: AudioSourcePickerL
|
||||
(item: LinuxAudioSourceItem) => {
|
||||
const isSelected = isItemSelected(item.value, excludeSources);
|
||||
const nextSources = isSelected
|
||||
? excludeSources.filter((source) => !nodesEqual(source, item.value))
|
||||
? excludeSources.filter((source) => !linuxAudioSourcePatternsEqual(source, item.value))
|
||||
: [...excludeSources, item.value];
|
||||
VoiceSettingsCommands.update({
|
||||
screenShareAudioExcludeSources: nextSources,
|
||||
@@ -230,6 +225,8 @@ export const AudioSourcePickerLinuxSubmenu = observer((props: AudioSourcePickerL
|
||||
usesDeviceMicrophone,
|
||||
});
|
||||
const showsWideSourceLists = !offersWindowScope || resolvedScope === 'system';
|
||||
const includeItems = withSelectedLinuxAudioSources(snapshot.items, includeSources);
|
||||
const excludeItems = withSelectedLinuxAudioSources(snapshot.items, excludeSources);
|
||||
const wideSourceIsSelected = isDeviceShare ? usesDeviceMicrophone : sourceMode === 'system';
|
||||
if (!snapshot.available && !snapshot.loading) {
|
||||
return null;
|
||||
@@ -269,12 +266,12 @@ export const AudioSourcePickerLinuxSubmenu = observer((props: AudioSourcePickerL
|
||||
</MenuItemRadio>
|
||||
)}
|
||||
</MenuGroup>
|
||||
{showsWideSourceLists && snapshot.items.length > 0 && (
|
||||
{showsWideSourceLists && includeItems.length > 0 && (
|
||||
<MenuGroup data-flx="voice.audio-source-picker-linux.audio-source-picker-linux-submenu.menu-group--2">
|
||||
<MenuGroupLabel data-flx="voice.audio-source-picker-linux.audio-source-picker-linux-submenu.group-label.include-apps">
|
||||
{i18n._(INCLUDE_APPS_DESCRIPTOR)}
|
||||
</MenuGroupLabel>
|
||||
{snapshot.items.map((item) => (
|
||||
{includeItems.map((item) => (
|
||||
<CheckboxItem
|
||||
key={linuxAudioSourceItemKey(item)}
|
||||
checked={isItemSelected(item.value, includeSources)}
|
||||
@@ -286,12 +283,12 @@ export const AudioSourcePickerLinuxSubmenu = observer((props: AudioSourcePickerL
|
||||
))}
|
||||
</MenuGroup>
|
||||
)}
|
||||
{!isDeviceShare && showsWideSourceLists && sourceMode === 'system' && snapshot.items.length > 0 && (
|
||||
{!isDeviceShare && showsWideSourceLists && sourceMode === 'system' && excludeItems.length > 0 && (
|
||||
<MenuGroup data-flx="voice.audio-source-picker-linux.audio-source-picker-linux-submenu.menu-group--3">
|
||||
<MenuGroupLabel data-flx="voice.audio-source-picker-linux.audio-source-picker-linux-submenu.group-label.exclude-from-system">
|
||||
{i18n._(EXCLUDE_FROM_SYSTEM_DESCRIPTOR)}
|
||||
</MenuGroupLabel>
|
||||
{snapshot.items.map((item) => (
|
||||
{excludeItems.map((item) => (
|
||||
<CheckboxItem
|
||||
key={`exclude-${linuxAudioSourceItemKey(item)}`}
|
||||
checked={isItemSelected(item.value, excludeSources)}
|
||||
|
||||
@@ -20,7 +20,7 @@ import {BottomSheet} from '@app/features/ui/bottom_sheet/BottomSheet';
|
||||
import * as ToastCommands from '@app/features/ui/commands/ToastCommands';
|
||||
import FocusRing from '@app/features/ui/focus_ring/FocusRing';
|
||||
import {usePopout} from '@app/features/ui/hooks/usePopout';
|
||||
import {PortalHostContext, setActivePortalHost} from '@app/features/ui/overlay/PortalHostContext';
|
||||
import {PortalHostContext} from '@app/features/ui/overlay/PortalHostContext';
|
||||
import {Popout as PopoverPopout} from '@app/features/ui/popover/PopoverPopout';
|
||||
import ContextMenu, {isContextMenuNodeTarget} from '@app/features/ui/state/ContextMenu';
|
||||
import KeyboardMode from '@app/features/ui/state/KeyboardMode';
|
||||
@@ -40,7 +40,10 @@ import {StreamFocusHeaderInfo} from '@app/features/voice/components/StreamFocusH
|
||||
import {getStreamKey} from '@app/features/voice/components/StreamKeys';
|
||||
import {useStreamSpectators} from '@app/features/voice/components/useStreamSpectators';
|
||||
import {useStreamTrackInfo} from '@app/features/voice/components/useStreamTrackInfo';
|
||||
import {useVoiceCallAppFullscreen} from '@app/features/voice/components/useVoiceCallAppFullscreen';
|
||||
import {
|
||||
useVoiceCallAppFullscreen,
|
||||
useVoiceCallFullscreenPortalHost,
|
||||
} from '@app/features/voice/components/useVoiceCallAppFullscreen';
|
||||
import {useVoiceCallTracksAndLayout} from '@app/features/voice/components/useVoiceCallTracksAndLayout';
|
||||
import {useVoiceEngineConnectionState} from '@app/features/voice/components/useVoiceEngineConnectionState';
|
||||
import {VoiceCallCornerControls} from '@app/features/voice/components/VoiceCallCornerControls';
|
||||
@@ -422,14 +425,7 @@ const VoiceCallViewInner = observer(
|
||||
}, [enterVoiceCallAppFullscreen, fullscreenRequestNonce]);
|
||||
const inheritedPortalHost = useContext(PortalHostContext);
|
||||
const effectivePortalHost = isVoiceCallAppFullscreen || inPopout ? portalHost : null;
|
||||
useEffect(() => {
|
||||
if (!isVoiceCallAppFullscreen) return;
|
||||
if (!effectivePortalHost) return;
|
||||
setActivePortalHost(effectivePortalHost);
|
||||
return () => {
|
||||
setActivePortalHost(null);
|
||||
};
|
||||
}, [isVoiceCallAppFullscreen, effectivePortalHost]);
|
||||
useVoiceCallFullscreenPortalHost(isVoiceCallAppFullscreen, effectivePortalHost);
|
||||
const FavoriteIcon = useMemo(() => {
|
||||
const Icon = forwardRef<SVGSVGElement, React.ComponentProps<typeof StarIcon>>((props, ref) => (
|
||||
<StarIcon
|
||||
|
||||
@@ -36,6 +36,7 @@ interface PopoutWindowProps {
|
||||
onRestore: () => void;
|
||||
onClosed: (windowGeneration: number) => void;
|
||||
onWindowOpened?: (childWindow: Window, windowGeneration: number) => void;
|
||||
existingWindow?: Window | null;
|
||||
children: React.ReactNode;
|
||||
}
|
||||
|
||||
@@ -82,6 +83,7 @@ export const PopoutWindow: React.FC<PopoutWindowProps> = ({
|
||||
onRestore,
|
||||
onClosed,
|
||||
onWindowOpened,
|
||||
existingWindow,
|
||||
children,
|
||||
}) => {
|
||||
const [childState, setChildState] = useState<PopoutChildState | null>(null);
|
||||
@@ -89,11 +91,14 @@ export const PopoutWindow: React.FC<PopoutWindowProps> = ({
|
||||
const onWindowOpenedRef = useRef(onWindowOpened);
|
||||
const initialSizeRef = useRef({width, height});
|
||||
const initialTitleRef = useRef(title);
|
||||
const initialWindowRef = useRef(existingWindow);
|
||||
onClosedRef.current = onClosed;
|
||||
onWindowOpenedRef.current = onWindowOpened;
|
||||
useEffect(() => {
|
||||
const features = `width=${initialSizeRef.current.width},height=${initialSizeRef.current.height}`;
|
||||
const childWindow = window.open('about:blank', windowKey, features);
|
||||
const adoptedWindow = initialWindowRef.current;
|
||||
const childWindow =
|
||||
adoptedWindow && !adoptedWindow.closed ? adoptedWindow : window.open('about:blank', windowKey, features);
|
||||
if (!childWindow) {
|
||||
logger.warn('Failed to open popout window', {windowKey});
|
||||
onClosedRef.current(windowGeneration);
|
||||
|
||||
@@ -92,6 +92,7 @@ const VoicePopoutWindowRenderer = observer(function VoicePopoutWindowRenderer({
|
||||
onRestore={handleRestore}
|
||||
onClosed={handleClosed}
|
||||
onWindowOpened={handleWindowOpened}
|
||||
existingWindow={PopoutWindowManager.getChildWindow(key)}
|
||||
data-flx="voice.voice-popout-host.popout-window"
|
||||
>
|
||||
<VoicePopoutScopeContext.Provider value={descriptor.kind}>
|
||||
|
||||
@@ -7,6 +7,8 @@ import {
|
||||
supportsWebkitRequestFullscreen,
|
||||
} from '@app/features/platform/types/Browser';
|
||||
import {Logger} from '@app/features/platform/utils/AppLogger';
|
||||
import {setActivePortalHost} from '@app/features/ui/overlay/PortalHostContext';
|
||||
import Modal from '@app/features/ui/state/Modal';
|
||||
import {VOICE_CALL_FULLSCREEN_ENABLED} from '@app/features/voice/components/VoiceCallFullscreenFeatureFlag';
|
||||
import VoiceCallFullscreen from '@app/features/voice/state/VoiceCallFullscreen';
|
||||
import type {ExtendedHTMLElement} from '@app/types/browser.d';
|
||||
@@ -192,6 +194,18 @@ export function useVoiceCallAppFullscreen(options: UseVoiceCallAppFullscreenOpti
|
||||
};
|
||||
}
|
||||
|
||||
export function useVoiceCallFullscreenPortalHost(active: boolean, host: HTMLElement | null): void {
|
||||
useEffect(() => {
|
||||
if (!active) return;
|
||||
if (!host) return;
|
||||
setActivePortalHost(host);
|
||||
return () => {
|
||||
setActivePortalHost(null);
|
||||
Modal.releasePortalHost(host);
|
||||
};
|
||||
}, [active, host]);
|
||||
}
|
||||
|
||||
interface UseVoiceCallFullscreenViewStateOptions {
|
||||
active: boolean;
|
||||
scopeKey: string;
|
||||
|
||||
@@ -830,6 +830,7 @@ class MediaEngineFacade extends Store {
|
||||
ToastCommands.createToast({
|
||||
type: 'info',
|
||||
children: this.i18n._(RECONNECT_SUCCEEDED_PICK_A_SCREEN_AGAIN_IF_YOU_DESCRIPTOR),
|
||||
timeout: 5000,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,12 +57,6 @@ export function isVoicePopoutAlwaysOnTopSupported(): boolean {
|
||||
return typeof getElectronAPI()?.popoutSetAlwaysOnTop === 'function';
|
||||
}
|
||||
|
||||
interface PopoutChildWindow {
|
||||
closed: boolean;
|
||||
focus: () => void;
|
||||
close: () => void;
|
||||
}
|
||||
|
||||
interface AlwaysOnTopOperationState {
|
||||
readonly descriptor: VoicePopoutDescriptor;
|
||||
desired: boolean;
|
||||
@@ -71,7 +65,7 @@ interface AlwaysOnTopOperationState {
|
||||
class PopoutWindowManagerStore {
|
||||
popouts: Record<string, VoicePopoutDescriptor> = {};
|
||||
alwaysOnTopKeys: Record<string, true> = {};
|
||||
private readonly childWindows = new Map<string, PopoutChildWindow>();
|
||||
private readonly childWindows = new Map<string, Window>();
|
||||
private readonly alwaysOnTopOperations = new Map<string, AlwaysOnTopOperationState>();
|
||||
private nextPopoutGeneration = 1;
|
||||
|
||||
@@ -110,6 +104,12 @@ class PopoutWindowManagerStore {
|
||||
return null;
|
||||
}
|
||||
|
||||
getChildWindow(key: string): Window | null {
|
||||
const childWindow = this.childWindows.get(key);
|
||||
if (!childWindow || childWindow.closed) return null;
|
||||
return childWindow;
|
||||
}
|
||||
|
||||
isOpen(key: string): boolean {
|
||||
return key in this.popouts;
|
||||
}
|
||||
@@ -148,7 +148,7 @@ class PopoutWindowManagerStore {
|
||||
}
|
||||
}
|
||||
|
||||
attachWindow(key: string, generation: number, childWindow: PopoutChildWindow | null): void {
|
||||
attachWindow(key: string, generation: number, childWindow: Window | null): void {
|
||||
if (!this.isCurrentPopout(key, generation)) return;
|
||||
if (childWindow === null) {
|
||||
this.childWindows.delete(key);
|
||||
|
||||
@@ -24,7 +24,7 @@ import {
|
||||
type ScreenShareCodecProfileEntry,
|
||||
type ScreenShareCodecRanking,
|
||||
} from '@app/features/voice/utils/ScreenShareCodecSelection';
|
||||
import {normaliseStreamingModeForContext} from '@app/features/voice/utils/ScreenShareOptions';
|
||||
import {isH264SoftwareClamped, normaliseStreamingModeForContext} from '@app/features/voice/utils/ScreenShareOptions';
|
||||
import {getProbedVideoDecoderExclusionsSync} from '@app/features/voice/utils/VideoDecoderCapabilities';
|
||||
import type {TrackPublishDefaults, TrackPublishOptions} from 'livekit-client';
|
||||
import {BackupCodecPolicy, supportsVideoCodec, type VideoCodec, type VideoEncoding} from 'livekit-client';
|
||||
@@ -410,6 +410,7 @@ export function buildScreenShareCodecProfile(): ScreenShareCodecProfile {
|
||||
h265: entry('h265'),
|
||||
av1: entry('av1'),
|
||||
},
|
||||
h264SoftwareClamped: isH264SoftwareClamped(),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -135,6 +135,27 @@ export function mapLinuxAudioNodeToItems(
|
||||
return items;
|
||||
}
|
||||
|
||||
export function linuxAudioSourcePatternsEqual(a: VirtmicNode, b: VirtmicNode): boolean {
|
||||
const keysA = Object.keys(a);
|
||||
const keysB = Object.keys(b);
|
||||
if (keysA.length !== keysB.length) return false;
|
||||
return keysA.every((key) => a[key] === b[key]);
|
||||
}
|
||||
|
||||
export function withSelectedLinuxAudioSources(
|
||||
items: ReadonlyArray<LinuxAudioSourceItem>,
|
||||
selected: ReadonlyArray<VirtmicNode>,
|
||||
): Array<LinuxAudioSourceItem> {
|
||||
const missing = selected.filter((source) => !items.some((item) => linuxAudioSourcePatternsEqual(item.value, source)));
|
||||
return [
|
||||
...items,
|
||||
...missing.map((source) => ({
|
||||
name: getLinuxAudioSourceDisplayName(source) ?? JSON.stringify(source),
|
||||
value: source,
|
||||
})),
|
||||
];
|
||||
}
|
||||
|
||||
export function uniqueLinuxAudioSourceItems(items: Array<LinuxAudioSourceItem>): Array<LinuxAudioSourceItem> {
|
||||
const seen = new Set<string>();
|
||||
const result: Array<LinuxAudioSourceItem> = [];
|
||||
|
||||
@@ -5,6 +5,7 @@ import type {VideoCodec} from 'livekit-client';
|
||||
|
||||
export const CODEC_PREFERENCE: ReadonlyArray<VideoCodec> = ['av1', 'h265', 'h264', 'vp9', 'vp8'];
|
||||
const SOFTWARE_H264_CODEC_PREFERENCE: ReadonlyArray<VideoCodec> = ['av1', 'h265', 'vp9', 'h264', 'vp8'];
|
||||
const CLAMPED_H264_CODEC_PREFERENCE: ReadonlyArray<VideoCodec> = ['av1', 'h265', 'vp9', 'vp8', 'h264'];
|
||||
const GECKO_CODEC_PREFERENCE: ReadonlyArray<VideoCodec> = ['vp8', 'h264'];
|
||||
const COMPATIBILITY_CODECS: ReadonlySet<VideoCodec> = new Set(['h264', 'vp9', 'vp8']);
|
||||
export const LAST_RESORT_VIDEO_CODEC: VideoCodec = 'vp8';
|
||||
@@ -79,6 +80,7 @@ export interface ScreenShareCodecProfile {
|
||||
browser: ScreenShareCodecBrowser;
|
||||
desktop: boolean;
|
||||
codecs: Record<VideoCodec, ScreenShareCodecProfileEntry>;
|
||||
h264SoftwareClamped?: boolean;
|
||||
}
|
||||
|
||||
export interface ScreenShareCodecRankingInput {
|
||||
@@ -94,7 +96,9 @@ export interface ScreenShareCodecRanking {
|
||||
|
||||
export function rankScreenShareCodecs(input: ScreenShareCodecRankingInput): ScreenShareCodecRanking {
|
||||
const {codecs} = input.profile;
|
||||
const isHardware = (codec: VideoCodec): boolean => codecs[codec].supported && codecs[codec].hardware;
|
||||
const h264Clamped = input.profile.h264SoftwareClamped === true;
|
||||
const isHardware = (codec: VideoCodec): boolean =>
|
||||
codecs[codec].supported && codecs[codec].hardware && !(codec === 'h264' && h264Clamped);
|
||||
const hardwareAvailable = CODEC_PREFERENCE.some((codec) => isHardware(codec));
|
||||
const pin = input.pin !== 'auto' && codecs[input.pin].allowed && codecs[input.pin].supported ? input.pin : null;
|
||||
const baselineOnly =
|
||||
@@ -108,9 +112,11 @@ export function rankScreenShareCodecs(input: ScreenShareCodecRankingInput): Scre
|
||||
const preference =
|
||||
input.profile.browser === 'firefox'
|
||||
? GECKO_CODEC_PREFERENCE
|
||||
: isHardware('h264')
|
||||
? CODEC_PREFERENCE
|
||||
: SOFTWARE_H264_CODEC_PREFERENCE;
|
||||
: h264Clamped
|
||||
? CLAMPED_H264_CODEC_PREFERENCE
|
||||
: isHardware('h264')
|
||||
? CODEC_PREFERENCE
|
||||
: SOFTWARE_H264_CODEC_PREFERENCE;
|
||||
const survivors = preference.filter(survives);
|
||||
const ranked =
|
||||
input.encoderModeSetting === 'software'
|
||||
|
||||
@@ -330,11 +330,14 @@ export function resolveScreenShareDegradationPreference(
|
||||
return 'maintain-framerate';
|
||||
}
|
||||
|
||||
function shouldClampToSoftwareH264(codec: VideoCodec | undefined): boolean {
|
||||
if (codec !== 'h264') return false;
|
||||
export function isH264SoftwareClamped(): boolean {
|
||||
return getH264HardwareProfilesSync()?.profiles.size === 0;
|
||||
}
|
||||
|
||||
function shouldClampToSoftwareH264(codec: VideoCodec | undefined): boolean {
|
||||
return codec === 'h264' && isH264SoftwareClamped();
|
||||
}
|
||||
|
||||
function clampToSoftwareH264Budget(quality: {
|
||||
mode: StreamingMode;
|
||||
resolution: ScreenshareResolution;
|
||||
|
||||
@@ -730,6 +730,10 @@ The same conditions turn on a DNS check at registration. The check runs when ema
|
||||
|
||||
`.env.example` `Fluxer`. The sender name. Default `Fluxer`, which an empty value also gives. Compose forwards it from `.env`.
|
||||
|
||||
#### `FLUXER_EMAIL_REPLY_TO_EMAIL`
|
||||
|
||||
Default empty. The address replies go to, sent as the `Reply-To` header on every email. An empty value sends no `Reply-To` header. Must be a single bare address such as `[email protected]`, or the API fails at boot. The admin dashboard has no field for it. Compose forwards it from `.env`, and `.env.example` lists it commented out.
|
||||
|
||||
#### `FLUXER_EMAIL_APP_BASE_URL`
|
||||
|
||||
`.env.example` empty. The base URL used in links. Must be http or https with no username, password, query, or fragment, or the API fails at boot. Falls back to the app endpoint. Compose forwards it from `.env`.
|
||||
@@ -1808,11 +1812,15 @@ Default `256mb`. The ceiling for `nats`. Covers JetStream file store metadata as
|
||||
|
||||
#### `FLUXER_MEILISEARCH_MEMORY_LIMIT`
|
||||
|
||||
Default `768mb`. The ceiling for `meilisearch`. Must stay well above `FLUXER_MEILISEARCH_MAX_INDEXING_MEMORY`, which bounds the indexer alone.
|
||||
Default `1536mb`. The ceiling for `meilisearch`. Indexing a backlog of a few hundred thousand messages with two indexing threads peaks near 1 GB, so keep this above 1 GB.
|
||||
|
||||
#### `FLUXER_MEILISEARCH_MAX_INDEXING_MEMORY`
|
||||
|
||||
Default `384mb`. Becomes `MEILI_MAX_INDEXING_MEMORY`. The memory the indexer may use for one batch. Lower it whenever you lower `FLUXER_MEILISEARCH_MEMORY_LIMIT`.
|
||||
Default `256mb`. Becomes `MEILI_MAX_INDEXING_MEMORY`. The memory the indexer may use for one batch. Meilisearch uses more than this while indexing, because every indexing thread also has buffers of its own. Lower it whenever you lower `FLUXER_MEILISEARCH_MEMORY_LIMIT`.
|
||||
|
||||
#### `FLUXER_MEILISEARCH_MAX_INDEXING_THREADS`
|
||||
|
||||
Default `2`. Becomes `MEILI_MAX_INDEXING_THREADS`. Without it Meilisearch indexes on half the host's CPU threads, and each thread can use up to 150 MB of buffers, so a host with many cores runs out of memory under a container limit that suits a small one. Raise it only together with `FLUXER_MEILISEARCH_MEMORY_LIMIT`.
|
||||
|
||||
#### `FLUXER_MEILISEARCH_ENV`
|
||||
|
||||
@@ -2034,8 +2042,8 @@ FLUXER_WORKER_MEMORY_LIMIT=1280mb
|
||||
FLUXER_WORKER_MEMORY_RESERVATION=768mb
|
||||
FLUXER_GATEWAY_MEMORY_LIMIT=512mb
|
||||
FLUXER_GATEWAY_MEMORY_RESERVATION=256mb
|
||||
FLUXER_MEILISEARCH_MEMORY_LIMIT=512mb
|
||||
FLUXER_MEILISEARCH_MAX_INDEXING_MEMORY=256mb
|
||||
FLUXER_MEILISEARCH_MEMORY_LIMIT=1gb
|
||||
FLUXER_MEILISEARCH_MAX_INDEXING_MEMORY=192mb
|
||||
FLUXER_SEAWEEDFS_MEMORY_LIMIT=1gb
|
||||
FLUXER_SEAWEEDFS_GOMEMLIMIT=768MiB
|
||||
FLUXER_GIFS_SHARD_CACHE_MAX_BYTES=134217728
|
||||
@@ -2058,8 +2066,9 @@ FLUXER_WORKER_MEMORY_LIMIT=640mb
|
||||
FLUXER_WORKER_MEMORY_RESERVATION=384mb
|
||||
FLUXER_GATEWAY_MEMORY_LIMIT=384mb
|
||||
FLUXER_GATEWAY_MEMORY_RESERVATION=192mb
|
||||
FLUXER_MEILISEARCH_MEMORY_LIMIT=384mb
|
||||
FLUXER_MEILISEARCH_MEMORY_LIMIT=1gb
|
||||
FLUXER_MEILISEARCH_MAX_INDEXING_MEMORY=128mb
|
||||
FLUXER_MEILISEARCH_MAX_INDEXING_THREADS=1
|
||||
FLUXER_MEDIA_PROXY_MEMORY_LIMIT=320mb
|
||||
FLUXER_SEAWEEDFS_MEMORY_LIMIT=320mb
|
||||
FLUXER_SEAWEEDFS_GOMEMLIMIT=240MiB
|
||||
|
||||
+12
-22
@@ -253,8 +253,7 @@ async fn external_body_prefix(
|
||||
prefix
|
||||
.try_reserve_exact(EXTERNAL_SNIFF_PREFIX_BYTES)
|
||||
.map_err(|_| ExternalFetchError::BufferAllocationFailed)?;
|
||||
let mut chunks_read = 0_u64;
|
||||
let chunks_max =
|
||||
let mut empty_chunks_remaining =
|
||||
response_body_limit::response_body_chunk_limit(constants::MAX_MEDIA_PROXY_BYTES as u64);
|
||||
while prefix.len() < EXTERNAL_SNIFF_PREFIX_BYTES {
|
||||
let Some(chunk) = response.chunk().await.map_err(|err| {
|
||||
@@ -265,17 +264,13 @@ async fn external_body_prefix(
|
||||
else {
|
||||
break;
|
||||
};
|
||||
if chunk.len() > response_body_limit::RESPONSE_BODY_TRANSPORT_CHUNK_BYTES_MAX {
|
||||
warn!(url = %url, "external response transport chunk exceeded its byte bound");
|
||||
return Err(ExternalFetchError::PayloadTooLarge);
|
||||
}
|
||||
chunks_read = chunks_read
|
||||
.checked_add(1)
|
||||
.filter(|chunks| *chunks <= chunks_max)
|
||||
.ok_or_else(|| {
|
||||
warn!(url = %url, chunks_max, "external sniff prefix exceeded its chunk limit");
|
||||
if chunk.is_empty() {
|
||||
empty_chunks_remaining = empty_chunks_remaining.checked_sub(1).ok_or_else(|| {
|
||||
warn!(url = %url, "external sniff prefix exceeded its empty chunk limit");
|
||||
ExternalFetchError::PayloadTooLarge
|
||||
})?;
|
||||
continue;
|
||||
}
|
||||
prefix.extend_from_slice(&chunk);
|
||||
}
|
||||
Ok(Bytes::from(prefix))
|
||||
@@ -370,24 +365,19 @@ pub(super) async fn buffer_external_response(
|
||||
let mut reserved_bytes =
|
||||
grow_to_capacity(&mut reservation, metrics, buf.capacity(), initial_capacity)?;
|
||||
buf.extend_from_slice(&prefix);
|
||||
let mut chunks_read = 0_u64;
|
||||
let chunks_max = response_body_limit::response_body_chunk_limit(limit as u64);
|
||||
let mut empty_chunks_remaining = response_body_limit::response_body_chunk_limit(limit as u64);
|
||||
while let Some(chunk) = response.chunk().await.map_err(|err| {
|
||||
warn!(url = %url, %err, "external body read failed");
|
||||
metrics.record_fetch_failure();
|
||||
ExternalFetchError::FetchFailed
|
||||
})? {
|
||||
if chunk.len() > response_body_limit::RESPONSE_BODY_TRANSPORT_CHUNK_BYTES_MAX {
|
||||
warn!(url = %url, "external response transport chunk exceeded its byte bound");
|
||||
return Err(ExternalFetchError::PayloadTooLarge);
|
||||
}
|
||||
chunks_read = chunks_read
|
||||
.checked_add(1)
|
||||
.filter(|chunks| *chunks <= chunks_max)
|
||||
.ok_or_else(|| {
|
||||
warn!(url = %url, chunks_max, "external payload exceeded its chunk limit");
|
||||
if chunk.is_empty() {
|
||||
empty_chunks_remaining = empty_chunks_remaining.checked_sub(1).ok_or_else(|| {
|
||||
warn!(url = %url, "external payload exceeded its empty chunk limit");
|
||||
ExternalFetchError::PayloadTooLarge
|
||||
})?;
|
||||
continue;
|
||||
}
|
||||
let Some(next_len) = buf
|
||||
.len()
|
||||
.checked_add(chunk.len())
|
||||
|
||||
@@ -929,3 +929,44 @@ async fn an_upstream_that_ignores_the_client_range_still_streams_a_complete_body
|
||||
let body = to_bytes(response.into_body(), 64).await.unwrap();
|
||||
assert_eq!(b"streamed bytes", body.as_ref());
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn external_buffering_accepts_transport_chunks_of_any_size_within_the_limit() {
|
||||
const LARGE_CHUNK_BYTES: usize =
|
||||
crate::response_body_limit::RESPONSE_BODY_TRANSPORT_CHUNK_BYTES_MAX + 155_648;
|
||||
const SMALL_CHUNK_BYTES: usize = 1448;
|
||||
const SMALL_CHUNKS: usize = 512;
|
||||
let budget = ByteBudget::new(constants::MAX_MEDIA_PROXY_BYTES * 4);
|
||||
let metrics = ExternalMetrics::new();
|
||||
let buffer = |response: reqwest::Response, length: usize| {
|
||||
buffer_external_response(ExternalBufferRequest {
|
||||
response,
|
||||
prefix: Bytes::new(),
|
||||
url: "https://media.example.test/clip.webm",
|
||||
budget: &budget,
|
||||
metrics: &metrics,
|
||||
content_length: Some(length as u64),
|
||||
limit: constants::MAX_MEDIA_PROXY_BYTES,
|
||||
})
|
||||
};
|
||||
|
||||
let large = buffer(
|
||||
reqwest::Response::from(http::Response::new(vec![7u8; LARGE_CHUNK_BYTES])),
|
||||
LARGE_CHUNK_BYTES,
|
||||
)
|
||||
.await
|
||||
.expect("a transport chunk larger than the reserved allowance");
|
||||
assert_eq!(LARGE_CHUNK_BYTES, large.as_bytes().len());
|
||||
|
||||
let small_body = reqwest::Body::wrap_stream(futures_util::stream::iter(
|
||||
(0..SMALL_CHUNKS)
|
||||
.map(|_| Ok::<Bytes, std::io::Error>(Bytes::from(vec![9u8; SMALL_CHUNK_BYTES]))),
|
||||
));
|
||||
let small = buffer(
|
||||
reqwest::Response::from(http::Response::new(small_body)),
|
||||
SMALL_CHUNK_BYTES * SMALL_CHUNKS,
|
||||
)
|
||||
.await
|
||||
.expect("packet-sized transport chunks");
|
||||
assert_eq!(SMALL_CHUNK_BYTES * SMALL_CHUNKS, small.as_bytes().len());
|
||||
}
|
||||
|
||||
@@ -80,22 +80,17 @@ pub(super) async fn read_response_bytes(
|
||||
body.try_reserve_exact(expected_length)
|
||||
.map_err(|_| StorageError::BufferAllocationFailed)?;
|
||||
buffer_budget.grow_to(body.capacity())?;
|
||||
let mut chunks_read = 0_u64;
|
||||
let chunks_max = response_body_limit::response_body_chunk_limit(expected_length as u64);
|
||||
let mut empty_chunks_remaining =
|
||||
response_body_limit::response_body_chunk_limit(expected_length as u64);
|
||||
while let Some(chunk) = response.chunk().await? {
|
||||
if chunk.len() > response_body_limit::RESPONSE_BODY_TRANSPORT_CHUNK_BYTES_MAX {
|
||||
return Err(StorageError::ObjectStorage(anyhow::anyhow!(
|
||||
"object storage response transport chunk exceeded its byte bound"
|
||||
)));
|
||||
}
|
||||
chunks_read = chunks_read
|
||||
.checked_add(1)
|
||||
.filter(|chunks| *chunks <= chunks_max)
|
||||
.ok_or_else(|| {
|
||||
if chunk.is_empty() {
|
||||
empty_chunks_remaining = empty_chunks_remaining.checked_sub(1).ok_or_else(|| {
|
||||
StorageError::ObjectStorage(anyhow::anyhow!(
|
||||
"object storage response exceeded its chunk limit"
|
||||
"object storage response exceeded its empty chunk limit"
|
||||
))
|
||||
})?;
|
||||
continue;
|
||||
}
|
||||
let next_length = body
|
||||
.len()
|
||||
.checked_add(chunk.len())
|
||||
|
||||
@@ -282,3 +282,50 @@ async fn exact_stream_accepts_small_transport_chunks_and_bounds_empty_ones() {
|
||||
.expect_err("empty chunk flood");
|
||||
assert_eq!(error.kind(), std::io::ErrorKind::InvalidData);
|
||||
}
|
||||
|
||||
fn chunked_provider_response(chunks: Vec<Bytes>) -> reqwest::Response {
|
||||
let body = reqwest::Body::wrap_stream(stream::iter(
|
||||
chunks.into_iter().map(Ok::<Bytes, std::io::Error>),
|
||||
));
|
||||
reqwest::Response::from(http::Response::new(body))
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn response_reader_accepts_transport_chunks_of_any_size_within_the_length() {
|
||||
const LARGE_CHUNK_BYTES: usize =
|
||||
crate::response_body_limit::RESPONSE_BODY_TRANSPORT_CHUNK_BYTES_MAX + 155_648;
|
||||
let budget = ByteBudget::new(4 * LARGE_CHUNK_BYTES);
|
||||
let large = read_response_bytes(
|
||||
provider_response(vec![7u8; LARGE_CHUNK_BYTES]),
|
||||
LARGE_CHUNK_BYTES,
|
||||
&budget,
|
||||
)
|
||||
.await
|
||||
.expect("a transport chunk larger than the reserved allowance");
|
||||
assert_eq!(large.as_ref().len(), LARGE_CHUNK_BYTES);
|
||||
|
||||
const SMALL_CHUNK_BYTES: usize = 1448;
|
||||
const SMALL_CHUNKS: usize = 512;
|
||||
let small = read_response_bytes(
|
||||
chunked_provider_response(
|
||||
(0..SMALL_CHUNKS)
|
||||
.map(|_| Bytes::from(vec![9u8; SMALL_CHUNK_BYTES]))
|
||||
.collect(),
|
||||
),
|
||||
SMALL_CHUNK_BYTES * SMALL_CHUNKS,
|
||||
&budget,
|
||||
)
|
||||
.await
|
||||
.expect("packet-sized transport chunks");
|
||||
assert_eq!(small.as_ref().len(), SMALL_CHUNK_BYTES * SMALL_CHUNKS);
|
||||
|
||||
assert!(matches!(
|
||||
read_response_bytes(
|
||||
chunked_provider_response((0..4096).map(|_| Bytes::new()).collect()),
|
||||
4,
|
||||
&budget,
|
||||
)
|
||||
.await,
|
||||
Err(StorageError::ObjectStorage(_))
|
||||
));
|
||||
}
|
||||
|
||||
@@ -163,6 +163,7 @@ function defaultConfig(): MasterConfig {
|
||||
provider: 'none',
|
||||
from_email: '',
|
||||
from_name: 'Fluxer',
|
||||
reply_to_email: '',
|
||||
app_base_url: '',
|
||||
},
|
||||
voice: {
|
||||
@@ -292,6 +293,12 @@ function requireString(value: string | undefined, envName: string): void {
|
||||
}
|
||||
}
|
||||
|
||||
function validateReplyToEmail(value: string): void {
|
||||
if (value !== '' && !/^[^\s@<>,;"]+@[^\s@<>,;"]+$/.test(value)) {
|
||||
throw new Error('FLUXER_EMAIL_REPLY_TO_EMAIL must be a single email address such as [email protected]');
|
||||
}
|
||||
}
|
||||
|
||||
function validateUploadRelaySecret(value: string): void {
|
||||
const trimmed = value.trim();
|
||||
if (trimmed.length === 0) {
|
||||
@@ -566,6 +573,7 @@ function normalizeConfig(config: MasterConfig): MasterConfig {
|
||||
validateStorageChangeFeedConfig(config);
|
||||
validateCachePurgeConfig(config);
|
||||
validateStoreBillingConfig(config);
|
||||
validateReplyToEmail(config.integrations.email.reply_to_email);
|
||||
normalizeAppOriginAliases(config);
|
||||
assertIntegerInRange(config.services.api.max_inflight_requests, 'FLUXER_API_MAX_INFLIGHT_REQUESTS', 1, 100_000);
|
||||
assertIntegerInRange(config.services.api.headers_timeout_ms, 'FLUXER_API_HEADERS_TIMEOUT_MS', 1_000, 3_600_000);
|
||||
|
||||
@@ -169,6 +169,7 @@ export interface MasterConfig {
|
||||
provider: 'smtp' | 'none';
|
||||
from_email: string;
|
||||
from_name: string;
|
||||
reply_to_email: string;
|
||||
app_base_url: string;
|
||||
webhook_secret?: string;
|
||||
smtp?: {
|
||||
|
||||
@@ -290,6 +290,30 @@ describe('ConfigLoader', () => {
|
||||
expect(config.services.api.storage_change_feed?.skip_buckets).toBeUndefined();
|
||||
});
|
||||
|
||||
test('reads the email reply-to address', async () => {
|
||||
stubMinimalEnv({FLUXER_EMAIL_REPLY_TO_EMAIL: '[email protected]'});
|
||||
|
||||
const config = await loadConfig();
|
||||
|
||||
expect(config.integrations.email.reply_to_email).toBe('[email protected]');
|
||||
});
|
||||
|
||||
test('leaves the email reply-to address empty when unset or blank', async () => {
|
||||
stubMinimalEnv({FLUXER_EMAIL_REPLY_TO_EMAIL: ' '});
|
||||
|
||||
const config = await loadConfig();
|
||||
|
||||
expect(config.integrations.email.reply_to_email).toBe('');
|
||||
});
|
||||
|
||||
test.each(['support', 'Support <[email protected]>', '[email protected],[email protected]', ' [email protected]'])(
|
||||
'rejects %j as the email reply-to address',
|
||||
async (value) => {
|
||||
stubMinimalEnv({FLUXER_EMAIL_REPLY_TO_EMAIL: value});
|
||||
await expect(loadConfig()).rejects.toThrow('FLUXER_EMAIL_REPLY_TO_EMAIL must be a single email address');
|
||||
},
|
||||
);
|
||||
|
||||
test('keeps explicit passkey relying party values', async () => {
|
||||
stubMinimalEnv({
|
||||
FLUXER_BASE_DOMAIN: 'chat.example.com',
|
||||
|
||||
@@ -52,6 +52,7 @@ describe('buildNamedFluxerEnvOverrides', () => {
|
||||
FLUXER_S3_FORCE_PATH_STYLE: 'true',
|
||||
FLUXER_AUTH_BLUESKY_KEYS: '[{"kid":"key-1","private_key_path":"/etc/fluxer/keys/bluesky.pem"}]',
|
||||
FLUXER_STRIPE_PRICE_MONTHLY_USD: 'price_monthly_usd',
|
||||
FLUXER_EMAIL_REPLY_TO_EMAIL: '[email protected]',
|
||||
});
|
||||
|
||||
expect(overrides).toMatchObject({
|
||||
@@ -62,7 +63,10 @@ describe('buildNamedFluxerEnvOverrides', () => {
|
||||
bluesky: {keys: [{kid: 'key-1', private_key_path: '/etc/fluxer/keys/bluesky.pem'}]},
|
||||
},
|
||||
s3: {force_path_style: true},
|
||||
integrations: {stripe: {prices: {monthly_usd: 'price_monthly_usd'}}},
|
||||
integrations: {
|
||||
stripe: {prices: {monthly_usd: 'price_monthly_usd'}},
|
||||
email: {reply_to_email: '[email protected]'},
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
@@ -77,6 +81,7 @@ describe('buildNamedFluxerEnvOverrides', () => {
|
||||
FLUXER_LIVEKIT_DEFAULT_REGION: blank,
|
||||
FLUXER_AUTH_BLUESKY_KEYS: blank,
|
||||
FLUXER_EMAIL_FROM_NAME: blank,
|
||||
FLUXER_EMAIL_REPLY_TO_EMAIL: blank,
|
||||
}),
|
||||
).toEqual({});
|
||||
});
|
||||
|
||||
@@ -48,6 +48,7 @@ const INPUT_NAMES: Record<string, string> = {
|
||||
MEILI_ENV: 'FLUXER_MEILISEARCH_ENV',
|
||||
MEILI_NO_ANALYTICS: 'FLUXER_MEILISEARCH_NO_ANALYTICS',
|
||||
MEILI_MAX_INDEXING_MEMORY: 'FLUXER_MEILISEARCH_MAX_INDEXING_MEMORY',
|
||||
MEILI_MAX_INDEXING_THREADS: 'FLUXER_MEILISEARCH_MAX_INDEXING_THREADS',
|
||||
GOMEMLIMIT: 'FLUXER_SEAWEEDFS_GOMEMLIMIT',
|
||||
WEED_MASTER_VOLUME_GROWTH_COPY_1: 'FLUXER_SEAWEEDFS_VOLUME_GROWTH',
|
||||
LIVEKIT_KEYS: 'LIVEKIT_API_KEY',
|
||||
|
||||
@@ -148,6 +148,7 @@ const NAMED_FLUXER_ENV_OVERRIDES: Record<string, NamedEnvOverride> = {
|
||||
FLUXER_EMAIL_PROVIDER: {path: ['integrations', 'email', 'provider']},
|
||||
FLUXER_EMAIL_FROM_EMAIL: {path: ['integrations', 'email', 'from_email']},
|
||||
FLUXER_EMAIL_FROM_NAME: {path: ['integrations', 'email', 'from_name']},
|
||||
FLUXER_EMAIL_REPLY_TO_EMAIL: {path: ['integrations', 'email', 'reply_to_email']},
|
||||
FLUXER_EMAIL_APP_BASE_URL: {path: ['integrations', 'email', 'app_base_url']},
|
||||
FLUXER_EMAIL_WEBHOOK_SECRET: {path: ['integrations', 'email', 'webhook_secret']},
|
||||
FLUXER_EMAIL_SMTP_HOST: {path: ['integrations', 'email', 'smtp', 'host']},
|
||||
|
||||
Reference in New Issue
Block a user